Interna (i-Telex)

Aus wiki.telexforum.de
Zur Navigation springen Zur Suche springen

Einleitung

Dies ist zunächst nur eine "Sammelseite" zur Erläuterung von (für den normalen Nutzer unwichtigen) Abläufen, um potenziellen Entwicklern Hilfestellungen zu geben.

Kommunikation auf dem TWI-Bus

Fernschreibsignal wird "synchron" übertragen, d.h. *nicht* in Form von ganzen 5-Bit-Gruppen übertragen.

Vorteil:

Nachteil: Keine Mischung verschiedener Geschwindigkeiten (50 Baud / 100 Baud) möglich.


Beispiel

Beispiel (Lesezugriff oder "sendet" bezieht sich immer auf den TWI-Bus)

Du wählst die 0 am Endgerät mit der Adresse 25

  • TW39 fragt über Lesezugriff an Adresse 110 (entspricht 0) den Status ab.
  • kommt als Antwort 0xA0 weiß TW39, dass Ethernet-Karte frei ist (wenn keine Antwort kommt wird auf weitere Ziffern gewartet)
  • TW39 sendet sofort ein 25(dez) [Connect] an Adresse 110 und "belegt" die Ethernet-Karte damit, diese sendet fortan jeden Schreibzugriff an 25(dez).
  • TW39 sendet gleich auch ein A3 [Activate] an Adresse 110 und startet die Verbindung.
  • Ethernet sendet ein A6 [DialAck] an 25. In der TW39 änder sich nach außen hin nichts, intern weiß die Karte aber dass nun weiter gewählt werden darf.

Du wählst 3456 als Nummer des anderen Teilnehemrs.

  • jede Ziffer wird von TW39 als 0xB3, 0xB4, 0xB5 und 0xB6 an die Adresse 110 gesendet.
  • als Antwort kommen höchstens Heartbeats 0xA9 von der Ethernet-Karte.

Sobald die Ethernet-Karte die TCP-Verbindung hergestellt hat, sendet diese ein A5 [ActivateAck] an die 25, die TW39-Karte schaltet dann den Fernschreiber ein.

Nun ist die Verbindung hergestellt und es werden nur noch die TWi-"Befehle" 0x9C für "Mark" und 0x93 für "Space" in beiden Richtungen übertragen.

Sobald eine Seite trennt, sendet diese 0xAA und wartet bis zu 3 Sekunden auf eine Rückmeldung 0xAC von der anderen Seite.

Falls im ersten Schritt keine Ethernet-Karte angewählt wurde, sondern eine andere Schnittstellenkarte, so sendet diese Anstelle der 0xA6 [DialAck] ein 0xA5 [ActivateAck] als Kennzeichen, dass die sendende Station sofort auf "Kommunikation" umschaltet (und keine Wählinformation mehr annimmt).

Falls im ersten Schritt die Ethernet-Karte beim Lesezugriff nicht mit 0xA0, sondern mit irgendwas mit Bit 7 = 0 (Beispiel 0x33), dann weiß diw TW39 dass die Schnittstelle besetzt ist und darf nichts weiter senden, sondern intern das Besetzt-Zeichen auslösen.


Anmerkungen zur Software

Ethernet-Karte: Das Ding ist als "Jux" entstanden. Historie: Bei Pollin ein AVR-NET-IO Board erstanden und herumexperimentiert. Im Netz über die Software "OpenMCP" gestolpert und diese für ein erstes Projekt (viel kleiner als i-Telex) angepasst. Dann die im gleichen Projekt gefundene Hardware gesehen und für das "TelexPhone2" angepasst und in das System integriert. Zu jenem Zeitpunkt dachte ich immernoch, dass diese Platine eine Randerscheinung bleibt. Daher ist die Software relativ "quick and dirty" eingehackt worden. Nach und nach ist daraus ein Riesengebilde geworden mit (inzwischen) mich befriedigender Dokumentation aber beschissener Struktur. Die Struktur ist einerseits durch das "Betriebssystem" von OpenMCP vorgegeben: kooperatives Multitasking, mit der Folge dass die Applikationssoftware keine langdauernden Schleifen enthalten dürfen. Die "Hauptfunktion" itelex_thread ist daher ein Monster von 1300 Zeilen plus einiger Unterfunktionen, die aber nur dort verwendet werden. Alles läuft über globale Variablen... Ergo: So wie das Programm momentan ist, ist es entwicklungstechnisch eine Sackgasse.

die anderen i-Telex-Schnittstellen: Da im Prinzip alle Schnittstellen (außer analoge Telefonschnittstelle) die gleiche Grundstruktur haben, sind die gleichen Programmbestandteile im Ordner "Gemeinsam" und speziell im Quelltext TxP2-Endgeraet.c enthalten. Dieses Programm stellt eine Reihe von Funktionen zur Verfügung, die die gesamte TWI-Bus Kommunikation ausführt. Die eigentliche Applikation ist daher relativ schlank. Die Applikation darf eigene Schleifen enthalten, die TWI-Kommunikation und Dateninterpretation wird per Timeraufruf sichergestellt. Die Applikationen sollten also relativ gut verständlich sein. Ich bin gespannt was du generell zu meinem Programmierstil schreibst. In neuen Projekten versuche ich generell Englisch zu schreiben, auch die Kommentare...

Versionsnummern

Versionsnummern können durchaus für verschiedenen Varianten die selbe sein.

Falls zb ein Bug in den gemeinsamen Programmteilen behoben wird könnten alle Bugfix Firmwarez dieselbe Versionsnummer bekommen.