init
Dependencies: aconno_I2C Lis2dh12 WatchdogTimer
Diff: main.cpp
- Revision:
- 21:e0b866630c27
- Parent:
- 20:5404841fdd2b
- Child:
- 22:810425eb76e1
--- a/main.cpp Wed Dec 19 09:02:20 2018 +0000 +++ b/main.cpp Thu Dec 20 22:04:45 2018 +0000 @@ -1,5 +1,9 @@ #include "main.h" -//include "nrf_soc.h" + +//------------------------------------------------------------------------------ +//FUNCTION PROTOTYPES +//------------------------------------------------------------------------------ +#define FW_VERSION 1 //------------------------------------------------------------------------------ //FUNCTION PROTOTYPES @@ -60,6 +64,7 @@ static time_t RET_buttonReleaseTime __attribute__((section("noinit"),zero_init)); static time_t RET_buttonHoldTime __attribute__((section("noinit"),zero_init)); static time_t RET_RTCunixtime __attribute__((section("noinit"),zero_init)); +static time_t RET_SetupRunAt __attribute__((section("noinit"),zero_init)); //MOTION STATE static bool RET_motionTriggered __attribute__((section("noinit"),zero_init)); static bool RET_motionTriggeredInTXInterval __attribute__((section("noinit"),zero_init)); @@ -202,7 +207,7 @@ } void factoryReset() { DEBUG("Factory Reset \n"); - Thread::wait(500); //wait to ensure that devices are turned off + Thread::wait(200); //wait to ensure that devices are turned off //IDENTITY RET_imei = 0; memset(RET_pf_identifier,0,sizeof(RET_pf_identifier)); @@ -212,13 +217,14 @@ RET_state = STATE_SETUP; RET_state_prev = RET_state; RET_RTCunixtime = 0; + RET_SetupRunAt = 0; //SETTINGS RET_setting_firmware = 0; RET_setting_location_mode = 2; RET_setting_location_accuracy = 1; RET_setting_location_tx_interval_mins = 1440; RET_setting_location_tx_failsafe_hrs = (7*24); //7 days - RET_setting_location_timeout = 180; + RET_setting_location_timeout = 240; RET_setting_activity_tx_interval_mins = 0; RET_setting_environmental_tx_interval_mins = 0; RET_setting_motion_g = 11; @@ -335,23 +341,23 @@ //FAILUREMODE need to verify the identifier against a reg exp or similar if(1==1) { memcpy(RET_pf_identifier, TEMP_a, sizeof(TEMP_a)); changed = 'Y'; } else { changed = 'N'; critical_fail_count++; }; DEBUG("RET_pf_identifier:%s..%c\n",RET_pf_identifier,changed); 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'; }; DEBUG("RET_setting_firmware:%d..%c\n",RET_setting_firmware,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); if(TEMP_e != -1) { RET_setting_location_mode = TEMP_e; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_location_accuracy:%d..%c\n",RET_setting_location_accuracy,changed); if(TEMP_f != -1) { RET_setting_location_accuracy = TEMP_f; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_location_accuracy:%d..%c\n",RET_setting_location_accuracy,changed); if(TEMP_g != -1) { RET_setting_location_tx_interval_mins = TEMP_g; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_location_tx_interval_mins:%d..%c\n",RET_setting_location_tx_interval_mins,changed); - if(TEMP_h != -1) { RET_setting_location_tx_failsafe_hrs = TEMP_h; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_location_tx_failsafe_hrs:%d..%c\n",RET_setting_location_tx_failsafe_hrs,changed) - if(TEMP_i != -1) { RET_setting_location_timeout = TEMP_i; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_location_timeout:%d..%c\n",RET_setting_location_timeout,changed) - if(TEMP_j != -1) { RET_setting_activity_tx_interval_mins = TEMP_j; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_activity_tx_interval_mins:%d..%c\n",RET_setting_activity_tx_interval_mins,changed) - if(TEMP_k != -1) { RET_setting_environmental_tx_interval_mins = TEMP_k; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_environmental_tx_interval_mins:%d..%c\n",RET_setting_environmental_tx_interval_mins,changed) - if(TEMP_l != -1) { RET_setting_motion_g = TEMP_l; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_motion_g:%d..%c\n",RET_setting_motion_g,changed) - if(TEMP_m != -1) { RET_setting_motion_start_seconds = TEMP_m; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_motion_start_seconds:%d..%c\n",RET_setting_motion_start_seconds,changed) - if(TEMP_n != -1) { RET_setting_motion_stop_seconds = TEMP_n; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_motion_stop_seconds:%d..%c\n",RET_setting_motion_stop_seconds,changed) - 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(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) + if(TEMP_h != -1) { RET_setting_location_tx_failsafe_hrs = TEMP_h; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_location_tx_failsafe_hrs:%d..%c\n",RET_setting_location_tx_failsafe_hrs,changed); + if(TEMP_i != -1) { RET_setting_location_timeout = TEMP_i; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_location_timeout:%d..%c\n",RET_setting_location_timeout,changed); + if(TEMP_j != -1) { RET_setting_activity_tx_interval_mins = TEMP_j; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_activity_tx_interval_mins:%d..%c\n",RET_setting_activity_tx_interval_mins,changed); + if(TEMP_k != -1) { RET_setting_environmental_tx_interval_mins = TEMP_k; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_environmental_tx_interval_mins:%d..%c\n",RET_setting_environmental_tx_interval_mins,changed); + if(TEMP_l != -1) { RET_setting_motion_g = TEMP_l; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_motion_g:%d..%c\n",RET_setting_motion_g,changed); + if(TEMP_m != -1) { RET_setting_motion_start_seconds = TEMP_m; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_motion_start_seconds:%d..%c\n",RET_setting_motion_start_seconds,changed); + if(TEMP_n != -1) { RET_setting_motion_stop_seconds = TEMP_n; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_motion_stop_seconds:%d..%c\n",RET_setting_motion_stop_seconds,changed); + 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(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); if (critical_fail_count == 0) { DEBUG("GOT SETTINGS OK\n"); @@ -368,6 +374,27 @@ return false; } } +bool dumpSettings() { + DEBUG("RET_pf_identifier:%s \n",RET_pf_identifier); + DEBUG("RET_RTCunixtime:%u \n",RET_RTCunixtime); + DEBUG("RET_setting_firmware:%d \n",RET_setting_firmware); + DEBUG("RET_state:%d \n",RET_state); + DEBUG("RET_setting_location_accuracy:%d \n",RET_setting_location_accuracy); + DEBUG("RET_setting_location_accuracy:%d \n",RET_setting_location_accuracy); + DEBUG("RET_setting_location_tx_interval_mins:%d \n",RET_setting_location_tx_interval_mins); + DEBUG("RET_setting_location_tx_failsafe_hrs:%d \n",RET_setting_location_tx_failsafe_hrs); + DEBUG("RET_setting_location_timeout:%d \n",RET_setting_location_timeout); + DEBUG("RET_setting_activity_tx_interval_mins:%d \n",RET_setting_activity_tx_interval_mins); + DEBUG("RET_setting_environmental_tx_interval_mins:%d \n",RET_setting_environmental_tx_interval_mins); + DEBUG("RET_setting_motion_g:%d \n",RET_setting_motion_g); + DEBUG("RET_setting_motion_start_seconds:%d \n",RET_setting_motion_start_seconds); + DEBUG("RET_setting_motion_stop_seconds:%d \n",RET_setting_motion_stop_seconds); + DEBUG("RET_setting_impact_g:%d \n",RET_setting_impact_g); + DEBUG("RET_setting_impact_alert:%d \n",RET_setting_impact_alert); + DEBUG("RET_setting_connection_timeout:%d \n",RET_setting_connection_timeout); + DEBUG("RET_setting_beacon_interval_seconds:%d \n",RET_setting_beacon_interval_seconds); + DEBUG("RET_setting_beacon_scan:%d \n",RET_setting_beacon_scan); +} void saveEventTimes() { //SET EVENT TIMES if(RET_setting_location_tx_interval_mins > 0) { @@ -393,7 +420,7 @@ //------------------------------------------------------------------------------ bool setup() { bool pass = true; - Modem modem(PN_UART_TX, PN_UART_RX, PN_UART_CTS, PN_UART_RTS, PN_GSM_PWR_KEY, PN_VREG_EN); + 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()) { RET_imei = modem.getIMEI(); GLOBAL_imei = RET_imei; @@ -404,7 +431,7 @@ char result[180]; snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytestosend, true, 2, GLOBAL_defaultApi)); if (result != "err") { - DEBUG("fromserver: %s \n",result); + DEBUG("\nfromserver: %s \n",result); if (!saveSettings(result)) { //something went critically wrong getting settings pass = false; @@ -419,6 +446,9 @@ pass = false; } + //LOG RUN TIME - THIS MUST GO AT END AFTER WE HAVE GOT SERVER TIMESTAMP + RET_SetupRunAt = RET_RTCunixtime; + //RESULT return pass; } @@ -429,16 +459,11 @@ void event_location_tx() { DEBUG("PERFORM LOCATION TX\n"); getBatteryV(); - - Modem modem(PN_UART_TX, PN_UART_RX, PN_UART_CTS, PN_UART_RTS, PN_GSM_PWR_KEY, PN_VREG_EN); + 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()) { - //RET_setting_location_accuracy modem.getLocation(true, 3, true, RET_setting_location_timeout); - } - - //RESETS RET_motionTriggeredInTXInterval = 0; saveEventTimes(); @@ -468,7 +493,10 @@ //LOCATION //Location Log - //if(RET_RTCunixtime > RET_eventTime_location_log && RET_eventTime_location_log > 0) { } + /* + if(RET_RTCunixtime > RET_eventTime_location_log && RET_eventTime_location_log > 0) { + } + */ bool run_location_tx = false; switch (RET_setting_location_mode) { case 1: //INTERVAL POST @@ -492,14 +520,8 @@ break; } //Failsafe timer catchall - if(RET_RTCunixtime > RET_eventTime_location_failsafe_tx && RET_eventTime_location_failsafe_tx > 0) { - run_location_tx = true; - } - if (run_location_tx) { - event_location_tx(); - } - - + if(RET_RTCunixtime > RET_eventTime_location_failsafe_tx && RET_eventTime_location_failsafe_tx > 0) { run_location_tx = true; } + if (run_location_tx) {event_location_tx();} //Environmental Log if(RET_RTCunixtime > RET_eventTime_environmental_log && RET_eventTime_environmental_log > 0) { @@ -587,6 +609,9 @@ } NRF_POWER->RESETREAS = 0xffffffff; } + //DEBUG + dumpSettings(); + //CHECK FOR FIRST BOOT if (RET_coldBoot == 1) { factoryReset(); } @@ -605,9 +630,7 @@ GLOBAL_wakeTime = RET_RTCunixtime; //MAIN LOGIC - //DEBUG("STATE: %d, RTC_MILLIS: %lld, RTC_SECONDS:%lld, BUTT_T:%d, BUTT_C,%d \n", RET_state, RET_RTCmillis, RET_RTCunixtime, RET_buttonHoldTime, RET_buttonPressCount); - DEBUG("STATE: %d, RTC_SECONDS:%u\n", RET_state, RET_RTCunixtime); - + DEBUG("STATE:%d, RTC_SECONDS:%u, SETUPAT:%u\n", RET_state, RET_RTCunixtime,RET_SetupRunAt); event_location_tx(); while(1) {