$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