intern:json_api

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
intern:json_api [2012/08/17 14:03] – Externe Bearbeitung 127.0.0.1intern:json_api [2025/06/11 20:35] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ~~DISCUSSION:off~~ ~~DISCUSSION:off~~
 +
 +
  
 ======= JSON-API ======= ======= JSON-API =======
 +
 +
 +
  
  
 ====== Übersicht über unterstützte Befehle: ====== ====== Übersicht über unterstützte Befehle: ======
 +
 +
  
   * GPIO-Befehle, evtl. mit leicht geänderten Symbolen (? durch anderes Symbol ersetzt)   * GPIO-Befehle, evtl. mit leicht geänderten Symbolen (? durch anderes Symbol ersetzt)
 +
 +
  
 ====== Designziele ====== ====== Designziele ======
 +
   * einfach zu parsen, v.a. sollte die Bedeutung gelesener Zeichen nicht von noch nicht gelesenen Zeichen abhängen   * einfach zu parsen, v.a. sollte die Bedeutung gelesener Zeichen nicht von noch nicht gelesenen Zeichen abhängen
 +
   * Kompatibilität zu alten GPIO-Befehlen   * Kompatibilität zu alten GPIO-Befehlen
 +
     * Buchstaben a bis m dürfen nicht am Anfang eines Befehls stehen, sonst Widerspruch zum einfachen Parsen     * Buchstaben a bis m dürfen nicht am Anfang eines Befehls stehen, sonst Widerspruch zum einfachen Parsen
 +
     * Problem bei Erhöhung der Anzahl der IO-Pins: entweder alte GPIO-Syntax wird inkonsistent (z.B. Verwendung von Zahlen statt Buchstaben für neue Pins) oder es wird kompliziert zu Parsen (z.B. wenn ein Befehl der JSON-API mit n beginnt wäre nicht sofort klar, ob damit der Befehl oder der PIN mit der Bezeichnung n gemeint ist) → Lösungsvorschlag: Buchstaben n, o und p reservieren für eventuelle Erweiterung und damit ein hexadezimale Kodierung neuer Pins ermöglichen (z.b. Pin 15 entspricht p, Pin 16 entspricht aa)      * Problem bei Erhöhung der Anzahl der IO-Pins: entweder alte GPIO-Syntax wird inkonsistent (z.B. Verwendung von Zahlen statt Buchstaben für neue Pins) oder es wird kompliziert zu Parsen (z.B. wenn ein Befehl der JSON-API mit n beginnt wäre nicht sofort klar, ob damit der Befehl oder der PIN mit der Bezeichnung n gemeint ist) → Lösungsvorschlag: Buchstaben n, o und p reservieren für eventuelle Erweiterung und damit ein hexadezimale Kodierung neuer Pins ermöglichen (z.b. Pin 15 entspricht p, Pin 16 entspricht aa) 
 +
 //Comment by svesch:// Ist ok, 16 Bit ([a-p] + [x] als Joker) werden im Alphabet reserviert. Bei zukünftigen Implementierungen kann die Belegung ggf. dynamisch geändert werden oder auf - wie in Deinem Vorschlag - Doppelkombinationen erweitert werden. //Comment by svesch:// Ist ok, 16 Bit ([a-p] + [x] als Joker) werden im Alphabet reserviert. Bei zukünftigen Implementierungen kann die Belegung ggf. dynamisch geändert werden oder auf - wie in Deinem Vorschlag - Doppelkombinationen erweitert werden.
 +
   * Kompatibilität zu Action-Script → kompatibel zu URL (Erlaubte Zeichen: [A-Z, a-z, 0-9, -, _, ., ~])   * Kompatibilität zu Action-Script → kompatibel zu URL (Erlaubte Zeichen: [A-Z, a-z, 0-9, -, _, ., ~])
 +
     * nicht case sensitive     * nicht case sensitive
 +
     * möglichst keine Sonderzeichen     * möglichst keine Sonderzeichen
 +
   * Text basiert, möglichst ASCII   * Text basiert, möglichst ASCII
 +
 +
  
 ====== Vorschläge ====== ====== Vorschläge ======
 +
   * Befehle dürfen nur mit q bis w, y oder z beginnen   * Befehle dürfen nur mit q bis w, y oder z beginnen
 +
   * hierarchischer Aufbau der Befehle: erster Buchstabe gibt Gruppe der Befehle an, weitere die Untergruppen bis schließlich ein Befehl ausgewählt wird (z.B. sb = 5000 heißt Baudrate des Serial Servers auf 5000 setzen; s → Befehl hinsichtlich des Serial Servers, b → Baudrate)   * hierarchischer Aufbau der Befehle: erster Buchstabe gibt Gruppe der Befehle an, weitere die Untergruppen bis schließlich ein Befehl ausgewählt wird (z.B. sb = 5000 heißt Baudrate des Serial Servers auf 5000 setzen; s → Befehl hinsichtlich des Serial Servers, b → Baudrate)
 +
 +
  
 ^ Partition (erster Buchstabe) ^ Untergruppe ^ ^ Partition (erster Buchstabe) ^ Untergruppe ^
Line 29: Line 53:
 | t | Event trigger Einstellungen | | t | Event trigger Einstellungen |
 | ... | ... | | ... | ... |
 +
 +
  
 Zwischenstand: Zwischenstand:
 +
  
 ^ Command Name ^ Type ^ Description ^ ^ Command Name ^ Type ^ Description ^
 | q  | submenu  | Access to Process  | | q  | submenu  | Access to Process  |
 +| qi  | submenu  | Flags and values of all process input registers  |
 +| qiv  | submenu  | Values of all process input registers  |
 +| qivX  | WORD  | Value of single process input register  |
 +| qif  | submenu  | Flags of all process input registers  |
 +| qifX  | BOOL  | Flag of single process input register  |
 | qs  | WORD  | indicates if the process is running; setting to 1 starts the process; setting to 0 stops the process; 2 indicates an error and is no valid value to be written  | | qs  | WORD  | indicates if the process is running; setting to 1 starts the process; setting to 0 stops the process; 2 indicates an error and is no valid value to be written  |
 +| qm  | ENUM:"../Firmware/process.h":ValidationResult_t  | state of the currently loaded process image  |
 +| qo  | submenu  | Flags and values of all process output registers  |
 +| qov  | submenu  | Values of all process output registers  |
 +| qovX  | WORD  | Value of single process output register  |
 +| qof  | submenu  | Flags of all process output registers  |
 +| qofX  | BOOL  | Flag of single process output register  |
 | y  | submenu  | pins; development only!  | | y  | submenu  | pins; development only!  |
 | yX  | submenu  | automatically generated knot number 0  | | yX  | submenu  | automatically generated knot number 0  |
Line 43: Line 81:
 | sub  | ENUM  | UART-Bitrate  | | sub  | ENUM  | UART-Bitrate  |
 | u  | submenu  | GPIO server  | | u  | submenu  | GPIO server  |
-| ue  | submenu  | Edge counter configuration of all GPIO ports (only ports 0 to 2 support edge counter)  |+| ue  | submenu  | Edge counter configuration of all GPIO ports (even so only port 0 to 2 support edge counter)  |
 | uev  | submenu  | Values of edge counters of every pin  | | uev  | submenu  | Values of edge counters of every pin  |
-| uevX  | WORD  | Value of single edge counter; only 0 may be assigned (i.e. counter reset) |+| uevX  | WORD  | Value of single edge counter  |
 | ut  | submenu  | Types of all GPIO ports  | | ut  | submenu  | Types of all GPIO ports  |
 | utX  | ENUM:"../Firmware/IO/gpio.h":PortType_t  | Type of single GPIO port  | | utX  | ENUM:"../Firmware/IO/gpio.h":PortType_t  | Type of single GPIO port  |
 | uv  | submenu  | Values of all GPIO ports  | | uv  | submenu  | Values of all GPIO ports  |
 | uvX  | WORD  | Value of single GPIO port  | | uvX  | WORD  | Value of single GPIO port  |
 +
 +
 +
  
 ====== Event trigger Einstellungen (Gruppe t) ====== ====== Event trigger Einstellungen (Gruppe t) ======
 +
 +
  
 Für die aktuelle Session werden die Event trigger eingestellt. Für die aktuelle Session werden die Event trigger eingestellt.
 +
 Diese Kommandogruppe hat für JSON-Zugriff keine Bedeutung, da diese Kommunikation nur durch den Client initiiert werden kann. Diese Kommandogruppe hat für JSON-Zugriff keine Bedeutung, da diese Kommunikation nur durch den Client initiiert werden kann.
 +
 +
  
 Die Kommandos aktivieren oder deaktivieren Events (d.h. Flanken). Die Kommandos aktivieren oder deaktivieren Events (d.h. Flanken).
 +
 Für digitale Eingänge wird 't' mit einer der IO-Kürzel zusammengesetzt. Für digitale Eingänge wird 't' mit einer der IO-Kürzel zusammengesetzt.
 +
 Ggf. kann das Prinzip auf digitale Ausgänge erweitert werden, wenn lokale Änderungen mitgeschnitten werden sollen. Ggf. kann das Prinzip auf digitale Ausgänge erweitert werden, wenn lokale Änderungen mitgeschnitten werden sollen.
 +
 Dem kann einer der folgenden Werte zugewiesen werden: Dem kann einer der folgenden Werte zugewiesen werden:
 +
 +
  
 ^ Wert ^ Bedeutung ^ ^ Wert ^ Bedeutung ^
Line 66: Line 117:
 | 2 | Fallende Flanken | | 2 | Fallende Flanken |
 | 3 | Alle Flanken | | 3 | Alle Flanken |
 +
  
 Events generieren Zustandstelegramme der Form 'a=1'. Events generieren Zustandstelegramme der Form 'a=1'.
 +
 Für analoge Eingänge oder PWM-Ausgänge hat diese Einstellung keinen Effekt. Für analoge Eingänge oder PWM-Ausgänge hat diese Einstellung keinen Effekt.
 +
 +
  
 Trigger für den Prozesspeicher können mittels tq=value erfolgen. Trigger für den Prozesspeicher können mittels tq=value erfolgen.
 +
 value ist eine der 16 Adressen, die aboniert werden sollen. value ist eine der 16 Adressen, die aboniert werden sollen.
 +
 +
  
    
 +