Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
embedded_systems:robi2:remote [2011-11-20 19:41] – Kurze Ergänzung als test des Symbian Browsers :) niedererembedded_systems:robi2:remote [2011-12-14 17:31] – Erster Entwurf des abgespeckten Protokolls niederer
Zeile 1: Zeile 1:
-<box red 80% | **Actung**>Diese Dokumentation befindet sich noch im Entwicklungsstadium</box>+<box red 80% | **Actung**>Diese Dokumentation befindet sich noch im  Entwicklungsstadium</box> 
 ======Robi2 Remote Interface====== ======Robi2 Remote Interface======
-Es besteht die Möglichkeit, den Robi softwaretechnisch fernzusteuern. Hierfür wird auf dem Robi eine Server-Applikation installiert, welche eine vereinfachte Form eines RMI Servers zur Verfügung stellt.+Es besteht die Möglichkeit, den Robi softwaretechnisch fernzusteuern. Hierfür wird auf dem Robi eine Server-Applikation installiert, welche es erlaubt, Befehle im Klartext an den Robi zu senden. Der Robi liefert die entsprechenden Antworten ebenfalls in Klartext. Dies ermöglicht eine Bedienung über Software aber auch eine Bedienung durch eine Terminal-Anwendung wie beispielsweise [[http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html | putty]].
  
 ===== Das Kommunikationsprotokoll ===== ===== Das Kommunikationsprotokoll =====
-Das Protokoll funktioniert nach dem Request-Response Prinzip wobei jeweils der Client die Requests stellt. Das Protokoll ist als Textformat entworfen. Dies ermöglicht die Überquerung von Plattformen, ohne dabei die Endianness oder ähnliches beachten zu müssen. Da es sich um geringe Datenmengen handelt, ist der Overhead vertretbar. Nötigenfalls wäre eine Übersetzung in ein binäres Format wäre einfach zu vollziehen.+Das Protokoll funktioniert nach dem Request-Response Prinzip wobei jeweils der Client die Requests stellt. Das Protokoll ist im Textformat entworfen. Dies ermöglicht die Überquerung von Plattformen, ohne dabei die Endianness oder andere Plattformspezifische Fragen beachten zu müssen. Da es sich um geringe Datenmengen handelt, ist der Overhead vertretbar. Als Voraussetzung für dieses Protokoll wird ein garantierter Übertragungskanal für Byte-Ströme angenommen. 
 + 
 +====Protokoll==== 
 +Das Framing beschränkt sich auf eine Zeilenweise Trennung der einzelnen Requests und den jeweiligen Responses. Um das Protokoll möglichst zu vereinfachen wird auf eine Versionierung des Protokolls in Form eines spezifischen Startzeichens verzichtet. Als Antwort erhält der Aufrufer jeweils optional den Rückgabewert der aufgerufenen Methode. Liefert die Methode keinen Rückgabewert erhält der Aufrufer eine leere Zeile.  
 +Ist ein Aufruf nicht in Ordnung, so wird dem Aufrufer ein Fehlercode zurückgeliefert. In diesem Fall ist das erste Zeichen im Frame ein '*' gefolgt von einem numerischen Fehlercode. Optional kann ein erklärender Text auf den Fehlercode folgen. 
 + 
 +Eine Beschreibung der möglichen Aufrufe befindet sich im Abschnitt [[ .#Befehlssatz ]] 
 + 
 +===Beispiele=== 
 +**Gültiges Kommando** 
 +<code> 
 +Request:  gibSensorWert 0<CR><LF> 
 +Response: 127<CR><LF> 
 +</code> 
 + 
 +**Ungültiges Kommando** 
 +<code> 
 +Request:  InvalidCommand<CR><LF> 
 +Response: *1 Command Unknown<CR><LF> 
 +</code> 
 + 
 +**Ungültige Parameter** 
 +<code> 
 +Request:  gibSensorWert 0 2.1<CR><LF> 
 +Response: *2 Invalid Parameter<CR><LF> 
 +</code> 
 + 
 +===Formale Beschreibung=== 
 +<code> 
 +Traffic  = Request | Response . 
 +Request  = Command { Delimiter Parameter } FrameEnd . 
 +Response = [ ReturnValue ] FrameEnd . 
 + 
 +Command     = Token .  
 +Parameter   = FixedPoint | Integer . 
 +ReturnValue = [ FixedPoint  
 +              | Integer  
 +              | ( "*" ErrorCode { Delimiter Token } ) ] .  
 + 
 +FixedPoint = Integer "." Digit { Digit } . 
 +Integer    = "0" | ( [ "-" ] Number ) . 
 +ErrorCode  = Number . 
 +Token      = ( Grossbuchstabe | Kleinbuchstabe ) { AlphaNumerisch } . 
 + 
 +AlphaNumerisch = Grossbuchstabe | Kleinbuchstabe | Digit . 
 +Number         = NonZeroDigit { Digit } . 
 +Grossbuchstabe =   "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I"  
 +                 | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R"  
 +                 | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
 +Kleinbuchstabe =   "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i"  
 +                 | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r"  
 +                 | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"
 +Digit          = "0" | NonZeroDigit . 
 +NonZeroDigit   = "1" | "2" | "3" | "4" | "5" | "6"  | "7" | "8" | "9"
 +Delimiter      = " " . 
 +FrameEnd       = "\r" "\n" . 
 +</code> 
 + 
 +===== Das Objektmodell ===== 
 +====Client Implementation==== 
 +TODO 
 + 
 +====Server Implementation==== 
 +TODO 
 + 
 +=====Befehlssatz=====
  
-Request und Response werden jeweils durch ein Startzeichen identifiziert und durch einen Zeilenumbruch abgeschlossen. Das erste Datenfeld in der Nutzlast entspricht der Protokollidentifikation. So können zum Beispiel verschiedene Protokollversionen unterschieden werden. 
  
-FIXME