FULL-C: udp functions: Porovnání verzí
(Založena nová stránka s textem „ 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,…“) |
(Žádný rozdíl)
|
Aktuální verze z 27. 6. 2021, 10:07
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)