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)