v1.19 Release
Dependencies: nRF51822
Diff: Source/main.cpp
- Revision:
- 27:bb7247a1704e
- Parent:
- 26:a577c4b69fe0
- Child:
- 29:4b347695b9f7
diff -r a577c4b69fe0 -r bb7247a1704e Source/main.cpp --- a/Source/main.cpp Mon Apr 15 18:46:57 2019 +0000 +++ b/Source/main.cpp Wed Apr 17 18:19:30 2019 +0000 @@ -32,7 +32,7 @@ #if TEST_ON_NRF51_DK==0 // real board //int reg_mode = 1; - InterruptIn is_package_open(LIGHT_SENSE, PullDown); // will be pulled hi when package_is_open (only if package_open_sense_enable = 1) + InterruptIn is_package_open(LIGHT_SENSE, PullNone); // will be pulled hi when package_is_open (only if package_open_sense_enable = 1) DigitalOut package_open_sense_enable(LIGHT_SENSE_ENABLE, 0); DigitalOut cap_sense_led(CAP_SENSE_LED, 0); @@ -187,6 +187,7 @@ state_t last_state = OTHER; +int last_cap; /// Main state machine /// Called whenever a sensor changes @@ -228,6 +229,7 @@ flash_led(1, 1.0); package_open_sense_enable = 1; start_periodic_tick(FAST_TICK_SEC); + last_cap = 99; state = TEST_MODE; } else @@ -240,6 +242,13 @@ case TEST_MODE: test_cap(); led = is_cap_off; + if(last_cap != is_cap_off) + { + last_cap = is_cap_off; + BLE_UART_xmit("*Cap "); + if(last_cap) BLE_UART_xmit("Off"); else BLE_UART_xmit("On"); + BLE_UART_xmit("\n"); + } if(!NV_TESTING_REQUIRED && is_package_open) { // testing passed set_radio(false); // already done when NV_TESTING_REQUIRED was cleared. @@ -249,7 +258,7 @@ break; case SHIP_MODE_WAIT_DARK: // Wait for light sensor to see darkness - flash_led(1,0.1); + //flash_led(1,0.1); if(!is_package_open) { // its dark state = SHIP_MODE_WAIT_LIGHT; @@ -277,7 +286,7 @@ if(package_open_detected) { debug("Awake\n"); - flash_led(10,0.25); + //flash_led(3,0.25); test_cap(); if(is_cap_off) { @@ -318,12 +327,13 @@ case WAIT_CAP_OFF: // cap is on, waiting for cap to be removed if(read_clock()>((uint32_t)EOL_TIMEOUT_DAYS*24*60*60)) { // EOL detected due to maximum time - if(!NV_NOT_EOL) nv_clear(NV_NOT_EOL_ADDR); + if(NV_NOT_EOL) nv_clear(NV_NOT_EOL_ADDR); } if(!NV_NOT_EOL) { // EOL flagged - log_add(EVENT_EOL, 0, 0, 0); // log event + if(log_code_count(EVENT_EOL)==0) log_add(EVENT_EOL, 0, 0, 0); // log event + start_periodic_tick(EOL_TICK_SEC); // just tick less often state = EOL_WAIT_CAP_OFF; } else if(is_cap_off) @@ -343,13 +353,14 @@ uint32_t cap_off_dur = read_clock()-cap_off_time; if(cap_off_dur>65535) cap_off_dur = 65535; log_add(EVENT_CAP_ON, cap_off_dur & 0xff, (cap_off_dur >> 8)&0xff, 0); // log event - set_radio(true); - state = WAIT_CAP_OFF; if(log_code_count(EVENT_CAP_ON)>= EOL_MAX_USES) { // EOL detected due to maximum uses - if(!NV_NOT_EOL) nv_clear(NV_NOT_EOL_ADDR); + if(NV_NOT_EOL) nv_clear(NV_NOT_EOL_ADDR); } + + set_radio(true); + state = WAIT_CAP_OFF; } break; @@ -359,10 +370,11 @@ debug("EOL Cap Off \n"); state = EOL_WAIT_CAP_ON; } - else if(!is_package_open) - { // its dark - state = EOL_WAIT_LIGHT; - } + //else if(!is_package_open) + //{ // its dark + // start_periodic_tick(EOL_TICK_SEC); // just tick less often + // state = EOL_WAIT_LIGHT; + //} break; case EOL_WAIT_CAP_ON: // Cap is off @@ -370,23 +382,21 @@ { // cap just put on debug("EOL Cap On \n"); set_radio(true); - state = WAIT_CAP_OFF; + state = EOL_WAIT_CAP_OFF; } break; case EOL_WAIT_LIGHT: // EOL and its dark, save power // set up and enable the Light Sense Interrupt // go to lowest power state - start_periodic_tick(EOL_TICK_SEC); // just tick less often? + debug("Going to EOL dark mode\n"); - is_package_open.disable_irq(); - stop_periodic_tick(); led = 0; - package_open_detected = false; - //is_package_open.mode(PullDown); - is_package_open.rise(&light_interrupt); - is_package_open.enable_irq(); - state = SHIP_MODE_CHECK_CAP; + if(is_package_open) + { + start_periodic_tick(PERIODIC_TICK_SEC); + state = EOL_WAIT_CAP_OFF; + } break; default: // illegal state @@ -396,6 +406,11 @@ } while(state != last_state); } +void dataWasRead(void) +{ + flash_led(1, 0.04); +} + /// process commands sent to the SmartCap over Bluetooth UART void process_cmd(char * cmd) { @@ -440,7 +455,7 @@ case 's': // sensors as binary, with bits '000eutcp', e=(0=EOL), u=(0=in use), t=(1=TESTING REQUIRED), c=(1 is cap off), p=(1 is light sensed) //int val = 0; - BLE_UART_xmit("ss=000"); + BLE_UART_xmit("*ss=000"); if(NV_NOT_EOL) BLE_UART_xmit("1"); else BLE_UART_xmit("0"); if(NV_NOT_IN_USE) BLE_UART_xmit("1"); else BLE_UART_xmit("0"); if(NV_TESTING_REQUIRED) BLE_UART_xmit("1"); else BLE_UART_xmit("0");