Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision |
embedded_systems:robi2:remote [2011-11-21 09:39] – Erster Entwurf des Kommunikationsprotokolls, weitere Gliederung erstellt niederer | embedded_systems:robi2:remote [2011-12-13 13:10] – niederer |
---|
<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 eine vereinfachte Form eines RMI Servers zur Verfügung stellt. |
| |
===== Das Objektmodell ===== | ===== Das Objektmodell ===== |
====Client Implementation==== | ====Client Implementation==== |
TODO | TODO |
| |
=====Robi Remote Version 0===== | =====Funktionsumfang===== |
| ====Robi Remote Version 0==== |
Diese Remote-Procedure-Call Ausbaustufe wird durch //ProtVersion=0// im Traffic identifiziert. | Diese Remote-Procedure-Call Ausbaustufe wird durch //ProtVersion=0// im Traffic identifiziert. |
| |
===Methodenliste==== | ==Methodenliste== |
TODO | TODO |
| |
<code> | <code> |
Traffic = Request | Response . | Traffic = Request | Response . |
Request = ">" ProtID ProtVersion CommandID { Parameter } FrameEnd . | Request = ">" ProtID " " ProtVersion " " CommandID { Parameter } FrameEnd . |
Response = "<" ProtID ProtVersion { ReturnValue } FrameEnd . | Response = "<" ProtID " " ProtVersion " " CommandID { ReturnValue } FrameEnd . |
| |
ProtID = "R" "2" . | ProtID = "R" "2" . |
| |
==== Das Serialisierungsformat ==== | ==== Das Serialisierungsformat ==== |
Als Serialisierungsformat wird ein Teil des PHP Serialisierungsformats verwendet. Im Gegensatz zur Standard Java-Serialisierung ist dieses Datenformat als ASCII-Text ausgelegt und ausserdem wesentlich kompakter als ein Java Object Stream nach Standard-Protokoll. | Das Serialisierungsformat ist durch das PHP Serialisierungsformat inspiriert und erweitert das grösstenteils kompatibel. Im Gegensatz zur Standard Java-Serialisierung ist dieses Datenformat als ASCII-Text ausgelegt und ausserdem wesentlich kompakter als ein Java Object Stream nach Standard-Protokoll. |
| |
Leider ist das PHP Serialisierungsformat nirgendwo formal beschrieben. Es lässt sich jedoch aus dem {{http://svn.php.net/viewvc/php/php-src/tags/php_5_3_8/ext/standard/var.c?view=markup|Code des Moduls var.c}} aus der PHP Codebase sehr einfach rekonstruieren. Das an dieser Stelle verwendete Format beschränkt sich auf die primitiven Datentypen **ohne** Arrays. | Leider ist das PHP Serialisierungsformat nirgendwo formal beschrieben. Es lässt sich jedoch aus dem {{http://svn.php.net/viewvc/php/php-src/tags/php_5_3_8/ext/standard/var.c?view=markup|Code des Moduls var.c}} aus der PHP Codebase sehr einfach rekonstruieren. Das an dieser Stelle verwendete Format beschränkt sich auf die primitiven Datentypen **ohne** Arrays. |
<code> | <code> |
SerializedData = SerializedObject { SerializedObject } . | SerializedData = SerializedObject { SerializedObject } . |
SerializedObject = (Null | Bool | Long | Double | String) ";" . | SerializedObject = ( Null | Bool | Long | Double ) ";" . |
Null = "N" ":" . | |
| |
| Null = "N" ":" . |
Bool = "b" ":" ("0" (* = false *) | "1" (* = true *)) . | Bool = "b" ":" ("0" (* = false *) | "1" (* = true *)) . |
Long = "i" ":" [ '-' ] Number . | Long = "i" ":" [ '-' ] Number . |
Double = "d" ":" Long [ "." Number ] . | Double = "d" ":" ( DoubleNumber | ( "N" "a" "N" ) | (( "+" | "-" ) "I" "N" "F" ) ). |
String = "s" ":" Length ":" '"' AnyChar '"'. | |
Length = Number . | |
| |
| DoubleNumber = Long [ "." Number "E" ( "+" | "-" ) Number ] . |
Number = NonZeroDigit { Digit } . | Number = NonZeroDigit { Digit } . |
Digit = "0" | NonZeroDigit . | Digit = "0" | NonZeroDigit . |
^ boolean | false | b:0; | | ^ boolean | false | b:0; | |
^ long | 13 | i:13; | | ^ long | 13 | i:13; | |
^ double | 23.1 | d:23.10000000000000142108547152020037174224853515625 | | ^ double | 23.1 | d:FIXME; | |
^ string | myString | s:8:"myString"; | | ^ Alle verbunden ||N;b:0;i:13;d:FIXME; | |
^ Alle verbunden ||N;b:0;i:13;d:23.10000000000000142108547152020037174224853515625;s:8:"myString"; | | |
| |