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

Dependencies:   ChaNFSSD EthernetNetIf I2CLEDDisp Agentbed ChaNFSUSB ILinterpreter mbed BMP085 WeatherMeters ConfigFile ChaNFS I2CLCD

Revision:
2:a3e5edf84f74
Parent:
1:6c7141895545
Child:
5:90f840432195
--- a/file.cpp	Sun Jul 10 15:36:46 2011 +0000
+++ b/file.cpp	Wed Aug 24 13:22:32 2011 +0000
@@ -10,15 +10,19 @@
 
 #include "mbed.h"
 #include "weather.h"
-#include "SDHCFileSystem.h"
+#include "SDFileSystem.h"
+#ifdef USE_USB
 #include "MSCFileSystem.h"
+#endif
 #include "ConfigFile.h"
 
 static SDFileSystem sd(p5, p6, p7, p8, "sd");
 static LocalFileSystem *local;
+#ifdef USE_USB
 static MSCFileSystem *usb;
+#endif
 static DigitalIn sd_ins(p27);
-ConfigFile cfg;
+struct Config conf;
 static char filename[30] = "";
 
 int write_log (const char *buf) {
@@ -29,41 +33,39 @@
     if (sd_ins != 0) return -1;
 #endif
 
-    LED_FILE_ON;
+    LED_FILE_ACT_ON;
     fp = fopen(filename, "a");
     if (fp) {
         fprintf(fp, buf);
         fclose(fp);
     } else {
-        LED_FILE_OFF;
+        LED_FILE_ACT_OFF;
         return -1;
     }
-    LED_FILE_OFF;
+    LED_FILE_ACT_OFF;
     return 0;
 }
 
 int init_file () {
     int seq = 0;
-    char buf[128], buf2[10] = "";
+    char dir[8];
     FILE *fp;
 
-
-    if (cfg.getValue("FILE", buf, sizeof(buf))) {
-
-        if (strncmp(buf, "SD", 2) == 0) {
-            strcpy(buf2, "/sd/");
+    if (conf.filetype) {
+        if (conf.filetype == 1) {
+            strcpy(dir, "/sd/");
         } else
-        if (strncmp(buf, "USB", 3) == 0) {
+        if (conf.filetype == 2) {
+#ifdef USE_USB
             usb = new MSCFileSystem("usb");
-            if (usb == NULL) return -1;
-            strcpy(buf2, "/usb/");
-        } else {
-            return -1;
+            strcpy(dir, "/usb/");
+#endif
         }
 
         // seq num
-        strcpy(filename, buf2);
+        strcpy(filename, dir);
         strcat(filename, "weather.seq");
+        LED_FILE_ACT_ON;
         fp = fopen(filename, "r");
         if (fp) {
             fscanf(fp, "%d", &seq);
@@ -77,54 +79,15 @@
             fprintf(fp, "%d", seq);
             fclose(fp);
         }
+        LED_FILE_ACT_OFF;
 
         // csv filename
-        sprintf(filename, "%sw%05d.csv", buf2, seq);
+        sprintf(filename, "%sw%05d.csv", dir, seq);
         pc.printf("CSV Filename: %s\r\n", filename);
     }
     return 0;
 }
 
-int init_conf () {
-
-#ifdef USE_SD_INS
-    sd_ins.mode(PullUp);
-#endif
-
-    // load config
-    LED_FILE_ON;
-#ifdef USE_SD_INS
-    if (sd_ins == 0 && cfg.read("/sd/" CONFIG_FILE)) {
-#else
-    if (cfg.read("/sd/" CONFIG_FILE)) {
-#endif
-        // from sd
-        
-        LED_FILE_OFF;
-        cfg.setValue("DIR", "/sd/");
-
-    } else {
-        local = new LocalFileSystem("local");
-        if (local == NULL) return -1;
-        if (cfg.read("/local/" CONFIG_FILE)) {
-            // from usb
-
-            LED_FILE_OFF;
-            cfg.setValue("DIR", "/local/");
-
-        } else {
-            // none
-            LED_FILE_OFF;
-            return -1;
-        }
-    }
-
-#ifdef DEBUG
-    pc.printf("Configration: %d\r\n", cfg.getCount());
-#endif
-    return 0;
-}
-
 char* chop (char *s) {
     int i;
 
@@ -137,3 +100,183 @@
     }
     return s;
 }
+
+int init_conf () {
+    ConfigFile cfg;
+    int i;
+    char buf[CF_VALUE_SIZE], key[CF_KEY_SIZE];
+    int ip0, ip1, ip2, ip3;
+
+    memset(&conf, 0, sizeof(conf));
+    conf.interval = 60;
+    strcpy(conf.csv_mesg, CSV_MESG);
+
+#ifdef USE_SD_INS
+    sd_ins.mode(PullUp);
+#endif
+
+    // open config
+    LED_FILE_ACT_ON;
+#ifdef USE_SD_INS
+    if (sd_ins == 0 && cfg.read("/sd/" CONFIG_FILE)) {
+#else
+    if (cfg.read("/sd/" CONFIG_FILE)) {
+#endif
+        // from sd
+
+        strcpy(conf.dir, "/sd/");
+        LED_FILE_ACT_OFF;
+
+    } else {
+        local = new LocalFileSystem("local");
+        if (cfg.read("/local/" CONFIG_FILE)) {
+            // from usb
+
+            strcpy(conf.dir, "/local/");
+            LED_FILE_ACT_OFF;
+
+        } else {
+            // none
+            LED_FILE_ACT_OFF;
+            return -1;
+        }
+    }
+
+    // load config
+    if (cfg.getValue("INTERVAL", buf, sizeof_1(buf))) {
+        conf.interval = atoi(buf);
+    }
+    if (cfg.getValue("BAUD", buf, sizeof_1(buf))) {
+        conf.baud = atoi(buf);
+    }
+
+    if (cfg.getValue("FILE", buf, sizeof_1(buf))) {
+        chop(buf);
+        if (strcmp(buf, "SD") == 0) {
+            conf.filetype = 1;
+        } else
+        if (strcmp(buf, "USB") == 0) {
+            conf.filetype = 2;
+        }
+    }
+    if (cfg.getValue("CSV_MESG", conf.csv_mesg, sizeof_1(conf.csv_mesg))) {
+        chop(conf.csv_mesg);
+    }
+
+    if (cfg.getValue("IPADDRESS", buf, sizeof_1(buf))) {
+        if (strncmp(buf, "DHCP", 4) == 0) {
+            conf.ipaddr = IpAddr(255, 255, 255, 255);
+        } else {
+            sscanf(buf, "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
+            conf.ipaddr = IpAddr(ip0, ip1, ip2, ip3);
+        }
+    }
+    if (cfg.getValue("NETMASK", buf, sizeof_1(buf))) {
+        sscanf(buf, "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
+        conf.netmask = IpAddr(ip0, ip1, ip2, ip3);
+    }
+    if (cfg.getValue("GATEWAY", buf, sizeof_1(buf))) {
+        sscanf(buf, "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
+        conf.gateway = IpAddr(ip0, ip1, ip2, ip3);
+    }
+    if (cfg.getValue("NAMESERVER", buf, sizeof_1(buf))) {
+        sscanf(buf, "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
+        conf.nameserver = IpAddr(ip0, ip1, ip2, ip3);
+    }
+
+    cfg.getValue("NTPSERVER", conf.ntpserver, sizeof_1(conf.ntpserver));
+    chop(conf.ntpserver);
+    cfg.getValue("SNMP_COMMNAME", conf.snmp_commname, sizeof_1(conf.snmp_commname));
+    chop(conf.snmp_commname);
+
+    cfg.getValue("PACHUBE_APIKEY", conf.pachube_apikey, sizeof_1(conf.pachube_apikey));
+    chop(conf.pachube_apikey);
+    cfg.getValue("PACHUBE_FEEDID", conf.pachube_feedid, sizeof_1(conf.pachube_feedid));
+    chop(conf.pachube_feedid);
+    if (cfg.getValue("PACHUBE_MESG", conf.pachube_mesg, sizeof_1(conf.pachube_mesg))) {
+        chop(conf.pachube_mesg);
+    } else {
+        strcpy(conf.pachube_mesg, PACHUBE_MESG);
+    }
+
+    cfg.getValue("TWITTER_USER", conf.twitter_user, sizeof_1(conf.twitter_user));
+    chop(conf.twitter_user);
+    cfg.getValue("TWITTER_PWD", conf.twitter_pwd, sizeof_1(conf.twitter_pwd));
+    chop(conf.twitter_pwd);
+    cfg.getValue("TWITTER_MESG", conf.twitter_mesg[0], sizeof_1(conf.twitter_mesg[0]));
+    chop(conf.twitter_mesg[0]);
+    for (i = 0; i < CF_TWITTER_NUM; i ++) {
+        sprintf(key, "TWITTER_MESG[%d]", i);
+        cfg.getValue(key, conf.twitter_mesg[i], sizeof_1(conf.twitter_mesg[i]));
+        chop(conf.twitter_mesg[i]);
+    }
+
+    cfg.getValue("STATIONS_ID", conf.stations_id, sizeof_1(conf.stations_id));
+    chop(conf.stations_id);
+    cfg.getValue("STATIONS_PIN", conf.stations_pin, sizeof_1(conf.stations_pin));
+    chop(conf.stations_pin);
+
+    if (cfg.getValue("LCD_TYPE", buf, sizeof_1(buf))) {
+        conf.lcdtype = (enum I2CLCDType)atoi(buf);
+    } else {
+        conf.lcdtype = LCD16x2;
+    }
+    if (cfg.getValue("LCD_CONF", buf, sizeof_1(buf))) {
+        conf.lcdconf = (enum I2CLCDConfig)atoi(buf);
+    } else {
+        conf.lcdconf = LCDCFG_3V;
+    }
+    if (cfg.getValue("LCD_MESG", conf.lcd_mesg, sizeof_1(conf.lcd_mesg))) {
+        chop(conf.lcd_mesg);
+    }
+    if (cfg.getValue("LEDDISP_MESG", conf.leddisp_mesg, sizeof_1(conf.leddisp_mesg))) {
+        chop(conf.leddisp_mesg);
+    }
+
+    if (cfg.getValue("XBEE", buf, sizeof_1(buf))) {
+        conf.xbeebaud = atoi(buf);
+    }
+
+    if (cfg.getValue("INPUT", buf, sizeof(buf))) {
+        conf.inputtype = (enum eINPUTTYPE)atoi(buf);
+    }
+
+    if (cfg.getValue("OFFSET[P]", buf, sizeof_1(buf))) {
+        offset.pres = atof(buf);
+    }
+    if (cfg.getValue("OFFSET[T]", buf, sizeof_1(buf))) {
+        offset.temp = atof(buf);
+    }
+    if (cfg.getValue("OFFSET[H]", buf, sizeof_1(buf))) {
+        offset.humi = atof(buf);
+    }
+
+#ifdef USE_EMAIL
+    cfg.getValue("SMTPSERVER", conf.smtphost, sizeof_1(conf.smtphost));
+    chop(conf.smtphost);
+    if (cfg.getValue("SMTPPORT", buf, sizeof_1(buf))) {
+        conf.smtpport = atoi(buf);
+    } else {
+        conf.smtpport = 25;
+    }
+    cfg.getValue("SMTPUSER", conf.smtpuser, sizeof_1(conf.smtpuser));
+    chop(conf.smtpuser);
+    cfg.getValue("SMTPPWD", conf.smtppwd, sizeof_1(conf.smtppwd));
+    chop(conf.smtppwd);
+    cfg.getValue("MAIL_FROM", conf.mailfrom, sizeof_1(conf.mailfrom));
+    chop(conf.mailfrom);
+    for (i = 0; i < CF_MAIL_NUM; i ++) {
+        snprintf(key, sizeof_1(key), "MAIL_MESG[%d]", i);
+        cfg.getValue(key, conf.mailmesg[i], sizeof_1(conf.mailmesg[i]));
+        chop(conf.mailmesg[i]);
+        snprintf(key, sizeof_1(key), "MAIL_TO[%d]", i);
+        cfg.getValue(key, conf.mailto[i], sizeof_1(conf.mailto[i]));
+        chop(conf.mailto[i]);
+    }
+#endif
+
+#ifdef DEBUG
+    pc.printf("Configration: %d\r\n", cfg.getCount());
+#endif
+    return 0;
+}