Grote lichtkrant

From RevSpace
Revision as of 23:17, 13 January 2016 by Juerd (talk | contribs)
Jump to navigation Jump to search
Project Grote lichtkrant reverse engineeren
Status Completed
Contact Juerd
Last Update 2016-01-13

Plaatjes

Protocol

Alles is ontdekt door te observeren wat "WinSpec 5" via de seriele kabel stuurt en ontvangt. De informatie is daarom incompleet, en waarschijnlijk kloppen de beschrijvingen niet. In ieder geval is het onwaarschijnlijk dat de gebruikte terminologie overeenkomt met die van de fabrikant.

Bovendien is het met maar 1 apparaat uitgeprobeerd. Het zou goed kunnen dat andere modellen of andere firmwareversies een dialect van het hier beschreven protocol spreken.

De communicatie is eenvoudig: de computer stuurt een commando, de lichtkrant-controller geeft antwoord. De controllers hebben een adres (een nummer), en negeren commando's die voor andere adressen bedoeld zijn.

Per 6 regels is er een controller. Onze lichtkrant heeft 9 regels en dus 2 controllers. De tweede controller stuurt maar 3 regels aan.

Een veel gebruikte manier om waardes door te sturen is hex ascii, oftewel een geheel getal verstuurd als hexadecimaal getal, uitgedrukt in ASCII. De decimale waarde 10 is in hexadecimaal "A", wat in ascii 41h is. Als er 2 bytes nodig zijn, worden voorloopnullen gebruikt, ook weer in ascii: 30h 41h ("0A").

De structuur van een commando:

Aantal bytes Waarde Omschrijving
3 15h 15h 03h Geen idee. Elk commando begint hiermee.
2 hex ascii Adres
2 hex ascii 255 - adres (e.g. 254 als adres = 1)
3 hex ascii Lengte van commando (n)
n - Commando: hoofdletter die het commando bepaalt, eventueel gevolgd door parameters.
4 hex ascii CRC-CCITT (X-modem) van al het voorgaande, behalve de eerste drie bytes

Commando G (login)

De lichtkrant reageert pas op andere commando's na een login. Het standaardwachtwoord is leeg.

Aantal bytes Waarde Omschrijving
8 ascii Wachtwoord, aangevuld met spaties (20h)

Commando P (enter programming mode)

Commando's A, B en C zijn alleen te gebruiken tussen P en H in. Tijdens programming mode gaat het scherm (helaas!) op zwart.

Commando A (schedule)

Het apparaat gebruikt een cron-achtig schema. Dit is nog niet goed uitgezocht.

Aantal bytes Waarde Omschrijving
2 hex ascii Programma (bijv. 01)
8 ascii Naam van het programma, aangevuld met spaties.
19 2ah 20h 2ah 20h 20h 20h 20h 20h 20h 20h 2ah 20h 20h 20h 20h 20h 20h 20h 30h Cron-achtige definitie

Commando's C en B (set text)

Voor de eerste pagina wordt commando C gebruikt, voor alle opvolgende pagina's commando B.

Aantal bytes Waarde Omschrijving
2 hex ascii Programma (bijv. 01)
2 hex ascii Paginanummer; de eerste is 01.
1 decimal ascii 1-6 Effect bij verschijnen
1 decimal ascii 1-6 Effect bij verdwijnen
2 decimal ascii 01-99 Aantal seconden
282 ascii Tekst: steeds 6 regels van 45 tekens, elk voorafgegaan en gevolgd door een spatie (20h). Tussen de regels staat geen regeleinde.

In de tekst kunnen de volgende speciale tekens worden gebruikt:

Teken Omschrijving
5Fh ("_") Voorgaande teken dubbele breedte
B4h Eerste cijfer van uurcomponent huidige tijd
B5h Tweede cijfer van uurcomponent huidige tijd
B6h Eerste cijfer van minuutcomponent huidige tijd
B7h Tweede cijfer van minuutcomponent huidige tijd
B8h Eerste cijfer van secondecomponent huidige tijd
B9h Tweede cijfer van secondecomponent huidige tijd
BAh Eerste cijfer van dagcomponent huidige datum
BBh Tweede cijfer van dagcomponent huidige datum
BCh Eerste cijfer van maandcomponent huidige datum
BDh Tweede cijfer van maandcomponent huidige datum
BEh ?
BFh Eerste letter van maandcomponent huidige datum
C0h Tweede letter van maandcomponent huidige datum
C1h Derde letter van maandcomponent huidige datum
F6h Dubbele punt, knipperend

Commando H (done programming)

Commando's A, B en C zijn alleen te gebruiken tussen P en H in.

Commando U (configure)

Aantal bytes Waarde Omschrijving
6 SSMMHH dec ascii Tijd, met minst significante cijfer eerst (17:50:01 wordt 100571)
1 34h ("4") Betekenis onbekend; lijkt wel afhankelijk te zijn van datum
4 DDMM dec ascii Datum, met minst significante cijfer eerst (2 januari wordt 1020)
1 30h ("0") of 31h ("1") Schrikkeljaaraanduiding, 0 is niet, 1 is wel
2 33h 32h ("32") Onbekend
8 ascii Nieuw wachtwoord, aangevuld met spaties
20 dec ascii? "00000000000000003303", geen idee wat het betekent
32 hex ascii Helderheid (voor egaal beeld, 32 dezelfde digits 0-F gebruiken)
1 34h ("4") Onbekend
25 3Fh, 25 maal Onbekend

Commando I (info)

De lichtkrant geeft wat info over zichzelf.

Antwoord

Elk commando wordt bevestigd door de controller.

Aantal bytes Waarde Omschrijving
2 hex ascii Adres van antwoordende controller
3 dec/hex? ascii 30h 30h 32h ("002") Onbekend
1 ascii De letter van het gegeven commando
1 ascii Status van het commando: 59h ("Y") = succes, 46h ("F") = failure
? ? Na commando "I" wordt extra info meegestuurd
4 hex ascii CRC van al het voorgaande
2 04d 04d End of Transfer (2x)

Kabel

RS485:

dsub9 lichtkrant utp remote
4 groen T-
5 oranje GND
7 wit/blauw R-
8 blauw R+
9 wit/groen T+

Weerstandje in de dsub-connector gemeten op 386 Ω.

Links