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
ConfigFile.cpp@0:4265d973a98f, 2010-12-10 (annotated)
- Committer:
- okini3939
- Date:
- Fri Dec 10 17:15:15 2010 +0000
- Revision:
- 0:4265d973a98f
- Child:
- 1:86d4b7431fbe
Who changed what in which revision?
User | Revision | Line number | New 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 | } |