init
Dependencies: aconno_I2C Lis2dh12 WatchdogTimer
Revision 26:fa3579737329, committed 2018-12-23
- 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);
}
}