Fork from Alex

Dependencies:   mbed MbedJSONValue mbed-rtos 4DGL-uLCD-SE ESP8266NodeMCUInterface

Revision:
8:d323c6406b47
Parent:
6:ec7829f7cd38
Child:
9:299eb69af04e
--- a/main.cpp	Mon Apr 01 16:56:49 2019 +0000
+++ b/main.cpp	Mon Apr 01 17:00:17 2019 +0000
@@ -42,29 +42,30 @@
 char time_api_key[256];
 char weather_api_key[256];
 
-void time_updater() {
+void time_updater()
+{
     // We're not an interrupt, so take as much time as we need. Infinite loop
     // but wait 1 second between each loop
     struct tm* ltm;
     time_t now;
-    
+
     now = time(NULL);
     ltm = localtime(&now);
-    
+
     // Buffer for time string. Max length is 23:59 + \0
     int max_time_len = 8;
     char ftime[max_time_len];
     ftime[0] = ' ';
     ftime[1] = ' ';
     int min = -1;
-    
+
     while (true) {
         // if the minute has changed, update.
         now = time(NULL);
         ltm = localtime(&now);
         if(ltm->tm_min != min) {
             // Get the new time
-            strftime(ftime + 2, max_time_len, "%H:%M", ltm); 
+            strftime(ftime + 2, max_time_len, "%H:%M", ltm);
             // Update time! Lock the lcd mutex
             lcd_lock.lock();
             uLCD.text_width(2);
@@ -76,10 +77,11 @@
         }
         // Wait 1 second
         Thread::wait(1.0f);
-    }   
+    }
 }
 
-void dev_recv() {
+void dev_recv()
+{
     // Continually check if we have stuff...
     char buf[1024];
     int ind = 0;
@@ -105,15 +107,17 @@
     }
 }
 
-int kelvin2farenheit(int temp) {
-     return (int)((((temp - 273.15f) * 9.0f) / 5.0f) + 32.0f);
+int kelvin2farenheit(int temp)
+{
+    return (int)((((temp - 273.15f) * 9.0f) / 5.0f) + 32.0f);
 }
 
-void clock_init() {
+void clock_init()
+{
     // Set up bluetooth
     dev.baud(9600);
     pc.baud(9600);
-    
+
     // Tell user we're initializing...
     lcd_lock.lock();
     uLCD.cls();
@@ -122,15 +126,15 @@
     uLCD.text_string("PLEASE", 0, 2, FONT_7X8, WHITE);
     uLCD.text_string("WAIT", 0, 5, FONT_7X8, WHITE);
     lcd_lock.unlock();
-    
+
     // Need to get wifi settings. If we don't have local file, then ask!
     FILE* fid = fopen("/local/settings.txt", "r");
-    
+
     if (fid != NULL) {
         // Read WiFi Settings
         char settings_buf[1024];
         // Guaranteed to be 5 lines
-        // 
+        //
         fgets(settings_buf, 1024, fid);
         // find \n
         int settings_ind = 0;
@@ -176,16 +180,16 @@
         uLCD.text_string("SEE", 0, 2, FONT_7X8, RED);
         uLCD.text_string("DEVICE", 0, 5, FONT_7X8, RED);
         lcd_lock.unlock();
-        
+
         // Ask!
         dev.printf("Please provide the name of a WiFi Network\n");
-        
+
         // Wait for them to respond
         while (!dev.readable()) {
             wait(0.001);
         }
         int ind = 0;
-        
+
         // Read response
         while (ind < 255) {
             char tmp = dev.getc();
@@ -196,13 +200,13 @@
             wait(0.01);
         }
         ssid[ind] = '\0';
-        
+
         // flush device
         while (dev.readable()) {
             dev.getc();
             wait(0.01);
         }
-        
+
         // Get the password
         dev.printf("Please provide the password\n");
         while (!dev.readable()) {
@@ -218,7 +222,7 @@
             wait(0.01);
         }
         pass[ind] = '\0';
-        
+
         // Get the API key
         dev.printf("Please provide the IP Stack API key\n");
         while (!dev.readable()) {
@@ -235,7 +239,7 @@
         }
 
         ip_api_key[ind] = '\0';
-        
+
         dev.printf("Please provide the TimeZoneDB API key\n");
         while (!dev.readable()) {
             wait(0.001);
@@ -250,7 +254,7 @@
             wait(0.01);
         }
         time_api_key[ind] = '\0';
-        
+
         dev.printf("Please provide the OpenWeather API key\n");
         while (!dev.readable()) {
             wait(0.001);
@@ -266,10 +270,10 @@
         }
         weather_api_key[ind] = '\0';
 
-        
-        
-        // Because this is a simple proof of concept, we store the password in 
-        // plaintext. It should be noted, however, that you **should never do 
+
+
+        // Because this is a simple proof of concept, we store the password in
+        // plaintext. It should be noted, however, that you **should never do
         // this in "real life"**
         fid = fopen("/local/settings.txt", "w");
         fprintf(fid, "%s\n%s\n%s\n%s\n%s\n", ssid, pass, ip_api_key, time_api_key, weather_api_key);
@@ -287,18 +291,18 @@
 
     // Set up the WiFi Access Point
     dev.printf("Connecting to WiFi %s with Password %s\n", ssid, pass);
-    
+
     res = wifi.connect(ssid, pass);
     if (!res) {
         dev.printf("Connection Failed... Resetting Device\n");
         err_led = 1;
         mbed_reset();
     }
-    
+
     dev.printf("Connected with IP Address: %s\n", wifi.getIPAddress());
-    
+
     /** API REQUESTS **/
-    
+
     int header_ind = 0;
     int footer_ind = 0;
     int read_len = 0;
@@ -307,25 +311,25 @@
 
     TCPSocketConnection tcp;
     tcp.connect("api.ipstack.com", 80);
-    
-    sprintf(cmd, 
-        "GET /check?access_key=%s HTTP/1.1\r\nHost: api.ipstack.com\r\n\r\n",
-        ip_api_key);
+
+    sprintf(cmd,
+            "GET /check?access_key=%s HTTP/1.1\r\nHost: api.ipstack.com\r\n\r\n",
+            ip_api_key);
     tcp.send_all(cmd, strlen(cmd));
-    
+
     wait(5);
-    
+
     read_len = wifi.recv(buffer, BUF_SIZE - 1, 0);
     buffer[read_len] = '\0';
-    
+
     // Cleanup
-    
+
     while (header_ind < read_len) {
         // if we are \r, look ahead to see \n\r\n:
         if(buffer[header_ind] == '\r' &&
-           buffer[header_ind+1] == '\n' &&
-           buffer[header_ind+2] == '\r' &&
-           buffer[header_ind+3] == '\n') {
+                buffer[header_ind+1] == '\n' &&
+                buffer[header_ind+2] == '\r' &&
+                buffer[header_ind+3] == '\n') {
             // Increment header_ind, look for JSON
             // Now just look for {
             header_ind += 4;
@@ -349,7 +353,7 @@
 
     MbedJSONValue parser;
     parse(parser, buffer + header_ind);
-    
+
     latitude =  parser["latitude"].get<double>();
     longitude = parser["longitude"].get<double>();
 
@@ -359,10 +363,10 @@
     time_tcp.connect("api.timezonedb.com", 80);
 
     sprintf(cmd,
-        "GET /v2.1/get-time-zone?key=%s&format=json&by=position&lat=%0.4f&lng=%0.4f HTTP/1.1\r\nHost: api.timezonedb.com\r\n\r\n",
-        time_api_key,
-        latitude,
-        longitude);
+            "GET /v2.1/get-time-zone?key=%s&format=json&by=position&lat=%0.4f&lng=%0.4f HTTP/1.1\r\nHost: api.timezonedb.com\r\n\r\n",
+            time_api_key,
+            latitude,
+            longitude);
 
     time_tcp.send_all(cmd, strlen(cmd));
 
@@ -370,18 +374,18 @@
 
     read_len = wifi.recv(buffer, BUF_SIZE - 1, 0);
     buffer[read_len] = '\0';
-    
+
     // Cleanup
-    
+
     // Clean up front
     // Read through headers (\r\n\r\n)
     header_ind = 0;
     while (header_ind < read_len) {
         // if we are \r, look ahead to see \n\r\n:
         if(buffer[header_ind] == '\r' &&
-           buffer[header_ind+1] == '\n' &&
-           buffer[header_ind+2] == '\r' &&
-           buffer[header_ind+3] == '\n') {
+                buffer[header_ind+1] == '\n' &&
+                buffer[header_ind+2] == '\r' &&
+                buffer[header_ind+3] == '\n') {
             // Increment header_ind, look for JSON
             // Now just look for {
             header_ind += 4;
@@ -403,7 +407,7 @@
         }
     }
     buffer[footer_ind + 1] = '\0';
-    
+
     MbedJSONValue time_parser;
     parse(time_parser, buffer + header_ind);
 
@@ -412,21 +416,21 @@
     set_time(time_parser["timestamp"].get<int>() + 5 + 3);
     // Now that we know what time it is, set up our Time Thread
     time_thread.start(time_updater);
-    
+
     TCPSocketConnection forecast_sck;
 
     forecast_sck.connect("api.openweathermap.org", 80);
 
     sprintf(cmd,
-        "GET /data/2.5/weather?lat=%0.4f&lon=%0.4f&APPID=%s&cnt=8\r\nHost: api.openweathermap.org\r\n\r\n",
-        latitude, longitude, weather_api_key);
+            "GET /data/2.5/weather?lat=%0.4f&lon=%0.4f&APPID=%s&cnt=8\r\nHost: api.openweathermap.org\r\n\r\n",
+            latitude, longitude, weather_api_key);
     forecast_sck.send_all(cmd, strlen(cmd));
 
     wait(5);
 
     read_len wifi.recv(buffer, BUF_SIZE - 1, 0);
     buffer[read_len] = '\0';
-    
+
     // We don't have enough memory for another parser (why?), so just
     // look for the word "temp" 0 hopefully won't have a city named "temp"!
     char* ind = strstr(buffer, "temp");
@@ -453,7 +457,7 @@
     temp = kelvin2farenheit(temp);
     char temp_buf[12];
     sprintf(temp_buf, "   %dF", temp);
-    
+
     lcd_lock.lock();
     uLCD.text_width(2);
     uLCD.text_height(2);
@@ -466,8 +470,8 @@
         // Wait for 60 seconds
         if ((prev_time + 60) < curr_time) {
             sprintf(cmd,
-                "GET /data/2.5/weather?lat=%0.4f&lon=%0.4f&APPID=%s\r\nHost: api.openweathermap.org\r\n\r\n",
-                latitude, longitude, weather_api_key);
+                    "GET /data/2.5/weather?lat=%0.4f&lon=%0.4f&APPID=%s\r\nHost: api.openweathermap.org\r\n\r\n",
+                    latitude, longitude, weather_api_key);
             forecast_sck.connect("api.openweathermap.org", 80);
             wait(10);
             forecast_sck.send_all(cmd, strlen(cmd));
@@ -509,6 +513,7 @@
     }
 }
 
-int main() {
+int main()
+{
     clock_init();
 }