init
Dependencies: aconno_I2C Lis2dh12 WatchdogTimer
Diff: main.cpp
- Revision:
- 6:388d3c7efdd9
- Parent:
- 5:8f8951127724
- Child:
- 7:e9a19750700d
--- a/main.cpp Mon Nov 12 10:56:23 2018 +0000 +++ b/main.cpp Wed Nov 14 16:08:28 2018 +0000 @@ -29,8 +29,9 @@ //------------------------------------------------------------------------------ #if defined ( __CC_ARM ) /** THIS IS THE MBED ONLINE COMPILER TOOLCHAIN*/ -static uint8_t RET_mode __attribute__((section("noinit"),zero_init)); -static uint32_t RET_unixtime __attribute__((section("noinit"),zero_init)); +static uint8_t RET_mode __attribute__((section("noinit"),zero_init)); +static uint32_t RET_unixtime_backup __attribute__((section("noinit"),zero_init)); +static char RET_buffer[64] __attribute__((section("noinit"),zero_init)); #elif defined ( __GNUC__ ) #elif defined ( __ICCARM__ ) #endif @@ -69,28 +70,36 @@ //------------------------------------------------------------------------------ //Pin states //------------------------------------------------------------------------------ -DigitalOut led1(p11); -DigitalOut vreg_en(p29); -DigitalOut gsm_pwkey(p28); -DigitalOut lis3dh_cs(p22); +DigitalOut led1(PN_LED); +DigitalOut vreg_en(PN_VREG_EN); +DigitalOut gsm_pwkey(PN_GSM_PWR_KEY); +DigitalOut lis3dh_cs(PN_SPI_CS0); +DigitalOut flash_cs(PN_SPI_CS1); +DigitalIn lis3dh_int1(PN_ACC_INT1); //IMPACT +DigitalIn lis3dh_int2(PN_ACC_INT2); //DISTURBED //------------------------------------------------------------------------------ //Peripherals //------------------------------------------------------------------------------ //BLE myble; #if NEED_CONSOLE_OUTPUT -Serial uart(p6, p8, 115200); +Serial uart(PN_UART_TX, PN_UART_RX, 115200); #endif -//ATSerial atserial(p6,p8,115200); +//ATSerial atserial(PN_UART_TX, PN_UART_RX, 115200); WatchdogTimer watchdog(65.0); //Do not set to less than 4500ms or can cause issues with softdevice +//------------------------------------------------------------------------------ +//Singletons +//------------------------------------------------------------------------------ +NVStore &nvstore = NVStore::get_instance(); + void gotoSleep(long sleep_milliseconds) { //accelerometer.configureForSleep(); if (requireSoftReset) { //dont need to clear this var as reset changes it back to false - RET_unixtime = time(NULL); //save unixtime for reset + RET_unixtime_backup = time(NULL); //save unixtime for reset //NVIC_SystemReset(); system_reset(); } @@ -108,13 +117,101 @@ led1 = 1; } +bool GSMon() { + //power on GSM + vreg_en = 1; + ThisThread::sleep_for(500); + gsm_pwkey = 0; + ThisThread::sleep_for(1500); + gsm_pwkey = 1; + LED1on(1000); +} + +void setup_CS_LIS3DH() +{ + //Without this setup CS lines of AT45 & LIS3DH are in conflict, causing huge current consumption + lis3dh_cs = 1; //not selected + flash_cs = 1; //not selected + //AT_RS = 0; //asserted == reset state + //wait_ms(100); + //AT_RS = 1; +} + +void lis3dh_configureForSleep() { + //init + LIS3DH lis3dh(PN_SPI_MOSI, PN_SPI_MISO, PN_SPI_CS0, PN_SPI_CLK); + requireSoftReset = true; //WE HAVE STARTED SPI SO NEED THIS + //Mode + lis3dh.InitLIS3DH(LIS3DH_NORMAL, LIS3DH_ODR_25Hz, LIS3DH_FULLSCALE_8); + lis3dh.LIS3DH_SetIntMode(LIS3DH_INT_MODE_6D_MOVEMENT); + //Int1 + lis3dh.LIS3DH_SetInt1Pin(LIS3DH_CLICK_ON_PIN_INT1_DISABLE | LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE | + LIS3DH_I1_INT2_ON_PIN_INT1_DISABLE | LIS3DH_I1_DRDY1_ON_INT1_DISABLE | LIS3DH_I1_DRDY2_ON_INT1_DISABLE | + LIS3DH_WTM_ON_INT1_DISABLE | LIS3DH_INT1_OVERRUN_DISABLE ); + lis3dh.LIS3DH_SetInt1Threshold(10); + lis3dh.LIS3DH_SetIntConfiguration(LIS3DH_INT1_ZHIE_ENABLE | LIS3DH_INT1_ZLIE_ENABLE | + LIS3DH_INT1_YHIE_ENABLE | LIS3DH_INT1_YLIE_ENABLE | + LIS3DH_INT1_XHIE_ENABLE | LIS3DH_INT1_XLIE_ENABLE ); + lis3dh.LIS3DH_SetInt1Duration(0); + lis3dh.LIS3DH_Int1LatchEnable(MEMS_ENABLE); + //HP filter + lis3dh.LIS3DH_SetHPFMode(LIS3DH_HPM_AUTORESET_INT); + lis3dh.LIS3DH_SetFilterDataSel(MEMS_ENABLE); + lis3dh.LIS3DH_HPFAOI1Enable(MEMS_ENABLE); + lis3dh.LIS3DH_HPFAOI2Enable(MEMS_ENABLE); +} + void resetState() { firstBoot = true; + + //RESET VARS RET_mode = 0; - RET_unixtime = 0; - set_time(RET_unixtime); + RET_unixtime_backup = 0; + set_time(RET_unixtime_backup); + + //SET IDENTIFIER + uint32_t nv_value = 12345678; + int rc = nvstore.set(NV_IDENTIFIER, sizeof(nv_value), &nv_value); } +void mainStateEngine() { + + RET_mode = MODE_NORMAL; + + + switch(RET_mode) { + case MODE_SETUP : + resetState(); + //selftest(); + break; + + case MODE_NORMAL : + + if (RET_requireMotionFlag) { + bool MotionFlagTriggered = false; + + //check interrupt + if (lis3dh_int2) { + MotionFlagTriggered = true; + } + } + + break; + + case MODE_DORMANT : + + break; + + case MODE_OFF_48HRS : + + break; + + default : + RET_mode = MODE_SETUP; + } +} + + int main() { led1 = 1; @@ -128,11 +225,11 @@ break; case 0x00000002 : DEBUG("reset_reason: 0x%08x. - Watchdog\n",NRF_POWER->RESETREAS); - set_time(RET_unixtime); + set_time(RET_unixtime_backup); break; case 0x00000004 : DEBUG("reset_reason: 0x%08x. - Soft reset\n",NRF_POWER->RESETREAS); - set_time(RET_unixtime); + set_time(RET_unixtime_backup); break; } NRF_POWER->RESETREAS = 0xffffffff; @@ -149,66 +246,6 @@ } } -bool GSMon() { - //power on GSM - vreg_en = 1; - ThisThread::sleep_for(500); - gsm_pwkey = 0; - ThisThread::sleep_for(1500); - gsm_pwkey = 1; - LED1on(1000); -} - - -void mainStateEngine() { - - //TEST AREA - LIS3DH accelerometer(p23, p19, p24, p22, LIS3DH_DR_NR_LP_25HZ, LIS3DH_FS_8G); - requireSoftReset = true; - if (!accelerometer.selfTest()) { - LED1on(100); - } - accelerometer.configureForSleep(); - //ThisThread::sleep_for(10000); - - - - - - - - bool accel_awake; - - RET_mode = MODE_SETUP; - - switch(RET_mode) { - case MODE_SETUP : - - //selftest(); - break; - - case MODE_INTERVAL : - - break; - - case MODE_INTELLIGENT : - - break; - - case MODE_MTU : - //mode_mtu(); - break; - - case MODE_DORMANT : - - break; - - default : - RET_mode = MODE_SETUP; - } - -} - /* @@ -223,9 +260,11 @@ accel_healthy = true; } } +*/ +/* void mode_mtu() { - bool accel_awake = accelerometer.getINT2(); + bool accel_awake = accelerometer.getINT2(); //CHECK FOR MOTION if (accel_awake == true) { @@ -303,6 +342,7 @@ + /* int selftest() { @@ -410,4 +450,22 @@ //time_t unixtime = time(NULL); //DEBUG("got: %i, %d, %d \n", RET_mode, RET_unixtime, unixtime); - \ No newline at end of file + +/* +uint8_t acc_id; + lis3dh.LIS3DH_GetWHO_AM_I(&acc_id); + uart.printf("%i \n\r", acc_id); + */ + +/* + AxesRaw_t accel_raw; + lis3dh.LIS3DH_GetAccAxesRaw(&accel_raw); + + uart.printf("x="); + uart.printf("%i", accel_raw.AXIS_X); + uart.printf(" y="); + uart.printf("%i", accel_raw.AXIS_Y); + uart.printf(" z="); + uart.printf("%i", accel_raw.AXIS_Z); + uart.printf("\n\r"); +*/ \ No newline at end of file