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 Jun 03 15:38:22 2011 +0000
Revision:
19:69b77f9e0446
Parent:
18:9286e5010c14

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 9:8c63e4f3edab 1 /** @file
okini3939 9:8c63e4f3edab 2 * @brief mbed Weather Platform
okini3939 9:8c63e4f3edab 3 */
okini3939 9:8c63e4f3edab 4 #include "mbed.h"
okini3939 18:9286e5010c14 5 #include "weather.h"
okini3939 9:8c63e4f3edab 6 #include "ConfigFile.h"
okini3939 9:8c63e4f3edab 7
okini3939 9:8c63e4f3edab 8
okini3939 9:8c63e4f3edab 9 char* chop (char *s) {
okini3939 9:8c63e4f3edab 10 int i;
okini3939 9:8c63e4f3edab 11
okini3939 9:8c63e4f3edab 12 for (i = strlen(s) - 1; i >= 0; i --) {
okini3939 9:8c63e4f3edab 13 if (s[i] == ' ' || s[i] == '\n' || s[i] == '\r') {
okini3939 9:8c63e4f3edab 14 s[i] = 0;
okini3939 9:8c63e4f3edab 15 } else {
okini3939 9:8c63e4f3edab 16 break;
okini3939 9:8c63e4f3edab 17 }
okini3939 9:8c63e4f3edab 18 }
okini3939 9:8c63e4f3edab 19 return s;
okini3939 9:8c63e4f3edab 20 }
okini3939 9:8c63e4f3edab 21
okini3939 9:8c63e4f3edab 22 int config (char *file) {
okini3939 9:8c63e4f3edab 23 int i;
okini3939 9:8c63e4f3edab 24 ConfigFile cfg;
okini3939 9:8c63e4f3edab 25 char buf[80], key[20];
okini3939 9:8c63e4f3edab 26 int ip0, ip1, ip2, ip3;
okini3939 10:848a2205aed1 27
okini3939 9:8c63e4f3edab 28 conf.ipaddr = IpAddr(0, 0, 0, 0);
okini3939 9:8c63e4f3edab 29 conf.netmask = IpAddr(255, 255, 255, 0);
okini3939 9:8c63e4f3edab 30 conf.gateway = IpAddr(0, 0, 0, 0);
okini3939 9:8c63e4f3edab 31 conf.nameserver = IpAddr(0, 0, 0, 0);
okini3939 9:8c63e4f3edab 32 conf.interval = 60;
okini3939 9:8c63e4f3edab 33 conf.ntpserver[0] = 0;
okini3939 9:8c63e4f3edab 34 conf.filetype = 0;
okini3939 9:8c63e4f3edab 35 conf.actionscount = 0;
okini3939 9:8c63e4f3edab 36 conf.pachube_apikey[0] = 0;
okini3939 9:8c63e4f3edab 37 conf.pachube_feedid[0] = 0;
okini3939 9:8c63e4f3edab 38 conf.twitter_user[0] = 0;
okini3939 9:8c63e4f3edab 39 conf.twitter_pwd[0] = 0;
okini3939 15:07bfa25ba6ae 40 for (i = 0; i < CF_TWITTER_NUM; i ++) {
okini3939 15:07bfa25ba6ae 41 conf.twitter_mesg[i][0] = 0;
okini3939 15:07bfa25ba6ae 42 }
okini3939 9:8c63e4f3edab 43 conf.stations_id[0] = 0;
okini3939 9:8c63e4f3edab 44 conf.stations_pin[0] = 0;
okini3939 9:8c63e4f3edab 45 conf.snmp_commname[0] = 0;
okini3939 10:848a2205aed1 46 conf.leddisp_mesg[0] = 0;
okini3939 10:848a2205aed1 47 conf.lcd_mesg[0] = 0;
okini3939 16:df39da7bef98 48 conf.lcdtype = LCD16x2;
okini3939 16:df39da7bef98 49 conf.lcdconf = LCDCFG_3V;
okini3939 14:ee6cc1632166 50 memset(&offset, 0, sizeof(offset));
okini3939 14:ee6cc1632166 51 memset(&sensor_old, 0, sizeof(sensor_old));
okini3939 9:8c63e4f3edab 52
okini3939 9:8c63e4f3edab 53 if (! cfg.read(file)) {
okini3939 9:8c63e4f3edab 54 return -1;
okini3939 9:8c63e4f3edab 55 }
okini3939 9:8c63e4f3edab 56
okini3939 9:8c63e4f3edab 57 if (cfg.getValue("INTERVAL", buf, sizeof(buf))) {
okini3939 9:8c63e4f3edab 58 conf.interval = atoi(chop(buf));
okini3939 9:8c63e4f3edab 59 }
okini3939 9:8c63e4f3edab 60 if (cfg.getValue("FILE", buf, sizeof(buf))) {
okini3939 9:8c63e4f3edab 61 chop(buf);
okini3939 9:8c63e4f3edab 62 if (strcmp(buf, "SD") == 0) {
okini3939 9:8c63e4f3edab 63 conf.filetype = 1;
okini3939 9:8c63e4f3edab 64 } else
okini3939 9:8c63e4f3edab 65 if (strcmp(buf, "USB") == 0) {
okini3939 9:8c63e4f3edab 66 conf.filetype = 2;
okini3939 9:8c63e4f3edab 67 }
okini3939 9:8c63e4f3edab 68 }
okini3939 9:8c63e4f3edab 69
okini3939 9:8c63e4f3edab 70 if (cfg.getValue("IPADDRESS", buf, sizeof(buf))) {
okini3939 9:8c63e4f3edab 71 chop(buf);
okini3939 9:8c63e4f3edab 72 if (strcmp(buf, "DHCP") == 0) {
okini3939 9:8c63e4f3edab 73 conf.ipaddr = IpAddr(255, 255, 255, 255);
okini3939 9:8c63e4f3edab 74 } else {
okini3939 9:8c63e4f3edab 75 sscanf(buf, "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 9:8c63e4f3edab 76 conf.ipaddr = IpAddr(ip0, ip1, ip2, ip3);
okini3939 9:8c63e4f3edab 77 }
okini3939 9:8c63e4f3edab 78 }
okini3939 9:8c63e4f3edab 79 if (cfg.getValue("NETMASK", buf, sizeof(buf))) {
okini3939 9:8c63e4f3edab 80 sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 9:8c63e4f3edab 81 conf.netmask = IpAddr(ip0, ip1, ip2, ip3);
okini3939 9:8c63e4f3edab 82 }
okini3939 9:8c63e4f3edab 83 if (cfg.getValue("GATEWAY", buf, sizeof(buf))) {
okini3939 9:8c63e4f3edab 84 sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 9:8c63e4f3edab 85 conf.gateway = IpAddr(ip0, ip1, ip2, ip3);
okini3939 9:8c63e4f3edab 86 }
okini3939 9:8c63e4f3edab 87 if (cfg.getValue("NAMESERVER", buf, sizeof(buf))) {
okini3939 9:8c63e4f3edab 88 sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 9:8c63e4f3edab 89 conf.nameserver = IpAddr(ip0, ip1, ip2, ip3);
okini3939 9:8c63e4f3edab 90 }
okini3939 9:8c63e4f3edab 91
okini3939 9:8c63e4f3edab 92 cfg.getValue("NTPSERVER", conf.ntpserver, sizeof(conf.ntpserver));
okini3939 9:8c63e4f3edab 93 chop(conf.ntpserver);
okini3939 9:8c63e4f3edab 94 cfg.getValue("PACHUBE_APIKEY", conf.pachube_apikey, sizeof(conf.pachube_apikey));
okini3939 9:8c63e4f3edab 95 chop(conf.pachube_apikey);
okini3939 9:8c63e4f3edab 96 cfg.getValue("PACHUBE_FEEDID", conf.pachube_feedid, sizeof(conf.pachube_feedid));
okini3939 9:8c63e4f3edab 97 chop(conf.pachube_feedid);
okini3939 9:8c63e4f3edab 98 cfg.getValue("TWITTER_USER", conf.twitter_user, sizeof(conf.twitter_user));
okini3939 9:8c63e4f3edab 99 chop(conf.twitter_user);
okini3939 9:8c63e4f3edab 100 cfg.getValue("TWITTER_PWD", conf.twitter_pwd, sizeof(conf.twitter_pwd));
okini3939 9:8c63e4f3edab 101 chop(conf.twitter_pwd);
okini3939 15:07bfa25ba6ae 102 cfg.getValue("TWITTER_MESG", conf.twitter_mesg[0], sizeof(conf.twitter_mesg[0]));
okini3939 15:07bfa25ba6ae 103 chop(conf.twitter_mesg[0]);
okini3939 15:07bfa25ba6ae 104 for (i = 0; i < CF_TWITTER_NUM; i ++) {
okini3939 15:07bfa25ba6ae 105 sprintf(key, "TWITTER_MESG[%d]", i);
okini3939 15:07bfa25ba6ae 106 cfg.getValue(key, conf.twitter_mesg[i], sizeof(conf.twitter_mesg[i]));
okini3939 15:07bfa25ba6ae 107 chop(conf.twitter_mesg[i]);
okini3939 15:07bfa25ba6ae 108 }
okini3939 15:07bfa25ba6ae 109
okini3939 9:8c63e4f3edab 110 cfg.getValue("STATIONS_ID", conf.stations_id, sizeof(conf.stations_id));
okini3939 9:8c63e4f3edab 111 chop(conf.stations_id);
okini3939 9:8c63e4f3edab 112 cfg.getValue("STATIONS_PIN", conf.stations_pin, sizeof(conf.stations_pin));
okini3939 9:8c63e4f3edab 113 chop(conf.stations_pin);
okini3939 9:8c63e4f3edab 114 cfg.getValue("SNMP_COMMNAME", conf.snmp_commname, sizeof(conf.snmp_commname));
okini3939 9:8c63e4f3edab 115 chop(conf.snmp_commname);
okini3939 9:8c63e4f3edab 116
okini3939 10:848a2205aed1 117 if (cfg.getValue("LCD_TYPE", buf, sizeof(buf))) {
okini3939 16:df39da7bef98 118 conf.lcdtype = (enum I2CLCDType)atoi(chop(buf));
okini3939 10:848a2205aed1 119 }
okini3939 10:848a2205aed1 120 if (cfg.getValue("LCD_CONF", buf, sizeof(buf))) {
okini3939 16:df39da7bef98 121 conf.lcdconf = (enum I2CLCDConfig)atoi(chop(buf));
okini3939 10:848a2205aed1 122 }
okini3939 10:848a2205aed1 123 if (cfg.getValue("LCD_MESG", conf.lcd_mesg, sizeof(conf.lcd_mesg))) {
okini3939 10:848a2205aed1 124 chop(conf.lcd_mesg);
okini3939 10:848a2205aed1 125 }
okini3939 10:848a2205aed1 126 if (cfg.getValue("LEDDISP_MESG", conf.leddisp_mesg, sizeof(conf.leddisp_mesg))) {
okini3939 10:848a2205aed1 127 chop(conf.leddisp_mesg);
okini3939 10:848a2205aed1 128 }
okini3939 10:848a2205aed1 129
okini3939 9:8c63e4f3edab 130 if (cfg.getValue("XBEE", buf, sizeof(buf))) {
okini3939 9:8c63e4f3edab 131 xbee.baud(atoi(chop(buf)));
okini3939 9:8c63e4f3edab 132 }
okini3939 9:8c63e4f3edab 133
okini3939 11:c6356e5949cd 134 if (cfg.getValue("INPUT", buf, sizeof(buf))) {
okini3939 11:c6356e5949cd 135 conf.inputtype = (enum eINPUTTYPE)atoi(chop(buf));
okini3939 11:c6356e5949cd 136 }
okini3939 11:c6356e5949cd 137
okini3939 14:ee6cc1632166 138 if (cfg.getValue("OFFSET[P]", buf, sizeof(buf))) {
okini3939 14:ee6cc1632166 139 offset.pres = atof(chop(buf));
okini3939 14:ee6cc1632166 140 }
okini3939 14:ee6cc1632166 141 if (cfg.getValue("OFFSET[T]", buf, sizeof(buf))) {
okini3939 14:ee6cc1632166 142 offset.temp = atof(chop(buf));
okini3939 14:ee6cc1632166 143 }
okini3939 14:ee6cc1632166 144 if (cfg.getValue("OFFSET[H]", buf, sizeof(buf))) {
okini3939 14:ee6cc1632166 145 offset.humi = atof(chop(buf));
okini3939 14:ee6cc1632166 146 }
okini3939 14:ee6cc1632166 147
okini3939 9:8c63e4f3edab 148 return 0;
okini3939 9:8c63e4f3edab 149 }