http://http://diytec.web.fc2.com/mark2r2/
Dependencies: EthernetNetIf NTPClient_NetServices mbed ConfigFile
config_env.c@0:08a4d61cd84c, 2011-09-20 (annotated)
- Committer:
- mark2r2
- Date:
- Tue Sep 20 12:46:26 2011 +0000
- Revision:
- 0:08a4d61cd84c
V1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mark2r2 | 0:08a4d61cd84c | 1 | /************************************************************* |
mark2r2 | 0:08a4d61cd84c | 2 | |
mark2r2 | 0:08a4d61cd84c | 3 | config_env.c |
mark2r2 | 0:08a4d61cd84c | 4 | |
mark2r2 | 0:08a4d61cd84c | 5 | *************************************************************/ |
mark2r2 | 0:08a4d61cd84c | 6 | #include "mbed.h" |
mark2r2 | 0:08a4d61cd84c | 7 | #include "TextLCD.h" |
mark2r2 | 0:08a4d61cd84c | 8 | #define CHUNK 1 |
mark2r2 | 0:08a4d61cd84c | 9 | #define AVERAGE_MIN 10*60/CHUNK |
mark2r2 | 0:08a4d61cd84c | 10 | #define TMP_TEXT_BUF_SIZE (256) |
mark2r2 | 0:08a4d61cd84c | 11 | |
mark2r2 | 0:08a4d61cd84c | 12 | static char envini[] = "/local/env.ini"; |
mark2r2 | 0:08a4d61cd84c | 13 | #define default_fwserver "http://diytec.web.fc2.com/mark2r2/firmware" |
mark2r2 | 0:08a4d61cd84c | 14 | //char default_fwserver[] = "http://diytec.web.fc2.com/mark2r2/firmware"; |
mark2r2 | 0:08a4d61cd84c | 15 | |
mark2r2 | 0:08a4d61cd84c | 16 | extern int mode,gps_mode; |
mark2r2 | 0:08a4d61cd84c | 17 | extern int shape_mode; |
mark2r2 | 0:08a4d61cd84c | 18 | extern int AnalogInput_pin_number; |
mark2r2 | 0:08a4d61cd84c | 19 | extern int GMInterrupt_pin_number; |
mark2r2 | 0:08a4d61cd84c | 20 | extern int LED_pin_number; |
mark2r2 | 0:08a4d61cd84c | 21 | extern int Buzzer_pin_number; |
mark2r2 | 0:08a4d61cd84c | 22 | extern int GPStx_pin_number; |
mark2r2 | 0:08a4d61cd84c | 23 | extern int GPSrx_pin_number; |
mark2r2 | 0:08a4d61cd84c | 24 | extern float carib; |
mark2r2 | 0:08a4d61cd84c | 25 | extern int updateinterval; |
mark2r2 | 0:08a4d61cd84c | 26 | extern int updatetype; /* 0: no 1: twitter 2: pachube */ |
mark2r2 | 0:08a4d61cd84c | 27 | extern int sound; /* 0: off 1: on */ |
mark2r2 | 0:08a4d61cd84c | 28 | extern float volt; /* voltage executed to GM tube */ |
mark2r2 | 0:08a4d61cd84c | 29 | extern float offset_usv; |
mark2r2 | 0:08a4d61cd84c | 30 | extern TextLCD lcd; |
mark2r2 | 0:08a4d61cd84c | 31 | extern int firmware_update_interval; |
mark2r2 | 0:08a4d61cd84c | 32 | extern time_t tz_offset; |
mark2r2 | 0:08a4d61cd84c | 33 | extern Serial pc; |
mark2r2 | 0:08a4d61cd84c | 34 | extern int init_stabilize_time; |
mark2r2 | 0:08a4d61cd84c | 35 | extern int cpu_speed; |
mark2r2 | 0:08a4d61cd84c | 36 | |
mark2r2 | 0:08a4d61cd84c | 37 | extern float carib_cpm0; |
mark2r2 | 0:08a4d61cd84c | 38 | extern float carib_usv0; |
mark2r2 | 0:08a4d61cd84c | 39 | extern float carib_cpm1; |
mark2r2 | 0:08a4d61cd84c | 40 | extern float carib_usv1; |
mark2r2 | 0:08a4d61cd84c | 41 | extern unsigned int cpm_array_max; |
mark2r2 | 0:08a4d61cd84c | 42 | extern unsigned int long_cpm_array_max; |
mark2r2 | 0:08a4d61cd84c | 43 | |
mark2r2 | 0:08a4d61cd84c | 44 | void trim(char *retbuff, char *inbuff) { |
mark2r2 | 0:08a4d61cd84c | 45 | int i,j,len; |
mark2r2 | 0:08a4d61cd84c | 46 | |
mark2r2 | 0:08a4d61cd84c | 47 | len=strlen(inbuff); |
mark2r2 | 0:08a4d61cd84c | 48 | for(i=0,j=0;i<len; i++){ |
mark2r2 | 0:08a4d61cd84c | 49 | if(inbuff[i]>0x20) { |
mark2r2 | 0:08a4d61cd84c | 50 | retbuff[j]=inbuff[i]; |
mark2r2 | 0:08a4d61cd84c | 51 | j++; |
mark2r2 | 0:08a4d61cd84c | 52 | } |
mark2r2 | 0:08a4d61cd84c | 53 | } |
mark2r2 | 0:08a4d61cd84c | 54 | retbuff[j]='\0'; |
mark2r2 | 0:08a4d61cd84c | 55 | |
mark2r2 | 0:08a4d61cd84c | 56 | |
mark2r2 | 0:08a4d61cd84c | 57 | } |
mark2r2 | 0:08a4d61cd84c | 58 | |
mark2r2 | 0:08a4d61cd84c | 59 | |
mark2r2 | 0:08a4d61cd84c | 60 | int GetStatus(char *path, char *tag, char *text){ |
mark2r2 | 0:08a4d61cd84c | 61 | char TmpText[TMP_TEXT_BUF_SIZE]; |
mark2r2 | 0:08a4d61cd84c | 62 | char TmpTag[TMP_TEXT_BUF_SIZE]; |
mark2r2 | 0:08a4d61cd84c | 63 | FILE *stm = fopen(path, "r"); |
mark2r2 | 0:08a4d61cd84c | 64 | |
mark2r2 | 0:08a4d61cd84c | 65 | if(stm != NULL){ |
mark2r2 | 0:08a4d61cd84c | 66 | text[0] = '\0'; |
mark2r2 | 0:08a4d61cd84c | 67 | sprintf(TmpTag, "%s:%%s",tag); |
mark2r2 | 0:08a4d61cd84c | 68 | |
mark2r2 | 0:08a4d61cd84c | 69 | while(fgets(TmpText, TMP_TEXT_BUF_SIZE, stm) != NULL){ |
mark2r2 | 0:08a4d61cd84c | 70 | if(sscanf(TmpText, TmpTag, text)==EOF){ |
mark2r2 | 0:08a4d61cd84c | 71 | printf("error reading %s",tag); |
mark2r2 | 0:08a4d61cd84c | 72 | } |
mark2r2 | 0:08a4d61cd84c | 73 | } |
mark2r2 | 0:08a4d61cd84c | 74 | fclose(stm); |
mark2r2 | 0:08a4d61cd84c | 75 | } |
mark2r2 | 0:08a4d61cd84c | 76 | else { |
mark2r2 | 0:08a4d61cd84c | 77 | printf("file open error: %s\r\n",path); |
mark2r2 | 0:08a4d61cd84c | 78 | lcd.cls(); |
mark2r2 | 0:08a4d61cd84c | 79 | lcd.printf("open err: %s",path); |
mark2r2 | 0:08a4d61cd84c | 80 | abort(); |
mark2r2 | 0:08a4d61cd84c | 81 | } |
mark2r2 | 0:08a4d61cd84c | 82 | |
mark2r2 | 0:08a4d61cd84c | 83 | return(0); |
mark2r2 | 0:08a4d61cd84c | 84 | } |
mark2r2 | 0:08a4d61cd84c | 85 | |
mark2r2 | 0:08a4d61cd84c | 86 | /*----------- |
mark2r2 | 0:08a4d61cd84c | 87 | // |
mark2r2 | 0:08a4d61cd84c | 88 | // See http://mbed.org/users/no2chem/notebook/mbed-clock-control--benchmarks/ |
mark2r2 | 0:08a4d61cd84c | 89 | |
mark2r2 | 0:08a4d61cd84c | 90 | // NOTE:if the clock speed is down, the power consumption becomes low but the timer becomes slow. |
mark2r2 | 0:08a4d61cd84c | 91 | |
mark2r2 | 0:08a4d61cd84c | 92 | void cpu_setting() { // 2011/08/19 |
mark2r2 | 0:08a4d61cd84c | 93 | char msgs[80]; |
mark2r2 | 0:08a4d61cd84c | 94 | |
mark2r2 | 0:08a4d61cd84c | 95 | if(GetStatus(envfile,"cpu_speed",msgs)==0){ |
mark2r2 | 0:08a4d61cd84c | 96 | int m = atoi(msgs); |
mark2r2 | 0:08a4d61cd84c | 97 | if(m >= 6 && m <= 12){ |
mark2r2 | 0:08a4d61cd84c | 98 | cpu_speed=atof(msgs); |
mark2r2 | 0:08a4d61cd84c | 99 | } |
mark2r2 | 0:08a4d61cd84c | 100 | } |
mark2r2 | 0:08a4d61cd84c | 101 | } |
mark2r2 | 0:08a4d61cd84c | 102 | --------------*/ |
mark2r2 | 0:08a4d61cd84c | 103 | |
mark2r2 | 0:08a4d61cd84c | 104 | #define IntVal 1 //int (positive only) |
mark2r2 | 0:08a4d61cd84c | 105 | #define IntVal_t1 2 //int (-1 is permitted) |
mark2r2 | 0:08a4d61cd84c | 106 | #define TimeVal 3 //time_t |
mark2r2 | 0:08a4d61cd84c | 107 | #define UintVal 4 //unsigned int |
mark2r2 | 0:08a4d61cd84c | 108 | #define FloatVal 5 //float |
mark2r2 | 0:08a4d61cd84c | 109 | #define FloatVal_t1 6 //float (negative permitted) |
mark2r2 | 0:08a4d61cd84c | 110 | #define FloatVal_t2 7 //float (negative & 0 permitted) |
mark2r2 | 0:08a4d61cd84c | 111 | |
mark2r2 | 0:08a4d61cd84c | 112 | static char gmfile[20]; |
mark2r2 | 0:08a4d61cd84c | 113 | |
mark2r2 | 0:08a4d61cd84c | 114 | // For env.ini |
mark2r2 | 0:08a4d61cd84c | 115 | struct envGet { |
mark2r2 | 0:08a4d61cd84c | 116 | char* str; |
mark2r2 | 0:08a4d61cd84c | 117 | int envtype; |
mark2r2 | 0:08a4d61cd84c | 118 | void* datval; |
mark2r2 | 0:08a4d61cd84c | 119 | char* file_id; |
mark2r2 | 0:08a4d61cd84c | 120 | } EnvGetTable[] = { |
mark2r2 | 0:08a4d61cd84c | 121 | {"mode", IntVal_t1, &mode, envini}, |
mark2r2 | 0:08a4d61cd84c | 122 | {"shape", IntVal, &shape_mode, envini}, |
mark2r2 | 0:08a4d61cd84c | 123 | {"gps", IntVal, &gps_mode, envini}, |
mark2r2 | 0:08a4d61cd84c | 124 | {"updateinterval",IntVal,&updateinterval, envini}, |
mark2r2 | 0:08a4d61cd84c | 125 | {"updatetype", IntVal, &updatetype, envini}, |
mark2r2 | 0:08a4d61cd84c | 126 | {"sound", IntVal, &sound, envini}, |
mark2r2 | 0:08a4d61cd84c | 127 | {"firmware_update_interval",IntVal,&firmware_update_interval, envini}, |
mark2r2 | 0:08a4d61cd84c | 128 | {"timezone",TimeVal, &tz_offset, envini}, |
mark2r2 | 0:08a4d61cd84c | 129 | {"init_stabilize_time", IntVal, &init_stabilize_time, envini}, |
mark2r2 | 0:08a4d61cd84c | 130 | {"GMInterrupt", IntVal, &GMInterrupt_pin_number, envini}, |
mark2r2 | 0:08a4d61cd84c | 131 | {"LED", IntVal, &LED_pin_number, envini}, |
mark2r2 | 0:08a4d61cd84c | 132 | {"Buzzer", IntVal, &Buzzer_pin_number, envini}, |
mark2r2 | 0:08a4d61cd84c | 133 | {"GPStx", IntVal, &GPStx_pin_number, envini}, |
mark2r2 | 0:08a4d61cd84c | 134 | {"GPSrx", IntVal, &GPSrx_pin_number, envini}, |
mark2r2 | 0:08a4d61cd84c | 135 | {"cpm_array_max", UintVal, &cpm_array_max, envini}, |
mark2r2 | 0:08a4d61cd84c | 136 | {"long_cpm_array_max", UintVal, &long_cpm_array_max, envini}, |
mark2r2 | 0:08a4d61cd84c | 137 | {"cariburation",FloatVal, &carib, gmfile}, |
mark2r2 | 0:08a4d61cd84c | 138 | {"voltage",FloatVal, &volt, gmfile}, |
mark2r2 | 0:08a4d61cd84c | 139 | {"offset_usv", FloatVal_t1, &offset_usv, gmfile}, |
mark2r2 | 0:08a4d61cd84c | 140 | {"cpm0", FloatVal, &carib_cpm0, gmfile}, |
mark2r2 | 0:08a4d61cd84c | 141 | {"usv0", FloatVal, &carib_usv0, gmfile}, |
mark2r2 | 0:08a4d61cd84c | 142 | {"cpm1", FloatVal, &carib_cpm1, gmfile}, |
mark2r2 | 0:08a4d61cd84c | 143 | {"usv1", FloatVal, &carib_usv1, gmfile}, |
mark2r2 | 0:08a4d61cd84c | 144 | {"uSv0", FloatVal_t2, &carib_usv0, gmfile}, |
mark2r2 | 0:08a4d61cd84c | 145 | {"uSv1", FloatVal_t2, &carib_usv1, gmfile} |
mark2r2 | 0:08a4d61cd84c | 146 | }; |
mark2r2 | 0:08a4d61cd84c | 147 | |
mark2r2 | 0:08a4d61cd84c | 148 | void environment_setting(char *fws){ |
mark2r2 | 0:08a4d61cd84c | 149 | char msgs[80]; |
mark2r2 | 0:08a4d61cd84c | 150 | char gmtype[50]; |
mark2r2 | 0:08a4d61cd84c | 151 | |
mark2r2 | 0:08a4d61cd84c | 152 | // GM tube characteristic feature reading // |
mark2r2 | 0:08a4d61cd84c | 153 | if(GetStatus(envini,"gmtype",gmtype)==0){ |
mark2r2 | 0:08a4d61cd84c | 154 | strcpy(gmfile,"/local/"); |
mark2r2 | 0:08a4d61cd84c | 155 | strcat(gmfile,gmtype); |
mark2r2 | 0:08a4d61cd84c | 156 | printf("%s will be used for GM tube cariburation\n",gmfile); |
mark2r2 | 0:08a4d61cd84c | 157 | |
mark2r2 | 0:08a4d61cd84c | 158 | for(int i=0; i<sizeof(EnvGetTable)/sizeof(envGet) ; i++ ) { |
mark2r2 | 0:08a4d61cd84c | 159 | if(GetStatus(EnvGetTable[i].file_id,EnvGetTable[i].str,msgs)==0){ |
mark2r2 | 0:08a4d61cd84c | 160 | switch(EnvGetTable[i].envtype) { |
mark2r2 | 0:08a4d61cd84c | 161 | case IntVal: |
mark2r2 | 0:08a4d61cd84c | 162 | if(atoi(msgs)>0){ |
mark2r2 | 0:08a4d61cd84c | 163 | *((int*)EnvGetTable[i].datval)=atoi(msgs); |
mark2r2 | 0:08a4d61cd84c | 164 | } |
mark2r2 | 0:08a4d61cd84c | 165 | printf("%s=%d\r\n", EnvGetTable[i].str, *((int*)EnvGetTable[i].datval)); |
mark2r2 | 0:08a4d61cd84c | 166 | break; |
mark2r2 | 0:08a4d61cd84c | 167 | case IntVal_t1: |
mark2r2 | 0:08a4d61cd84c | 168 | if(atoi(msgs)>0 || atoi(msgs)==-1){ |
mark2r2 | 0:08a4d61cd84c | 169 | *((int*)EnvGetTable[i].datval)=atoi(msgs); |
mark2r2 | 0:08a4d61cd84c | 170 | } |
mark2r2 | 0:08a4d61cd84c | 171 | printf("%s=%d\r\n", EnvGetTable[i].str, *((int*)EnvGetTable[i].datval)); |
mark2r2 | 0:08a4d61cd84c | 172 | break; |
mark2r2 | 0:08a4d61cd84c | 173 | case TimeVal: |
mark2r2 | 0:08a4d61cd84c | 174 | if(msgs[0] != '\0'){ |
mark2r2 | 0:08a4d61cd84c | 175 | *((time_t*)EnvGetTable[i].datval)=atoi(msgs); |
mark2r2 | 0:08a4d61cd84c | 176 | } |
mark2r2 | 0:08a4d61cd84c | 177 | printf("%s=%d\r\n", EnvGetTable[i].str, *((time_t*)EnvGetTable[i].datval)); |
mark2r2 | 0:08a4d61cd84c | 178 | break; |
mark2r2 | 0:08a4d61cd84c | 179 | case UintVal: |
mark2r2 | 0:08a4d61cd84c | 180 | if(atoi(msgs)>0){ |
mark2r2 | 0:08a4d61cd84c | 181 | *((unsigned int*)EnvGetTable[i].datval)=atoi(msgs); |
mark2r2 | 0:08a4d61cd84c | 182 | } |
mark2r2 | 0:08a4d61cd84c | 183 | printf("%s=%d\r\n", EnvGetTable[i].str, *((unsigned int*)EnvGetTable[i].datval)); |
mark2r2 | 0:08a4d61cd84c | 184 | break; |
mark2r2 | 0:08a4d61cd84c | 185 | case FloatVal: |
mark2r2 | 0:08a4d61cd84c | 186 | if(atof(msgs)>= 0){ |
mark2r2 | 0:08a4d61cd84c | 187 | *((float*)EnvGetTable[i].datval)=atof(msgs); |
mark2r2 | 0:08a4d61cd84c | 188 | } |
mark2r2 | 0:08a4d61cd84c | 189 | printf("%s=%f\r\n", EnvGetTable[i].str, *((float*)EnvGetTable[i].datval)); |
mark2r2 | 0:08a4d61cd84c | 190 | break; |
mark2r2 | 0:08a4d61cd84c | 191 | case FloatVal_t1: |
mark2r2 | 0:08a4d61cd84c | 192 | *((float*)EnvGetTable[i].datval)=atof(msgs); |
mark2r2 | 0:08a4d61cd84c | 193 | printf("%s=%f\r\n", EnvGetTable[i].str, *((float*)EnvGetTable[i].datval)); |
mark2r2 | 0:08a4d61cd84c | 194 | break; |
mark2r2 | 0:08a4d61cd84c | 195 | case FloatVal_t2: |
mark2r2 | 0:08a4d61cd84c | 196 | if(atof(msgs)> 0){ |
mark2r2 | 0:08a4d61cd84c | 197 | *((float*)EnvGetTable[i].datval)=atof(msgs); |
mark2r2 | 0:08a4d61cd84c | 198 | printf("%s=%f\r\n", EnvGetTable[i].str, *((float*)EnvGetTable[i].datval)); |
mark2r2 | 0:08a4d61cd84c | 199 | } |
mark2r2 | 0:08a4d61cd84c | 200 | break; |
mark2r2 | 0:08a4d61cd84c | 201 | |
mark2r2 | 0:08a4d61cd84c | 202 | } |
mark2r2 | 0:08a4d61cd84c | 203 | } |
mark2r2 | 0:08a4d61cd84c | 204 | } |
mark2r2 | 0:08a4d61cd84c | 205 | |
mark2r2 | 0:08a4d61cd84c | 206 | if(GetStatus(envini,"fwserver",msgs)==0){ |
mark2r2 | 0:08a4d61cd84c | 207 | if(strlen(msgs) <= 3){ |
mark2r2 | 0:08a4d61cd84c | 208 | strcpy(fws, default_fwserver); |
mark2r2 | 0:08a4d61cd84c | 209 | } else { |
mark2r2 | 0:08a4d61cd84c | 210 | trim(fws,msgs); |
mark2r2 | 0:08a4d61cd84c | 211 | } |
mark2r2 | 0:08a4d61cd84c | 212 | } |
mark2r2 | 0:08a4d61cd84c | 213 | printf("fwserver=%s\r\n", fws); |
mark2r2 | 0:08a4d61cd84c | 214 | |
mark2r2 | 0:08a4d61cd84c | 215 | updateinterval*=(60/CHUNK); |
mark2r2 | 0:08a4d61cd84c | 216 | tz_offset *= 3600; |
mark2r2 | 0:08a4d61cd84c | 217 | |
mark2r2 | 0:08a4d61cd84c | 218 | // override by 2 point cariburation |
mark2r2 | 0:08a4d61cd84c | 219 | if (carib_cpm0 > 0 && carib_usv0 > 0 && |
mark2r2 | 0:08a4d61cd84c | 220 | carib_cpm1 > 0 && carib_usv1 > 0 && |
mark2r2 | 0:08a4d61cd84c | 221 | (carib_cpm0 < carib_cpm1 && carib_usv0 < carib_usv1) || |
mark2r2 | 0:08a4d61cd84c | 222 | (carib_cpm0 > carib_cpm1 && carib_usv0 > carib_usv1)) { |
mark2r2 | 0:08a4d61cd84c | 223 | carib = (carib_cpm1 - carib_cpm0) / (carib_usv1 - carib_usv0); |
mark2r2 | 0:08a4d61cd84c | 224 | offset_usv = carib_usv0 - (carib_cpm0 / carib); |
mark2r2 | 0:08a4d61cd84c | 225 | printf("2 point cariburation=%f\r\n", carib); |
mark2r2 | 0:08a4d61cd84c | 226 | printf("2 point offset_usv=%f\r\n", offset_usv); |
mark2r2 | 0:08a4d61cd84c | 227 | } |
mark2r2 | 0:08a4d61cd84c | 228 | |
mark2r2 | 0:08a4d61cd84c | 229 | if( (updatetype == 0) && (cpm_array_max <10)) { |
mark2r2 | 0:08a4d61cd84c | 230 | } else { |
mark2r2 | 0:08a4d61cd84c | 231 | cpm_array_max = 10; |
mark2r2 | 0:08a4d61cd84c | 232 | } |
mark2r2 | 0:08a4d61cd84c | 233 | cpm_array_max *= 60/CHUNK; |
mark2r2 | 0:08a4d61cd84c | 234 | } |
mark2r2 | 0:08a4d61cd84c | 235 | } |