Grote lichtkrant
Project Grote lichtkrant reverse engineeren | |
---|---|
Status | In progress |
Contact | Juerd |
Last Update | 2013-01-19 |
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.
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 |
De structuur van het antwoord: Nog documenteren
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) |
02002BYD6F1