Measure system
Dependencies: EthernetNetIf mbed RF12B
MeasureSystem.cpp@0:8d62137f7ff4, 2011-03-03 (annotated)
- Committer:
- benecsj
- Date:
- Thu Mar 03 08:45:49 2011 +0000
- Revision:
- 0:8d62137f7ff4
- Child:
- 1:b26ab2467b1a
For FRIENDs.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
benecsj | 0:8d62137f7ff4 | 1 | #define MEASURE_C |
benecsj | 0:8d62137f7ff4 | 2 | |
benecsj | 0:8d62137f7ff4 | 3 | |
benecsj | 0:8d62137f7ff4 | 4 | #include "EthernetNetIf.h" |
benecsj | 0:8d62137f7ff4 | 5 | #include "HTTPServer.h" |
benecsj | 0:8d62137f7ff4 | 6 | #include "SDFileSystem.h" |
benecsj | 0:8d62137f7ff4 | 7 | #include "TextLCD.h" |
benecsj | 0:8d62137f7ff4 | 8 | #include "DS1820.h" |
benecsj | 0:8d62137f7ff4 | 9 | #include "MeasureSystem.h" |
benecsj | 0:8d62137f7ff4 | 10 | #include "NTPClient.h" |
benecsj | 0:8d62137f7ff4 | 11 | #include "WatchDog.h" |
benecsj | 0:8d62137f7ff4 | 12 | #include "HTTPClient.h" |
benecsj | 0:8d62137f7ff4 | 13 | |
benecsj | 0:8d62137f7ff4 | 14 | //--------------Objects and vars------------------ |
benecsj | 0:8d62137f7ff4 | 15 | EthernetNetIf *eth; |
benecsj | 0:8d62137f7ff4 | 16 | HTTPServer svr; |
benecsj | 0:8d62137f7ff4 | 17 | NTPClient ntp; |
benecsj | 0:8d62137f7ff4 | 18 | |
benecsj | 0:8d62137f7ff4 | 19 | Serial pc(USBTX, USBRX); // Serial debug usb port |
benecsj | 0:8d62137f7ff4 | 20 | DigitalIn dhcpOn(p30); |
benecsj | 0:8d62137f7ff4 | 21 | DigitalOut led1(LED1, "led1"); |
benecsj | 0:8d62137f7ff4 | 22 | DigitalOut led2(LED2, "led2"); |
benecsj | 0:8d62137f7ff4 | 23 | DigitalOut led3(LED3, "led3"); |
benecsj | 0:8d62137f7ff4 | 24 | DigitalOut led4(LED4, "led4"); |
benecsj | 0:8d62137f7ff4 | 25 | LocalFileSystem local("local"); //Internal flash |
benecsj | 0:8d62137f7ff4 | 26 | SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board |
benecsj | 0:8d62137f7ff4 | 27 | TextLCD lcd(p21, p23, p24, p25, p26, p27, TextLCD::LCD20x4 ); //Char lcd |
benecsj | 0:8d62137f7ff4 | 28 | watchdog wdog(15); // WDT 15 seconds |
benecsj | 0:8d62137f7ff4 | 29 | |
benecsj | 0:8d62137f7ff4 | 30 | const int MAX_PROBES = 2; |
benecsj | 0:8d62137f7ff4 | 31 | #define LOGGER_FILE "/sd/syslog/log.txt" |
benecsj | 0:8d62137f7ff4 | 32 | #define STATUS_FILE "/local/status.dat" |
benecsj | 0:8d62137f7ff4 | 33 | #define CONFIG_FILE "/local/config.txt" |
benecsj | 0:8d62137f7ff4 | 34 | #define SOURCE_FILE "/sd/index.htm" |
benecsj | 0:8d62137f7ff4 | 35 | #define TARGET_FILE "/local/index.htm" |
benecsj | 0:8d62137f7ff4 | 36 | #define COPY_BLOCK_SIZE 2048 |
benecsj | 0:8d62137f7ff4 | 37 | DS1820* probe[MAX_PROBES]; //Temp sensors |
benecsj | 0:8d62137f7ff4 | 38 | |
benecsj | 0:8d62137f7ff4 | 39 | //------status flags----------------- |
benecsj | 0:8d62137f7ff4 | 40 | int devices_found=0; |
benecsj | 0:8d62137f7ff4 | 41 | static string wanIP; |
benecsj | 0:8d62137f7ff4 | 42 | static string localIP; |
benecsj | 0:8d62137f7ff4 | 43 | int logging; |
benecsj | 0:8d62137f7ff4 | 44 | int fileindex; |
benecsj | 0:8d62137f7ff4 | 45 | bool getIPfromDHCP; |
benecsj | 0:8d62137f7ff4 | 46 | int interval; |
benecsj | 0:8d62137f7ff4 | 47 | int ipConfig[4]; |
benecsj | 0:8d62137f7ff4 | 48 | int maskConfig[4]; |
benecsj | 0:8d62137f7ff4 | 49 | int gatewayConfig[4]; |
benecsj | 0:8d62137f7ff4 | 50 | int dnsConfig[4]; |
benecsj | 0:8d62137f7ff4 | 51 | //---------------------MAIN----------------------- |
benecsj | 0:8d62137f7ff4 | 52 | int main() { |
benecsj | 0:8d62137f7ff4 | 53 | pc.baud(921600); |
benecsj | 0:8d62137f7ff4 | 54 | HandlerActive = false; |
benecsj | 0:8d62137f7ff4 | 55 | //-----------------LCD test------------------- |
benecsj | 0:8d62137f7ff4 | 56 | printf("\r\n\r\n<----------------------------------------------->"); |
benecsj | 0:8d62137f7ff4 | 57 | printf("\r\n<System Startup>\r\n"); |
benecsj | 0:8d62137f7ff4 | 58 | lcd.cls(); |
benecsj | 0:8d62137f7ff4 | 59 | lcd.printf("LCD Init.......Done\n"); |
benecsj | 0:8d62137f7ff4 | 60 | wait(0.2); |
benecsj | 0:8d62137f7ff4 | 61 | |
benecsj | 0:8d62137f7ff4 | 62 | //----------------SD.card test---------------- |
benecsj | 0:8d62137f7ff4 | 63 | printf("<SD card init>\r\n"); |
benecsj | 0:8d62137f7ff4 | 64 | lcd.printf("SDcard Init...."); |
benecsj | 0:8d62137f7ff4 | 65 | mkdir("/sd/syslog", 0777); |
benecsj | 0:8d62137f7ff4 | 66 | FILE *fp = fopen(LOGGER_FILE, "a+"); |
benecsj | 0:8d62137f7ff4 | 67 | if (fp == NULL) { |
benecsj | 0:8d62137f7ff4 | 68 | error("Could not open file for write\r\n"); |
benecsj | 0:8d62137f7ff4 | 69 | } |
benecsj | 0:8d62137f7ff4 | 70 | else |
benecsj | 0:8d62137f7ff4 | 71 | { |
benecsj | 0:8d62137f7ff4 | 72 | fprintf(fp, "<-------------------->\r\n"); |
benecsj | 0:8d62137f7ff4 | 73 | fclose(fp); |
benecsj | 0:8d62137f7ff4 | 74 | tempstring ="SYSTEM STARTUP";LogWrite(tempstring); |
benecsj | 0:8d62137f7ff4 | 75 | } |
benecsj | 0:8d62137f7ff4 | 76 | lcd.printf("Done\n"); |
benecsj | 0:8d62137f7ff4 | 77 | |
benecsj | 0:8d62137f7ff4 | 78 | |
benecsj | 0:8d62137f7ff4 | 79 | wdog.feed(); |
benecsj | 0:8d62137f7ff4 | 80 | //----------------DS1820 init----------------- |
benecsj | 0:8d62137f7ff4 | 81 | printf("<DS1820 init>\r\n"); |
benecsj | 0:8d62137f7ff4 | 82 | lcd.printf("Init sensors."); |
benecsj | 0:8d62137f7ff4 | 83 | InitDS1820(); |
benecsj | 0:8d62137f7ff4 | 84 | lcd.printf(".Done\n"); |
benecsj | 0:8d62137f7ff4 | 85 | |
benecsj | 0:8d62137f7ff4 | 86 | wdog.feed(); |
benecsj | 0:8d62137f7ff4 | 87 | //--------------Read config.txt--------------- |
benecsj | 0:8d62137f7ff4 | 88 | LoadConfig(); |
benecsj | 0:8d62137f7ff4 | 89 | //---------------Network init----------------- |
benecsj | 0:8d62137f7ff4 | 90 | lcd.printf("Network Init..."); |
benecsj | 0:8d62137f7ff4 | 91 | printf("<Network Init>\r\n"); |
benecsj | 0:8d62137f7ff4 | 92 | /* |
benecsj | 0:8d62137f7ff4 | 93 | char mac[6]; |
benecsj | 0:8d62137f7ff4 | 94 | mbed_mac_address(mac); |
benecsj | 0:8d62137f7ff4 | 95 | for (int i=0; i<6;i++) { |
benecsj | 0:8d62137f7ff4 | 96 | printf("%02X ", mac[i]); |
benecsj | 0:8d62137f7ff4 | 97 | } |
benecsj | 0:8d62137f7ff4 | 98 | printf("\n"); |
benecsj | 0:8d62137f7ff4 | 99 | */ |
benecsj | 0:8d62137f7ff4 | 100 | if (getIPfromDHCP) { |
benecsj | 0:8d62137f7ff4 | 101 | eth = new EthernetNetIf(); |
benecsj | 0:8d62137f7ff4 | 102 | } else { |
benecsj | 0:8d62137f7ff4 | 103 | eth = new EthernetNetIf( |
benecsj | 0:8d62137f7ff4 | 104 | IpAddr(ipConfig[0],ipConfig[1],ipConfig[2],ipConfig[3]), //IP Address |
benecsj | 0:8d62137f7ff4 | 105 | IpAddr(maskConfig[0],maskConfig[1],maskConfig[2],maskConfig[3]), //Network Mask |
benecsj | 0:8d62137f7ff4 | 106 | IpAddr(gatewayConfig[0],gatewayConfig[1],gatewayConfig[2],gatewayConfig[3]), //Gateway |
benecsj | 0:8d62137f7ff4 | 107 | IpAddr(dnsConfig[0],dnsConfig[1],dnsConfig[2],dnsConfig[3]) //DNS |
benecsj | 0:8d62137f7ff4 | 108 | ); |
benecsj | 0:8d62137f7ff4 | 109 | } |
benecsj | 0:8d62137f7ff4 | 110 | EthernetErr ethErr = eth->setup(10000); |
benecsj | 0:8d62137f7ff4 | 111 | if (ethErr) { |
benecsj | 0:8d62137f7ff4 | 112 | printf("Error %d in setup.\r\n", ethErr); |
benecsj | 0:8d62137f7ff4 | 113 | lcd.printf("Error"); |
benecsj | 0:8d62137f7ff4 | 114 | } |
benecsj | 0:8d62137f7ff4 | 115 | |
benecsj | 0:8d62137f7ff4 | 116 | sprintf(buf,"%d.%d.%d.%d", |
benecsj | 0:8d62137f7ff4 | 117 | eth->getIp()[0], eth->getIp()[1], eth->getIp()[2], eth->getIp()[3]); |
benecsj | 0:8d62137f7ff4 | 118 | localIP = string(buf); |
benecsj | 0:8d62137f7ff4 | 119 | |
benecsj | 0:8d62137f7ff4 | 120 | printf("Setup OK\r\n"); |
benecsj | 0:8d62137f7ff4 | 121 | lcd.printf("Done\n"); |
benecsj | 0:8d62137f7ff4 | 122 | wdog.feed(); |
benecsj | 0:8d62137f7ff4 | 123 | |
benecsj | 0:8d62137f7ff4 | 124 | //-----------------WAN check--------------------------- |
benecsj | 0:8d62137f7ff4 | 125 | |
benecsj | 0:8d62137f7ff4 | 126 | wait(1); |
benecsj | 0:8d62137f7ff4 | 127 | printf("<WAN Connection Check>\r\n"); |
benecsj | 0:8d62137f7ff4 | 128 | lcd.cls(); |
benecsj | 0:8d62137f7ff4 | 129 | lcd.printf("Internet conn.."); |
benecsj | 0:8d62137f7ff4 | 130 | GetMyIP(); |
benecsj | 0:8d62137f7ff4 | 131 | if (wanIP!="none") { |
benecsj | 0:8d62137f7ff4 | 132 | lcd.printf("Done\n"); |
benecsj | 0:8d62137f7ff4 | 133 | printf("OK: %s\r\n",wanIP.c_str()); |
benecsj | 0:8d62137f7ff4 | 134 | |
benecsj | 0:8d62137f7ff4 | 135 | } else { |
benecsj | 0:8d62137f7ff4 | 136 | lcd.printf("Fail\n"); |
benecsj | 0:8d62137f7ff4 | 137 | printf("No connection\r\n"); |
benecsj | 0:8d62137f7ff4 | 138 | } |
benecsj | 0:8d62137f7ff4 | 139 | wdog.feed(); |
benecsj | 0:8d62137f7ff4 | 140 | //-----------------RTC INIT------------------------ |
benecsj | 0:8d62137f7ff4 | 141 | |
benecsj | 0:8d62137f7ff4 | 142 | lcd.printf("RTClock Init..."); |
benecsj | 0:8d62137f7ff4 | 143 | printf("<RTC Init>\r\n"); |
benecsj | 0:8d62137f7ff4 | 144 | |
benecsj | 0:8d62137f7ff4 | 145 | if (wanIP!="none") { |
benecsj | 0:8d62137f7ff4 | 146 | UpdateTime(); |
benecsj | 0:8d62137f7ff4 | 147 | strftime(buf,sizeof(buf), "%A %m/%d/%Y %H:%M:%S\n", localtime(&ctTime)); |
benecsj | 0:8d62137f7ff4 | 148 | printf("Time is now : %s JST\r\n", buf); |
benecsj | 0:8d62137f7ff4 | 149 | lcd.printf("Done\n"); |
benecsj | 0:8d62137f7ff4 | 150 | } else { |
benecsj | 0:8d62137f7ff4 | 151 | printf("Cannot connect NTP Server!!\r\n"); |
benecsj | 0:8d62137f7ff4 | 152 | lcd.printf("Fail\n"); |
benecsj | 0:8d62137f7ff4 | 153 | } |
benecsj | 0:8d62137f7ff4 | 154 | |
benecsj | 0:8d62137f7ff4 | 155 | wdog.feed(); |
benecsj | 0:8d62137f7ff4 | 156 | |
benecsj | 0:8d62137f7ff4 | 157 | //-------Init index.htm in local filesystem--------- |
benecsj | 0:8d62137f7ff4 | 158 | lcd.printf("Loading config."); |
benecsj | 0:8d62137f7ff4 | 159 | LoadStatus(); |
benecsj | 0:8d62137f7ff4 | 160 | IndexInit(); |
benecsj | 0:8d62137f7ff4 | 161 | lcd.printf("Done\n"); |
benecsj | 0:8d62137f7ff4 | 162 | wdog.feed(); |
benecsj | 0:8d62137f7ff4 | 163 | //-----------------Welcome message------------------ |
benecsj | 0:8d62137f7ff4 | 164 | wait(2); |
benecsj | 0:8d62137f7ff4 | 165 | lcd.cls(); |
benecsj | 0:8d62137f7ff4 | 166 | lcd.printf("Welcome to mbed. \nMeasure system.\n"); |
benecsj | 0:8d62137f7ff4 | 167 | lcd.printf("IP: %s\n",localIP.c_str()); |
benecsj | 0:8d62137f7ff4 | 168 | //--------------HTTP SERVER------------------------- |
benecsj | 0:8d62137f7ff4 | 169 | |
benecsj | 0:8d62137f7ff4 | 170 | FSHandler::mount("/local", "/"); //Mount /wwww path on web root path |
benecsj | 0:8d62137f7ff4 | 171 | FSHandler::mount("/sd", "/extern"); //Mount /wwww path on web root path |
benecsj | 0:8d62137f7ff4 | 172 | svr.addHandler<FSHandler>("/files");// this does not see the subdirectory |
benecsj | 0:8d62137f7ff4 | 173 | svr.addHandler<FSHandler>("/"); //Default handler |
benecsj | 0:8d62137f7ff4 | 174 | svr.addHandler<SimpleHandler>("/com"); //Com hander |
benecsj | 0:8d62137f7ff4 | 175 | svr.bind(80); |
benecsj | 0:8d62137f7ff4 | 176 | |
benecsj | 0:8d62137f7ff4 | 177 | printf("<INIT DONE... Server running>\r\n"); |
benecsj | 0:8d62137f7ff4 | 178 | ctTime = time(NULL); |
benecsj | 0:8d62137f7ff4 | 179 | ctTime += (clockoffset*3600); |
benecsj | 0:8d62137f7ff4 | 180 | strftime(buf,sizeof(buf), "%Y/%m/%d %H:%M:%S", localtime(&ctTime)); |
benecsj | 0:8d62137f7ff4 | 181 | tempstring =""; |
benecsj | 0:8d62137f7ff4 | 182 | tempstring += buf;LogWrite(tempstring); |
benecsj | 0:8d62137f7ff4 | 183 | tempstring ="SYSTEM READY";LogWrite(tempstring); |
benecsj | 0:8d62137f7ff4 | 184 | Timer tm; |
benecsj | 0:8d62137f7ff4 | 185 | tm.start(); |
benecsj | 0:8d62137f7ff4 | 186 | //Listen indefinitely |
benecsj | 0:8d62137f7ff4 | 187 | int counter =0; |
benecsj | 0:8d62137f7ff4 | 188 | |
benecsj | 0:8d62137f7ff4 | 189 | //-------------------MAIN LOOP-------------------- |
benecsj | 0:8d62137f7ff4 | 190 | while (true) { |
benecsj | 0:8d62137f7ff4 | 191 | Net::poll(); // Network listen |
benecsj | 0:8d62137f7ff4 | 192 | |
benecsj | 0:8d62137f7ff4 | 193 | if (tm.read()>1) { |
benecsj | 0:8d62137f7ff4 | 194 | counter = (counter++)%3600; //Timer counter loop |
benecsj | 0:8d62137f7ff4 | 195 | |
benecsj | 0:8d62137f7ff4 | 196 | led1=!led1; //Show that we are alive 1 sec timed |
benecsj | 0:8d62137f7ff4 | 197 | if (logging==1) |
benecsj | 0:8d62137f7ff4 | 198 | { |
benecsj | 0:8d62137f7ff4 | 199 | led4 =!led1; |
benecsj | 0:8d62137f7ff4 | 200 | } |
benecsj | 0:8d62137f7ff4 | 201 | else |
benecsj | 0:8d62137f7ff4 | 202 | { |
benecsj | 0:8d62137f7ff4 | 203 | led4 = 0; |
benecsj | 0:8d62137f7ff4 | 204 | } |
benecsj | 0:8d62137f7ff4 | 205 | UpdateLCD(counter); //Refress LCD |
benecsj | 0:8d62137f7ff4 | 206 | |
benecsj | 0:8d62137f7ff4 | 207 | if (wanIP=="none" & (counter%30)==0) { //If no network detected aat startup then try to connect every 30 sec |
benecsj | 0:8d62137f7ff4 | 208 | GetMyIP(); |
benecsj | 0:8d62137f7ff4 | 209 | if (wanIP!="none") { |
benecsj | 0:8d62137f7ff4 | 210 | IndexInit() ; |
benecsj | 0:8d62137f7ff4 | 211 | UpdateTime(); |
benecsj | 0:8d62137f7ff4 | 212 | } |
benecsj | 0:8d62137f7ff4 | 213 | } |
benecsj | 0:8d62137f7ff4 | 214 | |
benecsj | 0:8d62137f7ff4 | 215 | wdog.feed(); |
benecsj | 0:8d62137f7ff4 | 216 | tm.start(); |
benecsj | 0:8d62137f7ff4 | 217 | } |
benecsj | 0:8d62137f7ff4 | 218 | |
benecsj | 0:8d62137f7ff4 | 219 | } |
benecsj | 0:8d62137f7ff4 | 220 | |
benecsj | 0:8d62137f7ff4 | 221 | |
benecsj | 0:8d62137f7ff4 | 222 | } |
benecsj | 0:8d62137f7ff4 | 223 | |
benecsj | 0:8d62137f7ff4 | 224 | |
benecsj | 0:8d62137f7ff4 | 225 | //---------------------------Functions-------------------------- |
benecsj | 0:8d62137f7ff4 | 226 | |
benecsj | 0:8d62137f7ff4 | 227 | void InitDS1820() { |
benecsj | 0:8d62137f7ff4 | 228 | |
benecsj | 0:8d62137f7ff4 | 229 | int i; |
benecsj | 0:8d62137f7ff4 | 230 | // Initialize the probe array to DS1820 objects |
benecsj | 0:8d62137f7ff4 | 231 | for (i = 0; i < MAX_PROBES; i++) |
benecsj | 0:8d62137f7ff4 | 232 | probe[i] = new DS1820(p29); |
benecsj | 0:8d62137f7ff4 | 233 | // Initialize global state variables |
benecsj | 0:8d62137f7ff4 | 234 | probe[0]->search_ROM_setup(); |
benecsj | 0:8d62137f7ff4 | 235 | // Loop to find all devices on the data line |
benecsj | 0:8d62137f7ff4 | 236 | while (probe[devices_found]->search_ROM() and devices_found<MAX_PROBES-1) |
benecsj | 0:8d62137f7ff4 | 237 | devices_found++; |
benecsj | 0:8d62137f7ff4 | 238 | // If maximum number of probes are found, |
benecsj | 0:8d62137f7ff4 | 239 | // bump the counter to include the last array entry |
benecsj | 0:8d62137f7ff4 | 240 | if (probe[devices_found]->ROM[0] != 0xFF) |
benecsj | 0:8d62137f7ff4 | 241 | devices_found++; |
benecsj | 0:8d62137f7ff4 | 242 | |
benecsj | 0:8d62137f7ff4 | 243 | if (devices_found==0) |
benecsj | 0:8d62137f7ff4 | 244 | printf("No devices found"); |
benecsj | 0:8d62137f7ff4 | 245 | else { |
benecsj | 0:8d62137f7ff4 | 246 | |
benecsj | 0:8d62137f7ff4 | 247 | probe[0]->convert_temperature(DS1820::all_devices); |
benecsj | 0:8d62137f7ff4 | 248 | for (i=0; i<devices_found; i++) { |
benecsj | 0:8d62137f7ff4 | 249 | printf("%3.1f \r\n",probe[i]->temperature('c')); |
benecsj | 0:8d62137f7ff4 | 250 | } |
benecsj | 0:8d62137f7ff4 | 251 | } |
benecsj | 0:8d62137f7ff4 | 252 | |
benecsj | 0:8d62137f7ff4 | 253 | lcd.printf("%d",devices_found); |
benecsj | 0:8d62137f7ff4 | 254 | } |
benecsj | 0:8d62137f7ff4 | 255 | |
benecsj | 0:8d62137f7ff4 | 256 | //-------------------Get WAN IP adress------------------------- |
benecsj | 0:8d62137f7ff4 | 257 | void GetMyIP() { |
benecsj | 0:8d62137f7ff4 | 258 | HTTPClient http; |
benecsj | 0:8d62137f7ff4 | 259 | HTTPText txt; |
benecsj | 0:8d62137f7ff4 | 260 | HTTPResult r = http.get("http://www.whatismyip.com/automation/n09230945NL.asp", &txt); |
benecsj | 0:8d62137f7ff4 | 261 | if (r==HTTP_OK) { |
benecsj | 0:8d62137f7ff4 | 262 | wanIP = txt.gets(); |
benecsj | 0:8d62137f7ff4 | 263 | } else { |
benecsj | 0:8d62137f7ff4 | 264 | wanIP="none"; |
benecsj | 0:8d62137f7ff4 | 265 | } |
benecsj | 0:8d62137f7ff4 | 266 | } |
benecsj | 0:8d62137f7ff4 | 267 | |
benecsj | 0:8d62137f7ff4 | 268 | //-----------------Create Index HTM in local------------------- |
benecsj | 0:8d62137f7ff4 | 269 | void IndexInit() { |
benecsj | 0:8d62137f7ff4 | 270 | FILE *fs_src; |
benecsj | 0:8d62137f7ff4 | 271 | FILE *fs_tgt; |
benecsj | 0:8d62137f7ff4 | 272 | char buffer[ COPY_BLOCK_SIZE ]; |
benecsj | 0:8d62137f7ff4 | 273 | |
benecsj | 0:8d62137f7ff4 | 274 | printf( "file copier started.\r\n" ); |
benecsj | 0:8d62137f7ff4 | 275 | printf( " source:%s >>> target:%s\r\n", SOURCE_FILE, TARGET_FILE ); |
benecsj | 0:8d62137f7ff4 | 276 | |
benecsj | 0:8d62137f7ff4 | 277 | if ( NULL == (fs_src = fopen( SOURCE_FILE, "rb" )) ) { |
benecsj | 0:8d62137f7ff4 | 278 | error( "couldn't open source file" ); |
benecsj | 0:8d62137f7ff4 | 279 | } |
benecsj | 0:8d62137f7ff4 | 280 | if ( NULL == (fs_tgt = fopen( TARGET_FILE, "wb" )) ) { |
benecsj | 0:8d62137f7ff4 | 281 | error( "couldn't open target file" ); |
benecsj | 0:8d62137f7ff4 | 282 | } |
benecsj | 0:8d62137f7ff4 | 283 | |
benecsj | 0:8d62137f7ff4 | 284 | /* |
benecsj | 0:8d62137f7ff4 | 285 | while ( size = fread( s, sizeof( char ), COPY_BLOCK_SIZE, fs_src ) ) |
benecsj | 0:8d62137f7ff4 | 286 | { |
benecsj | 0:8d62137f7ff4 | 287 | fwrite( s, sizeof( char ), size, fs_tgt ); |
benecsj | 0:8d62137f7ff4 | 288 | total += size; |
benecsj | 0:8d62137f7ff4 | 289 | |
benecsj | 0:8d62137f7ff4 | 290 | led1 = (0x1 << progress_ind++ % 4); |
benecsj | 0:8d62137f7ff4 | 291 | |
benecsj | 0:8d62137f7ff4 | 292 | printf( " %d bytes copied\r", total ); |
benecsj | 0:8d62137f7ff4 | 293 | } |
benecsj | 0:8d62137f7ff4 | 294 | */ |
benecsj | 0:8d62137f7ff4 | 295 | string temp; |
benecsj | 0:8d62137f7ff4 | 296 | char token[] = "ServerAddress"; |
benecsj | 0:8d62137f7ff4 | 297 | while (fgets(buffer, COPY_BLOCK_SIZE, fs_src)) { |
benecsj | 0:8d62137f7ff4 | 298 | |
benecsj | 0:8d62137f7ff4 | 299 | temp = string(buffer); |
benecsj | 0:8d62137f7ff4 | 300 | int j=0; |
benecsj | 0:8d62137f7ff4 | 301 | for (int i=0;i<COPY_BLOCK_SIZE;i++) { |
benecsj | 0:8d62137f7ff4 | 302 | if (buffer[i]==token[j]) { |
benecsj | 0:8d62137f7ff4 | 303 | j++; |
benecsj | 0:8d62137f7ff4 | 304 | } else { |
benecsj | 0:8d62137f7ff4 | 305 | j=0; |
benecsj | 0:8d62137f7ff4 | 306 | } |
benecsj | 0:8d62137f7ff4 | 307 | |
benecsj | 0:8d62137f7ff4 | 308 | if (j==12) break; |
benecsj | 0:8d62137f7ff4 | 309 | |
benecsj | 0:8d62137f7ff4 | 310 | if (buffer[i]==0) { |
benecsj | 0:8d62137f7ff4 | 311 | break; |
benecsj | 0:8d62137f7ff4 | 312 | } |
benecsj | 0:8d62137f7ff4 | 313 | } |
benecsj | 0:8d62137f7ff4 | 314 | |
benecsj | 0:8d62137f7ff4 | 315 | if (j==12) { //Change to find string element search by char. |
benecsj | 0:8d62137f7ff4 | 316 | if (wanIP!="none") { |
benecsj | 0:8d62137f7ff4 | 317 | |
benecsj | 0:8d62137f7ff4 | 318 | temp = wanIP; |
benecsj | 0:8d62137f7ff4 | 319 | } else { |
benecsj | 0:8d62137f7ff4 | 320 | temp =localIP; |
benecsj | 0:8d62137f7ff4 | 321 | } |
benecsj | 0:8d62137f7ff4 | 322 | fprintf(fs_tgt," <param name=\"ServerAddress\" value=\"%s\">",temp.c_str()); |
benecsj | 0:8d62137f7ff4 | 323 | } else { |
benecsj | 0:8d62137f7ff4 | 324 | fprintf(fs_tgt,"%s",temp.c_str()); |
benecsj | 0:8d62137f7ff4 | 325 | } |
benecsj | 0:8d62137f7ff4 | 326 | } |
benecsj | 0:8d62137f7ff4 | 327 | |
benecsj | 0:8d62137f7ff4 | 328 | led1 = 0xF; |
benecsj | 0:8d62137f7ff4 | 329 | |
benecsj | 0:8d62137f7ff4 | 330 | fclose( fs_src ); |
benecsj | 0:8d62137f7ff4 | 331 | fclose( fs_tgt ); |
benecsj | 0:8d62137f7ff4 | 332 | |
benecsj | 0:8d62137f7ff4 | 333 | printf( "done\r\n" ); |
benecsj | 0:8d62137f7ff4 | 334 | } |
benecsj | 0:8d62137f7ff4 | 335 | |
benecsj | 0:8d62137f7ff4 | 336 | //------------Update lcd------------------------------ |
benecsj | 0:8d62137f7ff4 | 337 | bool IPshowflag = false; |
benecsj | 0:8d62137f7ff4 | 338 | void UpdateLCD(int counter) { |
benecsj | 0:8d62137f7ff4 | 339 | if (counter%4==0) { |
benecsj | 0:8d62137f7ff4 | 340 | lcd.locate(0,2); |
benecsj | 0:8d62137f7ff4 | 341 | lcd.locate(0,2); |
benecsj | 0:8d62137f7ff4 | 342 | if (wanIP!="none") { |
benecsj | 0:8d62137f7ff4 | 343 | if (IPshowflag) { |
benecsj | 0:8d62137f7ff4 | 344 | lcd.printf("IP: %s ", localIP.c_str()); |
benecsj | 0:8d62137f7ff4 | 345 | } else { |
benecsj | 0:8d62137f7ff4 | 346 | lcd.printf("IP: %s ", wanIP.c_str()); |
benecsj | 0:8d62137f7ff4 | 347 | } |
benecsj | 0:8d62137f7ff4 | 348 | IPshowflag = !IPshowflag; |
benecsj | 0:8d62137f7ff4 | 349 | } else { |
benecsj | 0:8d62137f7ff4 | 350 | //DO nothing only one ip address is shown |
benecsj | 0:8d62137f7ff4 | 351 | } |
benecsj | 0:8d62137f7ff4 | 352 | } |
benecsj | 0:8d62137f7ff4 | 353 | |
benecsj | 0:8d62137f7ff4 | 354 | if (counter%1==0) { //Every sec |
benecsj | 0:8d62137f7ff4 | 355 | lcd.locate(0,3); |
benecsj | 0:8d62137f7ff4 | 356 | ctTime = time(NULL); |
benecsj | 0:8d62137f7ff4 | 357 | ctTime += (clockoffset*3600); |
benecsj | 0:8d62137f7ff4 | 358 | strftime(buf,sizeof(buf), "%Y/%m/%d %H:%M:%S", localtime(&ctTime)); |
benecsj | 0:8d62137f7ff4 | 359 | lcd.printf("%s", buf); |
benecsj | 0:8d62137f7ff4 | 360 | } |
benecsj | 0:8d62137f7ff4 | 361 | |
benecsj | 0:8d62137f7ff4 | 362 | |
benecsj | 0:8d62137f7ff4 | 363 | } |
benecsj | 0:8d62137f7ff4 | 364 | |
benecsj | 0:8d62137f7ff4 | 365 | //----------------Update time--------------------- |
benecsj | 0:8d62137f7ff4 | 366 | void UpdateTime() { |
benecsj | 0:8d62137f7ff4 | 367 | time_t ctTime; |
benecsj | 0:8d62137f7ff4 | 368 | ctTime = time(NULL); |
benecsj | 0:8d62137f7ff4 | 369 | Host server(IpAddr(), 123, "0.hu.pool.ntp.org"); |
benecsj | 0:8d62137f7ff4 | 370 | ntp.setTime(server); |
benecsj | 0:8d62137f7ff4 | 371 | ctTime = time(NULL); |
benecsj | 0:8d62137f7ff4 | 372 | ctTime += (clockoffset*3600); //set jst time |
benecsj | 0:8d62137f7ff4 | 373 | } |
benecsj | 0:8d62137f7ff4 | 374 | |
benecsj | 0:8d62137f7ff4 | 375 | //---------------Load config---------------------- |
benecsj | 0:8d62137f7ff4 | 376 | void LoadConfig() { |
benecsj | 0:8d62137f7ff4 | 377 | FILE *fs_src; |
benecsj | 0:8d62137f7ff4 | 378 | char buffer[ 100 ]; |
benecsj | 0:8d62137f7ff4 | 379 | int linecounter = 0; |
benecsj | 0:8d62137f7ff4 | 380 | fs_src = fopen( CONFIG_FILE, "rb" ); |
benecsj | 0:8d62137f7ff4 | 381 | while (fgets(buffer, 100, fs_src)) { |
benecsj | 0:8d62137f7ff4 | 382 | linecounter++; |
benecsj | 0:8d62137f7ff4 | 383 | |
benecsj | 0:8d62137f7ff4 | 384 | switch (linecounter) { |
benecsj | 0:8d62137f7ff4 | 385 | case 2 : |
benecsj | 0:8d62137f7ff4 | 386 | sscanf(buffer,"%d.%d.%d.%d",&ipConfig[0],&ipConfig[1],&ipConfig[2],&ipConfig[3]); |
benecsj | 0:8d62137f7ff4 | 387 | break; |
benecsj | 0:8d62137f7ff4 | 388 | case 4 : |
benecsj | 0:8d62137f7ff4 | 389 | sscanf(buffer,"%d.%d.%d.%d",&maskConfig[0],&maskConfig[1],&maskConfig[2],&maskConfig[3]); |
benecsj | 0:8d62137f7ff4 | 390 | break; |
benecsj | 0:8d62137f7ff4 | 391 | case 6 : |
benecsj | 0:8d62137f7ff4 | 392 | sscanf(buffer,"%d.%d.%d.%d",&gatewayConfig[0],&gatewayConfig[1],&gatewayConfig[2],&gatewayConfig[3]); |
benecsj | 0:8d62137f7ff4 | 393 | break; |
benecsj | 0:8d62137f7ff4 | 394 | case 8 : |
benecsj | 0:8d62137f7ff4 | 395 | sscanf(buffer,"%d.%d.%d.%d",&dnsConfig[0],&dnsConfig[1],&dnsConfig[2],&dnsConfig[3]); |
benecsj | 0:8d62137f7ff4 | 396 | break; |
benecsj | 0:8d62137f7ff4 | 397 | case 10: |
benecsj | 0:8d62137f7ff4 | 398 | if (buffer[0]=='t' | buffer[0]=='T') getIPfromDHCP= true; |
benecsj | 0:8d62137f7ff4 | 399 | else getIPfromDHCP = false; |
benecsj | 0:8d62137f7ff4 | 400 | break; |
benecsj | 0:8d62137f7ff4 | 401 | case 13: |
benecsj | 0:8d62137f7ff4 | 402 | sscanf(buffer,"%d",&interval); |
benecsj | 0:8d62137f7ff4 | 403 | break; |
benecsj | 0:8d62137f7ff4 | 404 | case 15: |
benecsj | 0:8d62137f7ff4 | 405 | sscanf(buffer,"%d",&clockoffset); |
benecsj | 0:8d62137f7ff4 | 406 | break; |
benecsj | 0:8d62137f7ff4 | 407 | } |
benecsj | 0:8d62137f7ff4 | 408 | |
benecsj | 0:8d62137f7ff4 | 409 | } |
benecsj | 0:8d62137f7ff4 | 410 | |
benecsj | 0:8d62137f7ff4 | 411 | fclose( fs_src ); |
benecsj | 0:8d62137f7ff4 | 412 | } |
benecsj | 0:8d62137f7ff4 | 413 | |
benecsj | 0:8d62137f7ff4 | 414 | //---------------Load status-------------------------- |
benecsj | 0:8d62137f7ff4 | 415 | void LoadStatus() |
benecsj | 0:8d62137f7ff4 | 416 | { |
benecsj | 0:8d62137f7ff4 | 417 | FILE *fs_src; |
benecsj | 0:8d62137f7ff4 | 418 | char buffer[ 100 ]; |
benecsj | 0:8d62137f7ff4 | 419 | int linecounter = 0; |
benecsj | 0:8d62137f7ff4 | 420 | fs_src = fopen( STATUS_FILE, "rb" ); |
benecsj | 0:8d62137f7ff4 | 421 | while (fgets(buffer, 100, fs_src)) { |
benecsj | 0:8d62137f7ff4 | 422 | linecounter++; |
benecsj | 0:8d62137f7ff4 | 423 | |
benecsj | 0:8d62137f7ff4 | 424 | switch (linecounter) { |
benecsj | 0:8d62137f7ff4 | 425 | case 1: |
benecsj | 0:8d62137f7ff4 | 426 | sscanf(buffer,"%d",&logging); |
benecsj | 0:8d62137f7ff4 | 427 | break; |
benecsj | 0:8d62137f7ff4 | 428 | case 2: |
benecsj | 0:8d62137f7ff4 | 429 | sscanf(buffer,"%d",&fileindex); |
benecsj | 0:8d62137f7ff4 | 430 | break; |
benecsj | 0:8d62137f7ff4 | 431 | } |
benecsj | 0:8d62137f7ff4 | 432 | |
benecsj | 0:8d62137f7ff4 | 433 | } |
benecsj | 0:8d62137f7ff4 | 434 | |
benecsj | 0:8d62137f7ff4 | 435 | fclose( fs_src ); |
benecsj | 0:8d62137f7ff4 | 436 | |
benecsj | 0:8d62137f7ff4 | 437 | } |
benecsj | 0:8d62137f7ff4 | 438 | |
benecsj | 0:8d62137f7ff4 | 439 | //---------------Log writer----------------------------- |
benecsj | 0:8d62137f7ff4 | 440 | void LogWrite(string stringin) |
benecsj | 0:8d62137f7ff4 | 441 | { |
benecsj | 0:8d62137f7ff4 | 442 | FILE *fp = fopen(LOGGER_FILE, "a"); |
benecsj | 0:8d62137f7ff4 | 443 | if (fp == NULL) { |
benecsj | 0:8d62137f7ff4 | 444 | error("Could not open file for write\r\n"); |
benecsj | 0:8d62137f7ff4 | 445 | } |
benecsj | 0:8d62137f7ff4 | 446 | fprintf(fp,"%s\r\n",stringin.c_str()); |
benecsj | 0:8d62137f7ff4 | 447 | fclose(fp); |
benecsj | 0:8d62137f7ff4 | 448 | } |