PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Pocsag] Express Alamierung



MeisterBrand
12.11.2006, 12:48
Heyho,

ich muss leider feststellen, dass monitor die Express-Alamierung nicht beherrscht!
Und zwar wird dabei ja vor dem eigentlichen Telegramm mit dem Alamierungstext ein leeres Telegramm gesendet, für jeden Empfänger einzeln. Sind alle Empfänger durch ein leeres Telegramm und entsprechende RIC alamiert, kommt über eine konstante RIC die Alamierung. Problem dabei: monitor zeigt diese leeren Pocsag-Telegramme oder Nachrichten nicht an und ich kriege nicht heraus, was ich im Quelltext ändern müsste, damit das funktioniert.

Hat einer eine Idee oder gar eine monitor-Version mit funktionierender Express-Alamierung?

Viele Grüße

Buebchen
12.11.2006, 14:24
Idee ohne bisherige Lösung:

pocsag.c ab Zeile 1334:

Hier wird das bisher empfangene Adresswort verworfen, wenn kein gültiges Datenwort folgt. Bei Nur-Ton Rufen ist das ja gerade so.

Könnte auch noch ab Zeile 423 pocsag_printmessage sein. Ggf. mal ein paar printf's einbauen.

MeisterBrand
12.11.2006, 16:17
Folgendes Resultat:

Habe in pogsac.c:1334 die If-Klausel "(rxword >= 16)" herauskommentiert, dabei zeigt sich folgendes:
Die leeren Pogsac-Meldungen kommen nicht an, aber die, die ankommen, werden nicht mehr korrekt ausgewertet.
Z.B. ist ein eine Meldung dann so (Auszug): <SYN>!P"'P"ws29Pf4:z2<DLE><DLE>g792t73<DLE>

Also das hat nix gebracht.

Lebt M. Grohmann eigentlich noch? Bei ICQ ist er ja nie online, darum habe ich ihm mal eine E-Mail geschickt. Mal abwarten, wenn nicht hier noch gute Ideen kommen.

Übrigens:
Ich habe auch probiert, die Funktion text_accept() in pocsag_printmessage zu umgehen mit einem return 1; , aber auch das hilft nicht.

Buebchen
12.11.2006, 19:01
Versuch mal ca. Zeile 672 (hinter check_last() )

die if Abfage würde bei Null Daten (numnibbles=0) zurückspringen.



<b> if (!rx->numnibbles) return; </b>

clean_temp(&s->l2.pocsag.temp);

for (i = 0; i < 7; i++) {
j = (rx->adr / pow(10,i));
set[6 - i] = j - (j / 10) * 10;
}

memset(message, 0, sizeof(message));
memset(func, 0, sizeof(func));
memset(outprint, 0, sizeof(outprint));
memset(alias, 0, sizeof(alias));

/* Datenzeile */
if (rx->func == 3 && rx->adr >= 4000 && rx->adr <= 5000)
print_msg_skyper(rx, message, ctrl);
else print_msg_alpha(rx, message, ctrl);

MeisterBrand
13.11.2006, 12:26
Perfekt!

Einfach folgende Zeile in der pocsag.c auskommentieren und es geht!


if (!rx->numnibbles) return;
->

// if (!rx->numnibbles) return;

Wunderbar! Besten Dank!

funkwart
15.11.2006, 11:00
Dann tut uns und Euch den Gefallen und schickt diese Änderung auch noch einmal an M. Grohmann. Der kann das dann offiziell in den Code aufnehmen, damit nicht jeder für sich daran "herumdoktert".

Gruß,
Funkwart

MeisterBrand
15.11.2006, 13:50
Dann tut uns und Euch den Gefallen und schickt diese Änderung auch noch einmal an M. Grohmann. Der kann das dann offiziell in den Code aufnehmen, damit nicht jeder für sich daran "herumdoktert".

Gruß,
Funkwart

Sollte er mir überhaupt noch antworten, werde ich das selbstverfreilich tun. Ansonsten gehe ich davon aus, dass er seine E-Mails nicht mehr liest.

Grüße