v1.19 Release
Dependencies: nRF51822
Diff: Source/main.cpp
- Revision:
- 25:42163d650266
- Parent:
- 24:761c30334cf4
- Child:
- 26:a577c4b69fe0
diff -r 761c30334cf4 -r 42163d650266 Source/main.cpp --- a/Source/main.cpp Thu Mar 21 19:28:22 2019 +0000 +++ b/Source/main.cpp Mon Mar 25 15:24:15 2019 +0000 @@ -94,7 +94,7 @@ void light_interrupt(void) { // dark to light transition package_open_detected = true; - start_periodic_tick(PERIODIC_TICK_SEC); + start_periodic_tick(FAST_TICK_SEC); } /// Test to see if Cap is off or on @@ -204,7 +204,7 @@ case INIT: log_add(EVENT_POWER, 0, 0, 0); // log event set_radio(true); - start_periodic_tick(PERIODIC_TICK_SEC); + start_periodic_tick(FAST_TICK_SEC); #if SKIP_SHIP_MODE state = IN_USE_SETUP; #else @@ -218,34 +218,35 @@ // Check Misc. //if(error) flash_led(0,0.1); // flash forever to indicate error - + if(NV_TESTING_REQUIRED) { flash_led(1, 1.0); package_open_sense_enable = 1; + start_periodic_tick(FAST_TICK_SEC); state = TEST_MODE; } else { state = IN_USE_SETUP; } + break; - case TEST_MODE: // allow - start_periodic_tick(FAST_TICK_SEC); + case TEST_MODE: test_cap(); led = is_cap_off; - if(NV_TESTING_REQUIRED == 0 && is_package_open == true) + if(!NV_TESTING_REQUIRED && is_package_open) { // testing passed set_radio(false); // already done when NV_TESTING_REQUIRED was cleared. led = 0; - //package_open_sense_enable = 1; state = SHIP_MODE_WAIT_DARK; } break; case SHIP_MODE_WAIT_DARK: // Wait for light sensor to see darkness - if(is_package_open == 0) + flash_led(1,0.1); + if(!is_package_open) { // its dark state = SHIP_MODE_WAIT_LIGHT; } @@ -254,11 +255,13 @@ case SHIP_MODE_WAIT_LIGHT: // set up and enable the Light Sense Interrupt // go to lowest power state + debug("Going SHIP MODE\n"); is_package_open.disable_irq(); stop_periodic_tick(); led = 0; package_open_detected = false; + is_package_open.mode(PullNone); is_package_open.rise(&light_interrupt); is_package_open.enable_irq(); state = SHIP_MODE_CHECK_CAP; @@ -266,9 +269,11 @@ break; case SHIP_MODE_CHECK_CAP: + if(package_open_detected) { debug("Awake\n"); + flash_led(10,0.25); test_cap(); if(is_cap_off) { @@ -282,7 +287,7 @@ break; case SHIP_MODE_WAIT_CAP_OFF: - if(is_package_open == 0) + if(!is_package_open) { state = SHIP_MODE_WAIT_LIGHT; } @@ -299,6 +304,7 @@ break; case IN_USE_SETUP: + flash_led(3, .25); start_periodic_tick(PERIODIC_TICK_SEC); debug("In Use\n"); state = WAIT_CAP_OFF; @@ -335,25 +341,6 @@ } while(state != last_state); } -int main(void) -{ - // blink LED to indicate power applied - flash_led(1,1.0); - - if(Init_BLE_Stuff()) // init and start advertising - { - flash_led(0, 0.05); // indicate a ble init error - } - - eventQueue.call(process_state); - - eventQueue.dispatch_forever(); // run all tasks in the event queue (non-interrupt routines) - return 0; -} - -//***************************************************************************** - - /// process commands sent to the SmartCap over Bluetooth UART void process_cmd(char * cmd) { @@ -378,18 +365,7 @@ BLE_UART_xmit(0); BLE_UART_xmit("\n"); break; - - #if 0 - case 'l': // light sensor analog readings - BLE_UART_xmit("sl="); - package_open_sense_enable = 1; - wait(0.001); - BLE_UART_xmit(adc_read(ADC_CHAN_LIGHT_SENSE, 2)); - package_open_sense_enable = 0; - BLE_UART_xmit("\n"); - break; - #endif - + case 'c': // cap sensor analog readings BLE_UART_xmit("sc="); test_cap(); @@ -399,15 +375,16 @@ BLE_UART_xmit("\n"); break; - case 's': // sensors as int, with bits '000000xy', x=(1 is cap off), y=(1 is light sensed) - int val = 0; - BLE_UART_xmit("ss="); + case 's': // sensors as binary, with bits '00000tcp', t=(1=TESTING REQUIRED), c=(1 is cap off), p=(1 is light sensed) + //int val = 0; + BLE_UART_xmit("ss=00000"); + if(NV_TESTING_REQUIRED) BLE_UART_xmit("1"); else BLE_UART_xmit("0"); + int save = package_open_sense_enable; package_open_sense_enable = 1; test_cap(); - if(is_cap_off) val |= 2; - if(is_package_open) val |= 1; - package_open_sense_enable = 0; - BLE_UART_xmit(val); + if(is_cap_off) BLE_UART_xmit("1"); else BLE_UART_xmit("0"); + if(is_package_open) BLE_UART_xmit("1"); else BLE_UART_xmit("0"); + package_open_sense_enable = save; BLE_UART_xmit("\n"); break; } @@ -418,6 +395,14 @@ log_add(EVENT_TEST_PASS, 0, 0, 0); nv_clear(NV_TESTING_REQUIRED_ADDR); } + #if 0 + else if(tolower(cmd[1])=='e') + { + set_radio(false); + wait(1.0); + log_erase(); + } + #endif break; case 't': // get time @@ -453,3 +438,23 @@ } cmd[0] = 0; } + +//***************************************************************************** + +int main(void) +{ + // blink LED to indicate power applied + //flash_led(1,1.0); + + if(Init_BLE_Stuff()) // init and start advertising + { + flash_led(0, 0.05); // indicate a ble init error + } + + eventQueue.call(process_state); + + eventQueue.dispatch_forever(); // run all tasks in the event queue (non-interrupt routines) + return 0; +} + +