FULL-C functions

Z onlinetechnology.cz

Přejít na: navigace, hledání
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.

Obsah

Rozdělení

FULL-C programovací jazyk je plnohodnotným ANSI-C programovacím jazykem. Podporuje vybrané funkce knihovny STDLIB-C a přidává sadu funkcí, které jsou specifické pro zařízení SDS.


Standardní funkce

FULL-C podporuje omezený seznam standardních funkcí. Tak jak je postupně FULL-C rozšiřován, jsou přidávány i další standardní fukce do seznamu podporovaných funkcí.

Všechny standardní funkce v následujícím seznamu mají své chování ve FULL-C implementováno tak jak se očekává podle libc.

          int isalnum(int c);
          int isalpha(int c);
          int isblank(int c);
          int iscntrl(int c);
          int isdigit(int c);
          int isgraph(int c);
          int islower(int c);
          int isprint(int c);
          int ispunct(int c);
          int isspace(int c);
          int isupper(int c);
          int isxdigit(int c);
          int tolower(int c);
          int toupper(int c);
          int isascii(int c);
          int toascii(int c);
 
        float atof (char *str);
          int atoi(char *str);
          int atol(char *str); 
          int strtol(char *str, char **endptr, int base);
 unsigned int strtoul(char *str, char **endptr, int base);
          int abs(int n);
          int labs(int n);
 
          int rand(void);
 
        void *malloc (int size);
        void *calloc (int num, int size);
        void *realloc(void *ptr,int size);
         void free(void *ptr);
        void *memset(void *ptr, int value, int num);
        void *memcpy(void *destination, void * source, int num);
          int memcmp(void *ptr1, void *ptr2, int num);
 
        char *strcpy(char *destination, char *source);
        char *strncpy(char *destination, char *source, int num);
          int strcmp(char *str1, char *str2);
          int strncmp(char *str1, char *str2, int num);
        char *strcat(char *destination, char *source);
        char *strncat(char *destination, char *source, int num);
          int strlen(char *str);
        char *strchr(char *str, int character);
        char *strstr(char *str1, char *str2);
 
          int sprintf(char *str, char *format, ...);
          int snprintf(char *str, int n, char *format, ...);
          int sscanf(char *s, char *format, ...);

Poznámka: všechny tyto funkce jsou plně dostupné ve firmware od října 2015 (poslední doplněná chybějící funkce byla sscanf).

Upozornění

Pozor:
všechny funkce, které pracují s ukazately, jsou vnitřně (při provádění FC kódu v SDS) hlídány na "povolený rozsah" do které lze zapisovat (popř. ze kterého lze číst). Tato vnitřní ochrana v SDS má za úkol zabránit poškození programu nebo jeho pádu, pokud programátor udělá chybu (např. snaží se do malého bufferu zapsat více, než by se do něj mohlo vlézt, což by např. způsobilo nechtěné přepsání nesouvisejících proměnných uložených v paměti právě za tímto bufferem). Nespoléhejte se však při tvorbě programu na tuto ochranu, ta je zde především proto aby zabránila pádu SDS a jeho činnosti (vykonávání vašeho FC programu).

Pozor:
Funkce snprintf() do svého limitu započítává i traling zero (0x00) znak, na konci stringu. Viz oficiální standard C99. Počítejte s tím při návrhu svého programu !

Pozor:
FULL-C implementace sprintf() kontroluje cílový buffer, zda-li se do něj výsledek vleze. Pokud je velikost cílového bufferu menší, je limit i takto nastaven, a je vždy zmenšen ještě tak aby se do něj vlezla ukončovací nula (trailing zero) stringu.

SDS - vlastní funkce

Zde je seznam funkcí pro interakci se zařízením SDS.


Funkce pro zápis do konzole (tu lze zobrazit jako webovou stránku "echo.html"), úplné detaily jsou zde.

          int putchar(int character);
          int puts(char *str);
          int printf(char *format, ...);
         void echoclear(void);


Zatímco SDS-C využívá pro ovládání SDS zápis do a čtení z pole sys[index] - ve FULL-C je to realizováno pomocí následujících set a get funkcí:

         void SDS_set_i32(unsigned int index, signed int value);
   signed int SDS_get_i32(unsigned int index);
 
         void SDS_set_i64(unsigned int index, int64_t value);
   signed int SDS_get_i64(unsigned int index);
 
         void SDS_set_u32(unsigned int index, unsigned int value);
 unsigned int SDS_get_u32(unsigned int index);
 
         void SDS_set_u64(unsigned int index, uint64_t value);
 unsigned int SDS_get_u64(unsigned int index);
 
         void SDS_set_f32(unsigned int index, float value);
        float SDS_get_f32(unsigned int index);
 
         void SDS_set_a(unsigned int index, void *ptr, unsigned int len);
         void SDS_get_a(unsigned int index, void *ptr, unsigned int maxlen);


Dále jsou k dispozici tyto funkce pro práci s pamětí DataFlash :

 unsigned int DF_read_page(unsigned int pageindex, void *pagedata);
 unsigned int DF_write_page(unsigned int pageindex, void *pagedata);
 unsigned int DF_erase_page(unsigned int pageindex);


Funkce pro obsluhu sériových rozhraní :

         void SDS_serial_config(unsigned int busID, unsigned int BaudRateCfg, unsigned int DataSizeCfg, unsigned int StopBitsCfg, unsigned int ParityCfg);
         void SDS_serial_writeCH(unsigned int busID, unsigned char writeChar);
         void SDS_serial_write(unsigned int busID, char *ptr, unsigned int len);
 unsigned int SDS_serial_read(unsigned int busID, char *ptr, unsigned int maxlen);


Funkce pro řízení displaye a klávesnice v SDS-BIG zařízení :

         void SDS_TOPB_keyboard_status(unsigned int *changed, unsigned int *actual, unsigned int *intermediatePresses[6]);
 
         void SDS_TOPB_LCDdraw(unsigned int X0, unsigned int Y0, unsigned int X1, unsigned int Y1, unsigned int DrawTYPE, unsigned int FLAGS);
         void SDS_TOPB_LCDtext(unsigned int X0, unsigned int Y0, unsigned int FLAGS, char *ptr, unsigned int len);
         void SDS_TOPB_LCDbitmap(unsigned int X0, unsigned int ROW, unsigned int FLAGS, char *ptr, unsigned int len);
         void SDS_TOPB_LCDflip(unsigned int FLAGS);


Funkce pro úplné řízení sběrnice DALI (DALI-MASTER přes doplněk SDS-BIG) :

 unsigned int SDS_TOPB_DALI_transmitCommand(unsigned int DALIaddress, unsigned int DALIdata);
 unsigned int SDS_TOPB_DALI_getReceivedResponse(unsigned int *ReceivedResponse);


Funkce pro řízení PWM výstupu :

         void SDS_PWM_disableOutput(void);
         void SDS_PWM_setDutyAsPercents(unsigned int generatorFrequency, unsigned int Percents);
         void SDS_PWM_setDutyAsUSECS(unsigned int USECS);


Ostatní nezařazené funkce jsou popsány zde :

         void SDS_heap_stats(unsigned int *currentAllocatedBytes, unsigned int *totalFreeBytes, unsigned int *biggestFreeBlockAvailable);
 
         void SDS_disable_onewire(void);

Poznámka - pokud nepoužíváte na zařízení sběrnici 1-W, pak je doporučeno vypnout využítí této sběrnice pomocí SDS_disable_onewire(), viz detaily pro tuto funkci.


Funkce pro symetrickou kryptografii a práci s daty jsou popsány zde :

 unsigned int SDS_crypto(unsigned int Algorithm, unsigned int *CounterBlock, void *PayloadData, unsigned int PayloadDataSize);
 
 unsigned int SDS_ToBase64(void * inputBuf, void * outputBuf, unsigned int inputLen, unsigned int FLAGS);
 unsigned int SDS_FromBase64(void * inputBuf, void * outputBuf, unsigned int inputLen, unsigned int FLAGS);


Dále jsou k dispozici tyto funkce pro práci se sítí:


Funkce pro odeslání HTTP GET dotazu na webový server:

         void http_get(unsigned int IP0, unsigned int IP1, unsigned int IP2, unsigned int IP3, unsigned int Port, char *HostName, char *GETtext, void *ReceiveDataBuffer, unsigned int MaximalReceiveDataLength);
 unsigned int http_get_status(unsigned int *httpResponseValue, unsigned int *receivedDataSize);

Funkce pro odeslání emailu:

         void smtp_send(char *TargetEmailAddress, char *EmailSubject, char *TextContent);
 unsigned int smtp_send_status(void);

Funkce pro odeslání libovolného UDP paketu:

         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);

Funkce pro dotaz na přidělenou IP adresu pro DNS jméno:

         void dns_resolv(char *domainNameInput);
 unsigned int dns_resolv_status(unsigned int *IP0value, unsigned int *IP1value, unsigned int *IP2value, unsigned int *IP3value);

Funkce pro odesílání SNMP TRAP zpráv:

         void snmp_send_trap(unsigned int IP0, unsigned int IP1, unsigned int IP2, unsigned int IP3, unsigned int PDUspecificType, unsigned int tableIndex);
 unsigned int snmp_send_trap_status(void);

Funkce pro odesílání ICMP PING paketů:

         void ping_send(unsigned int IP0, unsigned int IP1, unsigned int IP2, unsigned int IP3, unsigned int sendPingSequenceValue);
 unsigned int ping_send_status(unsigned int *pingReceivedSequence, unsigned int *pingReceivedRTTmsec);


Zvyklosti při používání parametrů

Všechny číselné parametry jsou funkcím předávány jako 32bitové čísla (int nebo unsigned int).

Všechny textové parametry jsou předávány jako char * - dbejte na případné správné přetypování, když chcete funkci předat parametr s jiným výchozím typem.

Všechny datové parametry (datové pole - payload), ať už obsahují obecné binární data nebo čistý text, jsou předávány jako void * - a je na vás provádět správná přetypování aby vše fungovalo.


Parametr IP-adresa

Všechny funkce kterým se předává IP adresa (nebo ty, které hodnotu typu IP-adresa vracejí), pracují se čtyřmi nezávislými čisly (čtyři nezávislé proměnné), které dohromady tvoří jednu IP adresu.

Příklad: úplná_IP = IP0.IP1.IP2.IP3

IP adresa je tedy "složena" ze čtyř proměnných IP0 až IP3, které teprve dohromaty tvoří jednu celou IP adresu. Nejedná se tedy o čtyři různé adresy, jedná se o jedinou rozpadnutou na čtyři díly.


Informace

Zde uvedené funkce jsou podporovány ve všech verzích FULL-C od října 2015. Všechny nově přidané funkce vyžadují aktualizaci zařízení SDS a EXE programu.

Osobní nástroje
Translate