mbed Weather Platform firmware http://mbed.org/users/okini3939/notebook/mbed-weather-platform-firmware/

Dependencies:   EthernetNetIf SDHCFileSystem I2CLEDDisp Agentbed NTPClient_NetServices mbed BMP085 HTTPClient ConfigFile I2CLCD

Committer:
okini3939
Date:
Fri Dec 10 17:15:15 2010 +0000
Revision:
0:4265d973a98f
Child:
1:86d4b7431fbe

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:4265d973a98f 1 #include "ConfigFile.h"
okini3939 0:4265d973a98f 2
okini3939 0:4265d973a98f 3 #define BUF_SIZE 100
okini3939 0:4265d973a98f 4
okini3939 0:4265d973a98f 5 #define strnicmp strncasecmp
okini3939 0:4265d973a98f 6
okini3939 0:4265d973a98f 7 ConfigFile::ConfigFile () {
okini3939 0:4265d973a98f 8 ipaddr = IpAddr(0, 0, 0, 0);
okini3939 0:4265d973a98f 9 netmask = IpAddr(255, 255, 255, 0);
okini3939 0:4265d973a98f 10 gateway = IpAddr(0, 0, 0, 0);
okini3939 0:4265d973a98f 11 nameserver = IpAddr(0, 0, 0, 0);
okini3939 0:4265d973a98f 12 interval = 60;
okini3939 0:4265d973a98f 13 ntpserver[0] = 0;
okini3939 0:4265d973a98f 14 filetype = 0;
okini3939 0:4265d973a98f 15 actionscount = 0;
okini3939 0:4265d973a98f 16 pachube_apikey[0] = 0;
okini3939 0:4265d973a98f 17 pachube_feedid[0] = 0;
okini3939 0:4265d973a98f 18 twitter_user[0] = 0;
okini3939 0:4265d973a98f 19 twitter_pwd[0] = 0;
okini3939 0:4265d973a98f 20 }
okini3939 0:4265d973a98f 21
okini3939 0:4265d973a98f 22 void ConfigFile::load (char *filename) {
okini3939 0:4265d973a98f 23 char buf[BUF_SIZE];
okini3939 0:4265d973a98f 24 int ip0, ip1, ip2, ip3;
okini3939 0:4265d973a98f 25 FILE *fp;
okini3939 0:4265d973a98f 26
okini3939 0:4265d973a98f 27 fp = fopen(filename, "r");
okini3939 0:4265d973a98f 28 if (fp) {
okini3939 0:4265d973a98f 29 for (;;) {
okini3939 0:4265d973a98f 30 if (feof(fp)) break;
okini3939 0:4265d973a98f 31
okini3939 0:4265d973a98f 32 if (! fgets(buf, BUF_SIZE, fp)) break;
okini3939 0:4265d973a98f 33
okini3939 0:4265d973a98f 34 if (strnicmp(buf, "IPADDRESS=DHCP", 14) == 0) {
okini3939 0:4265d973a98f 35 ipaddr = IpAddr(255, 255, 255, 255);
okini3939 0:4265d973a98f 36 } else
okini3939 0:4265d973a98f 37 if (strnicmp(buf, "IPADDRESS=", 10) == 0) {
okini3939 0:4265d973a98f 38 sscanf(&buf[10], "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 0:4265d973a98f 39 ipaddr = IpAddr(ip0, ip1, ip2, ip3);
okini3939 0:4265d973a98f 40 } else
okini3939 0:4265d973a98f 41 if (strnicmp(buf, "NETMASK=", 8) == 0) {
okini3939 0:4265d973a98f 42 sscanf(&buf[10], "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 0:4265d973a98f 43 netmask = IpAddr(ip0, ip1, ip2, ip3);
okini3939 0:4265d973a98f 44 } else
okini3939 0:4265d973a98f 45 if (strnicmp(buf, "GATEWAY=", 8) == 0) {
okini3939 0:4265d973a98f 46 sscanf(&buf[10], "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 0:4265d973a98f 47 gateway = IpAddr(ip0, ip1, ip2, ip3);
okini3939 0:4265d973a98f 48 } else
okini3939 0:4265d973a98f 49 if (strnicmp(buf, "NAMESERVER=", 11) == 0) {
okini3939 0:4265d973a98f 50 sscanf(&buf[10], "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 0:4265d973a98f 51 nameserver = IpAddr(ip0, ip1, ip2, ip3);
okini3939 0:4265d973a98f 52 } else
okini3939 0:4265d973a98f 53 if (strnicmp(buf, "NTPSERVER=", 10) == 0) {
okini3939 0:4265d973a98f 54 strncpy(ntpserver, chop(&buf[10]), sizeof(ntpserver));
okini3939 0:4265d973a98f 55 } else
okini3939 0:4265d973a98f 56 if (strnicmp(buf, "INTERVAL=", 9) == 0) {
okini3939 0:4265d973a98f 57 interval = atoi(&buf[9]);
okini3939 0:4265d973a98f 58 } else
okini3939 0:4265d973a98f 59 if (strnicmp(buf, "FILE=CF", 7) == 0) {
okini3939 0:4265d973a98f 60 filetype = 1;
okini3939 0:4265d973a98f 61 } else
okini3939 0:4265d973a98f 62 if (strnicmp(buf, "FILE=USB", 8) == 0) {
okini3939 0:4265d973a98f 63 filetype = 2;
okini3939 0:4265d973a98f 64 } else
okini3939 0:4265d973a98f 65 if (strnicmp(buf, "ACTION=", 7) == 0) {
okini3939 0:4265d973a98f 66 add(&buf[7]);
okini3939 0:4265d973a98f 67 } else
okini3939 0:4265d973a98f 68 if (strnicmp(buf, "PACHUBE_APIKEY=", 15) == 0) {
okini3939 0:4265d973a98f 69 strncpy(pachube_apikey, chop(&buf[15]), sizeof(pachube_apikey));
okini3939 0:4265d973a98f 70 } else
okini3939 0:4265d973a98f 71 if (strnicmp(buf, "PACHUBE_FEEDID=", 15) == 0) {
okini3939 0:4265d973a98f 72 strncpy(pachube_feedid, chop(&buf[15]), sizeof(pachube_feedid));
okini3939 0:4265d973a98f 73 } else
okini3939 0:4265d973a98f 74 if (strnicmp(buf, "TWITTER_USER=", 13) == 0) {
okini3939 0:4265d973a98f 75 strncpy(twitter_user, chop(&buf[13]), sizeof(twitter_user));
okini3939 0:4265d973a98f 76 } else
okini3939 0:4265d973a98f 77 if (strnicmp(buf, "TWITTER_PWD=", 12) == 0) {
okini3939 0:4265d973a98f 78 strncpy(twitter_pwd, chop(&buf[12]), sizeof(twitter_pwd));
okini3939 0:4265d973a98f 79 }
okini3939 0:4265d973a98f 80 }
okini3939 0:4265d973a98f 81 fclose(fp);
okini3939 0:4265d973a98f 82 }
okini3939 0:4265d973a98f 83 }
okini3939 0:4265d973a98f 84
okini3939 0:4265d973a98f 85 void ConfigFile::add (char *buf) {
okini3939 0:4265d973a98f 86 int i, len, count;
okini3939 0:4265d973a98f 87 char c;
okini3939 0:4265d973a98f 88 char *tmp = NULL;
okini3939 0:4265d973a98f 89
okini3939 0:4265d973a98f 90 actions[actionscount].action = atoi(&buf[0]);
okini3939 0:4265d973a98f 91
okini3939 0:4265d973a98f 92 count = 0;
okini3939 0:4265d973a98f 93 len = strlen(buf);
okini3939 0:4265d973a98f 94 for (i = 0; i < len; i ++) {
okini3939 0:4265d973a98f 95 c = buf[i];
okini3939 0:4265d973a98f 96 if (c == ' ' || c == '\t' || c == '\n' || c == '\r') {
okini3939 0:4265d973a98f 97 buf[i] = 0;
okini3939 0:4265d973a98f 98 if (count) { addsub(&actions[actionscount].exps[count - 1], tmp); }
okini3939 0:4265d973a98f 99 if (count >= CF_ACTION_EXPS || c == '\n') { break; }
okini3939 0:4265d973a98f 100 tmp = &buf[i + 1];
okini3939 0:4265d973a98f 101 count ++;
okini3939 0:4265d973a98f 102 }
okini3939 0:4265d973a98f 103 }
okini3939 0:4265d973a98f 104
okini3939 0:4265d973a98f 105 actions[actionscount].count = count;
okini3939 0:4265d973a98f 106 actionscount ++;
okini3939 0:4265d973a98f 107 }
okini3939 0:4265d973a98f 108
okini3939 0:4265d973a98f 109 void ConfigFile::addsub (struct tExpression *exp, char *buf) {
okini3939 0:4265d973a98f 110
okini3939 0:4265d973a98f 111 exp->key = buf[0];
okini3939 0:4265d973a98f 112
okini3939 0:4265d973a98f 113 switch (buf[1]) {
okini3939 0:4265d973a98f 114 case '=':
okini3939 0:4265d973a98f 115 if (buf[2] == '=') {
okini3939 0:4265d973a98f 116 exp->expression = EXP_EQ;
okini3939 0:4265d973a98f 117 exp->value = atof(&buf[3]);
okini3939 0:4265d973a98f 118 }
okini3939 0:4265d973a98f 119 break;
okini3939 0:4265d973a98f 120
okini3939 0:4265d973a98f 121 case '!':
okini3939 0:4265d973a98f 122 if (buf[2] == '=') {
okini3939 0:4265d973a98f 123 exp->expression = EXP_NE;
okini3939 0:4265d973a98f 124 exp->value = atof(&buf[3]);
okini3939 0:4265d973a98f 125 }
okini3939 0:4265d973a98f 126 break;
okini3939 0:4265d973a98f 127
okini3939 0:4265d973a98f 128 case '<':
okini3939 0:4265d973a98f 129 if (buf[2] == '=') {
okini3939 0:4265d973a98f 130 exp->expression = EXP_LE;
okini3939 0:4265d973a98f 131 exp->value = atof(&buf[3]);
okini3939 0:4265d973a98f 132 } else {
okini3939 0:4265d973a98f 133 exp->expression = EXP_LT;
okini3939 0:4265d973a98f 134 exp->value = atof(&buf[2]);
okini3939 0:4265d973a98f 135 }
okini3939 0:4265d973a98f 136 break;
okini3939 0:4265d973a98f 137
okini3939 0:4265d973a98f 138 case '>':
okini3939 0:4265d973a98f 139 if (buf[2] == '=') {
okini3939 0:4265d973a98f 140 exp->expression = EXP_GE;
okini3939 0:4265d973a98f 141 exp->value = atof(&buf[3]);
okini3939 0:4265d973a98f 142 } else {
okini3939 0:4265d973a98f 143 exp->expression = EXP_GT;
okini3939 0:4265d973a98f 144 exp->value = atof(&buf[2]);
okini3939 0:4265d973a98f 145 }
okini3939 0:4265d973a98f 146 break;
okini3939 0:4265d973a98f 147
okini3939 0:4265d973a98f 148 default:
okini3939 0:4265d973a98f 149 exp->expression = EXP_NULL;
okini3939 0:4265d973a98f 150 break;
okini3939 0:4265d973a98f 151 }
okini3939 0:4265d973a98f 152 }
okini3939 0:4265d973a98f 153
okini3939 0:4265d973a98f 154 char* ConfigFile::chop (char *s) {
okini3939 0:4265d973a98f 155 int i, len;
okini3939 0:4265d973a98f 156
okini3939 0:4265d973a98f 157 len = strlen(s);
okini3939 0:4265d973a98f 158 for (i = len - 1; i >= 0; i --) {
okini3939 0:4265d973a98f 159 if (s[i] == '\n' || s[i] == '\r') {
okini3939 0:4265d973a98f 160 s[i] = 0;
okini3939 0:4265d973a98f 161 } else {
okini3939 0:4265d973a98f 162 break;
okini3939 0:4265d973a98f 163 }
okini3939 0:4265d973a98f 164 }
okini3939 0:4265d973a98f 165 return s;
okini3939 0:4265d973a98f 166 }