Measure system

Dependencies:   EthernetNetIf mbed RF12B

Committer:
benecsj
Date:
Thu Mar 10 19:56:45 2011 +0000
Revision:
1:b26ab2467b1a
Parent:
0:8d62137f7ff4
Child:
2:afe5826411e3

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
benecsj 0:8d62137f7ff4 1 #define MEASURE_C
benecsj 0:8d62137f7ff4 2
benecsj 0:8d62137f7ff4 3
benecsj 1:b26ab2467b1a 4 #define WRITEFILE 1
benecsj 1:b26ab2467b1a 5 #define APPENDFILE 2
benecsj 1:b26ab2467b1a 6 #define READFILE 0
benecsj 1:b26ab2467b1a 7
benecsj 0:8d62137f7ff4 8 #include "EthernetNetIf.h"
benecsj 0:8d62137f7ff4 9 #include "HTTPServer.h"
benecsj 0:8d62137f7ff4 10 #include "SDFileSystem.h"
benecsj 0:8d62137f7ff4 11 #include "TextLCD.h"
benecsj 0:8d62137f7ff4 12 #include "DS1820.h"
benecsj 0:8d62137f7ff4 13 #include "MeasureSystem.h"
benecsj 0:8d62137f7ff4 14 #include "NTPClient.h"
benecsj 0:8d62137f7ff4 15 #include "WatchDog.h"
benecsj 0:8d62137f7ff4 16 #include "HTTPClient.h"
benecsj 1:b26ab2467b1a 17 #include "AvailableMemory.h"
benecsj 0:8d62137f7ff4 18
benecsj 0:8d62137f7ff4 19 //--------------Objects and vars------------------
benecsj 0:8d62137f7ff4 20 EthernetNetIf *eth;
benecsj 0:8d62137f7ff4 21 HTTPServer svr;
benecsj 0:8d62137f7ff4 22 NTPClient ntp;
benecsj 0:8d62137f7ff4 23
benecsj 0:8d62137f7ff4 24 Serial pc(USBTX, USBRX); // Serial debug usb port
benecsj 0:8d62137f7ff4 25 DigitalIn dhcpOn(p30);
benecsj 0:8d62137f7ff4 26 DigitalOut led1(LED1, "led1");
benecsj 0:8d62137f7ff4 27 DigitalOut led2(LED2, "led2");
benecsj 0:8d62137f7ff4 28 DigitalOut led3(LED3, "led3");
benecsj 0:8d62137f7ff4 29 DigitalOut led4(LED4, "led4");
benecsj 0:8d62137f7ff4 30 LocalFileSystem local("local"); //Internal flash
benecsj 0:8d62137f7ff4 31 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
benecsj 0:8d62137f7ff4 32 TextLCD lcd(p21, p23, p24, p25, p26, p27, TextLCD::LCD20x4 ); //Char lcd
benecsj 0:8d62137f7ff4 33 watchdog wdog(15); // WDT 15 seconds
benecsj 0:8d62137f7ff4 34
benecsj 0:8d62137f7ff4 35 const int MAX_PROBES = 2;
benecsj 1:b26ab2467b1a 36 #define LOGS_FOLDER "/sd/log"
benecsj 1:b26ab2467b1a 37 #define DATA_FOLDER "/sd/data"
benecsj 1:b26ab2467b1a 38 #define LOGGER_FILE "/sd/data/log.txt"
benecsj 0:8d62137f7ff4 39 #define STATUS_FILE "/local/status.dat"
benecsj 0:8d62137f7ff4 40 #define CONFIG_FILE "/local/config.txt"
benecsj 0:8d62137f7ff4 41 #define SOURCE_FILE "/sd/index.htm"
benecsj 0:8d62137f7ff4 42 #define TARGET_FILE "/local/index.htm"
benecsj 0:8d62137f7ff4 43 #define COPY_BLOCK_SIZE 2048
benecsj 0:8d62137f7ff4 44 DS1820* probe[MAX_PROBES]; //Temp sensors
benecsj 0:8d62137f7ff4 45
benecsj 0:8d62137f7ff4 46 //------status flags-----------------
benecsj 0:8d62137f7ff4 47 int devices_found=0;
benecsj 1:b26ab2467b1a 48 static char wanIP[18];
benecsj 1:b26ab2467b1a 49 static char localIP[18];
benecsj 1:b26ab2467b1a 50 int fileindex =0;
benecsj 1:b26ab2467b1a 51 char logfile[50] ;
benecsj 0:8d62137f7ff4 52 bool getIPfromDHCP;
benecsj 0:8d62137f7ff4 53 int interval;
benecsj 1:b26ab2467b1a 54 Timer timerMeasure;
benecsj 0:8d62137f7ff4 55 int ipConfig[4];
benecsj 0:8d62137f7ff4 56 int maskConfig[4];
benecsj 0:8d62137f7ff4 57 int gatewayConfig[4];
benecsj 0:8d62137f7ff4 58 int dnsConfig[4];
benecsj 1:b26ab2467b1a 59 int handlerCounter =0;
benecsj 0:8d62137f7ff4 60 //---------------------MAIN-----------------------
benecsj 0:8d62137f7ff4 61 int main() {
benecsj 1:b26ab2467b1a 62 measureCommand = 0;
benecsj 1:b26ab2467b1a 63 char buf[40];
benecsj 1:b26ab2467b1a 64 string tempstring = ("");
benecsj 0:8d62137f7ff4 65 pc.baud(921600);
benecsj 0:8d62137f7ff4 66 HandlerActive = false;
benecsj 0:8d62137f7ff4 67 //-----------------LCD test-------------------
benecsj 0:8d62137f7ff4 68 printf("\r\n\r\n<----------------------------------------------->");
benecsj 0:8d62137f7ff4 69 printf("\r\n<System Startup>\r\n");
benecsj 0:8d62137f7ff4 70 lcd.cls();
benecsj 0:8d62137f7ff4 71 lcd.printf("LCD Init.......Done\n");
benecsj 0:8d62137f7ff4 72 wait(0.2);
benecsj 0:8d62137f7ff4 73
benecsj 0:8d62137f7ff4 74 //----------------SD.card test----------------
benecsj 0:8d62137f7ff4 75 printf("<SD card init>\r\n");
benecsj 0:8d62137f7ff4 76 lcd.printf("SDcard Init....");
benecsj 1:b26ab2467b1a 77 mkdir(LOGS_FOLDER, 0777);
benecsj 1:b26ab2467b1a 78 mkdir(DATA_FOLDER, 0777);
benecsj 0:8d62137f7ff4 79 FILE *fp = fopen(LOGGER_FILE, "a+");
benecsj 0:8d62137f7ff4 80 if (fp == NULL) {
benecsj 0:8d62137f7ff4 81 error("Could not open file for write\r\n");
benecsj 1:b26ab2467b1a 82 } else {
benecsj 1:b26ab2467b1a 83 fprintf(fp, "<-------------------->\r\n");
benecsj 1:b26ab2467b1a 84 fclose(fp);
benecsj 1:b26ab2467b1a 85 tempstring ="SYSTEM STARTUP";
benecsj 1:b26ab2467b1a 86 LogWrite(tempstring);
benecsj 0:8d62137f7ff4 87 }
benecsj 0:8d62137f7ff4 88 lcd.printf("Done\n");
benecsj 1:b26ab2467b1a 89
benecsj 1:b26ab2467b1a 90
benecsj 0:8d62137f7ff4 91 wdog.feed();
benecsj 0:8d62137f7ff4 92 //----------------DS1820 init-----------------
benecsj 0:8d62137f7ff4 93 printf("<DS1820 init>\r\n");
benecsj 0:8d62137f7ff4 94 lcd.printf("Init sensors.");
benecsj 0:8d62137f7ff4 95 InitDS1820();
benecsj 0:8d62137f7ff4 96 lcd.printf(".Done\n");
benecsj 0:8d62137f7ff4 97
benecsj 0:8d62137f7ff4 98 wdog.feed();
benecsj 0:8d62137f7ff4 99 //--------------Read config.txt---------------
benecsj 0:8d62137f7ff4 100 LoadConfig();
benecsj 0:8d62137f7ff4 101 //---------------Network init-----------------
benecsj 0:8d62137f7ff4 102 lcd.printf("Network Init...");
benecsj 0:8d62137f7ff4 103 printf("<Network Init>\r\n");
benecsj 0:8d62137f7ff4 104 /*
benecsj 0:8d62137f7ff4 105 char mac[6];
benecsj 0:8d62137f7ff4 106 mbed_mac_address(mac);
benecsj 0:8d62137f7ff4 107 for (int i=0; i<6;i++) {
benecsj 0:8d62137f7ff4 108 printf("%02X ", mac[i]);
benecsj 0:8d62137f7ff4 109 }
benecsj 0:8d62137f7ff4 110 printf("\n");
benecsj 0:8d62137f7ff4 111 */
benecsj 0:8d62137f7ff4 112 if (getIPfromDHCP) {
benecsj 0:8d62137f7ff4 113 eth = new EthernetNetIf();
benecsj 0:8d62137f7ff4 114 } else {
benecsj 0:8d62137f7ff4 115 eth = new EthernetNetIf(
benecsj 0:8d62137f7ff4 116 IpAddr(ipConfig[0],ipConfig[1],ipConfig[2],ipConfig[3]), //IP Address
benecsj 0:8d62137f7ff4 117 IpAddr(maskConfig[0],maskConfig[1],maskConfig[2],maskConfig[3]), //Network Mask
benecsj 0:8d62137f7ff4 118 IpAddr(gatewayConfig[0],gatewayConfig[1],gatewayConfig[2],gatewayConfig[3]), //Gateway
benecsj 0:8d62137f7ff4 119 IpAddr(dnsConfig[0],dnsConfig[1],dnsConfig[2],dnsConfig[3]) //DNS
benecsj 0:8d62137f7ff4 120 );
benecsj 0:8d62137f7ff4 121 }
benecsj 0:8d62137f7ff4 122 EthernetErr ethErr = eth->setup(10000);
benecsj 0:8d62137f7ff4 123 if (ethErr) {
benecsj 0:8d62137f7ff4 124 printf("Error %d in setup.\r\n", ethErr);
benecsj 0:8d62137f7ff4 125 lcd.printf("Error");
benecsj 0:8d62137f7ff4 126 }
benecsj 0:8d62137f7ff4 127
benecsj 0:8d62137f7ff4 128 sprintf(buf,"%d.%d.%d.%d",
benecsj 0:8d62137f7ff4 129 eth->getIp()[0], eth->getIp()[1], eth->getIp()[2], eth->getIp()[3]);
benecsj 1:b26ab2467b1a 130 sprintf(localIP,"%s",buf);
benecsj 0:8d62137f7ff4 131 printf("Setup OK\r\n");
benecsj 0:8d62137f7ff4 132 lcd.printf("Done\n");
benecsj 0:8d62137f7ff4 133 wdog.feed();
benecsj 0:8d62137f7ff4 134
benecsj 0:8d62137f7ff4 135 //-----------------WAN check---------------------------
benecsj 0:8d62137f7ff4 136
benecsj 0:8d62137f7ff4 137 wait(1);
benecsj 0:8d62137f7ff4 138 printf("<WAN Connection Check>\r\n");
benecsj 0:8d62137f7ff4 139 lcd.cls();
benecsj 0:8d62137f7ff4 140 lcd.printf("Internet conn..");
benecsj 0:8d62137f7ff4 141 GetMyIP();
benecsj 0:8d62137f7ff4 142 if (wanIP!="none") {
benecsj 0:8d62137f7ff4 143 lcd.printf("Done\n");
benecsj 1:b26ab2467b1a 144 printf("OK: %s\r\n",wanIP);
benecsj 0:8d62137f7ff4 145
benecsj 0:8d62137f7ff4 146 } else {
benecsj 0:8d62137f7ff4 147 lcd.printf("Fail\n");
benecsj 0:8d62137f7ff4 148 printf("No connection\r\n");
benecsj 0:8d62137f7ff4 149 }
benecsj 0:8d62137f7ff4 150 wdog.feed();
benecsj 0:8d62137f7ff4 151 //-----------------RTC INIT------------------------
benecsj 0:8d62137f7ff4 152
benecsj 0:8d62137f7ff4 153 lcd.printf("RTClock Init...");
benecsj 0:8d62137f7ff4 154 printf("<RTC Init>\r\n");
benecsj 0:8d62137f7ff4 155
benecsj 0:8d62137f7ff4 156 if (wanIP!="none") {
benecsj 0:8d62137f7ff4 157 UpdateTime();
benecsj 0:8d62137f7ff4 158 strftime(buf,sizeof(buf), "%A %m/%d/%Y %H:%M:%S\n", localtime(&ctTime));
benecsj 0:8d62137f7ff4 159 printf("Time is now : %s JST\r\n", buf);
benecsj 0:8d62137f7ff4 160 lcd.printf("Done\n");
benecsj 0:8d62137f7ff4 161 } else {
benecsj 0:8d62137f7ff4 162 printf("Cannot connect NTP Server!!\r\n");
benecsj 0:8d62137f7ff4 163 lcd.printf("Fail\n");
benecsj 0:8d62137f7ff4 164 }
benecsj 0:8d62137f7ff4 165
benecsj 0:8d62137f7ff4 166 wdog.feed();
benecsj 0:8d62137f7ff4 167
benecsj 0:8d62137f7ff4 168 //-------Init index.htm in local filesystem---------
benecsj 0:8d62137f7ff4 169 lcd.printf("Loading config.");
benecsj 0:8d62137f7ff4 170 LoadStatus();
benecsj 0:8d62137f7ff4 171 IndexInit();
benecsj 1:b26ab2467b1a 172 if (logging == 1)
benecsj 1:b26ab2467b1a 173 {
benecsj 1:b26ab2467b1a 174 timerMeasure.start();
benecsj 1:b26ab2467b1a 175 }
benecsj 0:8d62137f7ff4 176 lcd.printf("Done\n");
benecsj 0:8d62137f7ff4 177 wdog.feed();
benecsj 0:8d62137f7ff4 178 //-----------------Welcome message------------------
benecsj 0:8d62137f7ff4 179 wait(2);
benecsj 0:8d62137f7ff4 180 lcd.cls();
benecsj 0:8d62137f7ff4 181 lcd.printf("Welcome to mbed. \nMeasure system.\n");
benecsj 1:b26ab2467b1a 182 lcd.printf("IP: %s\n",localIP);
benecsj 0:8d62137f7ff4 183 //--------------HTTP SERVER-------------------------
benecsj 0:8d62137f7ff4 184
benecsj 0:8d62137f7ff4 185 FSHandler::mount("/local", "/"); //Mount /wwww path on web root path
benecsj 0:8d62137f7ff4 186 FSHandler::mount("/sd", "/extern"); //Mount /wwww path on web root path
benecsj 0:8d62137f7ff4 187 svr.addHandler<FSHandler>("/files");// this does not see the subdirectory
benecsj 0:8d62137f7ff4 188 svr.addHandler<FSHandler>("/"); //Default handler
benecsj 0:8d62137f7ff4 189 svr.addHandler<SimpleHandler>("/com"); //Com hander
benecsj 0:8d62137f7ff4 190 svr.bind(80);
benecsj 0:8d62137f7ff4 191
benecsj 0:8d62137f7ff4 192 printf("<INIT DONE... Server running>\r\n");
benecsj 1:b26ab2467b1a 193 ctTime = time(NULL);
benecsj 1:b26ab2467b1a 194 ctTime += (clockoffset*3600);
benecsj 1:b26ab2467b1a 195 strftime(buf,sizeof(buf), "%Y/%m/%d %H:%M:%S", localtime(&ctTime));
benecsj 0:8d62137f7ff4 196 tempstring ="";
benecsj 1:b26ab2467b1a 197 tempstring += buf;
benecsj 1:b26ab2467b1a 198 LogWrite(tempstring);
benecsj 1:b26ab2467b1a 199 tempstring ="SYSTEM READY";
benecsj 1:b26ab2467b1a 200 LogWrite(tempstring);
benecsj 0:8d62137f7ff4 201 Timer tm;
benecsj 0:8d62137f7ff4 202 tm.start();
benecsj 0:8d62137f7ff4 203 //Listen indefinitely
benecsj 0:8d62137f7ff4 204 int counter =0;
benecsj 0:8d62137f7ff4 205
benecsj 0:8d62137f7ff4 206 //-------------------MAIN LOOP--------------------
benecsj 0:8d62137f7ff4 207 while (true) {
benecsj 0:8d62137f7ff4 208 Net::poll(); // Network listen
benecsj 0:8d62137f7ff4 209
benecsj 0:8d62137f7ff4 210 if (tm.read()>1) {
benecsj 0:8d62137f7ff4 211 counter = (counter++)%3600; //Timer counter loop
benecsj 0:8d62137f7ff4 212
benecsj 0:8d62137f7ff4 213 led1=!led1; //Show that we are alive 1 sec timed
benecsj 1:b26ab2467b1a 214 if (logging==1) {
benecsj 1:b26ab2467b1a 215 led4 =!led1;
benecsj 1:b26ab2467b1a 216 } else {
benecsj 1:b26ab2467b1a 217 led4 = 0;
benecsj 1:b26ab2467b1a 218 }
benecsj 0:8d62137f7ff4 219 UpdateLCD(counter); //Refress LCD
benecsj 0:8d62137f7ff4 220
benecsj 0:8d62137f7ff4 221 if (wanIP=="none" & (counter%30)==0) { //If no network detected aat startup then try to connect every 30 sec
benecsj 0:8d62137f7ff4 222 GetMyIP();
benecsj 0:8d62137f7ff4 223 if (wanIP!="none") {
benecsj 0:8d62137f7ff4 224 IndexInit() ;
benecsj 0:8d62137f7ff4 225 UpdateTime();
benecsj 0:8d62137f7ff4 226 }
benecsj 0:8d62137f7ff4 227 }
benecsj 0:8d62137f7ff4 228
benecsj 1:b26ab2467b1a 229 //DEADLOCK PREVENTER
benecsj 1:b26ab2467b1a 230 if (HandlerActive) {
benecsj 1:b26ab2467b1a 231 handlerCounter++;
benecsj 1:b26ab2467b1a 232 } else {
benecsj 1:b26ab2467b1a 233 handlerCounter = 0;
benecsj 1:b26ab2467b1a 234 }
benecsj 1:b26ab2467b1a 235 if (handlerCounter>60) {
benecsj 1:b26ab2467b1a 236 handlerCounter = 0;
benecsj 1:b26ab2467b1a 237 HandlerActive = false;
benecsj 1:b26ab2467b1a 238 }
benecsj 1:b26ab2467b1a 239
benecsj 1:b26ab2467b1a 240 if (logging == 1 & !HandlerActive) {
benecsj 1:b26ab2467b1a 241 MeasureLogger();
benecsj 1:b26ab2467b1a 242 }
benecsj 1:b26ab2467b1a 243
benecsj 1:b26ab2467b1a 244
benecsj 0:8d62137f7ff4 245 wdog.feed();
benecsj 0:8d62137f7ff4 246 tm.start();
benecsj 1:b26ab2467b1a 247
benecsj 1:b26ab2467b1a 248 printf("Available memory (exact bytes) : %d\r\n", AvailableMemory(1));
benecsj 0:8d62137f7ff4 249 }
benecsj 0:8d62137f7ff4 250
benecsj 0:8d62137f7ff4 251 }
benecsj 0:8d62137f7ff4 252
benecsj 0:8d62137f7ff4 253
benecsj 0:8d62137f7ff4 254 }
benecsj 0:8d62137f7ff4 255
benecsj 0:8d62137f7ff4 256
benecsj 0:8d62137f7ff4 257 //---------------------------Functions--------------------------
benecsj 0:8d62137f7ff4 258
benecsj 0:8d62137f7ff4 259 void InitDS1820() {
benecsj 0:8d62137f7ff4 260
benecsj 0:8d62137f7ff4 261 int i;
benecsj 0:8d62137f7ff4 262 // Initialize the probe array to DS1820 objects
benecsj 0:8d62137f7ff4 263 for (i = 0; i < MAX_PROBES; i++)
benecsj 0:8d62137f7ff4 264 probe[i] = new DS1820(p29);
benecsj 0:8d62137f7ff4 265 // Initialize global state variables
benecsj 0:8d62137f7ff4 266 probe[0]->search_ROM_setup();
benecsj 0:8d62137f7ff4 267 // Loop to find all devices on the data line
benecsj 0:8d62137f7ff4 268 while (probe[devices_found]->search_ROM() and devices_found<MAX_PROBES-1)
benecsj 0:8d62137f7ff4 269 devices_found++;
benecsj 0:8d62137f7ff4 270 // If maximum number of probes are found,
benecsj 0:8d62137f7ff4 271 // bump the counter to include the last array entry
benecsj 0:8d62137f7ff4 272 if (probe[devices_found]->ROM[0] != 0xFF)
benecsj 0:8d62137f7ff4 273 devices_found++;
benecsj 0:8d62137f7ff4 274
benecsj 0:8d62137f7ff4 275 if (devices_found==0)
benecsj 0:8d62137f7ff4 276 printf("No devices found");
benecsj 0:8d62137f7ff4 277 else {
benecsj 0:8d62137f7ff4 278
benecsj 0:8d62137f7ff4 279 probe[0]->convert_temperature(DS1820::all_devices);
benecsj 0:8d62137f7ff4 280 for (i=0; i<devices_found; i++) {
benecsj 0:8d62137f7ff4 281 printf("%3.1f \r\n",probe[i]->temperature('c'));
benecsj 0:8d62137f7ff4 282 }
benecsj 0:8d62137f7ff4 283 }
benecsj 0:8d62137f7ff4 284
benecsj 0:8d62137f7ff4 285 lcd.printf("%d",devices_found);
benecsj 0:8d62137f7ff4 286 }
benecsj 0:8d62137f7ff4 287
benecsj 0:8d62137f7ff4 288 //-------------------Get WAN IP adress-------------------------
benecsj 0:8d62137f7ff4 289 void GetMyIP() {
benecsj 0:8d62137f7ff4 290 HTTPClient http;
benecsj 0:8d62137f7ff4 291 HTTPText txt;
benecsj 0:8d62137f7ff4 292 HTTPResult r = http.get("http://www.whatismyip.com/automation/n09230945NL.asp", &txt);
benecsj 0:8d62137f7ff4 293 if (r==HTTP_OK) {
benecsj 1:b26ab2467b1a 294 sprintf(wanIP,"%s", txt.gets());
benecsj 0:8d62137f7ff4 295 } else {
benecsj 1:b26ab2467b1a 296 sprintf(wanIP,"none");
benecsj 0:8d62137f7ff4 297 }
benecsj 0:8d62137f7ff4 298 }
benecsj 0:8d62137f7ff4 299
benecsj 0:8d62137f7ff4 300 //-----------------Create Index HTM in local-------------------
benecsj 0:8d62137f7ff4 301 void IndexInit() {
benecsj 0:8d62137f7ff4 302 FILE *fs_src;
benecsj 0:8d62137f7ff4 303 FILE *fs_tgt;
benecsj 0:8d62137f7ff4 304 char buffer[ COPY_BLOCK_SIZE ];
benecsj 0:8d62137f7ff4 305
benecsj 0:8d62137f7ff4 306 printf( "file copier started.\r\n" );
benecsj 0:8d62137f7ff4 307 printf( " source:%s >>> target:%s\r\n", SOURCE_FILE, TARGET_FILE );
benecsj 0:8d62137f7ff4 308
benecsj 0:8d62137f7ff4 309 if ( NULL == (fs_src = fopen( SOURCE_FILE, "rb" )) ) {
benecsj 0:8d62137f7ff4 310 error( "couldn't open source file" );
benecsj 0:8d62137f7ff4 311 }
benecsj 0:8d62137f7ff4 312 if ( NULL == (fs_tgt = fopen( TARGET_FILE, "wb" )) ) {
benecsj 0:8d62137f7ff4 313 error( "couldn't open target file" );
benecsj 0:8d62137f7ff4 314 }
benecsj 0:8d62137f7ff4 315
benecsj 0:8d62137f7ff4 316 /*
benecsj 0:8d62137f7ff4 317 while ( size = fread( s, sizeof( char ), COPY_BLOCK_SIZE, fs_src ) )
benecsj 0:8d62137f7ff4 318 {
benecsj 0:8d62137f7ff4 319 fwrite( s, sizeof( char ), size, fs_tgt );
benecsj 0:8d62137f7ff4 320 total += size;
benecsj 0:8d62137f7ff4 321
benecsj 0:8d62137f7ff4 322 led1 = (0x1 << progress_ind++ % 4);
benecsj 0:8d62137f7ff4 323
benecsj 0:8d62137f7ff4 324 printf( " %d bytes copied\r", total );
benecsj 0:8d62137f7ff4 325 }
benecsj 0:8d62137f7ff4 326 */
benecsj 0:8d62137f7ff4 327 string temp;
benecsj 0:8d62137f7ff4 328 char token[] = "ServerAddress";
benecsj 0:8d62137f7ff4 329 while (fgets(buffer, COPY_BLOCK_SIZE, fs_src)) {
benecsj 0:8d62137f7ff4 330
benecsj 0:8d62137f7ff4 331 temp = string(buffer);
benecsj 0:8d62137f7ff4 332 int j=0;
benecsj 0:8d62137f7ff4 333 for (int i=0;i<COPY_BLOCK_SIZE;i++) {
benecsj 0:8d62137f7ff4 334 if (buffer[i]==token[j]) {
benecsj 0:8d62137f7ff4 335 j++;
benecsj 0:8d62137f7ff4 336 } else {
benecsj 0:8d62137f7ff4 337 j=0;
benecsj 0:8d62137f7ff4 338 }
benecsj 0:8d62137f7ff4 339
benecsj 0:8d62137f7ff4 340 if (j==12) break;
benecsj 0:8d62137f7ff4 341
benecsj 0:8d62137f7ff4 342 if (buffer[i]==0) {
benecsj 0:8d62137f7ff4 343 break;
benecsj 0:8d62137f7ff4 344 }
benecsj 0:8d62137f7ff4 345 }
benecsj 0:8d62137f7ff4 346
benecsj 0:8d62137f7ff4 347 if (j==12) { //Change to find string element search by char.
benecsj 1:b26ab2467b1a 348 fprintf(fs_tgt," <param name=\"ServerAddress\" value=\"%s\">",myUrl.c_str());
benecsj 0:8d62137f7ff4 349 } else {
benecsj 0:8d62137f7ff4 350 fprintf(fs_tgt,"%s",temp.c_str());
benecsj 0:8d62137f7ff4 351 }
benecsj 0:8d62137f7ff4 352 }
benecsj 0:8d62137f7ff4 353
benecsj 0:8d62137f7ff4 354 led1 = 0xF;
benecsj 0:8d62137f7ff4 355
benecsj 0:8d62137f7ff4 356 fclose( fs_src );
benecsj 0:8d62137f7ff4 357 fclose( fs_tgt );
benecsj 0:8d62137f7ff4 358
benecsj 0:8d62137f7ff4 359 printf( "done\r\n" );
benecsj 0:8d62137f7ff4 360 }
benecsj 0:8d62137f7ff4 361
benecsj 0:8d62137f7ff4 362 //------------Update lcd------------------------------
benecsj 0:8d62137f7ff4 363 bool IPshowflag = false;
benecsj 0:8d62137f7ff4 364 void UpdateLCD(int counter) {
benecsj 1:b26ab2467b1a 365 char buf[40];
benecsj 1:b26ab2467b1a 366
benecsj 1:b26ab2467b1a 367 if (counter%1==0) { //Every sec
benecsj 1:b26ab2467b1a 368 lcd.locate(0,1);
benecsj 1:b26ab2467b1a 369 if (logging) {
benecsj 1:b26ab2467b1a 370 lcd.printf("Logging with: %d ",interval);
benecsj 1:b26ab2467b1a 371 } else {
benecsj 1:b26ab2467b1a 372 lcd.printf("Not logging... ");
benecsj 1:b26ab2467b1a 373 }
benecsj 1:b26ab2467b1a 374 }
benecsj 1:b26ab2467b1a 375
benecsj 0:8d62137f7ff4 376 if (counter%4==0) {
benecsj 0:8d62137f7ff4 377 lcd.locate(0,2);
benecsj 0:8d62137f7ff4 378 if (wanIP!="none") {
benecsj 0:8d62137f7ff4 379 if (IPshowflag) {
benecsj 1:b26ab2467b1a 380 lcd.printf("IP: %s ", localIP);
benecsj 0:8d62137f7ff4 381 } else {
benecsj 1:b26ab2467b1a 382 lcd.printf("IP: %s ", wanIP);
benecsj 0:8d62137f7ff4 383 }
benecsj 0:8d62137f7ff4 384 IPshowflag = !IPshowflag;
benecsj 0:8d62137f7ff4 385 } else {
benecsj 0:8d62137f7ff4 386 //DO nothing only one ip address is shown
benecsj 0:8d62137f7ff4 387 }
benecsj 0:8d62137f7ff4 388 }
benecsj 0:8d62137f7ff4 389
benecsj 0:8d62137f7ff4 390 if (counter%1==0) { //Every sec
benecsj 0:8d62137f7ff4 391 lcd.locate(0,3);
benecsj 0:8d62137f7ff4 392 ctTime = time(NULL);
benecsj 0:8d62137f7ff4 393 ctTime += (clockoffset*3600);
benecsj 0:8d62137f7ff4 394 strftime(buf,sizeof(buf), "%Y/%m/%d %H:%M:%S", localtime(&ctTime));
benecsj 0:8d62137f7ff4 395 lcd.printf("%s", buf);
benecsj 0:8d62137f7ff4 396 }
benecsj 0:8d62137f7ff4 397
benecsj 0:8d62137f7ff4 398
benecsj 0:8d62137f7ff4 399 }
benecsj 0:8d62137f7ff4 400
benecsj 0:8d62137f7ff4 401 //----------------Update time---------------------
benecsj 0:8d62137f7ff4 402 void UpdateTime() {
benecsj 0:8d62137f7ff4 403 time_t ctTime;
benecsj 0:8d62137f7ff4 404 ctTime = time(NULL);
benecsj 0:8d62137f7ff4 405 Host server(IpAddr(), 123, "0.hu.pool.ntp.org");
benecsj 0:8d62137f7ff4 406 ntp.setTime(server);
benecsj 0:8d62137f7ff4 407 ctTime = time(NULL);
benecsj 0:8d62137f7ff4 408 ctTime += (clockoffset*3600); //set jst time
benecsj 0:8d62137f7ff4 409 }
benecsj 0:8d62137f7ff4 410
benecsj 1:b26ab2467b1a 411 //-------------Get Date short---------------------
benecsj 1:b26ab2467b1a 412 void GetFile(int index, char *st) {
benecsj 1:b26ab2467b1a 413 string stringt = ("");
benecsj 1:b26ab2467b1a 414 char buff[50];
benecsj 1:b26ab2467b1a 415 ctTime = time(NULL);
benecsj 1:b26ab2467b1a 416 ctTime += (clockoffset*3600);
benecsj 1:b26ab2467b1a 417 strftime(buff,sizeof(buff), "%Y/%m/%d %H:%M:%S", localtime(&ctTime));
benecsj 1:b26ab2467b1a 418 stringt += buff[2];
benecsj 1:b26ab2467b1a 419 stringt += buff[3];
benecsj 1:b26ab2467b1a 420 stringt += buff[5];
benecsj 1:b26ab2467b1a 421 stringt += buff[6];
benecsj 1:b26ab2467b1a 422 stringt += buff[8];
benecsj 1:b26ab2467b1a 423 stringt += buff[9];
benecsj 1:b26ab2467b1a 424 sprintf(buff,"%02d",index);
benecsj 1:b26ab2467b1a 425 stringt += buff;
benecsj 1:b26ab2467b1a 426 stringt += ".txt";
benecsj 1:b26ab2467b1a 427 strcpy(st, stringt.c_str());
benecsj 1:b26ab2467b1a 428 }
benecsj 1:b26ab2467b1a 429
benecsj 0:8d62137f7ff4 430 //---------------Load config----------------------
benecsj 0:8d62137f7ff4 431 void LoadConfig() {
benecsj 0:8d62137f7ff4 432 FILE *fs_src;
benecsj 0:8d62137f7ff4 433 char buffer[ 100 ];
benecsj 0:8d62137f7ff4 434 int linecounter = 0;
benecsj 0:8d62137f7ff4 435 fs_src = fopen( CONFIG_FILE, "rb" );
benecsj 0:8d62137f7ff4 436 while (fgets(buffer, 100, fs_src)) {
benecsj 0:8d62137f7ff4 437 linecounter++;
benecsj 0:8d62137f7ff4 438
benecsj 0:8d62137f7ff4 439 switch (linecounter) {
benecsj 0:8d62137f7ff4 440 case 2 :
benecsj 0:8d62137f7ff4 441 sscanf(buffer,"%d.%d.%d.%d",&ipConfig[0],&ipConfig[1],&ipConfig[2],&ipConfig[3]);
benecsj 0:8d62137f7ff4 442 break;
benecsj 0:8d62137f7ff4 443 case 4 :
benecsj 0:8d62137f7ff4 444 sscanf(buffer,"%d.%d.%d.%d",&maskConfig[0],&maskConfig[1],&maskConfig[2],&maskConfig[3]);
benecsj 0:8d62137f7ff4 445 break;
benecsj 0:8d62137f7ff4 446 case 6 :
benecsj 0:8d62137f7ff4 447 sscanf(buffer,"%d.%d.%d.%d",&gatewayConfig[0],&gatewayConfig[1],&gatewayConfig[2],&gatewayConfig[3]);
benecsj 0:8d62137f7ff4 448 break;
benecsj 0:8d62137f7ff4 449 case 8 :
benecsj 0:8d62137f7ff4 450 sscanf(buffer,"%d.%d.%d.%d",&dnsConfig[0],&dnsConfig[1],&dnsConfig[2],&dnsConfig[3]);
benecsj 0:8d62137f7ff4 451 break;
benecsj 0:8d62137f7ff4 452 case 10:
benecsj 0:8d62137f7ff4 453 if (buffer[0]=='t' | buffer[0]=='T') getIPfromDHCP= true;
benecsj 0:8d62137f7ff4 454 else getIPfromDHCP = false;
benecsj 0:8d62137f7ff4 455 break;
benecsj 0:8d62137f7ff4 456 case 13:
benecsj 0:8d62137f7ff4 457 sscanf(buffer,"%d",&interval);
benecsj 0:8d62137f7ff4 458 break;
benecsj 0:8d62137f7ff4 459 case 15:
benecsj 0:8d62137f7ff4 460 sscanf(buffer,"%d",&clockoffset);
benecsj 0:8d62137f7ff4 461 break;
benecsj 1:b26ab2467b1a 462 case 18:
benecsj 1:b26ab2467b1a 463 myUrl = buffer;
benecsj 1:b26ab2467b1a 464 break;
benecsj 0:8d62137f7ff4 465 }
benecsj 0:8d62137f7ff4 466
benecsj 0:8d62137f7ff4 467 }
benecsj 0:8d62137f7ff4 468
benecsj 0:8d62137f7ff4 469 fclose( fs_src );
benecsj 0:8d62137f7ff4 470 }
benecsj 0:8d62137f7ff4 471
benecsj 0:8d62137f7ff4 472 //---------------Load status--------------------------
benecsj 1:b26ab2467b1a 473 void LoadStatus() {
benecsj 0:8d62137f7ff4 474 FILE *fs_src;
benecsj 0:8d62137f7ff4 475 char buffer[ 100 ];
benecsj 0:8d62137f7ff4 476 int linecounter = 0;
benecsj 0:8d62137f7ff4 477 fs_src = fopen( STATUS_FILE, "rb" );
benecsj 0:8d62137f7ff4 478 while (fgets(buffer, 100, fs_src)) {
benecsj 0:8d62137f7ff4 479 linecounter++;
benecsj 0:8d62137f7ff4 480
benecsj 0:8d62137f7ff4 481 switch (linecounter) {
benecsj 0:8d62137f7ff4 482 case 1:
benecsj 0:8d62137f7ff4 483 sscanf(buffer,"%d",&logging);
benecsj 0:8d62137f7ff4 484 break;
benecsj 0:8d62137f7ff4 485 case 2:
benecsj 1:b26ab2467b1a 486 sscanf(buffer,"%s",logfile);
benecsj 0:8d62137f7ff4 487 break;
benecsj 0:8d62137f7ff4 488 }
benecsj 0:8d62137f7ff4 489
benecsj 0:8d62137f7ff4 490 }
benecsj 0:8d62137f7ff4 491
benecsj 0:8d62137f7ff4 492 fclose( fs_src );
benecsj 0:8d62137f7ff4 493 }
benecsj 0:8d62137f7ff4 494
benecsj 1:b26ab2467b1a 495 //-----------------Save status-------------------------
benecsj 1:b26ab2467b1a 496 void SaveStatus() {
benecsj 1:b26ab2467b1a 497 printf("Saving status\r\n");
benecsj 1:b26ab2467b1a 498 FILE *fs_dest;
benecsj 1:b26ab2467b1a 499 fs_dest = fopen( STATUS_FILE, "w" );
benecsj 1:b26ab2467b1a 500 fprintf(fs_dest,"%d\r\n%s\r\n",logging,logfile);
benecsj 1:b26ab2467b1a 501 fclose( fs_dest );
benecsj 1:b26ab2467b1a 502 printf("Status saved\r\n");
benecsj 1:b26ab2467b1a 503 }
benecsj 1:b26ab2467b1a 504
benecsj 1:b26ab2467b1a 505 //---------------Log writer-----------------------------
benecsj 1:b26ab2467b1a 506 void LogWrite(string stringin) {
benecsj 0:8d62137f7ff4 507 FILE *fp = fopen(LOGGER_FILE, "a");
benecsj 0:8d62137f7ff4 508 if (fp == NULL) {
benecsj 0:8d62137f7ff4 509 error("Could not open file for write\r\n");
benecsj 0:8d62137f7ff4 510 }
benecsj 1:b26ab2467b1a 511 fprintf(fp,"%s\r\n",stringin.c_str());
benecsj 0:8d62137f7ff4 512 fclose(fp);
benecsj 0:8d62137f7ff4 513 }
benecsj 1:b26ab2467b1a 514
benecsj 1:b26ab2467b1a 515 //---------------Measurement start/ stop --------------
benecsj 1:b26ab2467b1a 516
benecsj 1:b26ab2467b1a 517 void MeasureStart() {
benecsj 1:b26ab2467b1a 518
benecsj 1:b26ab2467b1a 519 char file[20];
benecsj 1:b26ab2467b1a 520 char *st;
benecsj 1:b26ab2467b1a 521 st = new char[50];
benecsj 1:b26ab2467b1a 522
benecsj 1:b26ab2467b1a 523 if (logging ==0) {
benecsj 1:b26ab2467b1a 524
benecsj 1:b26ab2467b1a 525
benecsj 1:b26ab2467b1a 526 logging = 1;
benecsj 1:b26ab2467b1a 527 timerMeasure.start();
benecsj 1:b26ab2467b1a 528 do {
benecsj 1:b26ab2467b1a 529 GetFile(fileindex++,st);
benecsj 1:b26ab2467b1a 530 strcpy(file,st);
benecsj 1:b26ab2467b1a 531
benecsj 1:b26ab2467b1a 532 sprintf(logfile,"%s%s%s",DATA_FOLDER,"/",file);
benecsj 1:b26ab2467b1a 533 printf("Available memory (exact bytes) : %d\r\n", AvailableMemory(1));
benecsj 1:b26ab2467b1a 534 } while (exists(DATA_FOLDER,file)); // while (sdcardIsFileExist (filepath.c_str())=='t');
benecsj 1:b26ab2467b1a 535
benecsj 1:b26ab2467b1a 536 printf ("Saving log file name : %s\r\n",logfile);
benecsj 1:b26ab2467b1a 537
benecsj 1:b26ab2467b1a 538
benecsj 1:b26ab2467b1a 539 SaveStatus();
benecsj 1:b26ab2467b1a 540
benecsj 1:b26ab2467b1a 541 printf ("Printing header into log file: %s\r\n",logfile);
benecsj 1:b26ab2467b1a 542
benecsj 1:b26ab2467b1a 543 sdcardWriteFile (logfile,WRITEFILE,"Measure Start\r\n");
benecsj 1:b26ab2467b1a 544 }
benecsj 1:b26ab2467b1a 545 }
benecsj 1:b26ab2467b1a 546
benecsj 1:b26ab2467b1a 547 void MeasureStop() {
benecsj 1:b26ab2467b1a 548 if (logging == 1) {
benecsj 1:b26ab2467b1a 549 printf ("Stopping measure.");
benecsj 1:b26ab2467b1a 550 logging = 0;
benecsj 1:b26ab2467b1a 551 SaveStatus();
benecsj 1:b26ab2467b1a 552 timerMeasure.stop();
benecsj 1:b26ab2467b1a 553 printf ("Measure stopped.");
benecsj 1:b26ab2467b1a 554 }
benecsj 1:b26ab2467b1a 555
benecsj 1:b26ab2467b1a 556 }
benecsj 1:b26ab2467b1a 557
benecsj 1:b26ab2467b1a 558 /** ----------------------------------------------------------------------
benecsj 1:b26ab2467b1a 559 * sdcardWriteFile
benecsj 1:b26ab2467b1a 560 * Ecrit une trame dans le fichier specifie
benecsj 1:b26ab2467b1a 561 * In : nom du fichier, mode d'ecriture, donnees a ecrire
benecsj 1:b26ab2467b1a 562 * Out : true/false
benecsj 1:b26ab2467b1a 563 * ---------------------------------------------------------------------*/
benecsj 1:b26ab2467b1a 564 char sdcardWriteFile(const char *fileName, char mode, char *data) {
benecsj 1:b26ab2467b1a 565
benecsj 1:b26ab2467b1a 566 FILE *fp2;
benecsj 1:b26ab2467b1a 567 switch (mode) {
benecsj 1:b26ab2467b1a 568 case WRITEFILE :
benecsj 1:b26ab2467b1a 569 fp2 = fopen(fileName, "w+");
benecsj 1:b26ab2467b1a 570 break;
benecsj 1:b26ab2467b1a 571 case APPENDFILE :
benecsj 1:b26ab2467b1a 572 fp2 = fopen(fileName, "a+");
benecsj 1:b26ab2467b1a 573 break;
benecsj 1:b26ab2467b1a 574 default:
benecsj 1:b26ab2467b1a 575 fp2 = fopen(fileName, "r");
benecsj 1:b26ab2467b1a 576 }
benecsj 1:b26ab2467b1a 577
benecsj 1:b26ab2467b1a 578 if (!fp2) {
benecsj 1:b26ab2467b1a 579 return (false);
benecsj 1:b26ab2467b1a 580 } else {
benecsj 1:b26ab2467b1a 581 fprintf(fp2,data);
benecsj 1:b26ab2467b1a 582 fclose(fp2);
benecsj 1:b26ab2467b1a 583 }
benecsj 1:b26ab2467b1a 584
benecsj 1:b26ab2467b1a 585 return (true);
benecsj 1:b26ab2467b1a 586 }
benecsj 1:b26ab2467b1a 587
benecsj 1:b26ab2467b1a 588
benecsj 1:b26ab2467b1a 589 //---------- Logger method------------------------------------------------
benecsj 1:b26ab2467b1a 590
benecsj 1:b26ab2467b1a 591 void MeasureLogger() {
benecsj 1:b26ab2467b1a 592
benecsj 1:b26ab2467b1a 593 if (timerMeasure.read() > interval) {
benecsj 1:b26ab2467b1a 594 led2 = 1;
benecsj 1:b26ab2467b1a 595 char buf[50];
benecsj 1:b26ab2467b1a 596 ctTime = time(NULL);
benecsj 1:b26ab2467b1a 597 ctTime += (clockoffset*3600);
benecsj 1:b26ab2467b1a 598 strftime(buf,sizeof(buf), "%Y.%m.%d / %H:%M:%S", localtime(&ctTime));
benecsj 1:b26ab2467b1a 599
benecsj 1:b26ab2467b1a 600 char resp[100] = "";
benecsj 1:b26ab2467b1a 601 strcat(resp,buf);
benecsj 1:b26ab2467b1a 602 char temp[32] ;
benecsj 1:b26ab2467b1a 603 probe[0]->convert_temperature(DS1820::all_devices);
benecsj 1:b26ab2467b1a 604 for (int i=0; i<devices_found; i++) {
benecsj 1:b26ab2467b1a 605 sprintf(temp," / %3.1f",(probe[i]->temperature('c')));
benecsj 1:b26ab2467b1a 606 strcat(resp,temp);
benecsj 1:b26ab2467b1a 607 }
benecsj 1:b26ab2467b1a 608 sprintf( temp , "\r\n");
benecsj 1:b26ab2467b1a 609 strcat(resp,temp);
benecsj 1:b26ab2467b1a 610 sdcardWriteFile (logfile,APPENDFILE,resp);
benecsj 1:b26ab2467b1a 611
benecsj 1:b26ab2467b1a 612 led2 = 0;
benecsj 1:b26ab2467b1a 613 timerMeasure.reset();
benecsj 1:b26ab2467b1a 614
benecsj 1:b26ab2467b1a 615 }
benecsj 1:b26ab2467b1a 616
benecsj 1:b26ab2467b1a 617 }
benecsj 1:b26ab2467b1a 618
benecsj 1:b26ab2467b1a 619 bool exists(char * root, char *filename) {
benecsj 1:b26ab2467b1a 620 DIR *d = opendir(root);
benecsj 1:b26ab2467b1a 621 struct dirent *p;
benecsj 1:b26ab2467b1a 622 //printf("\nList of files in the directory %s:\r\n", root);
benecsj 1:b26ab2467b1a 623 bool found = false;
benecsj 1:b26ab2467b1a 624 if ( d != NULL ) {
benecsj 1:b26ab2467b1a 625 while ( !found && (p = readdir(d)) != NULL ) {
benecsj 1:b26ab2467b1a 626 //printf(" - %s\r\n", p->d_name);
benecsj 1:b26ab2467b1a 627 if ( strcmp(p->d_name, filename) == 0 ) {
benecsj 1:b26ab2467b1a 628 found = true;
benecsj 1:b26ab2467b1a 629 printf("File exist\r\n");
benecsj 1:b26ab2467b1a 630 }
benecsj 1:b26ab2467b1a 631 }
benecsj 1:b26ab2467b1a 632 }
benecsj 1:b26ab2467b1a 633 if (!found) {
benecsj 1:b26ab2467b1a 634 printf("File not found\r\n");
benecsj 1:b26ab2467b1a 635 }
benecsj 1:b26ab2467b1a 636 closedir(d);
benecsj 1:b26ab2467b1a 637 return found;
benecsj 1:b26ab2467b1a 638 }