init
Dependencies: aconno_I2C Lis2dh12 WatchdogTimer
Diff: main.cpp
- Revision:
- 37:505ef618f06c
- Parent:
- 36:8e359069192b
- Child:
- 38:476a9b5629a1
--- a/main.cpp Tue Jan 15 11:19:41 2019 +0000
+++ b/main.cpp Wed Jan 16 21:27:28 2019 +0000
@@ -3,7 +3,9 @@
//------------------------------------------------------------------------------
//DEFINES
//------------------------------------------------------------------------------
-#define FW_VERSION 2
+#define FW_VERSION 2
+#define SKU "GPSPLUS"
+#define HW_MAJORREVISION "001"
//MODES
#define USE_NRF_TEMP_SENSOR 1
@@ -24,7 +26,7 @@
#define DEFAULT_BEACON_INTERVAL_SECONDS 10
//------------------------------------------------------------------------------
-//FUNCTION PROTOTYPES
+//FUNCTION PROTOTYPES - NEED TO ADD ALL OF THE MISSING ONES
//------------------------------------------------------------------------------
void mainStateEngine(void);
void selftest(void);
@@ -109,12 +111,12 @@
//PERIPHERALS
//------------------------------------------------------------------------------
//BLE myble;
-WatchdogTimer watchdog(300.0); //Do not set to less than 4500ms or can cause issues with softdevice
+WatchdogTimer watchdog; //Do not set to less than 4500ms or can cause issues with softdevice
void watchdogKick() {watchdog.kick();}
SI7060 si7060(PN_I2C_SDA, PN_I2C_SCL);
LIS3DH lis3dh(PN_SPI_MOSI, PN_SPI_MISO, PN_SPI_CS0, PN_SPI_CLK);
Modem modem(PN_GSM_PWR_KEY, PN_VREG_EN, PN_GSM_WAKE_DISABLE);
-LowPowerTicker RTCticker; //no impact on power consumption
+LowPowerTicker RTCticker;
//------------------------------------------------------------------------------
//THREAD SEMAPHORES
@@ -202,14 +204,12 @@
}
float getTemperature() {
float temperature;
-
if (USE_NRF_TEMP_SENSOR) {
//INTERNAL NRF52 TEMP SENSOR
temperature = nrfTemperature();
} else {
temperature = si7060.getTemperature(); //currently disabled because its causing a high current 450ua sleep, most likely due to sensor not sleeping correctly, or i2c sleep issue
}
-
return temperature;
}
void addToExceptionString(char* value) {
@@ -276,7 +276,6 @@
GLOBAL_accel_healthy = false;
GLOBAL_motionStopFlagTriggered = false;
memset(GLOBAL_exceptionString,0x00,sizeof(GLOBAL_exceptionString));
- if (DEBUG_ON) {memset(GLOBAL_debug_buffer,0x00,sizeof(GLOBAL_debug_buffer));}
}
void setDefaults() {
//IDENTITY
@@ -480,6 +479,16 @@
RET_haveSettings = true;
GLOBAL_needToConfigureLis3dh = true;
RET_SettingsGotAt = RET_RTCunixtime;
+
+ //check for firmware update
+ if (RET_setting_firmware != FW_VERSION) {
+ read_app_data_from_flash(&app_data);
+ app_data.target_firmware_version = RET_setting_firmware;
+ write_app_data_to_flash(&app_data);
+ ThisThread::wait(500);
+ system_reset();
+ }
+
return true;
} else {
if(DEBUG_ON){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), "CRITICAL FAILS:%d",critical_fail_count);debug_exe();}
@@ -723,12 +732,8 @@
break;
}
if(RET_RTCunixtime >= RET_eventTime_location_failsafe_tx && RET_eventTime_location_failsafe_tx > 0) { run_location_tx = true; }
- if (run_location_tx) { DEBUG("INTERVAL LOC TX...\n",false); event_location_tx(); }
+ if (run_location_tx) { event_location_tx(); }
- //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) { DEBUG("INTERVAL LOC TX...\n"); event_location_tx(); }
//ACTIVITY EVENT
bool run_activity_tx = false;
@@ -784,8 +789,8 @@
{
DEBUG("STATE:BUTTONHOLD\n",false);
if (RET_state_prev == STATE_NORMAL) {
+ RET_eventTime_wakeFromDormant = (RET_RTCunixtime + (72*3600)); //72hrs
setState(STATE_DORMANT);
- RET_eventTime_wakeFromDormant = (RET_RTCunixtime + (48*3600)); //48hrs
DEBUG("TURNING OFF\n",false);
DEBUG("STATE:DORMANT until %u\n",RET_eventTime_wakeFromDormant);
LED1on(5000);
@@ -815,6 +820,7 @@
LED1on(500);
//INIT
+ watchdog.configure(300.0);
LED1off();
RTCticker.attach(&RTCtick, 1.0);
button.fall(&buttonPress);
@@ -862,12 +868,15 @@
watchdogKick(); //only need this if we're in while loop
//INIT
- resetGlobals(); // could move this into state engine switches to save actions on each loop
+ resetGlobals(); // could move this into state switches to save actions on each loop
GLOBAL_wakeTime = RET_RTCunixtime;
//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);
+ //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);
+ if(DEBUG_ON){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), "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_exe();}
+ if(DEBUG_ON){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), "ACTIVITY:%s\n",RET_activityData);debug_exe();}
+
mainStateEngine();
//LOG FIRST RUN - BOOTLOADER COMMS