Hallo Leute,
ich möchte gerne den FCS auswerten komme aber nicht weiter.
Ist mein Ansatz erstmal richtig?
data ist der Empfangspuffer, len die Packetlenge (hier 115 Bytes).
Welle 🧐 S. schrieb:> printf("CRC32: %08X\n", crc);> return 0; <<--- Sollte da nicht "return crc" stehen?
Genau wie hier?
> uint32_t crc = crc32((const uint8_t *)data, length);> return 0;
Sonst erkennt der Compiler eine unused variable "crc" und optimiert dir
den "crc32"-Aufruf weg.
Hall Ernst, danke.
Aber Irgenetwas stimmt hier nicht:
size_t pure_frame_length = len-4; // Länge ohne FCS
uint32_t received_fcs = (uint32_t)data[pure_frame_length];
Ich bekomme in received_fcs nur das erste Byte - 03a.
Es sollte aber 0x3a, 0x86, 0x4c, 0x62 sein ...
Moin,
Welle 🧐 S. schrieb:> Ich bekomme in received_fcs nur das erste Byte - 03a.
Was auch - oh wunder - genau das ist, was du geschrieben hast.
Du holst dir einen 8-Bit Wert, den castest du dann auf 32 bit...
Gruss
WK
Klaus schrieb:> (uint32_t)data[pure_frame_length];>> Das holt ein Byte und castet es auf einen uint32_t.
Ahh, klar data[111] ein Byte ...
Muss ich eine Schleife laufen lassen um die 4Bytes einzulesen?
Welle 🧐 S. schrieb:>> Muss ich eine Schleife laufen lassen um die 4Bytes einzulesen?
für 4 Bytes lohnt sich keine Schleife.
Data[x]+ Data[x+1]<<8 + Data[x+2]<<16 + Data[x+3]<<24
Oder so ähnlich, je nach Endianess.
Dergute W. schrieb:> Vielleicht mit 'nem memcmp
:)
Ich hab es jetzt mit memcpy gemacht, was schonmal die 4 Bytes
extrahiert;
Ich werde aber Klaus seinen Vorschlag eingehen, weil die Werte
Endianess'd
sind ...
Der calculated_fcs (CRC-32/JAMCRC) passt, hab ich geprüft!
Klaus schrieb:> Welle 🧐 S. schrieb:>> Ich hab es jetzt mit memcpy gemacht>> Ineffezienter ging es nicht?
Bestimmt nicht, aber wie du siehst bin ich noch Anfänger ;)
Dir ist bewusst dass der Radiotap Header nicht bei der CRC Berechnung
berüchksichtigt wird sondern nur die Daten? Also in dem Beispiel ab
"0xd0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, ...".
Außerdem ist der CRC Algorithmus "CRC-32" und nicht "JAMCRC", es reicht
allerdings auch wenn man das Ergebnis invertiert (XOR mit 0xFFFFFFFF) um
aus "JAMCRC" "CRC-32" zu machen.
Wenn man das alles so macht kommt auch die richtige CRC/FCS heraus.
Im Screenshot sieht man dass immer noch der Radiotap Header bei der CRC
Berechnung berücksichtigt wird, daher ist der Wert von "FCS:" und
"CRC32:" im Screenshot auch nicht identisch.
Dieter S. schrieb:> Im Screenshot sieht man dass immer noch der Radiotap Header bei der CRC> Berechnung berücksichtigt wird, daher ist der Wert von "FCS:" und> "CRC32:" im Screenshot auch nicht identisch.
Ahh! Der FCS wird nur auf den Payload berrechent!?
So?
Irgendwie musst du halt auf den konkreten Wert von offset kommen, das
wird dann wohl in der Spec stehen, wo der Aufbau des Packerl beschrieben
ist.
Gruss
WK
Dergute W. schrieb:>> Irgendwie musst du halt auf den konkreten Wert von offset kommen, das> wird dann wohl in der Spec stehen, wo der Aufbau des Packerl beschrieben> ist.
Der TO müsste nur vorher mal die Doku lesen, dann wäre es ziemlich
einfach. Der Aufbau der Radiotap Header steht dort schon ganz am Anfang:
https://www.radiotap.org