init
Dependencies: aconno_I2C Lis2dh12 WatchdogTimer
Diff: main.cpp
- Revision:
- 22:810425eb76e1
- Parent:
- 21:e0b866630c27
- Child:
- 23:a3b0ccf75ca5
--- a/main.cpp Thu Dec 20 22:04:45 2018 +0000
+++ b/main.cpp Sat Dec 22 19:33:35 2018 +0000
@@ -24,6 +24,7 @@
bool GLOBAL_debugLED = false;
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;
@@ -35,7 +36,6 @@
#if defined ( __CC_ARM ) /** THIS IS THE MBED ONLINE COMPILER TOOLCHAIN*/ //MUST BE STATICS
//IDENTITY
static long long RET_imei __attribute__((section("noinit"),zero_init));
-static char RET_pf_identifier[7] __attribute__((section("noinit"),zero_init));
//SETTINGS
static int RET_setting_firmware __attribute__((section("noinit"),zero_init));
static uint8_t RET_setting_location_mode __attribute__((section("noinit"),zero_init));
@@ -44,7 +44,7 @@
static uint32_t RET_setting_location_tx_failsafe_hrs __attribute__((section("noinit"),zero_init));
static uint16_t RET_setting_location_timeout __attribute__((section("noinit"),zero_init));
static uint8_t RET_setting_activity_mode __attribute__((section("noinit"),zero_init));
-static uint32_t RET_setting_activity_tx_interval_mins __attribute__((section("noinit"),zero_init));
+static uint32_t RET_setting_activity_tx_interval_hrs __attribute__((section("noinit"),zero_init));
static uint32_t RET_setting_environmental_tx_interval_mins __attribute__((section("noinit"),zero_init));
static uint16_t RET_setting_motion_g __attribute__((section("noinit"),zero_init));
static time_t RET_setting_motion_start_seconds __attribute__((section("noinit"),zero_init));
@@ -75,8 +75,6 @@
static bool RET_motionState __attribute__((section("noinit"),zero_init));
static float RET_motionTotalActivityHours __attribute__((section("noinit"),zero_init));
static char RET_activityData[130] __attribute__((section("noinit"),zero_init));
-//TO MAKE THE ABOVE BIGGER YOU NEED TO ALLOCATE MORE NOINIT MEMORY!!!!!
-
//IMPACT
static bool RET_impactTriggered __attribute__((section("noinit"),zero_init));
//EVENTS LOGGING
@@ -88,6 +86,8 @@
static time_t RET_eventTime_environmental_tx __attribute__((section("noinit"),zero_init));
static time_t RET_eventTime_activity_tx __attribute__((section("noinit"),zero_init));
static time_t RET_eventTime_wakeFromDormant __attribute__((section("noinit"),zero_init));
+//DUPLICATES
+static time_t RET_RTCunixtime2 __attribute__((section("noinit"),zero_init));
#elif defined ( __GNUC__ )
#elif defined ( __ICCARM__ )
#endif
@@ -120,11 +120,6 @@
Semaphore mainthread;
//------------------------------------------------------------------------------
-//SINGLETONS
-//------------------------------------------------------------------------------
-//NVStore &nvstore = NVStore::get_instance();
-
-//------------------------------------------------------------------------------
// LOW LEVEL FUNCS
//------------------------------------------------------------------------------
void turnOffEverything() {
@@ -144,14 +139,30 @@
RET_state = state;
DEBUG("STATEREADBACK %d\n",RET_state)
}
+bool memoryIntegrityCheck() {
+ //Check clocks match and are in range
+ if (RET_RTCunixtime != RET_RTCunixtime && RET_RTCunixtime > 1545412457) {
+ RET_coldBoot = 1;
+ return false;
+ } else {
+ return true;
+ }
+}
void getBatteryV() {
NRF52_SAADC batteryIn;
batteryIn.addChannel(9); // vdd for battery
batteryIn.calibrate();
- for (uint8_t i = 1; i < 3; i++) { // need to get it 3 times to get accurate data, first one is always low for some reason
+ 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
batteryIn.updateData();
GLOBAL_voltage = (batteryIn.getData()[0])*(1.0/1024.0)*3.65;
}
+ DEBUG("Voltage:%.2f\n",GLOBAL_voltage);
+}
+float getTemperature() {
+ SI7060 si7060(PN_I2C_SDA, PN_I2C_SCL);
+ float temperature = si7060.getTemperature();
+ DEBUG("Temperature:%.2f\n",temperature);
+ return temperature;
}
//------------------------------------------------------------------------------
// USER BUTTON HANDLING
@@ -169,6 +180,8 @@
void RTCtick() {
//YOU MUST NOT CALL ANY OTHER FUNCTIONS OR DEBUG FROM INSIDE HERE!!! OR IT LOCKS UP THE DEVICE, just change vars
RET_RTCunixtime += 1;
+ RET_RTCunixtime2 += 1;
+
GLOBAL_RTCunixtime = RET_RTCunixtime;
//button logic - check for hold
@@ -210,22 +223,22 @@
Thread::wait(200); //wait to ensure that devices are turned off
//IDENTITY
RET_imei = 0;
- memset(RET_pf_identifier,0,sizeof(RET_pf_identifier));
//STATE
RET_coldBoot = 1;
RET_haveSettings = 0;
RET_state = STATE_SETUP;
RET_state_prev = RET_state;
RET_RTCunixtime = 0;
+ RET_RTCunixtime = 2;
RET_SetupRunAt = 0;
//SETTINGS
RET_setting_firmware = 0;
RET_setting_location_mode = 2;
- RET_setting_location_accuracy = 1;
+ 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_activity_tx_interval_mins = 0;
+ 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;
@@ -255,6 +268,7 @@
//EVENT HANDLING
RET_eventTime_location_log = 0;
RET_eventTime_location_tx = 0;
+ RET_eventTime_location_failsafe_tx = 0;
RET_eventTime_environmental_log = 0;
RET_eventTime_environmental_tx = 0;
RET_eventTime_activity_tx = 0;
@@ -267,13 +281,29 @@
void copyRETtoGLOBAL() {
GLOBAL_imei = RET_imei;
}
-void selfTest() {
+bool selfTest() {
+ int test_count = 0;
+ int test_pass = 0;
+
//Accelerometer
+ test_count ++;
LIS3DH lis3dh(PN_SPI_MOSI, PN_SPI_MISO, PN_SPI_CS0, PN_SPI_CLK);
uint8_t lis3dh_id;
lis3dh.LIS3DH_GetWHO_AM_I(&lis3dh_id);
- if (lis3dh_id == 51) {
- LED1blink(10,50);
+ if (lis3dh_id == 51) {test_pass ++;}
+
+ //Temperature
+ test_count ++;
+ SI7060 si7060(PN_I2C_SDA, PN_I2C_SCL);
+ float temperature;
+ temperature = si7060.getTemperature();
+ test_pass ++;
+
+ //Result
+ if (test_count == test_pass) {
+ return true;
+ } else {
+ return false;
}
}
@@ -329,26 +359,25 @@
//process result
int matchCount = 0;
int critical_fail_count = 0;
- char TEMP_a[7]; 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;
+ 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;
int TEMP_k = -1; int TEMP_l = -1; int TEMP_m = -1; int TEMP_n = -1; int TEMP_o = -1; int TEMP_p = -1; int TEMP_q = -1; int TEMP_r = -1; int TEMP_s = -1;
- if ( (matchCount = sscanf(settingsBuffer,"a:%c%c%c%c%c%c,b:%u,c:%d,d:%d,e:%d,f:%d,g:%d,h:%d,i:%d,j:%d,k:%d,l:%d,m:%d,n:%d,o:%d,p:%d,q:%d,r:%d,s:%d",
- &TEMP_a[0],&TEMP_a[1],&TEMP_a[2],&TEMP_a[3],&TEMP_a[4],&TEMP_a[5],&TEMP_b,&TEMP_c,&TEMP_d,&TEMP_e,&TEMP_f,&TEMP_g,&TEMP_h,&TEMP_i,&TEMP_j,&TEMP_k,&TEMP_l,&TEMP_m,&TEMP_n,&TEMP_o,&TEMP_p,&TEMP_q,&TEMP_r,&TEMP_s) ) > 0 ) {
- DEBUG("VALUES: a:%s,b:%u,c:%d,d:%d,e:%d,f:%d,g:%d,h:%d,i:%d,j:%d,k:%d,l:%d,m:%d,n:%d,o:%d,p:%d,q:%d,r:%d,s:%d\n",
- TEMP_a,TEMP_b,TEMP_c,TEMP_d,TEMP_e,TEMP_f,TEMP_g,TEMP_h,TEMP_i,TEMP_j,TEMP_k,TEMP_l,TEMP_m,TEMP_n,TEMP_o,TEMP_p,TEMP_q,TEMP_r,TEMP_s);
+ if ( (matchCount = sscanf(settingsBuffer,"b:%u,c:%d,d:%d,e:%d,f:%d,g:%d,h:%d,i:%d,j:%d,k:%d,l:%d,m:%d,n:%d,o:%d,p:%d,q:%d,r:%d,s:%d",
+ &TEMP_b,&TEMP_c,&TEMP_d,&TEMP_e,&TEMP_f,&TEMP_g,&TEMP_h,&TEMP_i,&TEMP_j,&TEMP_k,&TEMP_l,&TEMP_m,&TEMP_n,&TEMP_o,&TEMP_p,&TEMP_q,&TEMP_r,&TEMP_s) ) > 0 ) {
+ DEBUG("VALUES: b:%u,c:%d,d:%d,e:%d,f:%d,g:%d,h:%d,i:%d,j:%d,k:%d,l:%d,m:%d,n:%d,o:%d,p:%d,q:%d,r:%d,s:%d\n",
+ TEMP_b,TEMP_c,TEMP_d,TEMP_e,TEMP_f,TEMP_g,TEMP_h,TEMP_i,TEMP_j,TEMP_k,TEMP_l,TEMP_m,TEMP_n,TEMP_o,TEMP_p,TEMP_q,TEMP_r,TEMP_s);
//FAILUREMODE need to be checking thse against checksums
char changed;
//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'; 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_e != -1) { RET_setting_location_mode = TEMP_e; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_location_mode:%d..%c\n",RET_setting_location_mode,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_j != -1) { RET_setting_activity_tx_interval_hrs = TEMP_j; changed = 'Y'; } else { changed = 'N'; }; DEBUG("RET_setting_activity_tx_interval_hrs:%d..%c\n",RET_setting_activity_tx_interval_hrs,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);
@@ -375,16 +404,15 @@
}
}
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_mode:%d \n",RET_setting_location_mode);
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_activity_tx_interval_hrs:%d \n",RET_setting_activity_tx_interval_hrs);
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);
@@ -405,8 +433,8 @@
RET_eventTime_location_failsafe_tx = (RET_RTCunixtime + (RET_setting_location_tx_failsafe_hrs * 3600));
DEBUG("EVENTSET - LOCATION FAILSAFE TX at %u\n",RET_eventTime_location_failsafe_tx);
}
- if(RET_setting_activity_tx_interval_mins > 0) {
- RET_eventTime_activity_tx = (RET_RTCunixtime + (RET_setting_activity_tx_interval_mins * 60));
+ if(RET_setting_activity_tx_interval_hrs > 0) {
+ RET_eventTime_activity_tx = (RET_RTCunixtime + (RET_setting_activity_tx_interval_hrs * 3600));
DEBUG("EVENTSET - ACTIVITY TX at %u\n",RET_eventTime_activity_tx);
}
if(RET_eventTime_environmental_tx > 0) {
@@ -426,8 +454,9 @@
GLOBAL_imei = RET_imei;
DEBUG("imei: %lld \n",RET_imei);
if (modem.registerOnNetwork(2,180000)) {
+ int timetaken = (RET_RTCunixtime - GLOBAL_wakeTime);
char bytestosend[160];
- snprintf(bytestosend,sizeof(bytestosend),"(%s,im:%lld,v:%.2f,fr:1,z:SETUP,c:1)\0",GLOBAL_defaultApi,GLOBAL_imei,GLOBAL_voltage);
+ snprintf(bytestosend,sizeof(bytestosend),"(%s,im:%lld,f:%d,v:%.2f,e:%d,fr:1,z:SETUP,c:1)\0",GLOBAL_defaultApi,GLOBAL_imei,FW_VERSION,GLOBAL_voltage,timetaken);
char result[180];
snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytestosend, true, 2, GLOBAL_defaultApi));
if (result != "err") {
@@ -456,13 +485,61 @@
//------------------------------------------------------------------------------
// EVENTS
//------------------------------------------------------------------------------
-void event_location_tx() {
- DEBUG("PERFORM LOCATION TX\n");
+void event_shakertest_tx() {
+ DEBUG("SHAKER TEST\n");
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_setting_location_accuracy
- modem.getLocation(true, 3, true, RET_setting_location_timeout);
+ if (modem.registerOnNetwork(2,180000)) {
+ int timetaken = (RET_RTCunixtime - GLOBAL_wakeTime);
+ char bytestosend[160];
+ snprintf(bytestosend,sizeof(bytestosend),"(%s,f:%d,t:%.2f,v:%.2f,z:SHAKERTEST-%d,e:%d,c:1)\0",GLOBAL_defaultApi,FW_VERSION,temperature,GLOBAL_voltage,selftestresult,timetaken);
+ char result[180];
+ bool getSettings = true;
+ snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytestosend, getSettings, 2, GLOBAL_defaultApi));
+ if (result != "err") {
+ DEBUG("\nfromserver: %s \n",result);
+ if (getSettings) {
+ saveSettings(result);
+ }
+ }
+ }
+ }
+ //RESETS
+ RET_motionTriggeredInTXInterval = 0;
+ saveEventTimes();
+}
+
+void event_location_tx() {
+ DEBUG("LOCATION 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()) {
+ int timetaken = (RET_RTCunixtime - GLOBAL_wakeTime);
+ char gpsString[70];
+ if (RET_setting_location_accuracy > 0) {
+ snprintf(gpsString,sizeof(gpsString),"%s",modem.getLocation(RET_setting_location_accuracy, RET_setting_location_timeout));
+ DEBUG("\ngpsString:%s\n",gpsString);
+ } else {
+ DEBUG("localisation disabled\n");
+ }
+ //SEND DATA
+ if (modem.registerOnNetwork(2,180000)) {
+ char bytestosend[160];
+ snprintf(bytestosend,sizeof(bytestosend),"(%s,f:%d,t:%.2f,v:%.2f,z:OK,e:%d,c:1%s)\0",GLOBAL_defaultApi,FW_VERSION,temperature,GLOBAL_voltage,timetaken,gpsString);
+ char result[180];
+ bool getSettings = true;
+ snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytestosend, getSettings, 2, GLOBAL_defaultApi));
+ if (result != "err") {
+ DEBUG("\nfromserver: %s \n",result);
+ if (getSettings) {
+ saveSettings(result);
+ }
+ }
+ }
}
//RESETS
RET_motionTriggeredInTXInterval = 0;
@@ -475,11 +552,12 @@
switch(RET_state) {
case STATE_SETUP :
DEBUG("STATE:SETUP\n");
+ factoryReset();
getBatteryV();
if (setup()) {
copyRETtoGLOBAL();
} else {
- RET_eventTime_wakeFromDormant = (RET_RTCunixtime + (72*3600)); //72hrs
+ RET_eventTime_wakeFromDormant = (RET_RTCunixtime + (24*3600)); //24hrs
setState(STATE_DORMANT);
DEBUG("SETSTATE:DORMANT until %u\n",RET_eventTime_wakeFromDormant);
}
@@ -490,63 +568,32 @@
checkMotion();
//EVENTS
-
//LOCATION
- //Location Log
- /*
- 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
- if(RET_RTCunixtime > RET_eventTime_location_tx && RET_eventTime_location_tx > 0) {
- DEBUG("INTERVAL LOC TX...\n");
- run_location_tx = true;
- }
- break;
- case 2: //INTERVAL POST WITH MOTION CHECK
- if(RET_motionTriggeredInTXInterval && RET_RTCunixtime > RET_eventTime_location_tx && RET_eventTime_location_tx > 0) {
- DEBUG("INTERVAL LOC TX WMC...\n");
- run_location_tx = true;
- }
- break;
- case 3: //POST ON STOP MOTION
- if (GLOBAL_motionStopFlagTriggered) {
- DEBUG("MOTION STOP LOC TX...\n");
- run_location_tx = true;
- GLOBAL_motionStopFlagTriggered = false;
- }
- break;
+ if(RET_RTCunixtime >= RET_eventTime_location_tx && RET_eventTime_location_tx > 0) {
+ DEBUG("INTERVAL LOC TX...\n");
+ run_location_tx = true;
}
- //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();}
+ //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();
+ }
- //Environmental Log
- if(RET_RTCunixtime > RET_eventTime_environmental_log && RET_eventTime_environmental_log > 0) {
- /*
- Filesystem filesystem(BD_PAGE_ADDRESS,BD_TOTAL_SIZE);
- SI7060 temperature(PN_I2C_SDA,PN_I2C_SCL);
- float temperature_c = temperature.getTemperature();
- DEBUG("Temperature log: %u,%f \n", RET_RTCunixtime,temperature_c);
- filesystem.addLogEntry_temperature(RET_RTCunixtime,temperature_c);
- */
- }
- //Environmental TX
- if(RET_RTCunixtime > RET_eventTime_environmental_tx && RET_eventTime_environmental_tx > 0) {
- //getBatteryV();
- //event_environmental_bc();
- //Filesystem filesystem(PN_SPI_MOSI,PN_SPI_MISO,PN_SPI_CLK,PN_SPI_CS1);
- }
- //Activity TX
- if(RET_RTCunixtime > RET_eventTime_activity_tx && RET_eventTime_activity_tx > 0) {
+ //ACTIVITY TX
+ if(RET_RTCunixtime >= RET_eventTime_activity_tx && RET_eventTime_activity_tx > 0) {
//event_activity_tx();
+ event_shakertest_tx();
}
break;
case STATE_DORMANT :
- if (RET_RTCunixtime > RET_eventTime_wakeFromDormant) {
- setState(STATE_NORMAL);
+ if (RET_RTCunixtime >= RET_eventTime_wakeFromDormant) {
+ if (RET_haveSettings) {
+ setState(STATE_NORMAL);
+ } else {
+ setState(STATE_SETUP);
+ }
+
DEBUG("WAKING UP FROM DORMANT\n");
}
DEBUG("STATE:DORMANT until %u\n",RET_eventTime_wakeFromDormant);
@@ -591,6 +638,7 @@
//------------------------------------------------------------------------------
int main() {
turnOffEverything();
+ memoryIntegrityCheck();
//CHECK IF THIS IS RESET
//0x00000004 == soft reset //0x00000002 == watchdog //0x00000001 == button/hardreset
@@ -622,24 +670,29 @@
copyRETtoGLOBAL();
while(true) {
- //SLEEP
- if (RET_coldBoot != 1) gotoSleep(10000); //THIS HAS TO BE THE FIRST ITEM IN THE MAIN LOOP
+ memoryIntegrityCheck();
watchdogKick();
//LOG START TIME
GLOBAL_wakeTime = RET_RTCunixtime;
//MAIN LOGIC
- DEBUG("STATE:%d, RTC_SECONDS:%u, SETUPAT:%u\n", RET_state, RET_RTCunixtime,RET_SetupRunAt);
-
- event_location_tx();
- while(1) {
- }
-
+ DEBUG("STATE:%d, HAVESETTINGS:%d, RTC:%u, BOOTAT:%u, LOC:%u, LOC_FS:%u, ACT:%u \n", RET_state, RET_haveSettings, RET_RTCunixtime,RET_SetupRunAt,RET_eventTime_location_tx,RET_eventTime_location_failsafe_tx,RET_eventTime_activity_tx);
mainStateEngine();
//PRE-SLEEP ACTIONS
if (GLOBAL_needToConfigureLis3dh) { lis3dh_configureForSleep(10,127); }
+ 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
+ NRF_UART0->TASKS_SUSPEND = 1;
+ NRF_UART0->ENABLE = 0; //NO MORE SERIAL OR DEBUG OUTPUTS AFTER THIS
+ mainthread.wait(30000);
+ system_reset();
}
}
\ No newline at end of file