FULL-C: udp functions
Tato stránka popisuje programovací jazyk FULL-C, který je dostupný na vybraných zařízeních SDS. Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.
Síťové funkce: odeslání UDP paketu
Zařízení SDS umožňuje odeslat UDP paket, vytvořený z parametrů předaných FULL-C programem.
Za tímto účelem jsou k dispozici tyto dvě funkce:
void udp_send(unsigned int IP0, unsigned int IP1, unsigned int IP2, unsigned int IP3, unsigned int Port, void * PayloadData, unsigned int PayloadLength); unsigned int udp_send_status(void);
Princip
SDS po zavolání funkce udp_send() vytvoří jeden úplný UDP paket, a ten odešla na zadanou IP adresu.
Pro kontrolu průběhu a úspěchu či chyby, je k dispozici funkce udp_send_status().
Příklad
V tomto příkladu odesílá SDS jeden UDP paket, na cílový stroj s adresou 192.168.1.110 na UDP port 1234.
void main(void) { unsigned int status; unsigned int payloadLength; unsigned char * payload; printf("START \n"); // nejprve si vytvorime obsah paketu // - toto je priklad, vyuzijeme zde kousek heap pameti, lze to i jinak // bude to rekneme 64 bajtu payloadLength = 64; // ziskame docasnou pamet pro uchovani obsahu payload = (unsigned char *)malloc(payloadLength); // a pokud jsme obdrzeli pamet... if (payload != 0) { // nejak vyplnime payload . . . sprintf((char *)payload, "Hello World"); // go printf("sending UDP packet...\n"); udp_send(192,168,1,110, 1234, (void *)payload, payloadLength); // docasnou pamet uz nepotrebujeme free(payload); payload = 0; // pockame na dokonceni odesilani UDP paketu status = udp_send_status(); while (status == 1) { status = udp_send_status(); } // zpracujeme vysledek if (status == 2) { // uspech printf("DONE OK \n"); } else { // UDP paket nebyl odeslan, chyba printf("ERROR: %u \n", status); } } else { // malloc() se nepovedl... printf(" out of memory \n"); } }
Stavové hodnoty
Program musí použít volání funkce udp_send_status() pro zjištění okamžitého stavu.
udp_send_status() význam -------------------------+----------------------------------------------------------------------- 0 | klid, žádná akce nebyla zahájena 1 | právě probíhá odesílání, čekejte 2 | úspěch, UDP paket byl odeslán na cílový stroj 3 | místo UDP paketu byl odeslán ARP paket (protože SDS zatím neví MAC adresu cílového stroje) (zopakujte odesílání UDP později) (UDP paket nebyl teď odeslán) 4 | nebylo dokončeno předchozí odesílání (nový požadavek přišel dříve, než se dokončil předchozí) (nový požadavek na odeslání UDP není proveden) 5 | funkce byla zavolána s neplatnými parametry (UDP paket nebyl odeslán) 6 | není k dispozici dostatek paměti (UDP paket nebyl odeslán)