ic35link/doc/ic35sync.txt

847 lines
28 KiB
Plaintext

$Id: ic35sync.txt,v 1.10 2000/12/03 21:10:00 tsch Rel $
IC35-sync Protokoll
===================
Inhalt
------
Ueberblick
Level-1 Protokoll
Level-2 Protokoll
Level-3 Protokoll
Kommunikations-Ablauf
identification
power
authentication
date+time
category
read,write file
disconnect
Zusammenfassung der PDUs
IC35 Record Felder
IC35Comm.dll Export Funktionen
Anhang: Logfiles der Protokoll-Analyse
Ueberblick
----------
??? Unklarheiten ueber das IC35-sync Protokoll sind wie hier mit ???
??? am Zeilenanfang markiert.
Die IC35-sync Protokoll-"Suite" folgt offenbar dem ISO Schichten-
modell: Untere Protokoll-"Level" kapseln Daten hoeherer Protokoll-
Level ein und transportieren sie.
Generell werden in allen Protokoll-Schichten Datenbloecke (oft,
aber nicht immer) kodiert nach dem Schema:
ii ll ll <data>
Dabei bedeuten
ii Identifikations des Datenblocks
ll ll Laenge: Anzahl Bytes ueber alles, d.h. incl. ii ll ll
Kodierung mit niederwertigem Byte zuerst, gefolgt vom
hoeherwertigen Byte.
<data> Datenblock Inhalt
Level-1 Protokoll
-----------------
Level-1 PDU Kodierung allgemein:
- ii ll ll <L2data> cc cc
ii Identifikations der PDU
ll ll Laenge: Anzahl der Bytes in der PDU, LSB zuerst MSB zuletzt
L2data transportierte Level-2 PDU Daten
cc cc Checksum: 16bit arithmetische Summe der PDU Bytes, LSB,MSB
- ii
kurze PDUs (nur Id) erscheinen nur von IC35 an PC.
Level-1 PDUs PC an IC35:
01 03 00 init initiate data exchange
02 ll ll <L2data> cc cc datasel select which data to send
04 03 00 datareq request to send selected data
05 03 00 exit terminate data exchange
Level-1 PDUs IC35 an PC:
F0 ack0 acknowledge to init PDU
F1 ack1 acknowledge to datasel,exit PDUs
F2 ll ll <L2data> cc cc datarsp response to datareq PDU
Level-1 Kommunikation PC->IC35, PC<-IC35:
-> command init
01 03 00
<- response ack0
F0
-> command select data
02 ll ll <L2data> cc cc
<- reponse ack1
F1
-> command request data
04 03 00
<- reponse data
F2 ll ll <L2data> cc cc
-> command exit
05 03 00
<- reponse ack1
F1
Dieses Schema wird generell fuer den Transport der Level-2 Daten
benutzt.
Level-2 Protokoll
-----------------
ll ll Laenge: Anzahl der Bytes in der Level-2 PDU (LSB,MSB)
L3data transportierte Level-3 PDU Daten
Level-2 PDUs PC an IC35:
80 ll ll <L3data> identify
02 ll ll <L3data> command write (more)
82 ll ll <L3data> command write (last)
83 ll ll <L3data> command read
81 03 00 disconnect
Level-2 PDUs IC35 an PC:
20 ll ll <L3data> response (more)
A0 ll ll <L3data> response (last)
A0 03 00 response done
90 03 00 response write more
Transaktionen in hoeheren Schichten brauchen ggf. mehrere Blocks.
Soweit noch ein Block folgt werden die "(more)" PDUs benutzt,
fuer den letzten (oder einzigen) Block die "(last)" PDUs.
Level-3 Protokoll
-----------------
ll ll Laenge: Anzahl der Bytes in der Level-2 PDU (LSB,MSB)
L3data transportierte Level-3 PDU Daten
Level-3 PDUs PC an IC35:
10 00 64 00 4A ll ll <L4data> identify request
48 ll ll <L4data> command1 (more)
49 ll ll <L4data> command2 (last)
Level-3 PDUs IC35 an PC:
10 00 D0 07 4A ll ll <L4data> identify response
48 ll ll <L4data> response1 (more)
49 ll ll <L4data> response2 (last)
Transaktionen in hoeheren Schichten brauchen ggf. mehrere Blocks.
Soweit noch ein Block folgt werden die "(more)" PDUs benutzt,
fuer den letzten (oder einzigen) Block die "(last)" PDUs.
Kommunikations-Ablauf
---------------------
Die Kommunikation zwischen PC und IC35 geschieht in zwei Phasen:
- Welcome
- Die Leitungsparameter fuer die Kommunikation zwischen PC und
IC35 sind Baudrate 115200, No parity, 8 databits, 2 stopbits.
- Der PC sendet wiederholt einzelne Zeichen "A" (hex 41) bis vom
IC35 "WELCOME" (hex 57 45 4C 43 4F 4D 45) empfangen wird.
- Der PC sendet noch einmal ein Zeichen "A", der IC35 antwortet
mit einem Byte hex 80.
- Unter Windows-98/-NT setzt der PC das DTR-Signal auf "AUS"
und schliesst den COM-Port. Nach ca. 0.015 sec oeffnet der
PC den COM-Port erneut mit Baudrate 115200, setzt das RTS-
Signal auf "AUS" und DTR-Signal auf "EIN", und stellt die
Leitungsparameter: No parity, 8 databits, 2 stopbits.
Dieses Verhalten scheint unnoetig, unter Linux ist es fuer
die Kommunikation nicht notwendig.
- PC setzt Timeouts: RC:500 und WC:500, vermutlich bedeutet das
Read Character und Write Character Timeout jeweils 500 ms.
Kommunikation der Welcome Phase:
-> 41
timeout 1.15 sec
-> 41
<- "WELCOME"
-> 41
<- 80
- Datenaustausch
In dieser Phase geschieht der Datenaustausch generell gemaess
dem Level-1 Protokoll.
Die Datenaustausch-Phase besteht aus folgenden Abschnitten:
- identification
- power
- authentication
- date+time
- category
- read,write "Addresses", "Memo", "Schedule", "To Do List"
- disconnect
Im Folgenden ist nur die Level-2 Kommunikation notiert, die Uebertragung
der Level-2 Daten geschieht wie oben beschrieben mit dem Level-1 Protokoll.
Soweit die Level-2,-3 Header der generellen Form entsprechen, sind sie
in Kurzform L2id,L3id notiert, andernfalls explizit
identification
--------------
Kommunikation PC->IC35, PC<-IC35:
-> identify request
80 26 00 # L2-header
10 00 64 00 4A 1F 00 # L3-header
"INVENTEC CORPORATION PRODUCT" # L4-data
<- identify response
A0 29 00 # L2-header
10 00 D0 07 4A 22 00 # L3-header
"INVENTEC CORPORATION DCS15 1.28" # L4-data
Der L2-header entspricht der generellen Form (80 ll ll).
??? Dem L3-header der "identify" PDUs in der generellen Form (4A ll ll)
??? gehen jeweils 4 Bytes Daten mit unklarer Bedeutung voraus.
power
-----
Kommunikation PC->IC35, PC<-IC35:
-> power request
82,49 03 01 "Power" 00 00 00
<- power response
A0,49 03 01
authentication
--------------
Kommunikation PC->IC35, PC<-IC35:
-> authenticate request
82,49 03 00 [password]
<- authenticate response right password
A0,49 01 01
oder
<- authenticate response wrong password
A0,49 00 01
[password] ist das IC35 Kennwort als ASCII Klartext.
IC35 sendet "response wrong password" nur dann, wenn auf dem IC35
die Kennwort-Abfrage beim Einschalten aktiviert ist.
date+time
---------
Kommunikation PC->IC35, PC<-IC35:
-> command get date+time
83,49 02 00 00
<- response date+time
A0,49 [mmddyyyyhhmmss] 00 00
-> command set date+time
82,49 02 01 00 [mmddyyyyhhmmss] 00 00
<- response done
A0
[mmddyyyyhhmmss] sind Monat(mm), Tag(dd), Jahr(yyyy), Stunde(hh),
Minute(mm), Sekunde(ss) jeweils in ASCII Ziffern (hex 30..39).
"set date+time" passiert offenbar nicht immer, es taucht nur auf
in Simple_hex.log, Portmon_export.log, Portmon_neukat2.log, aber
nicht in Import1.log.
??? Wenn "set date+time" passiert, dann nach "open file Addresses"
??? vor "get filelength Addresses". Ob das so noetig ist, ist unklar,
??? einfacher zu implementieren ist es vor der "read,write file"
??? Phase.
"get date+time" liefert 00-Bytes fuer [mmddyyyyhhmmss], wenn noch
nie ein "set date+time" zum IC35 geschehen ist.
Laut Experimenten laesst IC35 beliebigen Text bis 16 Zeichen zu.
Vermutlich sind die "get,set date+time" Kommandos gedacht fuer
die Hinterlegung eines Sync/Import Stempels vom PC im IC35 (auch
die Namen "AdsReadSysInfo" und "AdsWriteSysInfo" der IC35Comm.dll
Funktionen stuetzen diese Vermutung), IC35sync/Windows benutzt
dafuer offenbar einen Zeitstempel.
category
--------
Kommunikation PC->IC35, PC<-IC35:
-> command set category
82,49 03 02 [category]
[category] wird mit 00 Bytes bis zur Laenge 8 Bytes aufgefuellt.
??? <- response category ok
??? A0,49 xx 01
??? Die Bedeutung des Feldes xx ist unklar, es nimmt die Werte 01
??? (Portmon_export.log) und 00 (Import.log aus Import.tar.gz) an.
Wenn die "category" Phase vorkommt, findet sie nach "set date+time"
statt, d.h. auch innerhalb des Filezugriffs auf Addresses.
??? Die Semantik der "category" Phase unklar.
read,write file
---------------
Der Zugriff auf die Files "Addresses", "Memo", "Schedule" und
"To Do List" ist beispielhaft fuer "Addresses" notiert.
Der Filezugriff besteht aus den Phasen:
- open file
liefert filedescriptor, der fuer die uebrigen Phasen benutzt wird
- get filelength (2 Varianten)
liefert die Anzahl der zu lesenden records
- read file record(s)
liefert record daten, ggf. in mehreren Bloecken
- write file record(s)
optional, ggf. in mehreren Bloecken
- optional delete file record(s)
- optional reset change flag(s)
- close file
open file
-> command open file
82,49 00 02 00 00 00 00 00 00 00 0B 00 00 00 09 "Addresses" 02
cmd__ l1 l2 filename_
l2 ist Laenge des filename, l1 = l2 + 2
<- response fd=0001
A0,49 01 00
fd___
Der filedescriptor fd wird anschliessend fuer den Zugriff benutzt.
Der Filename ist ziemlich egal, es wird nur der erste Buchstabe
unabhaengig von Gross- oder Kleinschreibung verglichen, d.h. es
wird fuer 'A','a' "Addresses", 'M','m' "Memo", 'T','t' "To Do List"
und fuer alle anderen Zeichen das File "Schedule" geoeffnet.
get filelength 03: total number of records
Variante-1 aus Import1.log (command 01 03)
-> command get filelength fd=0001
83,49 01 03 01 00 00 00 00 00
cmd__ fd___
<- response filelength n=000B records
A0,49 0B 00
n____
Diese Variante wird bei "import" und "export" benutzt.
get filelength 04: number of modified records
-> command get filelength fd=0001
83,49 01 04 01 00 00 00 00 00
cmd__ fd___
<- response n=0000 records
A0,49 00 00
n____
Diese Variante wird bei "sync" benutzt. Sie liefert die Anzahl
der manuell auf dem IC35 modifizierten Records, d.h. veraenderte,
neu hinzugefuegte und insbesondere auch geloeschte.
read file record by index
-> command read record fd=0001 idx=0000
83,49 01 06 01 00 00 00 00 00
cmd__ fd___ idx__
<- response record data (more)
20,48 01 00 00 05 80 <flengths> <fdata>
ri___ fi ch
-> command read more
83
<- response record data (more)
20,48 <fdata>
-> command read more
83
<- response record data (last)
A0,49 <fdata>
Die Records werden index-orientiert gelesen, der Index idx nimmt
Werte 0 bis n - 1 (filelength n).
read next modified record
(Beispiele aus Delete.tar.gz:NeueDatenSync_171100.log File "Memo")
-> command read next modified record
83,49 01 07 03 00 00 00 00 00
cmd__ fd___
<- response record data (last) Beispiel geloeschter Record
A0,49 03 00 00 06 20
ri___ fi ch
-> command read next modified record
83,49 01 07 03 00 00 00 00 00
cmd__ fd___
<- response record data (last) Beispiel veraenderter Record
A0,49 05 00 00 06 80 <flengths> <fdata>
ri___ fi ch
read file record by record-ID
(Beispiele aus Experimenten mit File "Memo")
-> command read record by record-ID
83,49 01 05 03 00 05 00 00 06
cmd__ fd___ ri___ fi
<- response record data (last) Beispiel vorhandener Record
A0,49 05 00 00 06 80 <flengths> <fdata>
ri___ fi ch
Im Erfolgsfall enthaelt die Antwort die angeforderte RecordId
und gueltige Feldlaengen und Daten.
-> command read record by record-ID
83,49 01 05 03 00 EE 78 00 06
cmd__ fd___ ri___ fi
<- response record data (last) Bsp. nicht vorhandener Record
A0,49 3E 81 D3 0D 60 <flengths>
ri___ fi ch
Ist der Record mit der spezifizierten RecordId im IC35 nicht
vorhanden, so enthaelt die Antwort eine ungueltige RecordId,
ungueltige Feldlaengen und keine Felddaten.
Im "response record data" ist fi die FileId und ri die RecordId
auf dem IC35. Beide zusammen ergeben identifizieren den Record
im IC35 global eindeutig.
??? Ob die RecordId ri sich auf 3 Bytes erstreckt wurde mangels
??? Geduld (es waeren >65536 Records zu erzeugen) nicht geklaert,
??? die Implementation unter Linux nimmt dies an.
Das Feld ch ist ein Aenderungskennzeichen (CHangeflag):
80 Record im IC35 neu erzeugt oder von anderem kopiert
40 Record im IC35 veraendert
20 Record im IC35 geloescht (ohne <flengths>,<fdata>)
00 keine Aenderung in diesem Record
Das Aenderungskennzeichen wird nur durch manuelle Aenderungen
im IC35 auf ch!=00 gesetzt, mit "write file record" neu erzeugte
haben ch=00, mit "delete file record" geloeschte verschwinden
vollstaendig.
Nur von "read next modified record" werden Records mit ch=20
geliefert, bei "read record by index" tauchen sie nicht auf.
Der gelesene Record wird falls noetig in mehreren Bloecken
uebertragen, vom IC35 haben alle Bloecke bis auf den letzten
L2id=20 und L3id=48, der letzte Block hat L2id=A0 und L3id=49.
Ein Record besteht aus einer Tabelle <flengths> von Feldlaengen
(Bytes) gefolgt von den Felddaten <fdata>. Die Inhalte der Felder
ergeben sich entsprechend den Feldlaengen aus den Felddaten.
Filename Feldanzahl fi
Addresses 21 05
Memo 4 06
Schedule 10 08
To Do List 8 07
Zumindest fuer "read next modified record" muessen erst soviel
Leseoperationen, wie "get number of modified record" lieferte,
durchgefuehrt werden, bevor "write record", "delete record" oder
"reset change flag" ausgefuehrt wird. Andernfalls geschieht
Undefiniertes, z.B. wurde ein read response ohne Record-Daten
mit ri=01 07 03 fi=00 ch=00 beobachtet.
write file record
-> command write record (more) fd=0001
02,48 01 08 01 00 00 00 00 00 51 00 00 00 00 96 00 00 00 <flengths> <fdata>
cmd__ fd___ w1 w2 w3 lr
01 08 01 00 00 00 00 00 51 00 00 00 00 96 00 00 00 Addresses
01 08 03 00 00 00 00 00 58 48 99 00 00 16 00 00 00 Memo
01 08 03 00 00 00 00 00 60 16 99 00 00 16 00 00 00 Memo
01 08 00 00 00 00 00 00 10 00 00 00 00 32 00 00 00 Schedule
01 08 02 00 00 00 00 00 10 00 00 00 00 46 00 00 00 To Do List
lr ist Gesamtlaenge des Record, d.h. Anzahl der Feldlaengen
(Bytes in <flengths>) plus Summe der Feldlaengen (Bytes in
<fdata>).
??? Die Bedeutung der "write record" PDU-Felder w1, w2, w3 ist unklar.
<- reponse write more
90
-> command write record (last)
82,49 <fdata>
<- response write ok
A0,49 12 00 00 05
ri___ fi
12 00 00 05 Addresses
03 00 00 06 Memo
1B 00 00 08 Schedule
02 00 00 07 To Do List
Im "response write ok" sind fi die FileId und ri die RecordId,
die der neue Record im IC35 erhalten hat. Es wird dabei immer ein
neuer Record mit neuer RecordId erzeugt. Das Modifizieren unter
Beibehaltung der RecordId ist mit "update file record" moeglich.
Der neu erzeugte Record erhaelt Aenderungskennzeichen ch=00 (s.o.).
Der geschriebene Record wird falls noetig in mehreren Bloecken
uebertragen, alle bis auf den letzten Block habe L2id=02 und
und L3id=48, der letzte Block hat L2id=82 und L3id=49.
update file record
-> command update record (last) fd=0003 recid=06000005
82,49 01 09 03 00 05 00 00 06 60 19 99 00 00 46 00 00 00 <flengths> <fdata>
cmd__ fd___ ri___ fi w1 w2 w3 lr
ri ist die RecordId und fi die FileId auf dem IC35.
??? w1,w2,w3 sind in der "update record" PDU die gleichen Felder
??? wie in der "write record" PDU mit ebenso unklarer Bedeutung.
lr ist Gesamtlaenge des Record, d.h. Anzahl der Feldlaengen
(Bytes in <flengths>) plus Summe der Feldlaengen (Bytes in
<fdata>).
<- response write ok
A0,49 05 00 00 06
ri___ fi
Im Unterschied zu "write record" wird die RecordId auf dem IC35
hier beibehalten. Ansonsten verhaelt sich "update record" genauso
wie "write record" (Fragmentierung, Aenderungskennzeichen etc.).
delete record
(Beispiele aus Delete.tar.gz:NeueDatenSync_171100.log File "Memo")
-> command delete record
83,49 01 02 03 00 05 00 00 06
cmd__ fd___ ri___ fi
<- response done
A0
Der Record wird im IC35 direkt geloescht, d.h. er wird nicht mit
Aenderungskennzeichen ch=20 (s.o.) auftauchen. Im Gegensatz dazu
bleiben im IC35 manuell geloeschte Records mit ch=20 erhalten,
bis sie mit "reset record change flag" bestaetigt werden und dann
tatsaechlich verschwinden.
reset record change flag
-> command reset record change flag
82,49 01 0A 01 00 11 00 00 05
cmd__ fd___ ri___ fi
<- response done
A0
Das Aenderungskennzeichen des Record wird im IC35 zurueckgesetzt
auf ch=00, d.h. Record unveraendert.
Records mit ch=20 (ohne Daten, Reste von manuellem Loeschen auf
dem IC35) werden endgueltig entfernt.
close file
-> command close file fd=0001
82,49 00 03 01 00 00 00 00 00
cmd__ fd___
<- response done
A0
disconnect
----------
Kommunikation PC->IC35, PC<-IC35:
-> command disconnect
81 03 00 # L2-header
<- response done
A0 03 00 # L2-header
Beim Verbindungsabbau werden nur Level-2 Header ohne Daten
uebertragen, d.h. Level-3 wird nicht benutzt.
Zusammenfassung der PDUs
------------------------
Level-4 commands
00 file commands
00 02 open file
00 03 close file
01 record commands
01 02 delete record
01 03 get filelength: total number of records
01 04 get filelength: number of modified records
01 05 read file record by record-ID
01 06 read file record by index
01 07 read next modified record
01 08 write file record
01 09 update file record
01 0A reset file record change-flag
02 date+time
02 00 get date+time
02 01 set date+time
03 power,passwd,category
03 00 passwd
03 01 power
03 02 category
commands
- identify
80, 10 00 64 00 ,4A "INVENTEC CORPORATION PRODUCT"
- disconnect
81
- power
82,49 03 01 "Power" 00 00 00
- authenticate
82,49 03 00 [password]
- get date+time
83,49 02 00 00
- set date+time
82,49 02 01 00 [mmddyyyyhhmmss] 00 00
- category
82,49 03 02 [category] 00
- open file
82,49 00 02 00 00 00 00 00 00 00 lf+2 00 00 00 lf [filename] 02
- close file
82,49 00 03 fd_.. 00 00 00 00
- get filelength: total number of records
83,49 01 03 fd_.. 00 00 00 00
- get filelength: number of modified records
83,49 01 04 fd_.. 00 00 00 00
- read filerecord by record-ID
83,49 01 05 fd_.. ri_.. 00 fi
- read filerecord by index
83,49 01 06 fd_.. in_dx 00 00
- read next modified filerecord
83,49 01 07 fd_.. 00 00 00 00
- read more
83
- write filerecord (more)
02,48 01 08 fd_.. 00 00 00 00 w1 w2 w3 00 00 lr 00 00 00 <flens> <fdata>
- update filerecord (more)
02,48 01 09 fd_.. ri_.. 00 fi w1 w2 w3 00 00 lr 00 00 00 <flens> <fdata>
write filerecord (last)
82,49 <fdata>
- delete record
83,49 01 02 fd_.. ri_.. 00 fi
- reset filerecord change-flag
82,49 01 0A fd_.. ri_.. 00 fi
responses
- identify
A0, 10 00 D0 07 ,4A "INVENTEC CORPORATION DCS15 1.28"
- disconnect
A0
- power
A0,49 03 01
- authenticate ok
A0,49 01 01
- get date+time
A0,49 [mmddyyyyhhmmss] 00 00
- set date+time
A0
- category
A0,49 xx 01
record fields:
- xx unknown meaning, values: 00, 01
- open file
A0,49 fd_..
- close file
A0
- get filelength
A0,49 n._..
- read filerecord (more)
20,48 ri_.. 00 fi ch <flens> <fdata>
read filerecord (last)
A0,49 <fdata>
record fields:
- ri_.. record-id on IC35
- fi file-id on IC35
- ch change-flag: 00, 80, 40 or 20
- write/update filerecord
A0,49 ri_.. 00 fi
- write more
90
- delete record
A0
- reset record changeflag
A0
IC35 Record Felder
-----------------
Die nachfolgenden Tabellen zu den IC35 Files (Addresses, Memo,
Schedule, ToDoList) enthalten jeweils den 0-relativen Feld-
Index, die Feld-Bedeutung, die maximale Feld-Laenge und ggf.
Erlaeuterung zum Format.
Die maximalen Feld-Laengen sind dokumentiert bei Siemens unter
http://www.ic.siemens.com/mySiemens/lowres/content/
ap_content_moreinfocontainer_lr/1,1908,2_IC35_4_0_61_0_2183,00.html
??? Der Zweck der "category-id"s ist unklar, jede neu angelegte
??? Kategorie erhaelt eine neue "category-id".
Addresses (21 Felder)
0 Vorname 50
1 Nachname 50
2 Firma 128
3 Tel.Privat 48
4 Tel.Buero 48
5 Handy 48
6 Fax 48
7 Strasse 128
8 Ort 60
9 PLZ 10
10 Bundesland 40
11 Land 15
12 E-Mail1 80
13 E-Mail2 80
14 URL 128
15 Geburtstag 10
16 Notizen 255
17 category-id 1 bin
18 (def.)1 128
19 (def.)2 128
20 category 8
category-id, -name
02 Address (owner data)
06 Business
0B Personal
0C Unfiled
13 S35telb
14 S35SIM.1
15 S35SIM.2
16 newcateg
Memo (4 Felder)
0 Betreff 60
1 Notizen 255
2 category-id 1 bin
3 category 8
category-id, -name
0D Business
0E Personal
0F Unfiled
17 n.memcat
Schedule (10 Felder)
Schedule Records enthalten weder category-id noch category Text.
0 Betreff 60
1 Start(Datum) 8 ? [yyyymmdd]
2 Start(Zeit) 6 ? [hhmm]":1"
3 Ende(Zeit) 6 ? [hhmm]"<1"
4 AlrmBef 1 bin
00=no 01=now 02=1min 03=5min 04=10min 05=30min
06=1hour 07=2hour 08=10hour 09=1day 0A=2day
5 Notizen 255
6 AlrmRep(Byte) 1 bin lb00-0iii
l: 0=LED 1=noLED, b: 0=beep 1=nobeep
iii: 0=norepeat 1=day 2=week 3=monwday 4=year 5=monmday
7 Ende(Datum) 8 ? [yyyymmdd]
8 EndRepeat 8 ? [yyyymmdd]
9 RepAlln(Byte) 1 bin nn
repeat all nn days/weeks/mwdays/years/mmdays
Alarm/Repeat-Flags
f4 f6 f9 repeat alarm bef LED beep
0A C0 01 no 2 day no no
07 C0 01 no 2 hour no no
06 C4 01 1 year 1 hour no no
05 C5 02 2 mon md 30 min no no
04 C3 01 1 mon wd 10 min no no
03 82 03 3 week 5 min no yes
02 41 02 2 day 1 min yes no
01 01 01 1 day now yes yes
00 C2 01 1 week none no no
ToDoList (8 Felder)
0 Start 8 ? [yyyymmdd]
1 Ende 8 ? [yyyymmdd]
2 Erledigt 1 bin 00=N 01=J
3 Prioritaet 1 bin 00=low 01=normal 02=high
4 Betreff 60
5 Notizen 255
6 category-id 1 bin
7 category 8
category-id, -name
10 Business
11 Personal
12 Unfiled
category-ids
02 Address Address (owner data)
06 Business Address
0B Personal Address
0C Unfiled Address
0D Business Memo
0E Personal Memo
0F Unfiled Memo
10 Business ToDoList
11 Personal ToDoList
12 Unfiled ToDoList
13 S35telb Address
14 S35SIM.1 Address
15 S35SIM.2 Address
16 newcateg Address
17 n.memcat Memo
IC35Comm.dll Export Funktionen
------------------------------
Addr IC35Comm.dll Export Funktion Aequivalent in ic35sync/Linux
+-------+-------------------------------+----------------------------
3859 AdsBeginSession welcome
3BEB AdsCancelEndSession
11AE AdsCloseDatabase close_file ?
3FAD AdsCloseHandle close_file ?
1B87 AdsCommitRecord commit_frec
1341 AdsDeleteAllRecords
14CE AdsDeleteRecord delete_frec
3B89 AdsEndSession disconnect
1629 AdsGetModifiedRecordCount get_mod_flen
1585 AdsGetRecordCount get_flen
1D84 AdsLocalDeleteRecord
1D00 AdsLocalModifyRecord
1C3E AdsLocalNewRecord
1000 AdsOpenDatabase open_file ?
13FA AdsPurgeDeleteRecords
126D AdsReadCatagoryData category ?
189B AdsReadNextModifiedRecord read_mod_frec
16CD AdsReadRecordByID read_id_frec
1701 AdsReadRecordByIndex read_frec
1E3B AdsReadSysInfo get_date_time
1F7F AdsSendCommand sendcmd,recvrsp
37D0 AdsSetCancelHandle
1B03 AdsUpdateRecord update_frec
1A0C AdsWriteRecord write_frec
1ED5 AdsWriteSysInfo set_date_time ?
37EB AdsDeviceVersion identify
3804 AdsOpenComPort com_open
Anhang: Logfiles der Protokoll-Analyse
--------------------------------------
- Simple_hex.log +setdt -cat modrec -write -del -res
get date+time 2000-08-20 21:28:10
set date+time 2000-08-20 21:31:49
no category
get modified record count (01 04), all files return 0 records
no writerec
no reset changeflag
- Portmon_export.log +setdt +cat allrec -write -del -res
get date+time 2000-09-10 18:28:42
set date+time 2000-09-10 18:30:35
category Addresses (rsp 01 01)
get record count (01 03)
no writerec
no reset changeflag
- Import.tar.gz:Import1.log -setdt -cat allrec +write -del -res
get date+time 2000-10-24 21:44:48
no set date+time
get record count (01 03)
no category
no reset changeflag
writerec Addresses(1x),Memo(1x),Schedule(1x),ToDoList(1x)
- Import.tar.gz:Import.log +setdt +cat allrec +write -del +res
get date+time 2000-10-30 20:32:31
set date+time 2000-10-30 20:59:13
category Addresses(rsp 00 01), Memo(rsp 01 01), ToDoList(rsp 01 01)
get record count (01 03)
reset changeflag Addresses, Memo, Schedule, ToDoList
writerec Addresses(1x), Schedule(2x)
- Delete.tar.gz:Export_171100.log -setdt -cat allrec -write -del -res
Ich habe in Outlook die Daten komplett geloescht und die
IC35-Sync-Software zurueckgesetzt.
Dann habe ich die Daten des IC35 nach Outlook importiert.
get date+time 2000-11-01 17:42:13
no set date+time
no category
get record count (01 03)
no writerec
no reset changeflag
- Delete.tar.gz:InitSync_171100.log +setdt +cat allrec -write -del +res
[Dann habe die Daten des IC35 nach Outlook importiert] und
anschliessend noch einmal einen normalen Sync durchgefuehrt.
get date+time 2000-11-01 17:42:13
set date+time 2000-11-17 23:10:51
category Addressses(rsp 00 01, 01 01), Memo(rsp 01 01), ToDoList(rsp 01 01)
get record count (01 03)
no writerec
reset changeflag Memo,Schedule,ToDoList
- Delete.tar.gz:NeueDatenSync_171100.log +setdt +cat modrec +write +del +res
Anschliessendhabe ich fuer jede Kategorie je 4 Testdatensaetze
angelegt: Je zwei in Outlook und je zwei im IC35.
Im Betreff des Datensatzes steht dieser Erzeugungsort an erster Stelle
(z.B Testadresse Outlook-IC35).
An zweiter Stelle steht das Teil, mit dem der Datensatz geloescht wird.
Anschliessend habe ich einen Sync durchgefuehrt, damit hatten der
IC35 und Outlook jeweils alle 4 Datensaetze.
addr 0018 IC35-IC35
addr 0017 IC35-Outl
addr 0019 Outl-Outl
addr 001A Outl-IC35
memo 0005 IC35-IC35
memo 0004 IC35-Outl
memo 0006 Outl-IC35
memo 0007 Outl-Outl
sched 0025 IC35-IC35
sched 0024 IC35-Outl
sched 0026 Outl-Outl
sched 0027 Outl-IC35
todo 000E IC35-IC35
todo 000D IC35-Outl
todo 000F Outl-Outl
todo 0010 Outl-IC35
get date+time 2000-11-17 23:22:45
set date+time 2000-11-17 23:23:34
category Addressses, Memo, ToDoList
get record count Addresses(01 03) Memo(01 04) Schedule(01 04) ToDoList(01 04)
reset changeflag Addresses, Memo, Schedule, ToDoList
writerec Addresses(3x), Memo(2x), Schedule(2x), ToDoList(2x)
readrec Addresses, readrecmod Memo, Schedule, ToDoList
deleterec Memo, Schedule
- Delete.tar.gz:DeleteSync_171100.log +setdt +cat modrec -write +del +res
Anschliessend habe ich auf jedem Teil pro Kategorie wieder je zwei
Datensaetze geloescht und zwar die, die durch den hinteren Namensteil
gekennzeichnet waren (Nur bei Testadresse IC35-* ist mir ein Fehler
passiert, dort ist es genau umgekehrt -Outlook wurde auf dem IC35
geloescht und umgekehrt). Dann folgt wieder ein Sync (DeleteSync), bei
dem tatsaechlich aus beiden Teilen alle Datensaetze verschwunden sind.
addr 0018 IC35-IC35 0102-1
addr 0017 IC35-Outl 0107-1 0102-3
addr 0019 Outl-Outl 0102-2
addr 001A Outl-IC35 0107-2 0102-4
0002 0107-3 0102-5 Verwenden Sie ...
0012 0107-4 0102-6 Testnachname, Testvorname
0011 0107-5 0102-7 Haid, Beppo
memo 0005 IC35-IC35 0107-2 0102-4
memo 0004 IC35-Outl 0102-1
memo 0006 Outl-IC35 0107-1 0102-3
memo 0007 Outl-Outl 0102-2
sched 0025 IC35-IC35 0107-2 0102-4
sched 0024 IC35-Outl 0102-2
sched 0026 Outl-Outl 0102-1
sched 0027 Outl-IC35 0107-1 0102-3
todo 000E IC35-IC35 0107-1 0102-3
todo 000D IC35-Outl 0102-1
todo 000F Outl-Outl 0102-2
todo 0010 Outl-IC35 0107-2 0102-4
get date+time 2000-11-17 23:23:34
set date+time 2000-11-17 23:30:28
category Addresses, Memo, ToDoList
get modified record count (01 04)
readrecmod
deleterec Addresses, Memo, Schedule, ToDoList
no writerec
reset changeflag
- Delete.tar.gz:Import_171100.log +setdt +cat allrec -write -del +res
Anschliessend habe ich wie gewuenscht noch einen Export der
Outlook-Daten in den IC35 durchgefuehrt.
get date+time 2000-11-17 23:30:28
set date+time 2000-11-17 23:48:36
category
reset changeflag
no writerec