Ergänzungen

CAN Bootloader 0x1B

DLC = 5

4 ByteLocIDstring
1 Byte command = 0x11 wird von der MS2 an die GleisBox2 gesendet, sobald eine MS2 einen Reset-Befehl erhält

Die MS2 wartet dann 400ms auf den Startup der 60113. Danach wird dann ca. alle 30sec ein 0x18 als "keepalive" gesendet.

# Initiate first Block to send ( sub cmd 0x44, following decrement block number 0x55 )
C:0x1B R:0 H:0xC32E D:6 D:0x4d 0x54 0x5e 0x22 0x44 0x55
C:0x1B R:1 H:0x0000 D:6 D:0x4d 0x54 0x5e 0x22 0x44 0x55

# Binary data
#ZIP format of 050-ms2.bin
#Hash is block number
# Last Block of file send first! Byte padding is 0xFF until 1024 byte block
C:0x1B R:0 H:0x0300 D:8 D:0x05 0x8d 0x1e 0x03 0x4d 0x2a 0x06 0x41
C:0x1B R:0 H:0x0301 D:8 D:0x82 0x2d 0x01 0x06 0x52 0x2d 0x93 0x1e
C:0x1B R:0 H:0x0302 D:8 D:0x46 0x89 0x07 0xc0 0x04 0x00 0x47 0x42
## following data until block 0x37F ( 1024 Byte send)


# Send CRC and ACK from MS2( sub cmd 0x88, 16Bit CRC )
C:0x1B R:0 H:0xC32E D:7 D:0x4d 0x54 0x5e 0x22 0x88 0x95 0x0c
C:0x1B R:1 H:0x0000 D:5 D:0x4d 0x54 0x5e 0x22 0x88

DLC = 6

?

#
##   Example of Operating software via "CAN Bootloader Service"
## H:0xC32E  = CS2 / Updater
#
#

# System reset
# System booted immediatly after receive this message!
# Target 0xFF is not documented but seemed to mean "All".
# Wait aspprox 400ms after sending this command
# for startupt MS2 software bevore send next commands
C:0x00 R:0 H:0xC32E D:6 D:0x4d 0x54 0x5e 0x22 0x80 0xff

# Invoke bootloader update sequence. Must be send after wait for
# start up
C:0x1B R:0 H:0xC32E D:0

# Send highest block number first
# MS2 respond with empty hash
C:0x1B R:0 H:0xC32E D:6 D:0x4d 0x54 0x5e 0x22 0x44 0x55
C:0x1B R:1 H:0x0000 D:6 D:0x4d 0x54 0x5e 0x22 0x44 0x55

# Send data stream upt to 1024 byte in 8 byte per kommand. If
# less than 8 byte to be transfer padd empty bytes with 0xFF
# Hash contains the dataset number and begins with 0x300
# Build blocks of 1024 bytes and send Last bytes of file FIRST
# Attention: MS2 needs blocks = 1024 Bytes, 60113 need only 512 byte!
C:0x1B R:0 H:0x0300 D:8 D:0x29 0x1d 0x28 0x05 0x6c 0xe4 0x75 0x66
C:0x1B R:0 H:0x0301 D:8 D:0x61 0x1d 0xac 0x03 0x11 0xfd 0x2d 0xa9
C:0x1B R:0 H:0x0302 D:8 D:0x08 0x1d 0x1f 0x06 0x1d 0xc2 0x04 0x61
C:0x1B R:0 H:0x0303 D:8 D:0x71 0xd9 0x41 0x62 0x20 0x4a 0x5d 0x3e
C:0x1B R:0 H:0x0304 D:8 D:0x04 0x3e 0x2d 0x9d 0x05 0x1d 0x9c 0x04
C:0x1B R:0 H:0x0305 D:8 D:0x1d 0xb6 0x08 0x1d 0x47 0x04 0x20 0x08
C:0x1B R:0 H:0x0306 D:8 D:0x00 0x41 0x6c 0x6c 0x67 0x65 0x6d 0x2a
C:0x1B R:0 H:0x0307 D:8 D:0x5f 0x72 0x20 0x29 0x08 0x7d 0x3d 0x0a
C:0x1B R:0 H:0x0308 D:8 D:0xb9 0xfd 0x10 0x04 0x75 0x6d 0x66 0x94
C:0x1B R:0 H:0x0309 D:8 D:0x1c 0x04 0x74 0x00 0x6a 0x7f 0x07 0x16
C:0x1B R:0 H:0x030A D:8 D:0x74 0x03 0x2d 0x4b 0x08 0x4c 0x04 0x28
C:0x1B R:0 H:0x030B D:8 D:0x73 0x29 0xed 0x05 0x4d 0x6d 0x0a 0x2d
C:0x1B R:0 H:0x030C D:8 D:0xbe 0x0a 0x28 0x08 0x20 0x50 0x6c 0x61
C:0x1B R:0 H:0x030D D:8 D:0x74 0x7a 0x20 0x74 0x3f 0x00 0x69 0x2f
C:0x1B R:0 H:0x030E D:8 D:0x05 0x8d 0x1e 0x03 0x4d 0x2a 0x06 0x41
C:0x1B R:0 H:0x030F D:8 D:0x82 0x2d 0x01 0x06 0x52 0x2d 0x93 0x1e
C:0x1B R:0 H:0x0310 D:8 D:0x46 0x89 0x07 0xc0 0x04 0x00 0x47 0x42
C:0x1B R:0 H:0x0311 D:8 D:0x10 0x1c 0x05 0x41 0x6b 0x74 0x75 0xea
C:0x1B R:0 H:0x0312 D:8 D:0x06 0x3e 0x73 0x9e 0x05 0x3d 0xee 0x04
C:0x1B R:0 H:0x0313 D:8 D:0x3d 0xc1 0x08 0x41 0x3d 0x1a 0x5a 0xb5
C:0x1B R:0 H:0x0314 D:8 D:0x1e 0x5a 0xa7 0x08 0xc9 0x67 0x3e 0x21
C:0x1B R:0 H:0x0315 D:8 D:0x40 0x09 0x6e 0x41 0x77 0x04 0x45 0x2b
C:0x1B R:0 H:0x0316 D:8 D:0x41 0xa1 0x7d 0x2b 0x08 0x01 0xff 0x01
C:0x1B R:0 H:0x0317 D:8 D:0x01 0xff 0x01 0x01 0x3b 0x01 0x00 0x00

# Updater send CRC command to be confirmed by MS2
# MS2 need approx 37ms for positive CRC calculation and response
# DLC=5 command as ACK or NAC
# NAC example: C:0x1B R:1 H:0x0000 D:5 D:0x4d 0x54 0x0d 0x38 0xf2
#
C:0x1B R:0 H:0x3F17 D:7 D:0x4d 0x54 0x0d 0x38 0x88 0xb1 0x15
C:0x1B R:1 H:0x0000 D:5 D:0x4d 0x54 0x0d 0x38 0x88


loop until all block are send
... send block number--
... send data
... send CRC


# ?? undocumented, may mark loaded SW as complete and correct to load
# Software is loaded and starte without this command ( Seen at MS2 V 1.83 )
C:0x1B R:0 H:0xC32E D:5 D:0x4d 0x54 0x5e 0x22 0xf5

# Start loaded software ( reboot )
C:0x1B R:0 H:0xC32E D:5 D:0x4d 0x54 0x5e 0x22 0x11

DLC = 0

?

Folgenummer der MS2

Die MS2 setzt als Folgenummer immer 0 bei der Abfrage der Loks der MS2. Damit müssen auch Nachrichten mit einem Hash Wert von 0 akzeptiert werden, wenn das Kommando "Config Data Stream" ist. Eine Abfrage, ob es sich um eine CS2 Nachricht handelt, kann damit wie folgt aussehen:

((Hash & MR_CS2_MASK_HASH_MAGIC) == MR_CS2_HASH_MAGIC) ||
(Hash == 0 && Command == MR_CS2_CMD_CFGDAT_STREAM);

Sockets

Die CS2 öffnet auch einen TCP Port für die Portnummer 15731 (die gleiche Portnummer wie UDP). Das Protokoll für TCP ist identisch zu dem UDP Protokoll.

Es können auch mehrere CAN Pakete in einem TCP Frame übertragen werden.

Abfrage Loknamen und -daten von der MS2

Wenn von einer MS2 Loknamen oder Lokdaten abgefragt werden während die MS2 auf Stop steht, kann sie in einen Zustand geraten, in dem sie nicht mehr richtig funktioniert. Diese Daten sollten nur abgefragt werden, wenn die MS2 selbst ping Nachrichten verschickt.

Abfrage *.cs2 Dateien

Für z-lib komprimierte Dateien muß als erste Nachricht die Config Data Stream Nachricht mir 7 Bytes Länge benutzt werden, wobei das reservierte Byte den Wert 0x7b hat.

Anschließend folgen die Daten in Config Data Stream Nachrichten mit 8 Bytes Länge. Das erste Paket enthält zuerst die Länge der unkomprimierten Daten! Erst danach folgen die z-Lib komprimierten Daten!. Die letzte Nachricht wird mit 0 auf 8 Bytes aufgefüllt. Die CRC aus der Data Stream Nachricht mit 7 Bytes Länge wird über sämtliche Daten inclusive der unkomprimierten Länge und der Füllbytes berechnet.

Die CAN Prio der Datennpakete muß auf 0 gesetzt werden! Obwohl die Prio als nicht ma%&zlig;geblich für die Kommandoauswertung definiert ist und die Daten mit geringer Prio gesendet werden sollen.

Geräte-ID in Ping Nachricht

Die CS2 und die cs2.exe hat die Geräteid 0xeeee.

Ping der cs2.exe

Die cs2.exe kann auch statt einem Ping Request eine Ping Antwort senden. Um eine CS2 zu emulieren, sollte auf beide Nachrichten eine eigener Ping Request geschickt werden. Die cs2.exe im slave Mode erkennt anscheinend eine CS2 Master über eine Heuristik. Wenn mit dem Ping Request die CAN Members abgefragt werden, gibt es einen Master.

MS2 als Slave

Die MS2 geht auch in den Slave Modus über, wenn sie eine Ping Antwort mit der Geräteid 0xeeee sieht, also eine CS2.

MS2 Update

Ab Version CS2 3.5.5 und MS2 2.1 gibt es zwei MS2 files. Die Stelle der Version in den Binaries ist wie folgt:

Version an Byte 7 ( .vhigh) und 8 (.vlow)
DateiPosition Version
016-gb2.bin
flashdb2.ms2Version an Byte 0 ( .version) und 2 (.monat). Das Jahr ist bisher immer gleich dem Monat (.monat=3 entspricht .jahr=2013). Zus&auuml;tzlich Klartext im Datenblock mit der Loknummer 99999.
lang.ms2Version an Byte 0 ( .vhigh) und 1 (.vlow)
051-ms2.binVersion an Byte 0 ( .vhigh) und 1 (.vlow)
050-ms2.binVersion an Byte 253 ( .vhigh) und 254 (.vlow)

Editor in cs2.exe als Slave

Läuft die cs2.exe als Slave, so fordert sie die *.cs2 Daten von einer Master CS2 an. Die empfangenen Dateien k&oml;nnen auch auf der cs2.exe editiert werden. Wenn die Änderung quitiert wird, wendet die cs2 den geänderten Block im Format der entsprechenden cs2-Datei (mit Paragraph als Kennung) zurück. Die Gleisbilder bekommen dabei als Paragraph die Kennung "[gleisbildseite]" und werden anhand der ID dem Namen zugeordnet. Die Zuordnung Id - Name steht in der gleisbild.cs2.

Magnetartikel

Die Magnetartikel werden mit der Kennung "[magnetartikel]" geschickt. Es werden nur die Änderungen verschickt. Einen gelöschten Eintrag erkennt man an dem Magnetartikeltyp "std_rot_gruen", der Vorbelung im Editor für noch unbenutzte Einträge.

Fahrstrassen

Die Fahrstrassen werden mit der Kennung "[fahrstrassen]" geschickt. Es werden nur die veränderten Fahrstraßen verschickt. Die Fahrstraße wird immer komplett, also mit allen Items geschickt. Eine gelöschte Fahrstraße erkennt man an dem Standardnamen "<x><y>", wobei <y> zwischen '0' und '8' liegt und <x> zwischen 'a'-'z' oder 'A'-'Z'.

Gleisbild

Die Gleibilder werden mit der Kennung "[gleisbild]" geschickt. Die gleibild.cs2 wird immer komplett übertragen, Anschließend werden immer sätliche Gleisbildpages übertragen.

Gleisbildpage

Die Gleibildepages werden mit der Kennung "[gleisbildseite]" geschickt. Eine Gleisbildseite wird immer komplett übertragen.