//modified: 2002.02.14@22:13 by Alex //modified: 04/28/2002 mmddyy 20:53 by Burkart //modified: 07/18/2002 mmddyy 20:01 by Burkart Liste + Erklärung der Content-IDs --------------------------------- ID | Funktion -----+------------------------------------------------ 0 | Login data TI->Server 1 | Empfangsbestätigung (ACK) 2 | Client abort (Abbruch) TI->Server 3 | Logout request TI->Server 4 | Sendefreigabe Server->Client X 5 | Fehler (NACK) 6 | Anmeldefreigabe Server->unangemeldeten Client 7 | Login ACK Server->neuen TI 8 | Logout ACK Server->TI 9 | Neue Adresse Server->TI 31 | Error TI->Server | 10 | leer (keine Empfangsbestätigung!!!) 11 | Plain Text 12 | TiML-Code 13 | 768 Byte Bilddaten unkomprimiert 14 | Fullscreen-Menu 15 | Einzeiliges Eingabefeld 16 | Mehrzeiliges Eingabefeld ("Memofeld") | 32 | Antwort auf Fullscreen-Menu (32) 33 | Antwort auf Plain Text (11) 34 | Antwort auf TiML (12) 35 | Antwort auf Grafikbildschirm (13) 36 | Antwort auf einzeiliges Eingabefeld (15) 37 | Antwort auf mehrzeiliges Eingabefeld (16) | +128 | Folgepaket (s.a. Paketaufbau) 128 | Nicht existent per definitionem 129 | Nicht existent per definitionem 130 | Nicht existent per definitionem 131 | Nicht existent per definitionem 132 | Nicht existent per definitionem 133 | Nicht existent per definitionem 134 | Nicht existent per definitionem 136 | Nicht existent per definitionem 138 | Nicht existent per definitionem System-IDs ========== 0 ($00) Login data TI->Server ------------------------------ TI meldet sich ans Netzwerk an, nach der Anmeldefreigabe (ID 6) Antwort per ID 7 Sender: $FF Empfänger: $01 (Server) Niemals Multi-Packet Daten: 8 Byte Username 1 Byte TI-Typ (82h, 83h, ...) 1 Byte µC-Software hi-version 1 Byte µC-Software lo-version 1 Byte TI-Software hi-version 1 Byte TI-Software lo-version 1 ($01) Empfangsbestätigung (ACK) --------------------------------- Bestätigung auf ein erhaltenes Paket Darf nicht empfangsbestätigt werden Niemals Multi-Packet Keine Daten 2 ($02) Client abort (Abbruch) ------------------------------ Benutzer hat "WINDOW" gedrückt Nachricht an den Server Eigentlich sollte jetzt wieder das Startmenü kommen, letztendlich entscheidet hierüber der Server Niemals Multi-Packet Keine Daten 3 ($03) Logout request TI->Server ----------------------------------- TI meldet sich vom Netzwerk ab, endgültige Abmeldung erst nach Bestätigung (ID 8) Niemals Multi-Packet Bis µC-Software 1.05: Keine Daten Zukünftig folgende Daten: 8 Byte Username 4 ($04) Sendefreigabe Server->Client X ---------------------------------------- Client erhält sofortige Sendeerlaubnis/Sendepflicht Darf nicht empfangsbestätigt werden Niemals Multi-Packet Keine Daten 5 ($05) Fehler (NACK) --------------------- Benachrichtigung über fehlerhafte Übertragung des letzten Packets (Ursache: (Checksum error), Buffer overrun) Aufforderung zum erneuten Senden des letzten Packets Niemals Multi-Packet Keine Daten 6 ($06) Anmeldefreigabe Server->unangemeldeten Client ------------------------------------------------------ Anmeldefreigabe Darf nicht empfangsbestätigt werden Aufforderung an unangemeldeten TI, sich jetzt anzumelden (ID 0) RCPT: 0 Niemals Multi-Packet Keine Daten 7 ($07) Login ACK Server->neuen TI ------------------------------------ Antwort auf ID 0 Zuweisung einer Adresse RCPT: 0 Daten: 8 Byte Empfänger (Username) 1 Byte zugeweisene Adresse 8 ($08) Logout ACK Server->TI ------------------------------- Antwort auf ID 3 Empfangender Client ist jetzt richtig abgemeldet Client ist nicht mehr angemeldet und darf daher nicht mehr senden Niemals Multi-Packet Bis µC-Software 1.05: Keine Daten Zukünftig folgende Daten: 8 Byte Username 9 ($09) Neue Adresse Server->TI --------------------------------- Antwort auf ID 0 Zuweisung einer neuen Adresse an einen angemeldeten TI RCPT: alte Adresse Daten: 8 Byte Empfänger (Username) 1 Byte neue zugeweisene Adresse 31 ($1F) Error TI->Server --------------------------- Beim Überprüfen der empfangenen Daten vor deren Anzeige ist ein Regelverstoß festgestellt worden, eine Überprüfung der Ausgangsdaten ist angeraten. Das Paket ist wie gewöhnlich per {ACK} zu bestätigen, ob der Server jedoch antwortet, indem er ein neues Datenpaket sendet (oder z.B. auch ein {logout ACK}), liegt bei ihm bzw. hängt vom Inhalt dieses Paketes ab. RCPT: Server 1 Byte Gewichtigkeit 0 = Formfehler, Daten werden trotzdem unverändert angezeigt 20 = Formfehler, Daten werden in leicht veränderter Form angezeigt, vermutlich gehen keine Daten verloren 40 = Formfehler, Daten werden in stärker veränderter Form angezeigt, evtl. gehen Daten verloren 60 = Formfehler, Daten werden in stark veränderter Form angezeigt, wahrscheinlich gehen Daten verloren 80 = Formfehler, Daten werden in stark veränderter Form angezeigt, hierdurch gehen Daten verloren < 127 = Formfehler, Daten werden (evtl. in modifizierter Form) trotzdem angezeigt, Überprüfung der Daten angeraten 127 = Gewichtigkeit nicht spezifiziert > 127 = schwerwiegender Fehler, Daten werden nicht angezeigt, Änderung der Daten notwendig 200 = schwerwiegender Fehler, Daten erneut übertragen 220 = schwerwiegender Fehler, zurück zum vorherigen Content 240 = schwerwiegender Fehler, zurück ins Hauptmenü 255 = schwerwiegender Fehler, Client-Software wird beendet Anmerkung: Die Client-Software ist nicht darauf angewiesen, die Gewichtigkeit zu spezifizieren. Falls dies nicht möglich ist, wird an dieser Stelle der Wert 127 übertragen, anhand der weiteren Daten obliegt es dem Server, wie bzw. ob er reagiert. Die Gewichtigkeitstabelle ist auf zukünftige Erweiterungen ausgelegt, empfängt der Server eine Gewichtigkeit, auf die er keine spezifische Reaktion weiß, muß er so reagieren, als entspräche die Gewichtigkeit der nächsthöheren, auf die ein Reaktionsmuster vorliegt. Es obliegt dem Server - insbesondere bei Formfehlern - u.U. stärker zu reagieren, als es die empfangene Gewichtigkeit empfiehlt. Dies könnte z.B. sinnvoll sein, wenn aus den folgenden Daten ersichtlich wird, daß ein Übertragungsfehler vorliegt. Um sicherzugehen, daß kein Übertragungsfehler vorlag, darf der Server bei einem beliebig gewichteten Fehler die Daten erneut senden, insbesondere bei großen Paketen kann das aber ineffizient sein, eine Überprüfung des versendeten Paketes auf Fehler ist also vorzuziehen. Im Fall einer Gewichtigkeit=255 darf der Server nicht davon ausgehen, daß sich der Client ordnungsgemäß abgemeldet hat. Mit einem Timeout ist aber zu rechnen. Wurde auf eine Fehlergewichtigkeit=200 (erneut übertragen) reagiert, indem das gleiche Paket erneut übertragen wurde, der TI sendet aber erneut {error} mit Gewichtigkeit 200, so ist in diesem zweiten Durchgang eine mindestens um 1 erhöhte Gewichtigkeit anzunehmen und entsprechend zu reagieren, da sonst voraussichtlich eine Endlosschleife aufträte. In dem Fall, daß ein Content-gestützter Login mit Paßwort durchgeführt wird, sollte es, falls hier ein Fehler auftritt, nicht möglich sein, z.B. ins Hauptmenü zu wechseln und hierdurch die Anmeldung zu umgehen. Beispiele: 0, unveränderte Anzeige - die offiziellen Daten eines Paketes enden mit einem Datentyp definierter Länge, hierauf folgen gemäß Datenlänge des gesamten Paketes noch weitere Daten 20, vermutlich kein Datenverlust - Die darzustellende Breite eines Eingabefeldes wird gekürzt 40, evtl. Datenverlust - Startspalte eines Strings außerhalb des Bildschirms, wird auf gültigen Wert angepaßt, von der Länge paßt der String ab dieser Position komplett auf den Bildschirm und braucht also nicht gekürzt zu werden. 60, wahrscheinlich Datenverlust - ein LT-String der Länge n in einem Paket mit m < n Datenbytes mußte mindestens um n-m Bytes gekürzt werden 80, sicherer Datenverlust - ein Datentyp definierter Länge mußte gekürzt werden 200, erneut übertragen - nicht unterstützte Content-ID 220, zurück zum vorherigen Content - Fullscreen menu ohne Einträge - Paket mit Inhalts-Content-ID aber Datenlänge 0 240, zurück ins Hauptmenü - ??? 255, Client-Software wird beendet - Der allererste Content nach Programmstart enthielt einen schwerwiegenden Fehler 1 Byte Fehlertyp 0 = Fehler nicht spezifiziert (Fehler-Offset = dummy) empfangener Wert = x (beliebig, 0..255) geänderter Wert = x+-y; x, falls nicht anzeigbar 1 = nicht unterstützte Content-ID (Fehler-Offset = dummy) empfangener Wert = Content-ID (0..127) (geänderter Wert = dummy) Anmerkung: Paket ist nie anzeigbar 2 = Paketlänge ist kleiner als es laut Regeln sein müßte (Fehler-Offset = dummy) empfangener Wert = Paketlänge geänderter Wert = Paketlänge+x; Paketlänge, falls nicht anzeigbar 3 = Paketlänge ist größer als es entsprechend der Daten sein müßte (Fehler-Offset = dummy) empfangener Wert = Paketlänge geänderter Wert = Paketlänge-x Anmerkung: Paket ist immer anzeigbar 4 = Byte an der Position Fehler-Offset hat einen ungültigen Wert Fehler-Offset = Fehler-Offset empfangener Wert = empfangener Wert geänderter Wert = empfangener Wert+-x; empfangener Wert, falls nicht anzeigbar 5 = Word an der Position Fehler-Offset hat einen ungültigen Wert Fehler-Offset = Fehler-Offset empfangener Wert = empfangener Wert geänderter Wert = empfangener Wert+-x; empfangener Wert, falls nicht anzeigbar 6 = String an der Position Fehler-Offset hat eine ungültige Länge Fehler-Offset = Anfang des Strings empfangener Wert = Länge des Strings geänderter Wert = Länge des Strings+-x; Länge des Strings, falls nicht anzeigbar 1 Word (Little Endian) Fehler-Offset An dieser Stelle ist etwas falsch Anmerkung: Es handelt sich um einen Offset, der Wert 0 deutet also auf das erste Datenbyte hin Anmerkung: Dieser Wert ist bei manchen Fehlertypen irrelevant (z.B. bei nicht unterstützter Content-ID), in dem Fall handelt es sich um einen Dummy-Wert 1 Word (Little Endian) empfangener Wert Der Wert, der an der Stelle Fehler-Offset empfangen wurde und der dementsprechend nicht den Regeln entspricht Anmerkung: Dieser Wert ist bei manchen Fehlertypen irrelevant (z.B. bei nicht unterstützter Content-ID), in dem Fall handelt es sich um einen Dummy-Wert Anmerkung: Sofern gemäß Fehlertyp ein Byte falsch ist, ist der Wert des falschen Byte im Low-Byte des Word abgelegt, das High-Byte ist dann ein Dummy-Byte 1 Word (Little Endian) geänderter Wert Der Wert, auf den der falsche Wert geändert wurde. Anmerkung: Dieser Wert ist bei manchen Fehlertypen irrelevant (z.B. bei nicht unterstützter Content-ID), in dem Fall handelt es sich um einen Dummy-Wert Anmerkung: Sofern gemäß Fehlertyp ein Byte falsch ist, ist der Wert des falschen Byte im Low-Byte des Word abgelegt, das High-Byte ist dann ein Dummy-Byte Inhalts-IDs =========== 10 ($0A) leer (keine Empfangsbestätigung!!!) -------------------------------------------- Leeres Packet Wird gesendet, wenn sonst nichts ansteht Empfänger von ID 10 darf nicht mit ID 1 (ACK) antworten Hat er zu sendende Daten, sind die zu gegebener Zeit zu senden, falls nicht, muß auch er dann {empty} senden Niemals Multi-Packet Keine Daten 11 ($0B) Plain Text ------------------- Empfänger wartet bis der Nutzer eine Taste drückt, dann sendet er ID 33 Daten: ASCIIZ-String Anmerkung: Bis TI-Software 1.05 maximal 128 Byte Text + 1 Byte 00h TI-85/86: maximal 168 Byte Text + 1 Byte 00h 12 ($0C) TiML-Code ------------------ Antwort bei Aktion per ID 34 Daten: Siehe hierzu separate Dokumentation 13 ($0D) 768 Byte Bilddaten unkomprimiert ----------------------------------------- 96x64 Pixel schwarz/weiß-Grafikbildschirm, unkomprimiert Empfänger wartet bis der Nutzer eine Taste drückt, dann sendet er ID 35 Zwingend Multi-Packet Daten: 768 Byte GRAPH_MEM 14 ($0E) Fullscreen-Menu ------------------------ Daten: 1 Byte Anzahl der Items (1..7) 1 Byte Default Item (1..Anzahl Items) 1 Dummy-Byte 1 ASCIIZ-String (max. 16 Zeichen + NUL) Titel TI-85/86: max. 21 Zeichen + NUL 1 ASCIIZ-String (max. 14 Zeichen + NUL) für jedes Item TI-85/86: max 20 Zeichen + NUL 15 ($0F) Eingabefeld -------------------- Daten: 1 Byte Startzeile des Erläuterungstextes e {0..7} 1 Byte Startspalte des Erläuterungstextes e {0..15} TI-85/86: e {0..20} 1 LT-String Erläuterungstext 1 Byte Zeile des Eingabefeldes e {0..7} 1 Byte Startspalte des Eingabefeldes e {0..15} TI-85/86: e {0..20} 1 Byte erlaubte Zeichen (z.B. nur Zahlen) erlaubt=bit gelöscht bit bedeutung 0 ziffern 1 kleinbuchstaben 2 großbuchstaben 4-7 sonderzeichen (müssen alle bits gesetzt werden) 1 Byte Breite des Eingabefeldes (DispLen) e {1..16} TI-85/86: e {0..21} 1 Byte max. Zeichen (MaxLen) e {1..247} 1 LT-String Vorgabetext Anmerkung: Es existieren noch gewisse Regeln für DispLen und MaxLen 16 ($10) Memofeld ----------------- Daten: 1 ASCIIZ-String Titel des Memofeldes (maximal 16 Byte + 1 Byte 00h) TI-85/86: maximal 21 Byte + 1 Byte 00h 1 Byte erlaubte Zeichen (z.B. nur Zahlen) erlaubt=bit gelöscht bit bedeutung 0 ziffern 1 kleinbuchstaben 2 großbuchstaben 4-7 sonderzeichen (müssen alle bits gesetzt werden) 1 Byte maximale Länge in Bytes (lo) 1 Byte maximale Länge in Bytes (hi) 1 Word Länge L Vorgabetext L Byte Vorgabetext Antwort-IDs =========== ID 32 ($20) Antwort auf Fullscreen-Menu --------------------------------------- Daten: 1 Byte mit der Nummer (1..(1..7)) des ausgewählten Eintrags 0 bei Abbruch ID 33 ($21) Antwort auf Plain Text ---------------------------------- Daten: 1 Byte mit GET_KEY-code ID 34 ($22) Antwort auf TiML ---------------------------- Daten: 1 Byte ID des TiML-Elements 1 Byte Länge der Zusatzinformation(en) Zusatzinformation(en) zu dieser ID Evtl. weiter mit der nächsten ID ID 35 ($23) Antwort auf Grafikbildschirm ---------------------------------------- Daten: 1 Byte mit GET_KEY-code ID 36 ($24) Antwort auf einzeiliges Eingabefeld ----------------------------------------------- Daten: 1 Byte Länge des eingegebenen Textes n Byte eingegebener Text (max. 247 Byte) ID 37 ($25) Antwort auf mehrzeiliges Eingabefeld ------------------------------------------------ Daten: 1 Byte Länge des eingegebenen Textes (lo) 1 Byte Länge des eingegebenen Textes (hi) n Byte eingegebener Text