PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auswerten von POCSAG-Meldungen mit mehr als 145 Zeichen?



matt
15.02.2013, 13:46
Hallo,

ich habe festgestellt, dass sich die POCSAG-Text-Auswertung im monitord auf 145 Zeichen beschränkt. Ich habe bereits im Sourcecode nach einer Ursache gesucht. Dabei fand ich in der Datei MonitorModulePocsag.h ein Char-Array mit einer Länge von 128 Zeichen.
Daraufhin habe ich die Arraylänge einfach mal auf 256 erhöht. Dann wurden Meldungen mit mehr als 145 Zeichen zwar dekodiert, das Ergebnis war jedoch eine Zeichenfolge ohne jeglichen Sinn. Meldungen mit weniger als 145 werden nach wie vor korrekt ausgewertet.

Hat vielleicht noch jemand einen Idee?

schmodda
06.04.2013, 11:56
Gibts hier was neues?

FlMi-14
04.07.2014, 01:11
Das mit dem Array habe ich mir auch mal angeschaut, kann es aber auch logisch schon nicht sein: wenn das Array 128 lang ist, wieso werden dann bis zu 144 korrekt dekodiert? Ich habe da mal einen Bekannten drauf angesetzt, vielleicht findet der ja was. Ansonsten gibts' (worst-case-szenario) den multimon-ng, im Notfall muß man den dann halt um SQL erweitern oder (habe ich schon in Planung) per Pipe und PHP das ganze in die bis jetzt vom MonitorD gefütterte Datenbak zaubern.

Aber wir gehen mal davon aus das der "Fehler" im MonitorD gefunden und behoben werden kann. Nur schade das sich keiner der Entwickler auf eMails meldet.

FlMi-14
05.07.2014, 19:00
Wie es aussieht haben wir den Fehler (oder besser: die zwei) gefunden:

In der MonitorModulePocsag.h muss folgendes geändert werden:
Zeile 75: die Länge des char-Arrays "buffer" entsprechend erhöhen - ich habe 512 gewählt
Zeile 72: die Variablendefinition "numnibbles" löschen und anschließend neu definieren - ich habe daraus ein "unsigned int" gemacht

ein "unsigned char" kann als Maximalwert 255 speichern, bei 256 gibt es einen Überlauf. Diese Variable zählt den Buffer hoch und zwar in Halbbytes, also Erhöhung um zwei pro Stelle von Buffer.
"buffer" beinhaltet den dekodierten POCSAG-Text (7bit-ASCII, daher können mit 128 Stellen 146 Zeichen gespeichert werden).
Wenn man jetzt nur "buffer" vergrößert kommt es zum Zählerüberlauf und damit zu der kryptischen Auswertung. Passt man jetzt noch die Zählervariable "numnibbles" entsprechend an (das die größer als 255 werden kann und damit mehr als 146 Zeichen verarbeiten kann), dann klappt es - darauf deuten die ersten Tests hin und es ist auch plausibel.

Ich werde das jetzt nochmal eine Woche lang testen und dann nochmal Bericht erstatten.

Buebchen
07.07.2014, 00:06
@All:

Die Änderungen (Erweiterung auf 256 Bytes buffer, Counter von unsigned char -> unsigned int) sind im svn eingepflegt. Falls also andere auch mal diese Korrektur testen will: sind im aktuelle trunk (457) drin.

schmodda
08.07.2014, 11:48
Sauber, Vielen Dank an Markus. Habe es gerade auf meimer Umgebung getestet, funktioniert!

mdi
08.07.2014, 20:28
@All:

Die Änderungen (Erweiterung auf 256 Bytes buffer, Counter von unsigned char -> unsigned int) sind im svn eingepflegt. Falls also andere auch mal diese Korrektur testen will: sind im aktuelle trunk (457) drin.

Danke :)!

Martin