Library used to configure a AD9854 Libreria usada para comunicarse con el AD9854
Dependents: JRO_DDSv2 JRO_DDSv2_rev2019
Diff: EthUtils.cpp
- Revision:
- 5:6500be930b36
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EthUtils.cpp Mon Feb 23 20:36:23 2015 +0000 @@ -0,0 +1,159 @@ +#include "EthUtils.h" + +const char* IP = IP_INI; // IP +const char* MASK = MASK_INI; // MASK +const char* GATEWAY = GATEWAY_INI; // GATEWAY + +static int flash_addr = flash_size() - SECTOR_SIZE; //Write in last sector +static int flash_addr_ip = flash_addr + 16; +static int flash_addr_mask = flash_addr + 16 + 32; +static int flash_addr_gateway = flash_addr + 16 + 2*32; + +int numberOfDigits(int x){ + + int length = 1; + while ( x /= 10 ) + length++; + + return length; +} + +int isNumber(char *str){ + int number; + + number = atoi(str); + + if (!(strlen(str) == numberOfDigits(number))) + return 0; + + if (number<0) + return 0; + + if (number>255) + return 0; + + return 1; +} + +int splitstr(char *str, const char *delimiter, char parts[][MAX_IP_LEN]){ + + int nparts=0; + char *token; + + /* get the first token */ + token = strtok(str, delimiter); + + /* walk through other tokens */ + while( token != NULL ) + { + strcpy(parts[nparts],token); + nparts++; + if (nparts>4) break; + + token = strtok(NULL, delimiter); + } + + return nparts; +} + +int validateIp(char *_ip){ + + char delimiter[] = "."; + char ip_segment[5][MAX_IP_LEN]; + int nsegments; + char str[80]; + + strcpy(str, _ip); + + nsegments = splitstr(str, delimiter, ip_segment); + + if (nsegments != 4) + return 0; + + for (int i=0; i<4; i++){ + if (!isNumber(ip_segment[i])) + return 0; + } + + return 1; + +} + +int splitIpConf(char* str, char *_ip, char *_mask, char *_gateway){ + + char delimiter[] = "/"; + char parts[5][MAX_IP_LEN]; + int nparts; + + nparts = splitstr(str, delimiter, parts); + + if (nparts != 3) + return 0; + + for (int i=0; i<MAX_IP_LEN; i++){ + _ip[i] = 0x00; + _mask[i] = 0x00; + _gateway[i] = 0x00; + } + strcpy(_ip, parts[0]); + strcpy(_mask, parts[1]); + strcpy(_gateway, parts[2]); + + if (!validateIp(_ip)) + return 0; + + if (!validateIp(_mask)) + return 0; + + if (!validateIp(_gateway)) + return 0; + + return 1; +} + +int eraseIpConfig(){ + + int flash_addr = flash_size() - SECTOR_SIZE; //Write in last sector + + erase_sector(flash_addr); + + return 1; + +} + +int saveIpConfig(char *ip, char *mask, char *gateway){ + + erase_sector(flash_addr); + + int flag[1] = {FLASH_FULL}; + program_flash(flash_addr, (char*)&flag, 4); + + program_flash(flash_addr_ip, ip, MAX_IP_LEN); + program_flash(flash_addr_mask, mask, MAX_IP_LEN); + program_flash(flash_addr_gateway, gateway, MAX_IP_LEN); + + return 1; +} + +int readIpConfig(char *_ip, char *_mask, char *_gateway){ + + int *flag_flash = (int*)flash_addr; + char *ip_flash = (char*)(flash_addr_ip); + char *mask_flash = (char*)(flash_addr_mask); + char *gateway_flash = (char*)(flash_addr_gateway); + + if (flag_flash[0] == FLASH_FULL){ + for (int i=0; i< MAX_IP_LEN; i++){ + _ip[i] = ip_flash[i]; + _mask[i] = mask_flash[i]; + _gateway[i] = gateway_flash[i]; + } + } + else{ + strcpy(_ip, IP); + strcpy(_mask, MASK); + strcpy(_gateway, GATEWAY); + } + return 1; + +} \ No newline at end of file