http://http://diytec.web.fc2.com/mark2r2/

Dependencies:   EthernetNetIf NTPClient_NetServices mbed ConfigFile

Committer:
mark2r2
Date:
Tue Sep 20 12:46:26 2011 +0000
Revision:
0:08a4d61cd84c
V1.0

Who changed what in which revision?

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