Updated Wiflash
Dependents: wiflash-demo-blinkk wiflashdemo
Revision 0:30192d068543, committed 2015-05-01
- Comitter:
- adhithyan15
- Date:
- Fri May 01 15:03:29 2015 +0000
- Commit message:
- Updated
Changed in this revision
wiflash.cpp | Show annotated file Show diff for this revision Revisions of this file |
wiflash.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wiflash.cpp Fri May 01 15:03:29 2015 +0000 @@ -0,0 +1,196 @@ +#include "wiflash.h" +#include "rtos.h" +#include <fstream> +#include <stdio.h> +#include <string> +#define IAP_LOCATION 0x1FFF1FF1 +#define START_THREAD 1 +extern "C" void mbed_reset(); + +Serial pc(USBTX,USBRX); +typedef void (*IAP)(unsigned long [], unsigned long[] ); +IAP iap_entry = (IAP) IAP_LOCATION; +Mutex stdio_mutex; +Thread *t; + +void listdir(void) { + DIR *d; + struct dirent *p; + string l; + string full_file_name; + string test1 = "_LPC1768.BIN"; + string test2 = "MBED.HTM"; + string test3 = "WIFLASH.TXT"; + d = opendir("/local"); + int ret; + if (d != NULL) { + while ((p = readdir(d)) != NULL) { + l = string(p->d_name); + + if(l != test1 && l != test2 && l != test3){ + full_file_name = string("/local/") + l; + ret = remove(full_file_name.c_str()); + if(ret == 0) + { + printf("File deleted successfully\n"); + } + else + { + printf("Error: unable to delete the file\n"); + } + } + } + } else { + printf("Could not open directory!\n"); + } + closedir(d); + mbed_reset(); +} + +Wiflash::Wiflash() : local("local"){ + +} + +string get_serial_number(){ + unsigned long command[5] = {0,0,0,0,0}; + unsigned long result[5] = {0,0,0,0,0}; + command[0] = 58; // read device serial number + iap_entry(command, result); + string output; + stringstream out; + if (result[0] == 0) { + for(int i = 1; i < 5; i++) { + out << result[i]; + } + } else { + printf("Status error!\r\n"); + } + output = out.str(); + return output; + +} + + + +void check_for_new_firmware(void const *args) { + + while (true) { + TCPSocketConnection sock; + sock.connect("104.236.198.189", 80); + stdio_mutex.lock(); + pc.printf("I am here\n"); + char url_buffer[100]; + pc.printf("I am here 2\n"); + sprintf (url_buffer, "GET /firmware_check/%s.json HTTP/1.0\n\n", get_serial_number().c_str()); + pc.printf(url_buffer); + sock.send_all(url_buffer, sizeof(url_buffer)-1); + char buffer[600]; + int ret; + int total_chars = 0; + while (true) { + ret = sock.receive(buffer, sizeof(buffer)-1); + if (ret <= 0) + break; + buffer[ret] = '\0'; + if(ret == 25){ + pc.printf("Received the timestamp %s\n", buffer); + pc.printf("%d\n",ret); + FILE *ptr = fopen("/local/wiflash.txt", "r"); + char str[30]; + int i; + i = fread(str, 1,30,ptr); + str[i] = '\0'; + fclose(ptr); + string response = string(buffer); + string file_data = string(str); + pc.printf("File timestamp %s\n",str); + pc.printf("file data length %d\n",file_data.length()); + pc.printf("response data length %d\n",response.length()); + size_t found = response.find(file_data); + if(file_data!= response){ + ptr = fopen("/local/wiflash.txt", "w"); + pc.printf("Received the timestamp %s\n", buffer); + fprintf(ptr,buffer); + fclose(ptr); + pc.printf("I am inside socket\n"); + TCPSocketConnection sock2; + sock.close(); + sock2.connect("104.236.198.189", 80); + char url2_buffer[100]; + sprintf (url2_buffer, "GET /devices/%s/download.json HTTP/1.0\n\n", get_serial_number().c_str()); + sock2.send_all(url2_buffer, sizeof(url_buffer)-1); + int ret2; + FILE* pFile; + pFile = fopen("/local/_LPC1768.bin", "wb"); + if(pFile){ + pc.printf("File already exists\n"); + pc.printf("Deleting file\n"); + ret = remove("/local/_LPC1768.bin"); + if(ret == 0) + { + pc.printf("File deleted successfully\n"); + pFile = fopen("/local/_tmp.bin", "wb"); + } + } + pFile = fopen("/local/_LPC1768.bin", "wb"); + pc.printf("Writing a new empty _LPC1768.bin file\n"); + int counter = 0; + char test[] = "\n\nHello\n\n"; + memset( buffer, '\0', sizeof(char)*600 ); + string k; + string phusion_passenger = "X-Powered-By: Phusion Passenger 5.0.6"; + while (true) { + counter += 1; + ret2 = sock2.receive(buffer, sizeof(buffer)-1); + if (ret2 <= 0) + break; + buffer[ret2] = '\0'; + k = string(buffer); + size_t found = k.find(phusion_passenger); + if (found == string::npos){ + printf("Download data\n"); + total_chars += ret2; + fwrite (buffer , sizeof(char), ret2, pFile); + } + memset( buffer, '\0', sizeof(char)*600 ); + } + fclose(pFile); + pc.printf("Total downloade chars %d\n",total_chars); + sock2.close(); + listdir(); + t->terminate(); + } + } + } + wait(20); + stdio_mutex.unlock(); + } +} + + + +bool Wiflash::setUp(){ + int ret; + stdio_mutex.lock(); + file = fopen("/local/wiflash.txt", "r"); + if(file){ + fclose(file); + } else { + file = fopen("/local/wiflash.txt", "w"); + fprintf(file, "Hello World!"); + fclose(file); + } + file = fopen("/local/_LPC1768.bin", "r"); + if(file){ + fclose(file); + } else { + file = fopen("/local/_LPC1768.bin", "w"); + fclose(file); + } + stdio_mutex.unlock(); + eth.init(); //Use DHCP + eth.connect(); + printf("IP Address is %s\n", eth.getIPAddress()); + t = new Thread(check_for_new_firmware); + return true; +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wiflash.h Fri May 01 15:03:29 2015 +0000 @@ -0,0 +1,17 @@ +#include "mbed.h" +#include <string> +#include <sstream> +#include "EthernetInterface.h" +#include "rtos.h" + + +class Wiflash{ + private: + EthernetInterface eth; + Thread *thread; + LocalFileSystem local; + FILE *file; + public: + Wiflash(); + bool setUp(); +}; \ No newline at end of file