init

Dependencies:   aconno_I2C Lis2dh12 WatchdogTimer

Files at this revision

API Documentation at this revision

Comitter:
pathfindr
Date:
Sun Dec 23 21:13:19 2018 +0000
Parent:
25:7adeb1a53360
Child:
27:fa76f5a08195
Commit message:
ggh

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
modem.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sun Dec 23 20:24:34 2018 +0000
+++ b/main.cpp	Sun Dec 23 21:13:19 2018 +0000
@@ -4,7 +4,20 @@
 //DEFINES
 //------------------------------------------------------------------------------ 
 #define FW_VERSION 1
-#define SLEEP_FRAME 30000
+
+#define DEFAULT_SLEEP_FRAME                 30000
+#define DEFAULT_LOCATION_MODE               2
+#define DEFAULT_LOCATION_ACCURACY           2  // 0 = no location, 1 = cl only, 2 = gps then cl
+#define DEFAULT_LOCATION_TX_INTERVAL_MINS   1440
+#define DEFAULT_LOCATION_TX_FAILSAFE_HRS    168
+#define DEFAULT_LOCATION_TIMEOUT            180
+#define DEFAULT_MOTION_G                    11
+#define DEFAULT_MOTION_START_SECONDS        120
+#define DEFAULT_MOTION_STOP_SECONDS         120
+#define DEFAULT_IMPACT_G                    127
+#define DEFAULT_CONNECTION_TIMEOUT          180
+#define DEFAULT_BEACON_INTERVAL_SECONDS     10
+
 
 //------------------------------------------------------------------------------
 //FUNCTION PROTOTYPES
@@ -190,7 +203,7 @@
 float getTemperature() {
     SI7060 si7060(PN_I2C_SDA, PN_I2C_SCL);
     float temperature = si7060.getTemperature();
-    DEBUG("Temperature:%.2f\n",temperature);
+    //DEBUG("Temperature:%.2f\n",temperature);
     return temperature;  
 }
 //------------------------------------------------------------------------------
@@ -264,20 +277,20 @@
     RET_SetupRunAt = 0;
     //SETTINGS
     RET_setting_firmware = 0;
-    RET_setting_location_mode = 2;
-    RET_setting_location_accuracy = 2; // 0 = no location, 1 = cl only, 2 = gps then cl
-    RET_setting_location_tx_interval_mins = 1440;
-    RET_setting_location_tx_failsafe_hrs = (7*24); //7 days
-    RET_setting_location_timeout = 240;
+    RET_setting_location_mode = DEFAULT_LOCATION_MODE;
+    RET_setting_location_accuracy = DEFAULT_LOCATION_ACCURACY;
+    RET_setting_location_tx_interval_mins = DEFAULT_LOCATION_TX_INTERVAL_MINS;
+    RET_setting_location_tx_failsafe_hrs = DEFAULT_LOCATION_TX_FAILSAFE_HRS;
+    RET_setting_location_timeout = DEFAULT_LOCATION_TIMEOUT;
     RET_setting_activity_tx_interval_hrs = 0;
     RET_setting_environmental_tx_interval_mins = 0;
-    RET_setting_motion_g = 11;
-    RET_setting_motion_start_seconds = 120;
-    RET_setting_motion_stop_seconds = 120;
+    RET_setting_motion_g = DEFAULT_MOTION_G;
+    RET_setting_motion_start_seconds = DEFAULT_MOTION_START_SECONDS;
+    RET_setting_motion_stop_seconds = DEFAULT_MOTION_STOP_SECONDS;
     RET_setting_impact_g = 0;
     RET_setting_impact_alert = 0;
-    RET_setting_connection_timeout = 180;
-    RET_setting_beacon_interval_seconds = 10;
+    RET_setting_connection_timeout = DEFAULT_CONNECTION_TIMEOUT;
+    RET_setting_beacon_interval_seconds = DEFAULT_BEACON_INTERVAL_SECONDS;
     RET_setting_beacon_scan = 0;
     //RET_RTCmillis = 0;
     RET_buttonPressCount = 0;
@@ -309,7 +322,7 @@
     GLOBAL_requireSoftReset = false;   
     
     //PERIPHERAL RESET
-    lis3dh_configureForSleep(10,127);
+    lis3dh_configureForSleep(DEFAULT_MOTION_G,DEFAULT_IMPACT_G);
 }
 bool selfTest() {
     int test_count = 0;
@@ -394,7 +407,6 @@
 // UPDATE OPERATING SETTINGS
 //------------------------------------------------------------------------------ 
 bool saveSettings(char* settingsBuffer) {
-    //process result
     int matchCount = 0;
     int critical_fail_count = 0;
     time_t TEMP_b = 0; int TEMP_c = -1; int TEMP_d = -1; int TEMP_e = -1; int TEMP_f = -1; int TEMP_g = -1; int TEMP_h = -1; int TEMP_i = -1; int TEMP_j = -1; 
@@ -406,7 +418,6 @@
         
         //FAILUREMODE need to be checking thse against checksums
         char changed;
-        //FAILUREMODE need to verify the identifier against a reg exp or similar
         if(TEMP_b != 0) { RET_RTCunixtime = TEMP_b;                                changed = 'Y'; } else { changed = 'N'; critical_fail_count++; }; DEBUG("RET_RTCunixtime:%u..%c\n",RET_RTCunixtime,changed);
         if(TEMP_c != -1) { RET_setting_firmware = TEMP_c;                          changed = 'Y'; } else { changed = 'N'; RET_setting_firmware = -1;}; DEBUG("RET_setting_firmware:%d..%c\n",RET_setting_firmware,changed);
         if(TEMP_d != -1) { setState(TEMP_d);                                       changed = 'Y'; } else { changed = 'N'; critical_fail_count++; }; DEBUG("RET_state:%d..%c\n",RET_state,changed);
@@ -423,6 +434,7 @@
         if(TEMP_o != -1) { RET_setting_impact_g = TEMP_o;                          changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_impact_g:%d..%c\n",RET_setting_impact_g,changed);
         if(TEMP_p != -1) { RET_setting_impact_alert = TEMP_p;                      changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_impact_alert:%d..%c\n",RET_setting_impact_alert,changed);
         if(TEMP_q != -1) { RET_setting_connection_timeout = TEMP_q;                changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_connection_timeout:%d..%c\n",RET_setting_connection_timeout,changed);
+        if (RET_setting_connection_timeout < 60 || RET_setting_connection_timeout > 240) { RET_setting_connection_timeout = DEFAULT_CONNECTION_TIMEOUT; }
         if(TEMP_r != -1) { RET_setting_beacon_interval_seconds = TEMP_r;           changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_beacon_interval_seconds:%d..%c\n",RET_setting_beacon_interval_seconds,changed);
         if(TEMP_s != -1) { RET_setting_beacon_scan = TEMP_s;                       changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_beacon_scan:%d..%c\n",RET_setting_beacon_scan,changed);
         
@@ -476,10 +488,10 @@
         //RET_imei = modem.getIMEI();
         //DEBUG("imei: %lld \n",RET_imei);
         //char* modemModel = modem.getModemModel();
-        if (modem.registerOnNetwork(2,180000)) {
+        if (modem.registerOnNetwork(1,(RET_setting_connection_timeout*1000))) {
             int timetaken = (RET_RTCunixtime - GLOBAL_wakeTime);
             char bytestosend[160];
-            snprintf(bytestosend,sizeof(bytestosend),"(%s,a:setup,f:%d,v:%.2f,t:%.2f,e:%d,z:SETUP,c:1)\0",GLOBAL_defaultApi,FW_VERSION,voltage,timetaken);
+            snprintf(bytestosend,sizeof(bytestosend),"(%s,a:setup,f:%d,v:%.2f,t:%.1f,e:%d,z:SETUP,c:1)\0",GLOBAL_defaultApi,FW_VERSION,voltage,timetaken);
             char result[180];
             snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytestosend, true, 2, GLOBAL_defaultApi));
             if (result != "err") {
@@ -515,10 +527,10 @@
     bool selftestresult = selfTest();
     Modem modem(PN_UART_TX, PN_UART_RX, PN_UART_CTS, PN_UART_RTS, PN_GSM_PWR_KEY, PN_VREG_EN, PN_GSM_WAKE_DISABLE);
     if (modem.on()) {
-        if (modem.registerOnNetwork(2,180000)) {
+        if (modem.registerOnNetwork(1,(RET_setting_connection_timeout*1000))) {
             int timetaken = (RET_RTCunixtime - GLOBAL_wakeTime);
             char bytestosend[160];
-            snprintf(bytestosend,sizeof(bytestosend),"(%s,a:loc,f:%d,t:%.2f,v:%.2f,z:SHAKERTEST-%d,e:%d,c:1)\0",GLOBAL_defaultApi,FW_VERSION,temperature,voltage,selftestresult,timetaken);
+            snprintf(bytestosend,sizeof(bytestosend),"(%s,a:loc,f:%d,t:%.1f,v:%.2f,z:SHAKERTEST-%d,e:%d,c:1)\0",GLOBAL_defaultApi,FW_VERSION,temperature,voltage,selftestresult,timetaken);
             char result[180];
             bool getSettings = true;
             snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytestosend, getSettings, 2, GLOBAL_defaultApi));
@@ -548,10 +560,10 @@
             //DEBUG("locString:%s-\n",locString);
         }
         //SEND DATA
-        if (modem.registerOnNetwork(2,180000)) {
+        if (modem.registerOnNetwork(1,(RET_setting_connection_timeout*1000))) {
             int timetaken = (RET_RTCunixtime - GLOBAL_wakeTime);
             char bytesToSend[160];
-            snprintf(bytesToSend,sizeof(bytesToSend),"(%s,a:loc,f:%d,t:%.2f,v:%.2f,z:OK%d,e:%d,c:1%s)\0",GLOBAL_defaultApi,FW_VERSION,temperature,voltage,selftestresult,timetaken,locString);
+            snprintf(bytesToSend,sizeof(bytesToSend),"(%s,a:loc,f:%d,t:%.1f,v:%.2f,z:OK%d,e:%d,c:1%s)\0",GLOBAL_defaultApi,FW_VERSION,temperature,voltage,selftestresult,timetaken,locString);
             char result[180];
             bool getSettings = true;
             snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytesToSend, getSettings, 2, GLOBAL_defaultApi));
@@ -574,7 +586,7 @@
     Modem modem(PN_UART_TX, PN_UART_RX, PN_UART_CTS, PN_UART_RTS, PN_GSM_PWR_KEY, PN_VREG_EN, PN_GSM_WAKE_DISABLE);
     if (modem.on()) {
         //SEND DATA
-        if (modem.registerOnNetwork(2,180000)) {
+        if (modem.registerOnNetwork(1,(RET_setting_connection_timeout*1000))) {
             char bytesToSend[160];
             snprintf(bytesToSend,sizeof(bytesToSend),"(%s,a:act,e:%s,t:%u,r:%.2f,c:1)\0",GLOBAL_defaultApi,RET_activityData,RET_motionFrameStart,RET_motionTotalActivityHours);
             char result[180];
@@ -716,7 +728,7 @@
         RET_sleepToggle = 0; 
         NRF_UART0->TASKS_SUSPEND = 1;
         NRF_UART0->ENABLE = 0; //NO MORE SERIAL OR DEBUG OUTPUTS AFTER THIS
-        mainthread.wait(SLEEP_FRAME);
+        mainthread.wait(DEFAULT_SLEEP_FRAME);
         system_reset();
     }
     
@@ -728,25 +740,17 @@
         //MAIN LOGIC
         DEBUG("STATE:%d, HAVESETTINGS:%d, MOTION: %d, RTC:%u, BOOTAT:%u, LOC:%u, LOCFS:%u, ACT:%u \n", RET_state, RET_haveSettings, RET_motionState, RET_RTCunixtime,RET_SetupRunAt,RET_eventTime_location_tx,RET_eventTime_location_failsafe_tx,RET_eventTime_activity_tx);
         DEBUG("ACTIVITY:%s\n",RET_activityData);
-        float temperature = getTemperature();
-        DEBUG("temp:%.2f\n",temperature);
         mainStateEngine();
         
         //PRE-SLEEP ACTIONS
         if (GLOBAL_needToConfigureLis3dh) { lis3dh_configureForSleep(10,127); }
         turnOffEverything();
-        /*if (GLOBAL_modemOn) {
-            DEBUG("SHUTTING DOWN MODEM\n");
-            Modem modem(PN_UART_TX, PN_UART_RX, PN_UART_CTS, PN_UART_RTS, PN_GSM_PWR_KEY, PN_VREG_EN, PN_GSM_WAKE_DISABLE);
-            modem.off(true);
-        }*/
-        
         
         //SLEEP DIFFERENT FOR THIS SHAKER TEST VERSION - AS IS WILL GIVE 450ua sleep if in motion
         /*
         NRF_UART0->TASKS_SUSPEND = 1;
         NRF_UART0->ENABLE = 0; //NO MORE SERIAL OR DEBUG OUTPUTS AFTER THIS
-        mainthread.wait(SLEEP_FRAME);
+        mainthread.wait(DEFAULT_SLEEP_FRAME);
         */
         
         RET_coldBoot = 0;
--- a/modem.cpp	Sun Dec 23 20:24:34 2018 +0000
+++ b/modem.cpp	Sun Dec 23 21:13:19 2018 +0000
@@ -142,9 +142,8 @@
         //DISABLE AIRPLANE MODE
         _w_disable = 1;
         flushSerial();    
-        while (attempt <= maxAttempts) {
+        while (attempt < maxAttempts) {
             watchdogKick();
-            attempt ++;
             t.reset();
             uint32_t startmillis = t.read_ms();
             uint32_t runtime = 0;
@@ -162,6 +161,7 @@
                 Thread::wait(500);
                 on();   
             }
+            attempt ++;
         }
         t.stop();
     }
@@ -178,8 +178,7 @@
     bool sent = false;
     int attempt = 0;
     //TRY X NUMBER OF TIMES
-    while (!sent && attempt <= maxAttempts) {
-        attempt ++;
+    while (!sent && attempt < maxAttempts) {
         char bytestosend[160];
         snprintf(bytestosend, sizeof(bytestosend), "AT+CUSD=1,\"#469*%s#\"", message);
         ATsendCMD(bytestosend);
@@ -187,6 +186,7 @@
             flushSerial();
             sent = true;
         };
+        attempt ++;
     }
     if (sent) {
         return true;
@@ -212,7 +212,6 @@
         if (ATwaitForWord("+CUSD: 0",ATTIMEOUT_SHORT)) {
             led1 = 0;
             if ( (matchCount = _uart.scanf(",\"%d#%[^#]",USSDmessageIndex,ATinBuffer) ) > 0 ) {
-                //G("\ngot:%s \n",ATinBuffer);
                 if (USSDmessageIndex == messageIndex) {
                     //NEED TO GET THIS WORKING SO WE KNOW WE ARE DEALING WITH THE RIGT MESSAGE
                     //MOVE THE BELOW INTO THIS IF STAEMEBNTS
@@ -315,23 +314,11 @@
                 uint32_t date;
                 uint8_t sat;
                 
-                /*
-                char gpsDataIn[100];
-                _uart.scanf("%s",gpsDataIn);
-                //Example data
-                //115757.0,52.62091,1.29536,0.8,58.2,2,0.00,0.0,0.0,211218,07
-                if ((matchCount = sscanf(gpsDataIn,"%f,%f,%f,%f,%f,%d,%f,%f,%f,%d,%d",&utc,&lat,&lng,&hdp,&alt,&fix,&cog,&spkm,&spkn,&date,&sat)) == 11 ) {
-                    //{“fix”:“GPS”,“sat”:“9",“lat”:“52.913254",“lng”:“-1.455289",“hdp”:“89.0",“spd”:“0.0"}                    
-                    sprintf(locDataOut,",g:(fix:GPS,sat:%d,lat:%.6f,lng:%.6f,hdp:%.1f,spd:%.1f)\0",fix,sat,lat,lng,hdp,spkm);
-                    //DEBUG("\nGPSOut:%s--\n",locDataOut);
-                }
-                */
-                
                 //Example data
                 //115757.0,52.62091,1.29536,0.8,58.2,2,0.00,0.0,0.0,211218,07
                 if ((matchCount = _uart.scanf("%f,%f,%f,%f,%f,%d,%f,%f,%f,%d,%d",&utc,&lat,&lng,&hdp,&alt,&fix,&cog,&spkm,&spkn,&date,&sat)) == 11 ) {
                     //{“fix”:“GPS”,“sat”:“9",“lat”:“52.913254",“lng”:“-1.455289",“hdp”:“89.0",“spd”:“0.0"}                    
-                    sprintf(locDataOut,",g:(fix:GPS,sat:%d,lat:%.6f,lng:%.6f,hdp:%.1f,spd:%.1f)\0",fix,sat,lat,lng,hdp,spkm);
+                    sprintf(locDataOut,",g:(fix:GPS,sat:%d,lat:%.6f,lng:%.6f,hdp:%.1f,spd:%.1f)\0",sat,lat,lng,hdp,spkm);
                     //DEBUG("\nGPSOut:%s\n",locDataOut);
                 }
             }