Android YModem Protokoll - CRC Probleme

  • 4 Antworten
  • Letztes Antwortdatum
H

hmreimers

Neues Mitglied
0
Hallo,
sorry das der erste Post gleich eine Frage ist, aber ich verzweifle gerade an einer Aufgabe.

Ich versuche eine Dateiübertragung zwischen einer kleiner Loggerbox und Android per Bluetooth zum laufen zu kriegen.

Das ganze muss per YModem Protokoll laufen.
Als Vorlage habe ich eine kleine Windows Anwendung die in C# geschrieben wurde.

Das Empfangen von Dateien habe ich bereits zum laufen bekommen, jedoch ignoriere ich die die CRC Prüfsumme.
Das Senden schlägt jedoch leider fehl, da die Box auf die richtige Prüfsumme prüft.

Hier ein Beispiel. (Empfang)
Ich erhalte von der Box ein 1029 Byte Paket.
Der Aufbau des Paketes sollte wie folgt sein:
[STX][PAKETNUMMER][PAKETNUMMER][DATEN][CRC][CRC]

Hier ein Paket:
Code:
[2, 2, -3, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 50, 58, 52, 48, 58, 49, 54, 34, 44, 34, 45, 49, 53, 50, 34, 44, 34, 50, 50, 52, 34, 44, 34, 57, 57, 57, 50, 34, 44, 34, 45, 53, 51, 34, 44, 34, 45, 53, 57, 34, 44, 34, 50, 51, 34, 44, 34, 50, 54, 51, 34, 44, 34, 48, 34, 44, 34, 50, 54, 52, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 50, 58, 53, 48, 58, 49, 54, 34, 44, 34, 45, 49, 52, 49, 34, 44, 34, 50, 50, 55, 34, 44, 34, 49, 48, 48, 48, 49, 34, 44, 34, 45, 54, 50, 34, 44, 34, 45, 55, 48, 34, 44, 34, 53, 34, 44, 34, 50, 54, 51, 34, 44, 34, 48, 34, 44, 34, 50, 54, 52, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 51, 58, 48, 48, 58, 49, 54, 34, 44, 34, 45, 49, 52, 48, 34, 44, 34, 50, 49, 53, 34, 44, 34, 57, 57, 55, 55, 34, 44, 34, 45, 55, 54, 34, 44, 34, 45, 54, 48, 34, 44, 34, 49, 48, 34, 44, 34, 50, 54, 51, 34, 44, 34, 48, 34, 44, 34, 50, 54, 52, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 51, 58, 49, 48, 58, 49, 54, 34, 44, 34, 45, 49, 48, 52, 34, 44, 34, 49, 57, 48, 34, 44, 34, 57, 57, 57, 54, 34, 44, 34, 45, 55, 55, 34, 44, 34, 45, 53, 52, 34, 44, 34, 50, 53, 34, 44, 34, 50, 54, 54, 34, 44, 34, 49, 34, 44, 34, 50, 54, 53, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 51, 58, 50, 48, 58, 49, 54, 34, 44, 34, 45, 56, 51, 34, 44, 34, 50, 48, 55, 34, 44, 34, 57, 57, 56, 50, 34, 44, 34, 45, 53, 54, 34, 44, 34, 45, 52, 53, 34, 44, 34, 51, 34, 44, 34, 50, 54, 56, 34, 44, 34, 48, 34, 44, 34, 50, 54, 54, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 51, 58, 51, 48, 58, 49, 54, 34, 44, 34, 45, 57, 50, 34, 44, 34, 49, 56, 56, 34, 44, 34, 57, 57, 56, 57, 34, 44, 34, 45, 52, 49, 34, 44, 34, 45, 53, 49, 34, 44, 34, 45, 53, 34, 44, 34, 50, 55, 50, 34, 44, 34, 48, 34, 44, 34, 50, 55, 54, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 51, 58, 52, 48, 58, 49, 54, 34, 44, 34, 45, 49, 49, 49, 34, 44, 34, 49, 57, 49, 34, 44, 34, 57, 57, 56, 49, 34, 44, 34, 45, 53, 57, 34, 44, 34, 45, 55, 51, 34, 44, 34, 50, 50, 34, 44, 34, 50, 55, 54, 34, 44, 34, 49, 34, 44, 34, 50, 56, 49, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 53, 58, 52, 48, 58, 49, 54, 34, 44, 34, 45, 53, 48, 51, 34, 44, 34, 45, 52, 53, 34, 44, 34, 57, 57, 55, 57, 34, 44, 34, 45, 56, 49, 34, 44, 34, 45, 56, 57, 34, 44, 34, 49, 51, 34, 44, 34, 50, 55, 49, 34, 44, 34, 49, 34, 44, 34, 50, 54, 57, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 53, 58, 53, 48, 58, 49, 54, 34, 44, 34, 45, 53, 50, 51, 34, 44, 34, 45, 54, 51, 34, 44, 34, 57, 57, 56, 52, 34, 44, 34, 45, 53, 54, 34, 44, 34, 45, 55, 51, 34, 44, 34, 54, 34, 44, 34, 50, 55, 57, 34, 44, 34, 49, 34, 44, 34, 50, 54, 57, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 54, 58, 48, 48, 58, 49, 54, 34, 44, 34, 45, 53, 50, 49, 34, 44, 34, 45, 55, 50, 34, 44, 34, 57, 57, 55, 54, 34, 44, 34, 45, 55, 51, 34, 44, 34, 45, 54, 56, 34, 44, 34, 49, 55, 34, 44, 34, 50, 55, 54, 34, 44, 34, 49, 34, 44, 34, 50, 54, 56, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 54, 58, 49, 48, 58, 49, 54, 34, 44, 34, 45, 53, 49, 57, 34, 44, 34, 45, 55, 56, 34, 44, 34, 57, 57, 56, 57, 34, 44, 34, 45, 54, 51, 34, 44, 34, 45, 53, 56, 34, 44, 34, 50, 48, 34, 44, 34, 50, 55, 52, 34, 44, 34, 49, 34, 44, 34, 50, 54, 56, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 54, 58, 50, 48, 58, 49, 54, 34, 44, 34, 45, 53, 50, 53, 34, 44, 34, 45, 54, 51, 34, 44, 34, 57, 57, 55, 56, 34, 44, 34, 45, 55, 54, 34, 44, 34, 45, 53, 54, 34, 44, 34, 50, 54, 34, 44, 34, 50, 54, 57, 34, 44, 34, 49, 34, 44, 34, 50, 54, 55, 34, 44, 34, 48, 34, 13, 10, 34, 50, 48, 49, 51, 47, 48, 56, 47, 48, 49, 34, 44, 34, 49, 54, 58, 51, 48, 58, 49, 54, 34, 44, 34, 45, 53, 49, 57, 34, 44, 34, 45, 55, 51, 34, 44, 34, 57, 57, 56, 51, 34, 44, 34, 45, 53, 57, 34, 48, -33]

So wenn ich mich nicht irre sollte die Prüfsumme wie folgt sein:
(arReadCRC beinhaltet die letzten zwei Bytes aus dem Paket)
Code:
int readCRC = ((arReadCRC[0] * 256) + arReadCRC[1]); //= 12255

Aber egal mit welchen CRC Routinen ich aus den 1024 Byte Daten eine Prüfsumme berechne, ich erhalte nie "12255" als Ergebnis.

Ich hoffe jemand kann mir helfen.
Gruß und Danke
Henning
 
Bist du sicher das ein Paket 1029 Byte hat. Ich lese immer was von 128 Byte Paket. Nur so eine Idee. Die Prüfsumme würde ja auch überlaufen wenn z.B. 1024 Byte mit einem Wert von 255 übertragen wird. Also 1024*255 = 261120 ! Das passt ja in keinen 16Bit Wert.

MfG Thorsten

Der ursprüngliche Beitrag von 19:55 Uhr wurde um 20:06 Uhr ergänzt:

Hab hier noch was gefunden wie man den CRC berechnet. Sollte evtl. Helfen.

YMODEM: Excerpts from the original XMODEM/YMODEM protocol reference

MfG Thorsten
 
Hi,
danke für die Antwort.
Ich hab es zum Glück endlich zum laufen bekommen.
Das Problem war die Tatsache das "byte" unter Java signed ist und ich für die CRC Berechnung das unsigned Byte brauchte ([BYTE] & 0xff).

Gruß und Danke
Henning
 
Hallo Henning

ich geb ja zu, das man nur durch Selbermachen Programmieren lernt, aber irgendwie möchte ich das Rad nun nicht unbedingt nochmal neu erfinden müssen, wenn's sich vermeiden läßt :)

Für unser Projekt OOBD.org sitze ich auch gerade daran, das Firmware- Update unseres Dongles endlich mal in ein einfach handhabbares Tool zu packen, weil man dem Normalanwender so ein Getüddel mit Hyperterm & YModem gar nicht zumuten kann.

Und damit später auch mal die Applikation selber die Firmware aktualisieren kann, wollte ich die Routinen gleich in Java schreiben; das Transferprotokoll ist, vorgegeben durch den Bootloader, Ymodem 1K

Was das bedeutet, hast Du ja sicherlich gerade selber durchgestanden; es gibt (gab) anscheinend keinen fertigen Java- Code für YModem 1K.


Und es wird natürlich offensichtlich, auf was ich hinaus will.. Könntest Du Dir evt. vorstellen, Deine YModem - Routinen zu veröffentlichen oder uns zur Veröffentlichung in die Hand zu geben? Wir würden den Source dann im öffentlichen Repository ablegen und mit wehenden Fahnen in unsere App integrieren... ;-)


Was hälst Du davon?


Auf jeden Fall viele Grüße
Steffen Köhler
OOBD Teamsprecher
 
Hallo Henning
ich bitte meine Aufdringlichkeit einigermaßen zu entschuldigen, aber die Möglichkeit, dass Du einen funktionierenden YModem sourcecode haben könntest und ob den Du evt. auch publik machen würdest, würde mir die Arbeit ersparen, das noch mal neu entwickeln zu müssen..

Darum meine Anfrage auch noch mal als PM; hier das Original

https://www.android-hilfe.de/forum/...otokoll-crc-probleme.497875.html#post-6920840

Frohe Weihnachten :)

Steffen
 

Ähnliche Themen

M
Antworten
21
Aufrufe
1.361
swa00
swa00
Mr-Fisch
Antworten
5
Aufrufe
967
migi01
migi01
Mr-Fisch
Antworten
8
Aufrufe
1.006
Mr-Fisch
Mr-Fisch
M
Antworten
9
Aufrufe
790
mkuz24
M
A
Antworten
5
Aufrufe
696
swa00
swa00
Zurück
Oben Unten