v1.19 Release

Dependencies:   nRF51822

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");