MK Kommunikations-Protokoll für IP-Verbindungen

Für die Kommunikation der neuen QMK-Tools mit dem Datenserver habe ich angefangen, ein Kommunikationsprotokoll zu entwerfen. Ich stelle das hier mal rein zum gemeinsamen Entwickeln. Denn es währe ja schön, wenn hier alle das gleiche sprechen würden, um untereinander zu kommunizieren

Die reinen Daten vom Kopter werden 1:1 so wie sie vom Kopter kommen auch hier über IP übertragen. Hier findet keine spezielle Bearbeitung der Daten statt.

Alles was zusätzlich an Daten übertragen wird, wird mit diesem Protokoll übertragen. Es dient Hauptsächlich zur Authentifizierung zwischen Client und Server und der gleichen.

Hier mal der grundsätzliche Aufbau:

$:ID:CMD:DATA:CRC\r 

Zur Erklärung der einzelnen Felder:

  • ID ist eine eindeutige ID die ich hier für jede Application vergebe. Muss nicht unbedingt benutzt werden. Dann einfach 0 setzen.
  • CMD ist der "Befehl". Er ist eine 3 Stellige Zahl.Ich benutze hier die Zahlen von 100 - 899. Wobei hier 100 - 499 Anfragen oder dergleichen sind und 500 - 899 Antworten auf Frames darstellen.
  • DATA sind die eigentlichen Nutzdaten die zu übertragen sind.
  • CRC ist eine Prüfsumme über das ganze Frame. Wird z.Z. noch nicht benutzt und ist daher 0.

Ein Beispiel wie so ein Frame aussehen kann:

$:10:101:QMK-Maps v1.1.2 (beta):0\r 

So melden die Clients ihren Namen und ihre Version als Text an den Server.

Bisherige Befehle / Daten (Genauere Beschreibung der einzelnen Befehle siehe weiter unten. (kommt noch)):

Befehl -  Daten
======================================
101    x  Software-Name und Version
502    <  Befehl-ID
          Der Server fordert einen Befehl vom Client an.
103    -  Reserviert
503    -  Reserviert
104 *  >  Username;MD5-Hash(Passwort)
          Authentifizierung mit Benutzerkennung und Passwort.
504 *  <  "NO" oder "OK" für die Authentifizierung
105    >  MD5-Hash(Passwort)
          Authentifizierung nur mit Passwort  ohne Benutzername
505    <  "NO" oder "OK"  für die Authentifizierung
106    >  Datensätze welche  gebraucht werden.
506    <  Datensätze die gesendet  werden.
120 *  >  NULL
          Verbindung  zum Kopter aufbauen.
490    >  "BYE"
          Verbindung sauber  beenden.
890    <  "OK"
520    <  Device  über das verbunden ist.
          Erfolgreich verbunden
521    <  Grund
          Verbindung nicht erfolgreich
522    <  Grund
          Verbindung getrennt.
* Bei QMK-Communicator nicht notwendig.

Genauere Beschreibung der Befehle:

!!! TODO: Restliche Befehle beschreiben.

Befehl 101:

Beispiel:

$:11:101:QMK-Scope  v1.1.4 (Beta):0\r 

Der Client gibt hier dem Server Informationen über seine Version. Dies sollte der Client immer als erstest an den Server senden. Erst dann Gibt der Server die weitere Kommunikation über dieses Protokoll frei.

Ohne diesen Befehl arbeitet der Server im Plain-Mode, wo er nur die Daten des Kopters 1:1 durchleitet. (Für Clients, die dieses Protokoll nicht beherschen und nur Daten empfangen wollen.)

Befehl 502:

Beispiel:

$:10:502:105:0\r 

Der Server fordert hier in diesem Beispiel den Befehl 105 vom Client an.

Mögliche Befehle die Angefordert werden können:

104, 105, 106

Befehl 106 / 506:

Beispiel:

$:11:106:AVD:0\r 

Der Client benötigt nur die Datensätze mit der Protokoll-ID A (Analoglabel), V (Versionsinfo) und D (Debugdaten). Der Server bestätigt diese daraufhin, dass er nur selbige sendet mit

$:1:506:AVD:0\r 

Hier sind als Nutzdaten einfach nur die jeweiligen Buchstaben der Protokoll-ID der FC/NC anzugeben, die benötigt werden. Der Server sendet in diesem Fall dann nur diese Datensätze an den Client.

Wird der Befehl nicht angegeben, werden per Default alle Datensätze gesendet.