Library used to configure a AD9854 Libreria usada para comunicarse con el AD9854
Dependents: JRO_DDSv2 JRO_DDSv2_rev2019
EthUtils.cpp@7:45e91ce14a28, 2019-09-05 (annotated)
- Committer:
- miguelcordero191
- Date:
- Thu Sep 05 00:51:11 2019 +0000
- Revision:
- 7:45e91ce14a28
- Parent:
- 5:6500be930b36
up2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
miguelcordero191 | 5:6500be930b36 | 1 | #include "EthUtils.h" |
miguelcordero191 | 5:6500be930b36 | 2 | |
miguelcordero191 | 5:6500be930b36 | 3 | const char* IP = IP_INI; // IP |
miguelcordero191 | 5:6500be930b36 | 4 | const char* MASK = MASK_INI; // MASK |
miguelcordero191 | 5:6500be930b36 | 5 | const char* GATEWAY = GATEWAY_INI; // GATEWAY |
miguelcordero191 | 5:6500be930b36 | 6 | |
miguelcordero191 | 5:6500be930b36 | 7 | static int flash_addr = flash_size() - SECTOR_SIZE; //Write in last sector |
miguelcordero191 | 5:6500be930b36 | 8 | static int flash_addr_ip = flash_addr + 16; |
miguelcordero191 | 5:6500be930b36 | 9 | static int flash_addr_mask = flash_addr + 16 + 32; |
miguelcordero191 | 5:6500be930b36 | 10 | static int flash_addr_gateway = flash_addr + 16 + 2*32; |
miguelcordero191 | 5:6500be930b36 | 11 | |
miguelcordero191 | 5:6500be930b36 | 12 | int numberOfDigits(int x){ |
miguelcordero191 | 5:6500be930b36 | 13 | |
miguelcordero191 | 5:6500be930b36 | 14 | int length = 1; |
miguelcordero191 | 5:6500be930b36 | 15 | while ( x /= 10 ) |
miguelcordero191 | 5:6500be930b36 | 16 | length++; |
miguelcordero191 | 5:6500be930b36 | 17 | |
miguelcordero191 | 5:6500be930b36 | 18 | return length; |
miguelcordero191 | 5:6500be930b36 | 19 | } |
miguelcordero191 | 5:6500be930b36 | 20 | |
miguelcordero191 | 5:6500be930b36 | 21 | int isNumber(char *str){ |
miguelcordero191 | 5:6500be930b36 | 22 | int number; |
miguelcordero191 | 5:6500be930b36 | 23 | |
miguelcordero191 | 5:6500be930b36 | 24 | number = atoi(str); |
miguelcordero191 | 5:6500be930b36 | 25 | |
miguelcordero191 | 5:6500be930b36 | 26 | if (!(strlen(str) == numberOfDigits(number))) |
miguelcordero191 | 5:6500be930b36 | 27 | return 0; |
miguelcordero191 | 5:6500be930b36 | 28 | |
miguelcordero191 | 5:6500be930b36 | 29 | if (number<0) |
miguelcordero191 | 5:6500be930b36 | 30 | return 0; |
miguelcordero191 | 5:6500be930b36 | 31 | |
miguelcordero191 | 5:6500be930b36 | 32 | if (number>255) |
miguelcordero191 | 5:6500be930b36 | 33 | return 0; |
miguelcordero191 | 5:6500be930b36 | 34 | |
miguelcordero191 | 5:6500be930b36 | 35 | return 1; |
miguelcordero191 | 5:6500be930b36 | 36 | } |
miguelcordero191 | 5:6500be930b36 | 37 | |
miguelcordero191 | 5:6500be930b36 | 38 | int splitstr(char *str, const char *delimiter, char parts[][MAX_IP_LEN]){ |
miguelcordero191 | 5:6500be930b36 | 39 | |
miguelcordero191 | 5:6500be930b36 | 40 | int nparts=0; |
miguelcordero191 | 5:6500be930b36 | 41 | char *token; |
miguelcordero191 | 5:6500be930b36 | 42 | |
miguelcordero191 | 5:6500be930b36 | 43 | /* get the first token */ |
miguelcordero191 | 5:6500be930b36 | 44 | token = strtok(str, delimiter); |
miguelcordero191 | 5:6500be930b36 | 45 | |
miguelcordero191 | 5:6500be930b36 | 46 | /* walk through other tokens */ |
miguelcordero191 | 5:6500be930b36 | 47 | while( token != NULL ) |
miguelcordero191 | 5:6500be930b36 | 48 | { |
miguelcordero191 | 5:6500be930b36 | 49 | strcpy(parts[nparts],token); |
miguelcordero191 | 5:6500be930b36 | 50 | nparts++; |
miguelcordero191 | 5:6500be930b36 | 51 | if (nparts>4) break; |
miguelcordero191 | 5:6500be930b36 | 52 | |
miguelcordero191 | 5:6500be930b36 | 53 | token = strtok(NULL, delimiter); |
miguelcordero191 | 5:6500be930b36 | 54 | } |
miguelcordero191 | 5:6500be930b36 | 55 | |
miguelcordero191 | 5:6500be930b36 | 56 | return nparts; |
miguelcordero191 | 5:6500be930b36 | 57 | } |
miguelcordero191 | 5:6500be930b36 | 58 | |
miguelcordero191 | 5:6500be930b36 | 59 | int validateIp(char *_ip){ |
miguelcordero191 | 5:6500be930b36 | 60 | |
miguelcordero191 | 5:6500be930b36 | 61 | char delimiter[] = "."; |
miguelcordero191 | 5:6500be930b36 | 62 | char ip_segment[5][MAX_IP_LEN]; |
miguelcordero191 | 5:6500be930b36 | 63 | int nsegments; |
miguelcordero191 | 5:6500be930b36 | 64 | char str[80]; |
miguelcordero191 | 5:6500be930b36 | 65 | |
miguelcordero191 | 5:6500be930b36 | 66 | strcpy(str, _ip); |
miguelcordero191 | 5:6500be930b36 | 67 | |
miguelcordero191 | 5:6500be930b36 | 68 | nsegments = splitstr(str, delimiter, ip_segment); |
miguelcordero191 | 5:6500be930b36 | 69 | |
miguelcordero191 | 5:6500be930b36 | 70 | if (nsegments != 4) |
miguelcordero191 | 5:6500be930b36 | 71 | return 0; |
miguelcordero191 | 5:6500be930b36 | 72 | |
miguelcordero191 | 5:6500be930b36 | 73 | for (int i=0; i<4; i++){ |
miguelcordero191 | 5:6500be930b36 | 74 | if (!isNumber(ip_segment[i])) |
miguelcordero191 | 5:6500be930b36 | 75 | return 0; |
miguelcordero191 | 5:6500be930b36 | 76 | } |
miguelcordero191 | 5:6500be930b36 | 77 | |
miguelcordero191 | 5:6500be930b36 | 78 | return 1; |
miguelcordero191 | 5:6500be930b36 | 79 | |
miguelcordero191 | 5:6500be930b36 | 80 | } |
miguelcordero191 | 5:6500be930b36 | 81 | |
miguelcordero191 | 5:6500be930b36 | 82 | int splitIpConf(char* str, char *_ip, char *_mask, char *_gateway){ |
miguelcordero191 | 5:6500be930b36 | 83 | |
miguelcordero191 | 5:6500be930b36 | 84 | char delimiter[] = "/"; |
miguelcordero191 | 5:6500be930b36 | 85 | char parts[5][MAX_IP_LEN]; |
miguelcordero191 | 5:6500be930b36 | 86 | int nparts; |
miguelcordero191 | 5:6500be930b36 | 87 | |
miguelcordero191 | 5:6500be930b36 | 88 | nparts = splitstr(str, delimiter, parts); |
miguelcordero191 | 5:6500be930b36 | 89 | |
miguelcordero191 | 5:6500be930b36 | 90 | if (nparts != 3) |
miguelcordero191 | 5:6500be930b36 | 91 | return 0; |
miguelcordero191 | 5:6500be930b36 | 92 | |
miguelcordero191 | 5:6500be930b36 | 93 | for (int i=0; i<MAX_IP_LEN; i++){ |
miguelcordero191 | 5:6500be930b36 | 94 | _ip[i] = 0x00; |
miguelcordero191 | 5:6500be930b36 | 95 | _mask[i] = 0x00; |
miguelcordero191 | 5:6500be930b36 | 96 | _gateway[i] = 0x00; |
miguelcordero191 | 5:6500be930b36 | 97 | } |
miguelcordero191 | 5:6500be930b36 | 98 | strcpy(_ip, parts[0]); |
miguelcordero191 | 5:6500be930b36 | 99 | strcpy(_mask, parts[1]); |
miguelcordero191 | 5:6500be930b36 | 100 | strcpy(_gateway, parts[2]); |
miguelcordero191 | 5:6500be930b36 | 101 | |
miguelcordero191 | 5:6500be930b36 | 102 | if (!validateIp(_ip)) |
miguelcordero191 | 5:6500be930b36 | 103 | return 0; |
miguelcordero191 | 5:6500be930b36 | 104 | |
miguelcordero191 | 5:6500be930b36 | 105 | if (!validateIp(_mask)) |
miguelcordero191 | 5:6500be930b36 | 106 | return 0; |
miguelcordero191 | 5:6500be930b36 | 107 | |
miguelcordero191 | 5:6500be930b36 | 108 | if (!validateIp(_gateway)) |
miguelcordero191 | 5:6500be930b36 | 109 | return 0; |
miguelcordero191 | 5:6500be930b36 | 110 | |
miguelcordero191 | 5:6500be930b36 | 111 | return 1; |
miguelcordero191 | 5:6500be930b36 | 112 | } |
miguelcordero191 | 5:6500be930b36 | 113 | |
miguelcordero191 | 5:6500be930b36 | 114 | int eraseIpConfig(){ |
miguelcordero191 | 5:6500be930b36 | 115 | |
miguelcordero191 | 5:6500be930b36 | 116 | int flash_addr = flash_size() - SECTOR_SIZE; //Write in last sector |
miguelcordero191 | 5:6500be930b36 | 117 | |
miguelcordero191 | 5:6500be930b36 | 118 | erase_sector(flash_addr); |
miguelcordero191 | 5:6500be930b36 | 119 | |
miguelcordero191 | 5:6500be930b36 | 120 | return 1; |
miguelcordero191 | 5:6500be930b36 | 121 | |
miguelcordero191 | 5:6500be930b36 | 122 | } |
miguelcordero191 | 5:6500be930b36 | 123 | |
miguelcordero191 | 5:6500be930b36 | 124 | int saveIpConfig(char *ip, char *mask, char *gateway){ |
miguelcordero191 | 5:6500be930b36 | 125 | |
miguelcordero191 | 5:6500be930b36 | 126 | erase_sector(flash_addr); |
miguelcordero191 | 5:6500be930b36 | 127 | |
miguelcordero191 | 5:6500be930b36 | 128 | int flag[1] = {FLASH_FULL}; |
miguelcordero191 | 5:6500be930b36 | 129 | program_flash(flash_addr, (char*)&flag, 4); |
miguelcordero191 | 5:6500be930b36 | 130 | |
miguelcordero191 | 5:6500be930b36 | 131 | program_flash(flash_addr_ip, ip, MAX_IP_LEN); |
miguelcordero191 | 5:6500be930b36 | 132 | program_flash(flash_addr_mask, mask, MAX_IP_LEN); |
miguelcordero191 | 5:6500be930b36 | 133 | program_flash(flash_addr_gateway, gateway, MAX_IP_LEN); |
miguelcordero191 | 5:6500be930b36 | 134 | |
miguelcordero191 | 5:6500be930b36 | 135 | return 1; |
miguelcordero191 | 5:6500be930b36 | 136 | } |
miguelcordero191 | 5:6500be930b36 | 137 | |
miguelcordero191 | 5:6500be930b36 | 138 | int readIpConfig(char *_ip, char *_mask, char *_gateway){ |
miguelcordero191 | 5:6500be930b36 | 139 | |
miguelcordero191 | 5:6500be930b36 | 140 | int *flag_flash = (int*)flash_addr; |
miguelcordero191 | 5:6500be930b36 | 141 | char *ip_flash = (char*)(flash_addr_ip); |
miguelcordero191 | 5:6500be930b36 | 142 | char *mask_flash = (char*)(flash_addr_mask); |
miguelcordero191 | 5:6500be930b36 | 143 | char *gateway_flash = (char*)(flash_addr_gateway); |
miguelcordero191 | 5:6500be930b36 | 144 | |
miguelcordero191 | 5:6500be930b36 | 145 | if (flag_flash[0] == FLASH_FULL){ |
miguelcordero191 | 5:6500be930b36 | 146 | for (int i=0; i< MAX_IP_LEN; i++){ |
miguelcordero191 | 5:6500be930b36 | 147 | _ip[i] = ip_flash[i]; |
miguelcordero191 | 5:6500be930b36 | 148 | _mask[i] = mask_flash[i]; |
miguelcordero191 | 5:6500be930b36 | 149 | _gateway[i] = gateway_flash[i]; |
miguelcordero191 | 5:6500be930b36 | 150 | } |
miguelcordero191 | 5:6500be930b36 | 151 | } |
miguelcordero191 | 5:6500be930b36 | 152 | else{ |
miguelcordero191 | 5:6500be930b36 | 153 | strcpy(_ip, IP); |
miguelcordero191 | 5:6500be930b36 | 154 | strcpy(_mask, MASK); |
miguelcordero191 | 5:6500be930b36 | 155 | strcpy(_gateway, GATEWAY); |
miguelcordero191 | 5:6500be930b36 | 156 | } |
miguelcordero191 | 5:6500be930b36 | 157 | return 1; |
miguelcordero191 | 5:6500be930b36 | 158 | |
miguelcordero191 | 5:6500be930b36 | 159 | } |