init
Dependencies: aconno_I2C Lis2dh12 WatchdogTimer
Diff: main.cpp
- Revision:
- 25:7adeb1a53360
- Parent:
- 24:c161db07557f
- Child:
- 26:fa3579737329
--- a/main.cpp Sun Dec 23 17:24:42 2018 +0000 +++ b/main.cpp Sun Dec 23 20:24:34 2018 +0000 @@ -28,8 +28,6 @@ bool GLOBAL_needToConfigureLis3dh = false; bool GLOBAL_registeredOnNetwork = false; bool GLOBAL_modemOn = false; -long long GLOBAL_imei = 0; -float GLOBAL_voltage = 0.0; time_t GLOBAL_RTCunixtime = 0; time_t GLOBAL_wakeTime = 0; @@ -178,15 +176,16 @@ 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 getBatteryV() { //this creates an extra 400ua of power usage!!! +float getBatteryV() { //this creates an extra 400ua of power usage!!! NRF52_SAADC batteryIn; batteryIn.addChannel(9); // vdd for battery batteryIn.calibrate(); - for (uint8_t i = 1; i <= 2; i++) { // need to get it 3 times to get accurate data, first one is always low for some reason + float voltage = 0.0; + for (uint8_t i = 1; i <= 2; i++) { // need to get it 2 times to get accurate data, first one is always low for some reason batteryIn.updateData(); - GLOBAL_voltage = (batteryIn.getData()[0])*(1.0/1024.0)*3.65; + voltage = (batteryIn.getData()[0])*(1.0/1024.0)*3.65; } - DEBUG("Voltage:%.2f\n",GLOBAL_voltage); + return voltage; } float getTemperature() { SI7060 si7060(PN_I2C_SDA, PN_I2C_SCL); @@ -312,9 +311,6 @@ //PERIPHERAL RESET lis3dh_configureForSleep(10,127); } -void copyRETtoGLOBAL() { - GLOBAL_imei = RET_imei; -} bool selfTest() { int test_count = 0; int test_pass = 0; @@ -346,7 +342,7 @@ //------------------------------------------------------------------------------ void checkMotion() { if (lis3dh_int2) { - if (GLOBAL_debugLED) LED1blink(1,100); + if (GLOBAL_debugLED) LED1blink(1,50); RET_motionTriggered = true; GLOBAL_needToConfigureLis3dh = true; //interrupt has fire so need to clear it if (!RET_motionPendingOnState) { @@ -371,7 +367,7 @@ if (inMotionForSeconds >= RET_setting_motion_start_seconds && RET_motionState == false) { RET_motionState = true; RET_motionTriggeredInTXInterval = true; - if (GLOBAL_debugLED) LED1blink(10,100); + if (GLOBAL_debugLED) LED1blink(5,50); if (RET_setting_location_tx_failsafe_hrs > 0) { time_t epochOffsetMins = ((RET_RTCunixtime - RET_motionFrameStart) / 60); sprintf(RET_activityData+strlen(RET_activityData),"1.%u!",epochOffsetMins); @@ -385,7 +381,7 @@ RET_motionState = false; GLOBAL_motionStopFlagTriggered = true; RET_motionTotalActivityHours += (float(RET_motionStopTime - RET_motionStartTime) / 3600.0); - if (GLOBAL_debugLED) LED1blink(5,500); + if (GLOBAL_debugLED) LED1blink(3,400); if (RET_setting_location_tx_failsafe_hrs > 0) { time_t epochOffsetMins = ((RET_RTCunixtime - RET_motionFrameStart) / 60); sprintf(RET_activityData+strlen(RET_activityData),"0.%u!",epochOffsetMins); @@ -472,16 +468,18 @@ //------------------------------------------------------------------------------ bool setup() { bool pass = true; + float voltage = getBatteryV(); + float temperature = getTemperature(); + 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()) { - RET_imei = modem.getIMEI(); - GLOBAL_imei = RET_imei; - DEBUG("imei: %lld \n",RET_imei); + //RET_imei = modem.getIMEI(); + //DEBUG("imei: %lld \n",RET_imei); //char* modemModel = modem.getModemModel(); if (modem.registerOnNetwork(2,180000)) { int timetaken = (RET_RTCunixtime - GLOBAL_wakeTime); char bytestosend[160]; - snprintf(bytestosend,sizeof(bytestosend),"(%s,im:%lld,a:loc,f:%d,v:%.2f,e:%d,z:SETUP,c:1)\0",GLOBAL_defaultApi,GLOBAL_imei,FW_VERSION,GLOBAL_voltage,timetaken); + 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); char result[180]; snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytestosend, true, 2, GLOBAL_defaultApi)); if (result != "err") { @@ -512,7 +510,7 @@ //------------------------------------------------------------------------------ void event_shakertest_tx() { DEBUG("SHAKER TEST\n"); - getBatteryV(); + float voltage = getBatteryV(); float temperature = getTemperature(); 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); @@ -520,7 +518,7 @@ if (modem.registerOnNetwork(2,180000)) { 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,GLOBAL_voltage,selftestresult,timetaken); + 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); char result[180]; bool getSettings = true; snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytestosend, getSettings, 2, GLOBAL_defaultApi)); @@ -539,8 +537,9 @@ void event_location_tx() { DEBUG("LOCATION TX\n"); - getBatteryV(); + float voltage = getBatteryV(); float temperature = getTemperature(); + 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()) { char locString[70]; @@ -552,7 +551,7 @@ if (modem.registerOnNetwork(2,180000)) { int timetaken = (RET_RTCunixtime - GLOBAL_wakeTime); char bytesToSend[160]; - snprintf(bytesToSend,sizeof(bytesToSend),"(%s,a:loc,f:%d,t:%.2f,v:%.2f,z:OK,e:%d,c:1%s)\0",GLOBAL_defaultApi,FW_VERSION,temperature,GLOBAL_voltage,timetaken,locString); + 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); char result[180]; bool getSettings = true; snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytesToSend, getSettings, 2, GLOBAL_defaultApi)); @@ -571,7 +570,6 @@ void event_activity_tx() { DEBUG("ACTIVITY TX\n"); - getBatteryV(); float temperature = getTemperature(); 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()) { @@ -602,9 +600,8 @@ case STATE_SETUP : DEBUG("STATE:SETUP\n"); factoryReset(); - getBatteryV(); if (setup()) { - copyRETtoGLOBAL(); + // All good } else { RET_eventTime_wakeFromDormant = (RET_RTCunixtime + (24*3600)); //24hrs setState(STATE_DORMANT); @@ -618,21 +615,19 @@ //LOCATION EVENT bool run_location_tx = false; - if(RET_RTCunixtime >= RET_eventTime_location_tx && RET_eventTime_location_tx > 0) { DEBUG("INTERVAL LOC TX...\n"); run_location_tx = true; } + if(RET_RTCunixtime >= RET_eventTime_location_tx && RET_eventTime_location_tx > 0) { run_location_tx = true; } //Location 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 (run_location_tx) { DEBUG("INTERVAL LOC TX...\n"); event_location_tx(); } //ACTIVITY EVENT bool run_activity_tx = false; - if(RET_RTCunixtime >= RET_eventTime_activity_tx && RET_eventTime_activity_tx > 0) { + if(RET_RTCunixtime >= RET_eventTime_activity_tx && RET_eventTime_activity_tx > 0 && strlen(RET_activityData) > 1) { run_activity_tx = true; - //event_shakertest_tx(); + //event_shakertest_tx(); } if (strlen(RET_activityData) > 130) { run_activity_tx = true; } - if (run_activity_tx) {event_activity_tx();} + if (run_activity_tx) { DEBUG("ACTIVITY TX...\n"); event_activity_tx();} break; case STATE_DORMANT : @@ -692,7 +687,6 @@ RTCticker.attach(&RTCtick, 1.0); button.fall(&buttonPress); //does this affect power? button.rise(&buttonRelease); - copyRETtoGLOBAL(); //CHECK IF THIS IS RESET //0x00000004 == soft reset //0x00000002 == watchdog //0x00000001 == button/hardreset @@ -726,8 +720,7 @@ system_reset(); } - while(true) { - if (!memoryIntegrityCheck()) { RET_coldBoot = 1;} + //while(true) { watchdogKick(); //LOG START TIME GLOBAL_wakeTime = RET_RTCunixtime; @@ -735,20 +728,19 @@ //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(); - //sprintf(RET_activityData+strlen(RET_activityData),"test"); - //int result = strlen(RET_activityData); - //DEBUG("size:%d\n",result) - //PRE-SLEEP ACTIONS if (GLOBAL_needToConfigureLis3dh) { lis3dh_configureForSleep(10,127); } - if (GLOBAL_modemOn) { + 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); - } - RET_coldBoot = 0; + }*/ + //SLEEP DIFFERENT FOR THIS SHAKER TEST VERSION - AS IS WILL GIVE 450ua sleep if in motion /* @@ -756,7 +748,9 @@ NRF_UART0->ENABLE = 0; //NO MORE SERIAL OR DEBUG OUTPUTS AFTER THIS mainthread.wait(SLEEP_FRAME); */ + + RET_coldBoot = 0; RET_sleepToggle = 1; system_reset(); - } + //} } \ No newline at end of file