784 lines
27 KiB
Plaintext
784 lines
27 KiB
Plaintext
$Id: ic35mgr.txt,v 1.10 2001/02/03 18:39:07 tsch Rel $
|
|
IC35 Manager Protokoll
|
|
======================
|
|
|
|
Inhalt
|
|
------
|
|
IC35-Manager Operationen
|
|
IC35-Manager Protokoll
|
|
Basiskommandos
|
|
Datenblock senden PC->IC35
|
|
Datenblock empfangen PC<-IC35
|
|
Verbindungsaufbau
|
|
Verbindungsabbau
|
|
IC35 Datensicherung
|
|
IC35 Datenwiederherstellung
|
|
Protokoll MMCard-Operationen
|
|
MMCard Operationen
|
|
MMCard Status
|
|
MMCard Label
|
|
MMCard Directory Operationen
|
|
MMCard Directory Open
|
|
MMCard Directory Length
|
|
MMCard Directory Entry
|
|
MMCard Directory Close
|
|
MMCard File Operationen
|
|
MMCard File Open
|
|
MMCard File Status
|
|
MMCard File Read
|
|
MMCard File Write
|
|
MMCard File Close
|
|
MMCard File Delete
|
|
Anhang: Logfiles der Protokoll-Analyse
|
|
|
|
|
|
??? Unklarheiten ueber das IC35 Manager Protokoll sind wie hier mit ???
|
|
??? am Zeilenanfang markiert.
|
|
|
|
|
|
IC35-Manager Operationen
|
|
------------------------
|
|
- Verbindungsaufbau mit IC35
|
|
- Welcome
|
|
- Identifikation und Status IC35
|
|
- Verbindung zum IC35 trennen
|
|
- Sichern, Wiederherstellen
|
|
- IC35 Datensicherung nach database.org
|
|
- IC35 Datenwiederhestellung aus database.org
|
|
- MMCard Operationen
|
|
- Status, Inhalt IC35 MMCard
|
|
- Datei Transfer nach IC35 MMCard
|
|
- Datei Transfer von IC35 MMCard
|
|
- Datei loeschen in IC35 MMCard
|
|
(noch) nicht analysiert wurden:
|
|
??? - Transfer Applikationsprogramm ins IC35
|
|
??? - Applikationsprogramm im IC35 loeschen
|
|
??? - Transfer einer Grafik-Bitmapdatei ins IC35
|
|
??? - Transfer einer MIDI-Datei ins IC35
|
|
|
|
Fortschrittsanzeigen des IC35 Manager unter Windows:
|
|
- Zugriff auf IC35 Info ..
|
|
- Zugriff erfolgreich
|
|
- MMCard1 wird getestet
|
|
- ..\IC35
|
|
- ..\APP
|
|
- ..\<*.APP ..>
|
|
- ..\<2000 ..>
|
|
- MMCard2 wird getested
|
|
- keine MMCard2 vorhanden
|
|
Standardablauf IC35 Manager unter Windows
|
|
- Verbindungsaufbau mit IC35
|
|
ausgeloest durch MouseClick "connect" am IC35 Manager
|
|
fordert Knopfdruck an SyncStation
|
|
- Status, Inhalt IC35 MMCard
|
|
- Verbindung zum IC35 trennen
|
|
ausgeloest durch MouseClick "disconnect" am IC35 Manager
|
|
|
|
|
|
IC35-Manager Protokoll
|
|
----------------------
|
|
Die Leitungsparameter fuer die Kommunikation zwischen PC und
|
|
IC35 sind Baudrate 115200, No parity, 8 databits, 2 stopbits.
|
|
Die Basisoperationen des IC35-Manager Protokolls sind
|
|
- Basiskommando mit Bestaetigung
|
|
- Datenblock senden und Verifikation mit Pruefsumme
|
|
- Datenblock emfangen und Verifikation mit Pruefsumme
|
|
|
|
Basiskommandos
|
|
Einige Basiskommandos des IC35-Manager Protokolls bestehen
|
|
jeweils aus einem 1byte-Kommando vom PC an den IC35, gefolgt
|
|
von einer 1byte-Antwort vom IC35 an den PC. Wenn die Antwort
|
|
vom IC35 ausbleibt, wird das Kommando wiederholt.
|
|
Kommunikation PC -> IC35, PC <- IC35:
|
|
-> command
|
|
timeout 0.5 sec
|
|
-> command
|
|
<- response
|
|
Die beobachteten Basiskommandos sind:
|
|
Verbindungsabbau
|
|
-> 01
|
|
<- 90
|
|
Reset Manager-Protokoll
|
|
-> 09
|
|
<- 90
|
|
Identifikation
|
|
-> 10
|
|
<- 90
|
|
<- "DCS_SDK" 00
|
|
IC35 Datensicherung
|
|
-> 13
|
|
<- 90
|
|
IC35 Datenwiederherstellung
|
|
-> 14
|
|
<- 90
|
|
-> 70
|
|
<- C0
|
|
Einleitung MMCard-Operation
|
|
-> 15
|
|
<- 90
|
|
Info Datensicherung
|
|
-> 18
|
|
<- 90
|
|
<- 30 31 32 38
|
|
Start des Verbindungsaufbaus
|
|
-> 40
|
|
<- 80
|
|
Positive Quittung
|
|
-> 60
|
|
<- A0
|
|
Negative Quittung
|
|
-> 62
|
|
<- A0
|
|
Dieser Protokollablauf der Basiskommandos ist mit Mcmdrsp()
|
|
in mgrproto.c implementiert.
|
|
|
|
Datenblock senden PC->IC35
|
|
Bei IC35-Datenwiederherstellung und MMCard-Operationen werden
|
|
Datenbloecke vom PC an den IC35 gesendet und die Uebertragung
|
|
mit einer Pruefsumme verifiziert und ggf. wiederholt.
|
|
Bei den MMCard-Operationen wird die Laenge des Datenblocks an
|
|
den IC35 gesendet und vom IC35 bestaetigt. Vor dem Senden der
|
|
Laenge muss 10 Millisekunden gewartet werden.
|
|
Bei IC35-Datenwiederherstellung unterbleibt dies, weil die
|
|
Laenge (136 oder 16384 Bytes) a priori feststeht.
|
|
Beim Senden des Datenblocks muss erfahrungsgemaess mindestens
|
|
alle 29 Bytes jeweils 10 Millisekunden gewartet werden. Offenbar
|
|
ist der IC35 nicht faehig, den Datenblock bei 115200 Baud ohne
|
|
diese Verzoegerungen korrekt zu empfangen.
|
|
Auf die Pruefsumme muss bis zu 10.0 Sekunden gewartet werden.
|
|
Kommunikation PC -> IC35, PC <- IC35:
|
|
-> nn_nn Laenge des Datenblocks, niederwertiges Byte zuerst
|
|
<- E0 Empgangsbestaetigung der Laenge
|
|
-> (Datenblock von nn_nn Bytes)
|
|
<- cc_cc Pruefsumme des Datenblocks, niederwertiges Byte zuerst
|
|
Die Pruefsumme ist die arithmetische Summe aller Bytes des
|
|
Datenblocks abgeschnitten auf 16 Bit. Wenn Datenblock-Bytes
|
|
verloren gehen (Overrun error im IC35) oder verfaelscht werden,
|
|
trifft die Pruefsumme vom IC35 erst ca. 8.2 Sekunden nach dem
|
|
Versand des Datenblocks ein.
|
|
Bei unstimmiger Pruefsumme 'cc_cc' wird negativ quittiert:
|
|
-> 62 negative Quittung
|
|
<- A0 Empfangsbestaetigung der Quittung
|
|
und der Datenblock erneut an IC35 gesendet.
|
|
Bei uebereinstimmender Pruefsumme 'cc_cc' wird positiv quittiert:
|
|
-> 60 positive Quittung
|
|
<- A0 Empfangsbestaetigung der Quittung
|
|
Wenn die Empfangsbestaetigung der Quittung vom IC35 ausbleibt, wird
|
|
die positive oder negative Quittung wiederholt.
|
|
Dieser Protokollablauf ist mit Msendblk() in mgrproto.c implementiert.
|
|
|
|
Datenblock empfangen PC<-IC35
|
|
Bei IC35-Datensicherung und MMCard-Operationen werden Datenbloecke
|
|
vom IC35 am PC empfangen und die Uebertragung mit einer Pruefsumme
|
|
verifiziert und ggf. wiederholt.
|
|
Bei den MMCard-Operationen wird die Laenge des Datenblocks vom
|
|
IC35 empfangen und bestaetigt. Auf die Laenge muss 3.5 Sekunden
|
|
gewartet werden.
|
|
Bei IC35-Datensicherung unterbleibt dies, weil die Laenge (136 oder
|
|
16384 Bytes) a priori feststeht.
|
|
Kommunikation PC -> IC35, PC <- IC35:
|
|
<- nn_nn Laenge des Datenblocks, niederwertiges Byte zuerst
|
|
-> E0 Empgangsbestaetigung der Laenge
|
|
<- (Datenblock von nn_nn Bytes)
|
|
<- cc_cc Pruefsumme des Datenblocks, niederwertiges Byte zuerst
|
|
Bei unstimmiger Pruefsumme 'cc_cc' oder kuerzerer Laenge als
|
|
angekuendigt wird negativ quittiert:
|
|
-> 62 negative Quittung
|
|
<- A0 Empfangsbestaetigung der Quittung
|
|
und der Datenblock wird erneut vom IC35 empfangen.
|
|
Bei uebereinstimmender Pruefsumme 'cc_cc' wird positiv quittiert:
|
|
-> 60 positive Quittung
|
|
<- A0 Empfangsbestaetigung der Quittung
|
|
Wenn die Empfangsbestaetigung der Quittung vom IC35 ausbleibt,
|
|
wird die positive oder negative Quittung wiederholt.
|
|
Dieser Protokollablauf ist mit Mrecvblk() in mgrproto.c implementiert.
|
|
|
|
|
|
Verbindungsaufbau
|
|
-----------------
|
|
1. Welcome Phase
|
|
- Der PC sendet wiederholt einzelne Zeichen "@" (hex 40) bis vom
|
|
IC35 "WELCOME" (hex 57 45 4C 43 4F 4D 45) empfangen wird.
|
|
Dies passiert durch Druecken des Sync-Station Knopfs.
|
|
- Der PC sendet noch einmal ein Zeichen "@" (hex 40), der IC35
|
|
antwortet mit einem Byte hex 80.
|
|
Kommunikation PC -> IC35, PC <- IC35
|
|
-> 40
|
|
timeout 1.15 sec
|
|
-> 40
|
|
sync-station button
|
|
<- 57 45 4C 43 4F 4D 45
|
|
W E L C O M E
|
|
2. Basiskommando "Start Verbindungsaufbau"
|
|
-> 40
|
|
<- 80
|
|
3. Basiskommando "Reset"
|
|
-> 09
|
|
<- 90
|
|
4. Basiskommando "Identifikation"
|
|
-> 10
|
|
<- 90
|
|
<- 44 43 53 5F 53 44 4B 00
|
|
D C S _ S D K .
|
|
5. optional Empfang des Statusblocks vom IC35
|
|
-> FF
|
|
<- 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
|
|
... FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
|
Block von 16400 Bytes
|
|
enthaelt u.a. Applikationsnamen, Email,SMS config, ..
|
|
6. Initialisierung
|
|
-> 50
|
|
<- 90 or timeout 0.1 sec
|
|
??? Beim Initialisierunskommando wurde keine Antwort beobachtet.
|
|
??? Es wird 100 Millisekunden auf etwaige Antwort vom IC35 gewartet
|
|
??? und diese verworfen, um sie nicht irrtuemlich fuer eine Antwort
|
|
??? auf ein nachfolgendes Basiskommando zu halten.
|
|
Der IC35 braucht mindestens 10 Millisekunden Ruhe, bis er zu
|
|
weiteren Aktionen bereit ist. (Ansonsten muss das nachfolgende
|
|
erste Basiskommando wiederholt werden.)
|
|
|
|
|
|
Verbindungsabbau
|
|
----------------
|
|
1. Basiskommando "Reset"
|
|
-> 09
|
|
timeout 1.0 sec
|
|
-> 09
|
|
<- 90
|
|
2. Basiskommando "Verbindungsabbau"
|
|
-> 01
|
|
timeout 1.0 sec
|
|
-> 01
|
|
<- 90
|
|
|
|
|
|
IC35 Datensicherung
|
|
-------------------
|
|
Der Ablauf der Datensicherung mit den Protokoll-Basisoperationen
|
|
(s.o "IC35-Manager Protokoll") ist:
|
|
1. Basiskommmando "IC35 Datensicherung"
|
|
-> 13
|
|
<- 90
|
|
2. Empfang des Kopfblocks (136 Bytes) vom IC35
|
|
<- B5 03 00 A2 01 00 F1 .. headblock 136 bytes
|
|
<- 98 0D checksum
|
|
-> 60 positive acknowledge
|
|
<- A0 got ack
|
|
Hier und unten ist jeweils nur die positive Quittung erwaehnt,
|
|
bei falscher Pruefsumme oder Blocklaenge wird jeweils negativ
|
|
quittiert und der Kopf- oder Daten-Block wiederholt.
|
|
3. Empfang von 26 Datenblocks (je 16384 Bytes) vom IC35
|
|
<- A0 09 00 40 01 00 00 .. datablock 16384 bytes
|
|
<- C0 4C checksum
|
|
-> 60 positive acknowledge
|
|
<- A0 got ack
|
|
4. Zweimal Basiskommando "Info Datensicherung"
|
|
-> 18 command info-1
|
|
timeout 1.0 sec
|
|
-> 18 command info-1
|
|
<- 90 response got command
|
|
<- 30 31 32 38 info-1
|
|
-> 18 command info-2
|
|
timeout 0.5 sec
|
|
-> 18 command info-2
|
|
<- 90 response got command
|
|
<- 30 31 32 38 info-1
|
|
??? Der Inhalt der info response 30 31 32 38 = "0128" aehnelt sehr
|
|
??? der Firmware-Version "1.28" des IC35, es ist jedoch noch unklar,
|
|
??? ob diese Aehnlichkeit realen Gehalt hat.
|
|
Alle Empfangsdaten der Datensicherung werden gespeichert in der
|
|
Datei 'database.org', dies sind 426128 = 136 + 26*16384 + 4 +4
|
|
Bytes insgesamt (headblock, 26 datablocks, 2 infoblocks).
|
|
|
|
|
|
IC35 Datenwiederherstellung
|
|
---------------------------
|
|
Der Ablauf der Datenwiederherstellung mit den Protokoll-Basis-
|
|
operationen (s.o "IC35-Manager Protokoll") ist:
|
|
1. Zweimal Basiskommando "Info Datensicherung"
|
|
-> 18 command info-1
|
|
timeout 1.0 sec
|
|
-> 18 command info-1
|
|
<- 90 response got command
|
|
<- 30 31 32 38 info-1
|
|
-> 18 command info-2
|
|
timeout 0.5 sec
|
|
-> 18 command info-2
|
|
<- 90 response got command
|
|
<- 30 31 32 38 info-1
|
|
Die beiden Antworten 30 31 32 38 werden mit den Eintraegen am
|
|
Ende der Datei 'database.org' verglichen. Bei Uebereinstimmung
|
|
wird die Datenwiederherstellung fortgesetzt, andernfalls wird
|
|
sie abgebrochen.
|
|
2. Basiskommmandos "IC35 Datenwiederherstellung"
|
|
-> 14 command restore-1
|
|
timeout 1.0 sec
|
|
-> 14 command restore-1
|
|
<- 90 response got command
|
|
-> 70 command restore-2
|
|
<- C0 response got restore-2
|
|
3. Senden des Kopfblocks (136 Bytes) an IC35
|
|
-> AD 03 00 9A 01 00 2B .. headblock 136 bytes
|
|
<- 5B 0D checksum
|
|
-> 60 positive acknowledge
|
|
<- A0 response got ack
|
|
4. Senden von 26 Datenblocks (je 16384 Bytes) vom IC35
|
|
Auf die Pruefsumme muss bis zu 10.0 sec gewartet werden.
|
|
-> A0 09 92 50 01 00 00 .. datablock 16384 bytes
|
|
<- 4D F3 checksum
|
|
-> 60 positive acknowledge
|
|
<- A0 response got ack
|
|
5. Basiskommando "Reset Manager-Protokoll"
|
|
-> 09 command reset
|
|
timeout 1.0 sec
|
|
-> 09 command reset
|
|
timeout 1.0 sec
|
|
-> 09 command reset
|
|
timeout 1.0 sec
|
|
-> 09 command reset
|
|
timeout 0.5 sec
|
|
-> 09 command reset
|
|
<- 90 response got command
|
|
Wie oben sind die Inhalte von Kopf- und Daten-Blocks Beispiele
|
|
und es ist jeweils nur die positive Quittung aufgefuehrt, bei
|
|
falscher Pruefsumme wird jeweils negativ quittiert und der Kopf-
|
|
oder Daten-Block wiederholt.
|
|
Insgesamt werden 426120 = 136 + 26*16384 Bytes uebertragen, d.h.
|
|
ein Kopfblock von 136 Bytes und 26 Datenblocks mit 16384 Bytes.
|
|
Die 2 bei der Datensicherung empfangenen 'infoblocks' von je 4
|
|
Bytes werden nicht an IC35 gesendet.
|
|
??? Bei der Datenwiederherstellung werden Datum und Uhrzeit sowie
|
|
??? Telefontyp auf Defaultwerte zurueckgesetzt! Sie muessen manuell
|
|
??? korrigiert werden!
|
|
|
|
|
|
Protokoll MMCard-Operationen
|
|
----------------------------
|
|
Der allgemeine Ablauf der MMCard-Operationen mit den Protokoll
|
|
Basisoperationen (s.o "IC35-Manager Protokoll") ist:
|
|
1. Basiskommando "MMCard-Operation"
|
|
-> 15 command mmcard
|
|
<- 90 got command
|
|
Vor dem Senden der Blocklaenge des Kommandoblocks muss 10 msec
|
|
gewartet werden.
|
|
2. Senden des MMCard Kommandoblocks
|
|
-> nn_nn block length
|
|
<- E0 got length
|
|
-> (cmdblock of nn_nn bytes)
|
|
<- cc_cc got cmdblock, checksum is cc_cc (arithmetic, LSB first)
|
|
Bei unstimmiger Pruefsumme 'cc_cc' wird negativ quittiert:
|
|
-> 62 neg.ack
|
|
<- A0 got neg.ack, send block again
|
|
und der cmdblock erneut an IC35 gesendet.
|
|
Bei uebereinstimmender Pruefsumme 'cc_cc' wird positiv quittiert:
|
|
-> 60 pos.ack
|
|
<- A0 got pos.ack
|
|
3. Empfang des MMCard Antwortblocks
|
|
<- nn_nn block length
|
|
-> E0 got length
|
|
<- (rspblock of nn_nn bytes)
|
|
<- cc_cc checksum of rspblock is cc_cc (arithmetic, LSB first)
|
|
Bei unstimmiger Pruefsumme 'cc_cc' wird negativ quittiert:
|
|
-> 62 neg.ack
|
|
<- A0 got neg.ack
|
|
und der rspblock wird erneut vom IC35 empfangen.
|
|
Bei uebereinstimmender Pruefsumme 'cc_cc' wird positiv quittiert:
|
|
-> 60 pos.ack
|
|
<- A0 got pos.ack
|
|
|
|
|
|
MMCard Operationen
|
|
------------------
|
|
Im "IC35 Software Development Kit API Reference Guide" (ic35_api.pdf
|
|
aus ic35_prog.zip) sind unter "13. Multi Media Card File Operations"
|
|
beschrieben. Sie entsprechen weitgehend den MMCard PDUs der Protokoll
|
|
Analyse. Zu den mit "???" markierten Funktionen wurden keine PDUs
|
|
beobachtet, die PDU command codes sind reine Vermutung.
|
|
|
|
IC35 SDK API Funktion mgrtrans.c PDU command code
|
|
+-----------------------+---------------------------------------------
|
|
minitialCard mmc_status 20 "MMCard1" 00
|
|
??? mFormat - 32 ???
|
|
??? mSetCardLabel - 33 ???
|
|
mGetCardLabel mmc_label 34 "MMCard1" 00
|
|
??? mGetCardInfo - 35 ???
|
|
mOpenFile mmc_openfile 22 mm mm "MMCard1\FILE.EXT" 00
|
|
??? mSetFilePointer - 25 ???
|
|
mWriteToFile mmc_writefile 23 ...
|
|
mReadFromFile mmc_readfile 24 ...
|
|
mGetFileInfo mmc_statfile 26 ...
|
|
mCloseFile mmc_closefile 27 ...
|
|
??? mRenFile - 21 ???
|
|
mDeleteFile mmc_delfile 28 "MMCard1\FILE.EXT" 00
|
|
mOpenDirectory mmc_opendir 2A mm mm "MMCard1\IC35" 00
|
|
mGetDirectorySubItemNum mmc_opendir 2B ...
|
|
mGetDirectorySubItem mmc_readdir 2C ...
|
|
??? mGetDirectoryInfo - 2D ???
|
|
mCloseDirectory mmc_closedir 2E ...
|
|
??? mRenDirectory - 29 ???
|
|
??? mDeleteDirectory - 2F ???
|
|
|
|
MMCard Status
|
|
-> command status "MMCard1"
|
|
20 4D 4D 43 61 72 64 31 00
|
|
cmd M M C a r d 1 nul
|
|
<- response MMCard OK
|
|
01 00
|
|
<- response MMCard not present
|
|
FF FF
|
|
|
|
MMCard Label
|
|
-> command label "MMCard1"
|
|
34 4D 4D 43 61 72 64 31 00
|
|
. M M C a r d 1 .
|
|
cmd mcard-id____________ nul
|
|
<- reponse MMCard label
|
|
01 00 00 4D 4D 43 61 72 64 31 00 20 20 20 00 00 00 00 00 00 00 00 48
|
|
. . . M M C a r d 1 . . . . . . . . . . . . H
|
|
ok label___________________________ ??
|
|
|
|
MMCard Directory Operationen
|
|
MMCard Directory Open empfaengt vom IC35 einen 'dirstat' Block,
|
|
welcher in allen folgenden Operationen jeweils an den IC35
|
|
gesendet und vom IC35 aktualisert wieder empfangen wird. Die
|
|
Details ueber den 'dirstat' Block wurden "Mmc.h" aus dem IC35
|
|
SoftwareDevelopmentKit entnommen, offenbar entsprechen sie
|
|
dem uebertragenen 'dirstat' Block. Beispiele:
|
|
Beispiel-1 "MMCard1" rootdir:
|
|
5F 00 00 00 00 00 00 00 00 00 01 00 00 00
|
|
sect_ clust sec_o dir_o sclst fileptr____
|
|
00 00 00 00 FF 00 00 00 00 20 00 FE 01
|
|
filesize___ cn cclst cclsn csecn rsrvd
|
|
Beispiel-2 "MMCard1\IC35\APP"
|
|
00 00 02 00 00 00 40 00 15 00 01 00 00 00
|
|
sect_ clust sec_o dir_o sclst fileptr____
|
|
00 00 00 00 FF 15 00 00 00 20 00 FE 01
|
|
filesize___ cn cclst cclsn csecn rsrvd
|
|
MMCard Directory Open
|
|
Beispiel-1 "MMCard1" rootdir
|
|
-> command opendir "MMCard1"
|
|
2A 01 00 4D 4D 43 61 72 64 31 00
|
|
. . . M M C a r d 1 .
|
|
cmd dirpath="MMCard1"___ nul
|
|
<- response
|
|
01 00
|
|
ok
|
|
5F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
dirstat________________________________________
|
|
00 00 00 00 00 00 00 00 00 FE 01
|
|
_________________________dirstat
|
|
Beispiel-2 "MMCard1\IC35\APP"
|
|
-> command opendir "MMCard1
|
|
2A 01 00 4D 4D 43 61 72 64 31 5C 49 43 33 35 5C 41 50 50 00
|
|
. . . M M C a r d 1 \ I C 3 5 \ A P P .
|
|
cmd dirpath="MMCard1\IC35\APP"_____________________ nul
|
|
<- response
|
|
01 00
|
|
ok
|
|
00 00 02 00 00 00 40 00 15 00 00 00 00 00 00 00
|
|
dirstat________________________________________
|
|
00 00 00 15 00 00 00 00 00 FE 01
|
|
_________________________dirstat
|
|
MMCard Directory Length
|
|
Beispiel-1 "MMCard1" rootdir
|
|
-> command dirlen
|
|
2B
|
|
cmd
|
|
5F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
dirstat_from_opendir___________________________
|
|
00 00 00 00 00 00 00 00 00 FE 01 00
|
|
_________________________dirstat nul
|
|
<- response dirlen
|
|
5F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
dirstat________________________________________
|
|
00 00 00 00 00 00 00 00 00 FE 01 01 00 04 00
|
|
_________________________dirstat ? ? ndent
|
|
Beispiel-2 "MMCard1\IC35\APP"
|
|
-> command dirlen
|
|
2B
|
|
cmd
|
|
00 00 02 00 00 00 40 00 15 00 00 00 00 00 00 00
|
|
dirstat_from_opendir___________________________
|
|
00 00 00 15 00 00 00 00 00 FE 01 00
|
|
_________________________dirstat nul
|
|
<- response dirlen
|
|
00 00 02 00 00 00 40 00 15 00 00 00 00 00 00 00
|
|
dirstat________________________________________
|
|
00 00 00 15 00 00 00 00 00 FE 01 01 00 07 00
|
|
_________________________dirstat ? ? ndent
|
|
MMCard Directory Entry
|
|
Beispiel-1 "MMCard1" rootdir
|
|
-> command readdir index=0000
|
|
2C
|
|
cmd
|
|
5F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
dirstat_from_opendir_or_previous_readdir_______
|
|
00 00 00 00 00 00 00 00 00 FE 01 01 00 00
|
|
_________________________dirstat idx+1 nul
|
|
<- respnse readdir
|
|
5F 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00
|
|
dirstat______________________ nxidx ___________
|
|
00 00 FF 00 00 00 00 20 00 FE 01 01 00
|
|
_________________________dirstat ? ?
|
|
49 43 33 35 00 20 20 20 00 00 20 20 00 10
|
|
filename="IC35"___________ ext=""_____ ty
|
|
2E B3 5E 29 00 00 00 00 00 00
|
|
timestamp__ ? ? size_______
|
|
-> command readdir index=0001
|
|
2C
|
|
cmd
|
|
5F 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00
|
|
dirstat_from_opendir_or_previous_readdir_______
|
|
00 00 FF 00 00 00 00 20 00 FE 01 02 00 00
|
|
_________________________dirstat idx+1 nul
|
|
<- reponse readdir
|
|
5F 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00
|
|
dirstat______________________ nxidx ___________
|
|
00 00 FF 00 00 00 00 40 00 FE 01 01 00
|
|
_________________________dirstat ? ?
|
|
32 30 30 30 31 31 30 34 00 49 33 35 00 20
|
|
filename="20001104"_______ ext="I35"__ ty
|
|
C1 14 65 29 00 00 FE 89 00 00
|
|
timestamp__ ? ? size_______
|
|
Beispiel-2 "MMCard1\IC35\APP"
|
|
-> command readdir index=0000
|
|
2C
|
|
cmd
|
|
00 00 02 00 00 00 40 00 15 00 00 00 00 00 00 00
|
|
dirstat________________________________________
|
|
00 00 00 15 00 00 00 00 00 FE 01 01 00 00
|
|
_________________________dirstat idx+1 nul
|
|
<- response readdir
|
|
00 00 02 00 00 00 40 00 15 00 01 00 00 00 00 00
|
|
dirstat______________________ nxidx ___________
|
|
00 00 FF 15 00 00 00 20 00 FE 01 01 00
|
|
_________________________dirstat ? ?
|
|
2E 2E 00 20 20 20 20 20 00 00 20 20 00 10
|
|
filename=".."_____________ ext=""_____ ty
|
|
A1 B5 61 29 00 00 00 00 00 00
|
|
timestamp__ ? ? size_______
|
|
-> command readdir index=0001
|
|
2C
|
|
cmd
|
|
00 00 02 00 00 00 40 00 15 00 01 00 00 00 00 00
|
|
dirstat______________________ index ___________
|
|
00 00 FF 15 00 00 00 20 00 FE 01 02 00 00
|
|
_________________________dirstat idx+1 nul
|
|
<- response readdir
|
|
00 00 02 00 00 00 40 00 15 00 02 00 00 00 00 00
|
|
dirstat______________________ nxidx ___________
|
|
00 00 FF 15 00 00 00 40 00 FE 01 01 00
|
|
_________________________dirstat ? ?
|
|
42 52 4F 57 53 45 52 00 00 41 50 50 00 20
|
|
filename="BROWSER"________ ext="APP"__ ty
|
|
89 B6 61 29 00 00 44 C0 05 00
|
|
timestamp__ ? ? size_______
|
|
Fuer das Typfeld 'ty' wurden beobachtet
|
|
10 Subdirectory
|
|
20 File
|
|
Die Kodierung des Zeitstempels 'timestamp' ist wie bei DOS.
|
|
Die hoeherwertigen 16 Bits kodieren Jahr, Monat und Tag:
|
|
yyyyyyy mmmm ddddd
|
|
yyyyyyy Jahre seit 1980
|
|
mmmm Monat 1-12
|
|
ddddd Tag 1-31
|
|
Die niederwertigen 16 Bits kodieren Stunde, Minute, Sekunde:
|
|
hhhhh mmmmmm sssss
|
|
hhhhh Stunde
|
|
mmmmmm Minute
|
|
sssss Sekunde / 2
|
|
MMCard Directory Close
|
|
Beispiel-1 "MMCard1" rootdir
|
|
-> command closedir
|
|
2E
|
|
cmd
|
|
5F 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00
|
|
dirstat______________________ index ___________
|
|
00 00 FF 00 00 00 00 80 00 FE 01 00
|
|
_________________________dirstat nul
|
|
<- response closedir
|
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
00 00 00 00 00 00 00 00 00 00 00
|
|
Beispiel-2 "MMCard1\IC35\APP"
|
|
-> command closedir
|
|
2E
|
|
cmd
|
|
00 00 02 00 00 00 40 00 15 00 07 00 00 00 00 00
|
|
dirstat______________________ index ___________
|
|
00 00 FF 15 00 00 00 E0 00 FE 01 00
|
|
_________________________dirstat nul
|
|
<- response closedir
|
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
00 00 00 00 00 00 00 00 00 00 00
|
|
|
|
MMCard File Operationen
|
|
MMCard File Open
|
|
-> command openfile
|
|
22 01 00 4D 4D 43 61 72 64 31 5C 49 43 33 35 5C 41 50 50
|
|
mo_de filepath="MMCard1\IC35\APP\REVERSI.APP"________
|
|
5C 52 45 56 45 52 53 49 2E 41 50 50 00
|
|
___________________________filepath nul
|
|
Der mo_de Parameter ist 01 00 (IC35 SDK: OPEN_EXISTING) zum Oeffnen
|
|
einer existierended MMCard Datei (im Lesemodus).
|
|
Der mo_de Parameter ist 00 00 (IC35 SDK: CREATE_ALWAYS) zum Erzeugen
|
|
einer neuen MMCard Datei, eine existierende Datei wird auf Laenge 0
|
|
gekuerzt.
|
|
<- response openfile
|
|
01 00
|
|
ok
|
|
00 00 15 00 00 00 C0 00 F9 00 00 00 00 00
|
|
filestatus_______________________________
|
|
44 40 00 00 00 F9 00 00 00 00 00 FE 01
|
|
size=16452_ filestatus________________
|
|
MMCard File Status
|
|
-> command filestat
|
|
26
|
|
00 00 15 00 00 00 C0 00 F9 00 00 00 00 00
|
|
filestatus_______________________________
|
|
44 40 00 00 00 F9 00 00 00 00 00 FE 01 00
|
|
size=16452_ filestatus________________ nul
|
|
<- response filestat
|
|
00 00 15 00 00 00 C0 00 F9 00 00 00 00 00
|
|
44 40 00 00 00 F9 00 00 00 00 00 FE 01 01 00
|
|
52 45 56 45 52 53 49 00 00 41 50 50 00 20
|
|
filename="REVERSI"________ ext="APP"__ ty
|
|
DD B6 61 29 00 00 44 40 00 00
|
|
timestamp__ ? ? size_______
|
|
MMCard File Read
|
|
-> command fileread
|
|
24
|
|
cmd
|
|
00 00 15 00 00 00 C0 00 F9 00 00 00 00 00
|
|
filestatus_______________________________
|
|
44 40 00 00 00 F9 00 00 00 00 00 FE 01 01 18 00
|
|
size=16452_ filestatus________________ rdlen nul
|
|
<- response fileread
|
|
00 00 15 00 00 00 C0 00 F9 00 01 18 00 00
|
|
filestatus_______________________________
|
|
44 40 00 00 00 FC 00 03 00 00 00 FE 01 01 00 01 18
|
|
size=16452_ filestatus________________ ? ? rdlen
|
|
80 F6 00 40 00 00 00 40 00 00 FF FF 1E 00 52 ..
|
|
filedata_____________________________________..
|
|
-> command fileread
|
|
24
|
|
cmd
|
|
00 00 15 00 00 00 C0 00 F9 00 01 18 00 00
|
|
filestatus_______________________________
|
|
44 40 00 00 00 FC 00 03 00 00 00 FE 01 01 18 00
|
|
size=16452_ filestatus________________ rdlen nul
|
|
<- response fileread
|
|
00 00 15 00 00 00 C0 00 F9 00 02 30 00 00
|
|
filestatus___________________ noffs _____
|
|
44 40 00 00 00 FF 00 06 00 00 00 FE 01 01 00 01 18
|
|
size=16452_ filestatus________________ ? ? rdlen
|
|
36 01 23 36 00 21 0E 00 39 5E 23 56 EB 29 29 ..
|
|
filedata_____________________________________..
|
|
-> command fileread
|
|
24
|
|
cmd
|
|
00 00 15 00 00 00 C0 00 F9 00 02 30 00 00
|
|
filestatus_______________________________
|
|
44 40 00 00 00 FF 00 06 00 00 00 FE 01 42 10 00
|
|
size=16452_ filestatus________________ rdlen nul
|
|
<- response fileread
|
|
00 00 15 00 00 00 C0 00 F9 00 44 40 00 00
|
|
filestatus___________________ noffs _____
|
|
44 40 00 00 00 01 01 08 00 00 00 FE 01 01 00 42 10
|
|
size=16452_ filestatus________________ ? ? rdlen
|
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..
|
|
filedata_____________________________________..
|
|
MMCard File Write
|
|
-> command filewrite
|
|
23
|
|
cmd
|
|
00 00 15 00 00 00 00 01 2F 01 00 00 00 00
|
|
filestatus_______________________________
|
|
00 00 00 00 00 2F 01 00 00 00 00 FE 01 01 18
|
|
size=0_____ filestatus________________ wrlen
|
|
80 F6 00 40 00 00 00 40 00 00 FF FF 1E 00 52 ..
|
|
filedata_____________________________________..
|
|
<- response filewrite
|
|
00 00 15 00 00 00 00 01 2F 01 01 18 00 00
|
|
filestatus___________________ noffs______
|
|
01 18 00 00 00 32 01 03 00 00 00 FE 01 01 00
|
|
size=6145__ filestatus________________ ok___
|
|
-> command filewrite
|
|
23
|
|
cmd
|
|
00 00 15 00 00 00 00 01 2F 01 01 18 00 00
|
|
filestatus___________________ noffs______
|
|
01 18 00 00 00 32 01 03 00 00 00 FE 01 01 18
|
|
size=6145__ filestatus________________ wrlen
|
|
36 01 23 36 00 21 0E 00 39 5E 23 56 EB 29 29 ..
|
|
filedata_____________________________________..
|
|
<- response filewrite
|
|
00 00 15 00 00 00 00 01 2F 01 02 30 00 00
|
|
filestatus___________________ noffs______
|
|
02 30 00 00 00 35 01 06 00 00 00 FE 01 01 00
|
|
size=12290_ filestatus________________ ok___
|
|
MMCard File Close
|
|
-> command fileclose
|
|
27
|
|
cmd
|
|
00 00 15 00 00 00 C0 00 F9 00 44 40 00 00
|
|
filestatus___________________ noffs _____
|
|
44 40 00 00 00 01 01 08 00 00 00 FE 01 00
|
|
size=16452_ filestatus________________ nul
|
|
<- response fileclose
|
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
MMCard File Delete
|
|
-> command filedel
|
|
28 4D 4D 43 61 72 64 31 5C 49 43 33 35 5C 41 50 50
|
|
cmd filepath="MMCard1\IC35\APP\REVERSI2.APP"_______
|
|
5C 52 45 56 45 52 53 49 32 2E 41 50 50 00
|
|
______________________________filepath nul
|
|
<- response filedel
|
|
01 00
|
|
ok___
|
|
|
|
|
|
Anhang: Logfiles der Protokoll-Analyse
|
|
--------------------------------------
|
|
- Manager.tar.gz 2000-10-26 Michael Bruennert
|
|
Windows-NT einzeiliges Format, keine MMCard
|
|
- Manager_Login.LOG
|
|
connect mit IC35mgr
|
|
- Manager_Backup.LOG
|
|
IC35 Datensicherung nach database.org
|
|
- database.org
|
|
die Daten vom IC35 backup
|
|
the data backuped from IC35
|
|
- Manager_Logout.LOG
|
|
disconnect vom IC35mgr
|
|
- Manager_Reversi.LOG
|
|
Uebertragung des Reversi.app Programms ins IC35
|
|
- Reversi.app
|
|
das uebertragene Programm
|
|
- BackupRestore.tar.gz 2000-10-30 Michael Bruennert
|
|
Windows-NT einzeiliges Format, keine MMCard
|
|
- Manager_Backup1.log
|
|
IC35 Datensicherung nach database.org
|
|
- Manager_Logout1.log
|
|
disconnect vom IC35mgr
|
|
- Manager_Restore1.log
|
|
IC35 Daten-Wiederherstellung von database.org
|
|
- mgr_conn_disc.log.gz 2000-10-26 Thomas Schulz
|
|
Windows-98, keine MMCard
|
|
connect, disconnect
|
|
- mgr_conn_disc_mmc.log.gz 2000-10-30 Thomas Schulz
|
|
Windows-98, mit MMCard1
|
|
connect, disconnect
|
|
- mgr_rwd-file_20001107.tar.gz Thomas Schulz
|
|
Windows-98, mit MMCard1
|
|
- mgr_rd-reversi_20001107.log
|
|
connect, Lesen von MMCard1\IC35\APP\REVERSI.APP, disconnect
|
|
- mgr_wr-reversi2_20001107.log
|
|
connect, Schreiben von MMCard1\IC35\APP\REVERSI2.APP, disconnect
|
|
connect, Schreiben von
|
|
- mgr_del-reversi2_20001107.log
|
|
connect, Loeschen von MMCard1\IC35\APP\REVERSI2.APP, disconnect
|
|
- REVERSI.APP
|
|
das Reversi Programm, REVERSI2.APP ist Kopie davon
|
|
|