Library used to configure a AD9854 Libreria usada para comunicarse con el AD9854

Dependents:   JRO_DDSv2 JRO_DDSv2_rev2019

Committer:
miguelcordero191
Date:
Thu Sep 05 00:51:11 2019 +0000
Revision:
7:45e91ce14a28
Parent:
5:6500be930b36
up2

Who changed what in which revision?

UserRevisionLine numberNew 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 }