M2M: UDP search

UDP SEARCH

Pomocí speciálního protokolu, kdy se data přenášejí prostřednictvím UDP, je možné získávat informace z výrobků řady SDS/OnlineTechnology.

PORT 20484

Komunikace probíhá formou DOTAZ - ODPOVĚĎ. To znamená, že ten, kdo má o informace zájem (vzdálený uživatel) pošle dotaz (korektně vyplněný UDP paket, viz dále) a obratem obdrží od zařízení odpověď, UDP paket s informacemi.

Tato funkcionalita se využívá primárně pro nalezení všech modulů SDS, které jsou na dané podsíti - často v situaci, kdy neznáme přesnou IP adresu daného modulu, a chceme takový modul přesto najít a přistupovat k němu.


Dotaz

Aplikace musí do SDS odeslat správně formulovaný dotaz.

Dotazem je UDP paket, který obsahuje následující datový payload (23 bajtů):

AN-D-SEARCH * SDS/1.0\n\r

POZOR - kde \n a \r jsou jednoznakové položky !

Protože hlavička je kratší než typická minimální délka UDP payloadu, je vhodné zbytek paketu (za hlavičkou) vyplnit 0x00, do potřebné délky.


Odpověď

Modul SDS odpoví, pokud obdrží správně formulovaný dotaz. Odpověď obsahuje řadu doplňujících informací, které lze vyhodnotit.

Odpovědí je UDP paket, který obsahuje následující datový payload (hlavička 23 bajtů + další datové položky):

AN-D-SREPLY * SDS/1.0\n\r

POZOR - kde \n a \r jsou jednoznakové položky !


Následující datová struktura (navazuje hned na hlavičku) - všechny hodnoty LITTLE ENDIAN:

 length B  |  contents
-----------+---------------------------------
 4         |   reserved (zero)
-----------+---------------------------------
 1         |   version (actual value: 0x01)
-----------+---------------------------------
 n*x       |   TYPE-LENGTH-VALUE (TLV) pairs

Hodnota "n" je pevně dána protokolem (= 6) a hodnota "x" se liší pro každý specifický TLV pár (viz dále).

Seznam TLV párů, tak jak jsou umístěny v datové struktuře (vždy o obsahu rozhoduje hodnota TYPE):

 TYPE | name                    |  LEN (bytes)
------+-------------------------+----------------
 0x01 | SDS board version       |  1
 0x02 | SDS MAC addr            |  6
 0x04 | SDS IP+NM+GW+WP+SUP     |  16
 0x08 | SDS sysLocation         |  33
 0x10 | SDS flags               |  8
 0x11 | OEM short string        |  33 

Každá TLV položka se skládá z následující struktury:

 LEN (B)  | item
----------+----------
  1       | length = x
  1       | TYPE
  x       | contents

Takže stačí postupně číst jednotlivé TLV struktury, sledovat jejich délku, a vše je k dispozici. Jednotlivé TLV struktury jsou na sobě těsně navázány (packed).


TLV 0x01

Obsahuje konstantu dle typu SDS. Seznam u výrobce.


TLV 0x02

Obsahuje MAC adresu (6 bytes).


TLV 0x04

Obsahuje následné složení položek:

 name                     |  LEN (bytes)
--------------------------+-----------------
 SDS IP addr (host)       |  4
 SDS network mask         |  4
 SDS gateway addr         |  4
 TCP port: web HTTP       |  2
 UDP port: UDP-S protocol |  2


TLV 0x08

Obsahuje text zakončený 0x00. Text se nastavuje ve webovém rozhraní SDS ("lokace").


TLV 0x10

Dvě slova (celkem 8 bajtů) informací o uživatelské konfiguraci SDS. Dékodování viz výrobce.


TLV 0x11

Obsahuje text zakončený 0x00. Text se nastavuje ve vašem FULL-C programu ("OEM string").