BLE sensor for temperature and humidity using Si7021 and photocell.
Dependencies: BLE_API mbed nRF51822
main.cpp@10:79e8f92ef156, 2017-07-29 (annotated)
- Committer:
- electronichamsters
- Date:
- Sat Jul 29 21:49:44 2017 +0000
- Revision:
- 10:79e8f92ef156
- Parent:
- 9:b6302fc4e754
- Child:
- 11:4f925834167d
Added spoof checking
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
electronichamsters | 10:79e8f92ef156 | 1 | /* |
electronichamsters | 10:79e8f92ef156 | 2 | Eric Tsai |
electronichamsters | 8:46c5e0bfab05 | 3 | |
electronichamsters | 10:79e8f92ef156 | 4 | 7/29/2017: added clock algorithm to corresond with gateway spoof checking |
electronichamsters | 10:79e8f92ef156 | 5 | |
sunsmile2015 | 0:3dc6e424dba0 | 6 | */ |
sunsmile2015 | 0:3dc6e424dba0 | 7 | |
electronichamsters | 8:46c5e0bfab05 | 8 | //required to call the ecb functions |
electronichamsters | 8:46c5e0bfab05 | 9 | extern "C" |
electronichamsters | 8:46c5e0bfab05 | 10 | { |
electronichamsters | 8:46c5e0bfab05 | 11 | #include "nrf_ecb.h" |
electronichamsters | 8:46c5e0bfab05 | 12 | } |
electronichamsters | 8:46c5e0bfab05 | 13 | |
sunsmile2015 | 0:3dc6e424dba0 | 14 | #include "mbed.h" |
rgrover1 | 5:f4d74a8cad43 | 15 | #include "toolchain.h" |
sunsmile2015 | 0:3dc6e424dba0 | 16 | #include "ble/BLE.h" |
sunsmile2015 | 0:3dc6e424dba0 | 17 | #include "TMP_nrf51/TMP_nrf51.h" |
sunsmile2015 | 0:3dc6e424dba0 | 18 | |
electronichamsters | 8:46c5e0bfab05 | 19 | //comment out when done with debug uart, else eats batteries |
electronichamsters | 10:79e8f92ef156 | 20 | #define MyDebugEnb 0 |
electronichamsters | 8:46c5e0bfab05 | 21 | |
electronichamsters | 8:46c5e0bfab05 | 22 | //Pin "P0.4" on nRF51822 = mbed "p4". |
electronichamsters | 8:46c5e0bfab05 | 23 | //InterruptIn is pulled-up. GND the pin to activate. |
electronichamsters | 8:46c5e0bfab05 | 24 | |
electronichamsters | 8:46c5e0bfab05 | 25 | // waveshare board ****** |
electronichamsters | 8:46c5e0bfab05 | 26 | //InterruptIn button1(p10); |
electronichamsters | 8:46c5e0bfab05 | 27 | //InterruptIn button2(p11); |
electronichamsters | 8:46c5e0bfab05 | 28 | |
electronichamsters | 8:46c5e0bfab05 | 29 | // purple board ****** |
electronichamsters | 10:79e8f92ef156 | 30 | //InterruptIn button1(p23); |
electronichamsters | 10:79e8f92ef156 | 31 | //InterruptIn button2(p24); |
electronichamsters | 8:46c5e0bfab05 | 32 | |
electronichamsters | 10:79e8f92ef156 | 33 | // universal |
electronichamsters | 10:79e8f92ef156 | 34 | InterruptIn button1(p0); |
electronichamsters | 10:79e8f92ef156 | 35 | InterruptIn button2(p1); |
electronichamsters | 10:79e8f92ef156 | 36 | |
electronichamsters | 10:79e8f92ef156 | 37 | // Rigado BMD200 ****** |
electronichamsters | 10:79e8f92ef156 | 38 | //InterruptIn button1(p4); |
electronichamsters | 10:79e8f92ef156 | 39 | //InterruptIn button2(p5); |
electronichamsters | 8:46c5e0bfab05 | 40 | |
electronichamsters | 8:46c5e0bfab05 | 41 | //Serial device(p9, p11); // tx, rx, purple board and Rigado |
electronichamsters | 8:46c5e0bfab05 | 42 | #if MyDebugEnb |
electronichamsters | 8:46c5e0bfab05 | 43 | // if you see ~1mA consumption during sleep, that's because uart is enabled. |
electronichamsters | 8:46c5e0bfab05 | 44 | Serial device(p9, p11); //nRF51822 uart : TX=p9. RX=p11 |
electronichamsters | 8:46c5e0bfab05 | 45 | #endif |
electronichamsters | 8:46c5e0bfab05 | 46 | |
electronichamsters | 8:46c5e0bfab05 | 47 | |
electronichamsters | 10:79e8f92ef156 | 48 | static Timer myTimer; //timed advertising |
electronichamsters | 8:46c5e0bfab05 | 49 | static Ticker tic_adv; //stop adv |
electronichamsters | 8:46c5e0bfab05 | 50 | static Ticker tic_debounce; //debounce I/O |
electronichamsters | 8:46c5e0bfab05 | 51 | static Ticker tic_periodic; //regular updates |
electronichamsters | 10:79e8f92ef156 | 52 | static Ticker tic_clock_reset; //resets clock |
electronichamsters | 10:79e8f92ef156 | 53 | const uint16_t Periodicity = 180; //clock periodicity used for spoof checking, should be 1800 seconds for 30minutes |
electronichamsters | 8:46c5e0bfab05 | 54 | //static TMP_nrf51 tempSensor; |
electronichamsters | 8:46c5e0bfab05 | 55 | static bool flag_update_io = false; |
electronichamsters | 8:46c5e0bfab05 | 56 | static bool flag_periodic_call = false; |
electronichamsters | 8:46c5e0bfab05 | 57 | static bool flag_detach_adv_tic = false; |
electronichamsters | 8:46c5e0bfab05 | 58 | static bool flag_set_debounce_tic = false; //not used |
electronichamsters | 8:46c5e0bfab05 | 59 | |
electronichamsters | 8:46c5e0bfab05 | 60 | //static DigitalOut alivenessLED(LED1, 1); |
electronichamsters | 8:46c5e0bfab05 | 61 | float mySensor = 2.0f; |
electronichamsters | 8:46c5e0bfab05 | 62 | |
electronichamsters | 8:46c5e0bfab05 | 63 | |
electronichamsters | 8:46c5e0bfab05 | 64 | /* Optional: Device Name, add for human read-ability */ |
electronichamsters | 8:46c5e0bfab05 | 65 | const static char DEVICE_NAME[] = "CUU"; |
rgrover1 | 5:f4d74a8cad43 | 66 | |
electronichamsters | 8:46c5e0bfab05 | 67 | /* You have up to 26 bytes of advertising data to use. */ |
electronichamsters | 8:46c5e0bfab05 | 68 | /* |
electronichamsters | 8:46c5e0bfab05 | 69 | Advertisement |
electronichamsters | 8:46c5e0bfab05 | 70 | |
electronichamsters | 8:46c5e0bfab05 | 71 | DECvolt:3.11111111,mag:1 |
electronichamsters | 8:46c5e0bfab05 | 72 | AdvData[0-2] = Look for DEC on observer |
electronichamsters | 8:46c5e0bfab05 | 73 | AdvData[3] = beginning of data |
electronichamsters | 8:46c5e0bfab05 | 74 | */ |
electronichamsters | 8:46c5e0bfab05 | 75 | //full with nullls |
electronichamsters | 8:46c5e0bfab05 | 76 | static uint8_t AdvData[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; /* Example of hex data */ |
electronichamsters | 8:46c5e0bfab05 | 77 | char buffer[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //battery analog reading |
electronichamsters | 10:79e8f92ef156 | 78 | char bat_volt_char[6] = {0, 0, 0, 0, 0, 0}; |
electronichamsters | 10:79e8f92ef156 | 79 | uint8_t Adv_First_Section[10]; |
electronichamsters | 10:79e8f92ef156 | 80 | uint8_t mac_reverse[6] = {0x0,0x0,0x0,0x0,0x0,0x0}; |
electronichamsters | 8:46c5e0bfab05 | 81 | uint8_t magnet_near=0; |
electronichamsters | 8:46c5e0bfab05 | 82 | |
electronichamsters | 8:46c5e0bfab05 | 83 | |
electronichamsters | 8:46c5e0bfab05 | 84 | |
electronichamsters | 8:46c5e0bfab05 | 85 | static uint8_t key[16] = {0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4}; |
electronichamsters | 8:46c5e0bfab05 | 86 | //26 bytes adv data |
electronichamsters | 8:46c5e0bfab05 | 87 | static uint8_t encrypted[26] = {0x0,0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x3,0x3,0x3,0x4,0x4,0x4,0x5,0x5,0x5,0x6,0x6,0x6,0x7,0x7,0x7,0x8,0x8}; /* Example of hex data */ |
electronichamsters | 8:46c5e0bfab05 | 88 | //static uint8_t key_buf[16] = {0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4}; |
electronichamsters | 8:46c5e0bfab05 | 89 | static uint8_t key_buf[16] = {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x1, 0x2}; |
electronichamsters | 8:46c5e0bfab05 | 90 | static uint8_t src_buf[16] = {0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4}; |
electronichamsters | 8:46c5e0bfab05 | 91 | static uint8_t des_buf[16] = {0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4}; |
electronichamsters | 8:46c5e0bfab05 | 92 | |
electronichamsters | 10:79e8f92ef156 | 93 | uint8_t Xmit_Cnt = 1; |
electronichamsters | 8:46c5e0bfab05 | 94 | //const static uint8_t AdvData[] = {"ChangeThisData"}; /* Example of character data */ |
electronichamsters | 8:46c5e0bfab05 | 95 | |
electronichamsters | 8:46c5e0bfab05 | 96 | |
electronichamsters | 8:46c5e0bfab05 | 97 | |
electronichamsters | 8:46c5e0bfab05 | 98 | /* **** NOT USED **** */ |
electronichamsters | 8:46c5e0bfab05 | 99 | //16byte UUID loading happens here |
electronichamsters | 8:46c5e0bfab05 | 100 | //Look at <GapAdvertisingData.h> for rest of definition |
sunsmile2015 | 4:e5fa4c8838db | 101 | struct ApplicationData_t { |
electronichamsters | 8:46c5e0bfab05 | 102 | //Byte 0: AppID High Byte |
electronichamsters | 8:46c5e0bfab05 | 103 | //Byte 1: AppID Low Byte |
electronichamsters | 8:46c5e0bfab05 | 104 | //Byte 2: sensor High Word |
electronichamsters | 8:46c5e0bfab05 | 105 | //Byte 3: |
electronichamsters | 8:46c5e0bfab05 | 106 | //Byte 4: |
electronichamsters | 8:46c5e0bfab05 | 107 | //Byte 5: sensor Low Byte |
electronichamsters | 8:46c5e0bfab05 | 108 | |
electronichamsters | 8:46c5e0bfab05 | 109 | |
electronichamsters | 8:46c5e0bfab05 | 110 | //app ID is 16 bit, (0xFEFE) |
electronichamsters | 8:46c5e0bfab05 | 111 | uint16_t applicationSpecificId; /* An ID used to identify temperature value in the manufacture specific AD data field */ |
electronichamsters | 8:46c5e0bfab05 | 112 | |
electronichamsters | 8:46c5e0bfab05 | 113 | //float = 32-bit. |
electronichamsters | 8:46c5e0bfab05 | 114 | //tsai: change this to uint32_t!!! |
electronichamsters | 8:46c5e0bfab05 | 115 | TMP_nrf51::TempSensorValue_t tmpSensorValue; /* this is a float (32-bit), user data */ |
rgrover1 | 5:f4d74a8cad43 | 116 | } PACKED; |
sunsmile2015 | 0:3dc6e424dba0 | 117 | |
electronichamsters | 8:46c5e0bfab05 | 118 | |
electronichamsters | 8:46c5e0bfab05 | 119 | |
electronichamsters | 8:46c5e0bfab05 | 120 | void debounce_Callback(void) |
electronichamsters | 8:46c5e0bfab05 | 121 | { |
electronichamsters | 8:46c5e0bfab05 | 122 | tic_debounce.detach(); |
electronichamsters | 8:46c5e0bfab05 | 123 | flag_set_debounce_tic = false; //not used |
electronichamsters | 8:46c5e0bfab05 | 124 | flag_update_io = true; //start advertising |
electronichamsters | 8:46c5e0bfab05 | 125 | /* Note that the buttonPressedCallback() executes in interrupt context, so it is safer to access |
electronichamsters | 8:46c5e0bfab05 | 126 | * BLE device API from the main thread. */ |
electronichamsters | 8:46c5e0bfab05 | 127 | //buttonState = PRESSED; |
electronichamsters | 8:46c5e0bfab05 | 128 | } |
electronichamsters | 8:46c5e0bfab05 | 129 | |
electronichamsters | 8:46c5e0bfab05 | 130 | //----- button rising --- |
electronichamsters | 8:46c5e0bfab05 | 131 | void buttonPressedCallback(void) |
sunsmile2015 | 2:b935358da5ba | 132 | { |
electronichamsters | 8:46c5e0bfab05 | 133 | |
electronichamsters | 8:46c5e0bfab05 | 134 | |
electronichamsters | 8:46c5e0bfab05 | 135 | //flag_update_io = true; |
electronichamsters | 8:46c5e0bfab05 | 136 | |
electronichamsters | 8:46c5e0bfab05 | 137 | tic_debounce.attach(debounce_Callback, 1); //ok to attach multiple times, first one wins |
electronichamsters | 8:46c5e0bfab05 | 138 | |
electronichamsters | 8:46c5e0bfab05 | 139 | |
electronichamsters | 8:46c5e0bfab05 | 140 | //buttonState = PRESSED; |
electronichamsters | 8:46c5e0bfab05 | 141 | |
electronichamsters | 8:46c5e0bfab05 | 142 | /* |
electronichamsters | 8:46c5e0bfab05 | 143 | if (flag_set_debounce_tic == false) |
electronichamsters | 8:46c5e0bfab05 | 144 | { |
electronichamsters | 8:46c5e0bfab05 | 145 | flag_set_debounce_tic = true; |
electronichamsters | 8:46c5e0bfab05 | 146 | |
electronichamsters | 8:46c5e0bfab05 | 147 | } |
electronichamsters | 8:46c5e0bfab05 | 148 | */ |
electronichamsters | 8:46c5e0bfab05 | 149 | } |
rgrover1 | 5:f4d74a8cad43 | 150 | |
electronichamsters | 8:46c5e0bfab05 | 151 | //----- button falling --- |
electronichamsters | 8:46c5e0bfab05 | 152 | void buttonReleasedCallback(void) |
electronichamsters | 8:46c5e0bfab05 | 153 | { |
electronichamsters | 8:46c5e0bfab05 | 154 | |
electronichamsters | 8:46c5e0bfab05 | 155 | |
electronichamsters | 8:46c5e0bfab05 | 156 | //flag_update_io = true; |
electronichamsters | 8:46c5e0bfab05 | 157 | |
electronichamsters | 8:46c5e0bfab05 | 158 | tic_debounce.attach(debounce_Callback, 1); |
electronichamsters | 8:46c5e0bfab05 | 159 | |
electronichamsters | 8:46c5e0bfab05 | 160 | |
electronichamsters | 8:46c5e0bfab05 | 161 | |
electronichamsters | 8:46c5e0bfab05 | 162 | } |
electronichamsters | 8:46c5e0bfab05 | 163 | |
electronichamsters | 8:46c5e0bfab05 | 164 | |
electronichamsters | 8:46c5e0bfab05 | 165 | void stop_adv_Callback(void) |
electronichamsters | 8:46c5e0bfab05 | 166 | { |
electronichamsters | 8:46c5e0bfab05 | 167 | //stops advertising after X seconds |
electronichamsters | 8:46c5e0bfab05 | 168 | /* Note that the Callback() executes in interrupt context, so it is safer to do |
rgrover1 | 5:f4d74a8cad43 | 169 | * heavy-weight sensor polling from the main thread (where we should be able to block safely, if needed). */ |
electronichamsters | 8:46c5e0bfab05 | 170 | |
electronichamsters | 8:46c5e0bfab05 | 171 | //tic_adv.detach(); |
electronichamsters | 8:46c5e0bfab05 | 172 | |
electronichamsters | 8:46c5e0bfab05 | 173 | flag_detach_adv_tic = true; |
electronichamsters | 8:46c5e0bfab05 | 174 | //ble.gap().stopAdvertising(); |
electronichamsters | 8:46c5e0bfab05 | 175 | |
electronichamsters | 8:46c5e0bfab05 | 176 | |
electronichamsters | 8:46c5e0bfab05 | 177 | } |
electronichamsters | 8:46c5e0bfab05 | 178 | |
electronichamsters | 8:46c5e0bfab05 | 179 | |
electronichamsters | 8:46c5e0bfab05 | 180 | |
electronichamsters | 8:46c5e0bfab05 | 181 | |
electronichamsters | 8:46c5e0bfab05 | 182 | |
electronichamsters | 8:46c5e0bfab05 | 183 | void periodic_Callback(void) |
electronichamsters | 8:46c5e0bfab05 | 184 | { |
electronichamsters | 8:46c5e0bfab05 | 185 | flag_update_io = true; |
electronichamsters | 8:46c5e0bfab05 | 186 | flag_periodic_call = true; |
sunsmile2015 | 4:e5fa4c8838db | 187 | } |
sunsmile2015 | 4:e5fa4c8838db | 188 | |
electronichamsters | 10:79e8f92ef156 | 189 | void clock_reset_Callback(void) |
electronichamsters | 10:79e8f92ef156 | 190 | { |
electronichamsters | 10:79e8f92ef156 | 191 | #if MyDebugEnb |
electronichamsters | 10:79e8f92ef156 | 192 | device.printf("===== reset timer ====="); |
electronichamsters | 10:79e8f92ef156 | 193 | device.printf("\r\n"); |
electronichamsters | 10:79e8f92ef156 | 194 | #endif |
electronichamsters | 10:79e8f92ef156 | 195 | myTimer.reset(); |
electronichamsters | 10:79e8f92ef156 | 196 | }; |
electronichamsters | 10:79e8f92ef156 | 197 | |
rgrover1 | 5:f4d74a8cad43 | 198 | void setupApplicationData(ApplicationData_t &appData) |
sunsmile2015 | 4:e5fa4c8838db | 199 | { |
electronichamsters | 8:46c5e0bfab05 | 200 | // two byte ID: 0xFEFE |
electronichamsters | 8:46c5e0bfab05 | 201 | static const uint16_t APP_SPECIFIC_ID_TEST = 0xFEFE; //2 byte application ID |
andresag | 7:0a8bbb6dea16 | 202 | |
sunsmile2015 | 4:e5fa4c8838db | 203 | appData.applicationSpecificId = APP_SPECIFIC_ID_TEST; |
electronichamsters | 8:46c5e0bfab05 | 204 | //appData.tmpSensorValue = tempSensor.get(); |
electronichamsters | 8:46c5e0bfab05 | 205 | appData.tmpSensorValue = mySensor; |
sunsmile2015 | 0:3dc6e424dba0 | 206 | } |
sunsmile2015 | 0:3dc6e424dba0 | 207 | |
electronichamsters | 8:46c5e0bfab05 | 208 | |
electronichamsters | 8:46c5e0bfab05 | 209 | |
andresag | 7:0a8bbb6dea16 | 210 | /** |
andresag | 7:0a8bbb6dea16 | 211 | * This function is called when the ble initialization process has failled |
andresag | 7:0a8bbb6dea16 | 212 | */ |
andresag | 7:0a8bbb6dea16 | 213 | void onBleInitError(BLE &ble, ble_error_t error) |
andresag | 7:0a8bbb6dea16 | 214 | { |
andresag | 7:0a8bbb6dea16 | 215 | /* Initialization error handling should go here */ |
andresag | 7:0a8bbb6dea16 | 216 | } |
andresag | 7:0a8bbb6dea16 | 217 | |
andresag | 7:0a8bbb6dea16 | 218 | /** |
andresag | 7:0a8bbb6dea16 | 219 | * Callback triggered when the ble initialization process has finished |
andresag | 7:0a8bbb6dea16 | 220 | */ |
andresag | 7:0a8bbb6dea16 | 221 | void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) |
sunsmile2015 | 2:b935358da5ba | 222 | { |
andresag | 7:0a8bbb6dea16 | 223 | BLE& ble = params->ble; |
andresag | 7:0a8bbb6dea16 | 224 | ble_error_t error = params->error; |
andresag | 7:0a8bbb6dea16 | 225 | |
andresag | 7:0a8bbb6dea16 | 226 | if (error != BLE_ERROR_NONE) { |
andresag | 7:0a8bbb6dea16 | 227 | /* In case of error, forward the error handling to onBleInitError */ |
andresag | 7:0a8bbb6dea16 | 228 | onBleInitError(ble, error); |
andresag | 7:0a8bbb6dea16 | 229 | return; |
andresag | 7:0a8bbb6dea16 | 230 | } |
andresag | 7:0a8bbb6dea16 | 231 | |
andresag | 7:0a8bbb6dea16 | 232 | /* Ensure that it is the default instance of BLE */ |
andresag | 7:0a8bbb6dea16 | 233 | if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { |
andresag | 7:0a8bbb6dea16 | 234 | return; |
andresag | 7:0a8bbb6dea16 | 235 | } |
electronichamsters | 8:46c5e0bfab05 | 236 | |
electronichamsters | 8:46c5e0bfab05 | 237 | /* Set device name characteristic data */ |
electronichamsters | 8:46c5e0bfab05 | 238 | ble.gap().setDeviceName((const uint8_t *) DEVICE_NAME); |
andresag | 7:0a8bbb6dea16 | 239 | |
rgrover1 | 5:f4d74a8cad43 | 240 | /* Setup advertising payload */ |
electronichamsters | 8:46c5e0bfab05 | 241 | //set modes "no EDR", "discoverable" for beacon type advertisements |
rgrover1 | 5:f4d74a8cad43 | 242 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); |
electronichamsters | 8:46c5e0bfab05 | 243 | |
electronichamsters | 8:46c5e0bfab05 | 244 | //set device profile in ADV/GATT |
electronichamsters | 8:46c5e0bfab05 | 245 | //ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_THERMOMETER); |
electronichamsters | 8:46c5e0bfab05 | 246 | |
electronichamsters | 8:46c5e0bfab05 | 247 | //set advertising data (ADV data) |
electronichamsters | 8:46c5e0bfab05 | 248 | //ApplicationData_t appData; |
electronichamsters | 8:46c5e0bfab05 | 249 | //setupApplicationData(appData); |
electronichamsters | 8:46c5e0bfab05 | 250 | //in /BLE_API/ble/GapAdvertisingData.h: sets payload (uuid) |
electronichamsters | 8:46c5e0bfab05 | 251 | //ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&appData, sizeof(ApplicationData_t)); |
electronichamsters | 8:46c5e0bfab05 | 252 | |
electronichamsters | 8:46c5e0bfab05 | 253 | //from GAP example |
electronichamsters | 8:46c5e0bfab05 | 254 | /* Sacrifice 2B of 31B to AdvType overhead, rest goes to AdvData array you define */ |
electronichamsters | 8:46c5e0bfab05 | 255 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, AdvData, sizeof(AdvData)); |
electronichamsters | 8:46c5e0bfab05 | 256 | |
electronichamsters | 8:46c5e0bfab05 | 257 | /* Setup advertising parameters: not connectable */ |
electronichamsters | 8:46c5e0bfab05 | 258 | ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED); |
electronichamsters | 8:46c5e0bfab05 | 259 | ble.gap().setAdvertisingInterval(300); //one advertisment every 300ms. Self tickers, so you don't have to worry. |
electronichamsters | 8:46c5e0bfab05 | 260 | |
electronichamsters | 8:46c5e0bfab05 | 261 | |
electronichamsters | 8:46c5e0bfab05 | 262 | |
electronichamsters | 8:46c5e0bfab05 | 263 | //don't start advertising on init. Only advertise on pin interrupt. |
electronichamsters | 8:46c5e0bfab05 | 264 | //ble.gap().startAdvertising(); |
electronichamsters | 8:46c5e0bfab05 | 265 | } |
electronichamsters | 8:46c5e0bfab05 | 266 | |
rgrover1 | 5:f4d74a8cad43 | 267 | |
electronichamsters | 8:46c5e0bfab05 | 268 | //https://developer.mbed.org/users/MarceloSalazar/notebook/measuring-battery-voltage-with-nordic-nrf51x/ |
electronichamsters | 8:46c5e0bfab05 | 269 | void my_analogin_init(void) |
electronichamsters | 8:46c5e0bfab05 | 270 | { |
electronichamsters | 10:79e8f92ef156 | 271 | |
electronichamsters | 8:46c5e0bfab05 | 272 | NRF_ADC->CONFIG = (ADC_CONFIG_RES_10bit << ADC_CONFIG_RES_Pos) | |
electronichamsters | 8:46c5e0bfab05 | 273 | (ADC_CONFIG_INPSEL_SupplyOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 274 | //(ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) | |
electronichamsters | 8:46c5e0bfab05 | 275 | (ADC_CONFIG_REFSEL_VBG << ADC_CONFIG_REFSEL_Pos) | |
electronichamsters | 8:46c5e0bfab05 | 276 | (ADC_CONFIG_PSEL_Disabled << ADC_CONFIG_PSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 277 | //(ADC_CONFIG_PSEL_AnalogInput4 << ADC_CONFIG_PSEL_Pos) | |
electronichamsters | 8:46c5e0bfab05 | 278 | (ADC_CONFIG_EXTREFSEL_None << ADC_CONFIG_EXTREFSEL_Pos); |
electronichamsters | 10:79e8f92ef156 | 279 | NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Enabled; |
electronichamsters | 8:46c5e0bfab05 | 280 | } |
sunsmile2015 | 2:b935358da5ba | 281 | |
electronichamsters | 8:46c5e0bfab05 | 282 | uint16_t my_analogin_read_u16(void) |
electronichamsters | 8:46c5e0bfab05 | 283 | { |
electronichamsters | 10:79e8f92ef156 | 284 | //10 bit resolution, route Vdd as analog input, set ADC ref to VBG band gap |
electronichamsters | 10:79e8f92ef156 | 285 | //disable analog pin select "PSEL" because we're using Vdd as analog input |
electronichamsters | 10:79e8f92ef156 | 286 | //no external voltage reference |
electronichamsters | 10:79e8f92ef156 | 287 | NRF_ADC->CONFIG = (ADC_CONFIG_RES_10bit << ADC_CONFIG_RES_Pos) | |
electronichamsters | 10:79e8f92ef156 | 288 | (ADC_CONFIG_INPSEL_SupplyOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 289 | //(ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 290 | (ADC_CONFIG_REFSEL_VBG << ADC_CONFIG_REFSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 291 | (ADC_CONFIG_PSEL_Disabled << ADC_CONFIG_PSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 292 | //(ADC_CONFIG_PSEL_AnalogInput4 << ADC_CONFIG_PSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 293 | (ADC_CONFIG_EXTREFSEL_None << ADC_CONFIG_EXTREFSEL_Pos); |
electronichamsters | 10:79e8f92ef156 | 294 | |
electronichamsters | 10:79e8f92ef156 | 295 | //NRF_ADC->CONFIG &= ~ADC_CONFIG_PSEL_Msk; |
electronichamsters | 10:79e8f92ef156 | 296 | //NRF_ADC->CONFIG |= ADC_CONFIG_PSEL_Disabled << ADC_CONFIG_PSEL_Pos; |
electronichamsters | 10:79e8f92ef156 | 297 | NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Enabled; |
electronichamsters | 10:79e8f92ef156 | 298 | NRF_ADC->TASKS_START = 1; |
electronichamsters | 10:79e8f92ef156 | 299 | |
electronichamsters | 10:79e8f92ef156 | 300 | |
electronichamsters | 10:79e8f92ef156 | 301 | //while loop doesn't actually loop until reading comlete, use a wait. |
electronichamsters | 10:79e8f92ef156 | 302 | while (((NRF_ADC->BUSY & ADC_BUSY_BUSY_Msk) >> ADC_BUSY_BUSY_Pos) == ADC_BUSY_BUSY_Busy) {}; |
electronichamsters | 10:79e8f92ef156 | 303 | wait_ms(2); |
electronichamsters | 10:79e8f92ef156 | 304 | |
electronichamsters | 10:79e8f92ef156 | 305 | //save off RESULT before disabling. |
electronichamsters | 10:79e8f92ef156 | 306 | //uint16_t myresult = (uint16_t)NRF_ADC->RESULT; |
electronichamsters | 10:79e8f92ef156 | 307 | |
electronichamsters | 10:79e8f92ef156 | 308 | //disable ADC to lower bat consumption |
electronichamsters | 10:79e8f92ef156 | 309 | NRF_ADC->TASKS_STOP = 1; |
electronichamsters | 10:79e8f92ef156 | 310 | //NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Disabled; //disable to shutdown ADC & lower bat consumption |
electronichamsters | 10:79e8f92ef156 | 311 | |
electronichamsters | 10:79e8f92ef156 | 312 | return (uint16_t)NRF_ADC->RESULT; // 10 bit |
electronichamsters | 10:79e8f92ef156 | 313 | //return myresult; |
electronichamsters | 10:79e8f92ef156 | 314 | } |
electronichamsters | 10:79e8f92ef156 | 315 | |
electronichamsters | 10:79e8f92ef156 | 316 | uint16_t my_analog_pin_read(void) |
electronichamsters | 10:79e8f92ef156 | 317 | { |
electronichamsters | 10:79e8f92ef156 | 318 | |
electronichamsters | 10:79e8f92ef156 | 319 | //10 bit resolution, route PSEL pin as 1/3 input sel, |
electronichamsters | 10:79e8f92ef156 | 320 | //set ADC ref to VBG band gap |
electronichamsters | 10:79e8f92ef156 | 321 | //set AnalogInput4 as input pin (this is P0.03) |
electronichamsters | 10:79e8f92ef156 | 322 | //no external voltage reference |
electronichamsters | 10:79e8f92ef156 | 323 | NRF_ADC->CONFIG = (ADC_CONFIG_RES_10bit << ADC_CONFIG_RES_Pos) | |
electronichamsters | 10:79e8f92ef156 | 324 | //(ADC_CONFIG_INPSEL_SupplyOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 325 | (ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 326 | (ADC_CONFIG_REFSEL_VBG << ADC_CONFIG_REFSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 327 | //ADC_CONFIG_PSEL_Disabled << ADC_CONFIG_PSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 328 | (ADC_CONFIG_PSEL_AnalogInput4 << ADC_CONFIG_PSEL_Pos) | |
electronichamsters | 10:79e8f92ef156 | 329 | (ADC_CONFIG_EXTREFSEL_None << ADC_CONFIG_EXTREFSEL_Pos); |
electronichamsters | 10:79e8f92ef156 | 330 | //set pin select to AnalogInput4 = pin 7 = p0.03 = AIN4 |
electronichamsters | 10:79e8f92ef156 | 331 | //NRF_ADC->CONFIG &= ~ADC_CONFIG_PSEL_Msk; |
electronichamsters | 10:79e8f92ef156 | 332 | //NRF_ADC->CONFIG |= ADC_CONFIG_PSEL_AnalogInput4 << ADC_CONFIG_PSEL_Pos; |
electronichamsters | 10:79e8f92ef156 | 333 | NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Enabled; |
electronichamsters | 8:46c5e0bfab05 | 334 | NRF_ADC->TASKS_START = 1; |
electronichamsters | 8:46c5e0bfab05 | 335 | |
electronichamsters | 8:46c5e0bfab05 | 336 | |
electronichamsters | 8:46c5e0bfab05 | 337 | //while loop doesn't actually loop until reading comlete, use a wait. |
electronichamsters | 8:46c5e0bfab05 | 338 | while (((NRF_ADC->BUSY & ADC_BUSY_BUSY_Msk) >> ADC_BUSY_BUSY_Pos) == ADC_BUSY_BUSY_Busy) {}; |
electronichamsters | 8:46c5e0bfab05 | 339 | wait_ms(2); |
electronichamsters | 8:46c5e0bfab05 | 340 | |
electronichamsters | 8:46c5e0bfab05 | 341 | //save off RESULT before disabling. |
electronichamsters | 8:46c5e0bfab05 | 342 | //uint16_t myresult = (uint16_t)NRF_ADC->RESULT; |
electronichamsters | 8:46c5e0bfab05 | 343 | |
electronichamsters | 8:46c5e0bfab05 | 344 | //disable ADC to lower bat consumption |
electronichamsters | 8:46c5e0bfab05 | 345 | //NRF_ADC->TASKS_STOP = 1; |
electronichamsters | 8:46c5e0bfab05 | 346 | //NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Disabled; //disable to shutdown ADC & lower bat consumption |
electronichamsters | 8:46c5e0bfab05 | 347 | |
electronichamsters | 8:46c5e0bfab05 | 348 | return (uint16_t)NRF_ADC->RESULT; // 10 bit |
electronichamsters | 8:46c5e0bfab05 | 349 | //return myresult; |
sunsmile2015 | 4:e5fa4c8838db | 350 | } |
sunsmile2015 | 4:e5fa4c8838db | 351 | |
electronichamsters | 10:79e8f92ef156 | 352 | |
electronichamsters | 10:79e8f92ef156 | 353 | //hash_first_section(Adv_First_Section, mac_reverse, bat_reading); |
electronichamsters | 10:79e8f92ef156 | 354 | void hash_first_section(uint8_t * dest, const uint8_t * mac_addr, const char * bat_volt_str) |
electronichamsters | 10:79e8f92ef156 | 355 | { |
electronichamsters | 10:79e8f92ef156 | 356 | dest[0] = mac_addr[3]; |
electronichamsters | 10:79e8f92ef156 | 357 | dest[1] = mac_addr[2]; |
electronichamsters | 10:79e8f92ef156 | 358 | dest[2] = mac_addr[1]; |
electronichamsters | 10:79e8f92ef156 | 359 | dest[3] = mac_addr[0]; |
electronichamsters | 10:79e8f92ef156 | 360 | dest[4] = bat_volt_str[0]; |
electronichamsters | 10:79e8f92ef156 | 361 | dest[5] = bat_volt_str[1]; |
electronichamsters | 10:79e8f92ef156 | 362 | dest[6] = bat_volt_str[2]; |
electronichamsters | 10:79e8f92ef156 | 363 | dest[7] = bat_volt_str[3]; |
electronichamsters | 10:79e8f92ef156 | 364 | dest[8] = 0x10; |
electronichamsters | 10:79e8f92ef156 | 365 | dest[9] = 0x11; |
electronichamsters | 10:79e8f92ef156 | 366 | #if MyDebugEnb |
electronichamsters | 10:79e8f92ef156 | 367 | |
electronichamsters | 10:79e8f92ef156 | 368 | device.printf("hash array: "); |
electronichamsters | 10:79e8f92ef156 | 369 | for (int i=0; i<10; i++) |
electronichamsters | 10:79e8f92ef156 | 370 | { |
electronichamsters | 10:79e8f92ef156 | 371 | device.printf("%x ", dest[i]); |
electronichamsters | 10:79e8f92ef156 | 372 | } |
electronichamsters | 10:79e8f92ef156 | 373 | device.printf("\r\n"); |
electronichamsters | 10:79e8f92ef156 | 374 | #endif |
electronichamsters | 10:79e8f92ef156 | 375 | } |
electronichamsters | 10:79e8f92ef156 | 376 | |
electronichamsters | 10:79e8f92ef156 | 377 | |
electronichamsters | 10:79e8f92ef156 | 378 | uint16_t clock_remainder = 0; |
electronichamsters | 10:79e8f92ef156 | 379 | |
sunsmile2015 | 2:b935358da5ba | 380 | int main(void) |
sunsmile2015 | 2:b935358da5ba | 381 | { |
electronichamsters | 8:46c5e0bfab05 | 382 | |
electronichamsters | 8:46c5e0bfab05 | 383 | #if MyDebugEnb |
electronichamsters | 8:46c5e0bfab05 | 384 | device.baud(9600); |
electronichamsters | 8:46c5e0bfab05 | 385 | device.printf("started sensor node 36 "); |
electronichamsters | 8:46c5e0bfab05 | 386 | device.printf("\r\n"); |
electronichamsters | 8:46c5e0bfab05 | 387 | #endif |
electronichamsters | 8:46c5e0bfab05 | 388 | |
electronichamsters | 8:46c5e0bfab05 | 389 | |
electronichamsters | 8:46c5e0bfab05 | 390 | |
electronichamsters | 10:79e8f92ef156 | 391 | //Timer myTimer; //moved to global |
electronichamsters | 8:46c5e0bfab05 | 392 | myTimer.start(); |
electronichamsters | 8:46c5e0bfab05 | 393 | |
electronichamsters | 8:46c5e0bfab05 | 394 | |
electronichamsters | 8:46c5e0bfab05 | 395 | AdvData[0] = 0x44; //D |
electronichamsters | 8:46c5e0bfab05 | 396 | AdvData[1] = 0x45; //E |
electronichamsters | 8:46c5e0bfab05 | 397 | AdvData[2] = 0x43; //C |
electronichamsters | 8:46c5e0bfab05 | 398 | AdvData[3] = 0x22; //" |
electronichamsters | 8:46c5e0bfab05 | 399 | AdvData[4] = 0x76; //V volt |
electronichamsters | 8:46c5e0bfab05 | 400 | AdvData[5] = 0x6f; //o |
electronichamsters | 8:46c5e0bfab05 | 401 | AdvData[6] = 0x22; //" |
electronichamsters | 8:46c5e0bfab05 | 402 | AdvData[7] = 0x3a; //: |
electronichamsters | 8:46c5e0bfab05 | 403 | AdvData[8] = 0x24; //3 # |
electronichamsters | 8:46c5e0bfab05 | 404 | AdvData[9] = 0x24; //. # |
electronichamsters | 8:46c5e0bfab05 | 405 | AdvData[10] = 0x24; //1 # |
electronichamsters | 8:46c5e0bfab05 | 406 | AdvData[11] = 0x24; //1 # |
electronichamsters | 8:46c5e0bfab05 | 407 | AdvData[12] = 0x2c; //, |
electronichamsters | 8:46c5e0bfab05 | 408 | AdvData[13] = 0x22; //" mag |
electronichamsters | 8:46c5e0bfab05 | 409 | AdvData[14] = 0x6d; //a |
electronichamsters | 8:46c5e0bfab05 | 410 | AdvData[15] = 0x22; //" |
electronichamsters | 8:46c5e0bfab05 | 411 | AdvData[16] = 0x3a; //: |
electronichamsters | 8:46c5e0bfab05 | 412 | AdvData[17] = 0x24; //0 or 1, 30 or 31 |
electronichamsters | 8:46c5e0bfab05 | 413 | |
electronichamsters | 8:46c5e0bfab05 | 414 | button1.fall(buttonPressedCallback); |
electronichamsters | 8:46c5e0bfab05 | 415 | button1.rise(buttonReleasedCallback); |
electronichamsters | 8:46c5e0bfab05 | 416 | button1.mode(PullNone); |
electronichamsters | 8:46c5e0bfab05 | 417 | button1.fall(NULL); |
electronichamsters | 8:46c5e0bfab05 | 418 | button1.rise(NULL); |
sunsmile2015 | 0:3dc6e424dba0 | 419 | |
andresag | 7:0a8bbb6dea16 | 420 | BLE &ble = BLE::Instance(); |
andresag | 7:0a8bbb6dea16 | 421 | ble.init(bleInitComplete); |
electronichamsters | 8:46c5e0bfab05 | 422 | |
electronichamsters | 8:46c5e0bfab05 | 423 | //debug uart |
electronichamsters | 8:46c5e0bfab05 | 424 | //device.baud(115200); |
electronichamsters | 8:46c5e0bfab05 | 425 | float bat_reading; //hold battery voltage reading (Vbg/Vcc) |
electronichamsters | 8:46c5e0bfab05 | 426 | |
electronichamsters | 8:46c5e0bfab05 | 427 | my_analogin_init();//routes band-gap to analog input |
andresag | 7:0a8bbb6dea16 | 428 | |
andresag | 7:0a8bbb6dea16 | 429 | /* SpinWait for initialization to complete. This is necessary because the |
andresag | 7:0a8bbb6dea16 | 430 | * BLE object is used in the main loop below. */ |
electronichamsters | 8:46c5e0bfab05 | 431 | while (ble.hasInitialized() == false) { /* spin loop */ } |
electronichamsters | 8:46c5e0bfab05 | 432 | |
electronichamsters | 8:46c5e0bfab05 | 433 | //every X seconds, sends period update, up to 1800 (30 minutes) |
electronichamsters | 10:79e8f92ef156 | 434 | tic_periodic.attach(periodic_Callback, 1600); |
electronichamsters | 10:79e8f92ef156 | 435 | tic_clock_reset.attach(clock_reset_Callback, Periodicity); |
electronichamsters | 10:79e8f92ef156 | 436 | |
electronichamsters | 10:79e8f92ef156 | 437 | //how to generate random number using die tempearature |
electronichamsters | 10:79e8f92ef156 | 438 | uint32_t myTempRand; |
electronichamsters | 10:79e8f92ef156 | 439 | uint32_t * p_temp; |
electronichamsters | 10:79e8f92ef156 | 440 | //get temperature for random number |
electronichamsters | 10:79e8f92ef156 | 441 | //SVCALL(SD_TEMP_GET, myTempRand, sd_temp_get(p_temp)); |
electronichamsters | 10:79e8f92ef156 | 442 | //sd_temp_get(& myTempRand); |
rgrover1 | 5:f4d74a8cad43 | 443 | |
electronichamsters | 10:79e8f92ef156 | 444 | |
electronichamsters | 10:79e8f92ef156 | 445 | ble.getAddress(0,mac_reverse); //NOTE: last byte of MAC (as shown on phone app) is at mac[0], not mac[6]; |
electronichamsters | 10:79e8f92ef156 | 446 | #if MyDebugEnb |
electronichamsters | 10:79e8f92ef156 | 447 | device.printf("mac = "); |
electronichamsters | 10:79e8f92ef156 | 448 | for (int i=0; i<6; i++) //prints out MAC address in reverse order; opps. |
electronichamsters | 10:79e8f92ef156 | 449 | { |
electronichamsters | 10:79e8f92ef156 | 450 | device.printf("%x:", mac_reverse[i]); |
electronichamsters | 10:79e8f92ef156 | 451 | } |
electronichamsters | 10:79e8f92ef156 | 452 | device.printf("\r\n"); |
electronichamsters | 10:79e8f92ef156 | 453 | #endif |
sunsmile2015 | 0:3dc6e424dba0 | 454 | while (true) { |
electronichamsters | 10:79e8f92ef156 | 455 | //seconds counts to 35 minutes: mySeconds=2142, then 63392 which should be 2450 but isn't. |
electronichamsters | 10:79e8f92ef156 | 456 | //00001000,01011110 -> 11110111,10100000 |
electronichamsters | 10:79e8f92ef156 | 457 | uint16_t mySeconds =(uint16_t)(myTimer.read_ms()/1000); //problem: mySeconds is only 2 byte |
electronichamsters | 10:79e8f92ef156 | 458 | //xmit_cnt++; |
electronichamsters | 10:79e8f92ef156 | 459 | //if (mySeconds > 1800) |
electronichamsters | 10:79e8f92ef156 | 460 | //{ |
electronichamsters | 10:79e8f92ef156 | 461 | // myTimer.reset(); |
electronichamsters | 10:79e8f92ef156 | 462 | //clock_remainder = mySeconds - 1800; |
electronichamsters | 10:79e8f92ef156 | 463 | //} |
electronichamsters | 10:79e8f92ef156 | 464 | //mySeconds = mySeconds + clock_remainder; l3kjl3 |
electronichamsters | 8:46c5e0bfab05 | 465 | |
electronichamsters | 8:46c5e0bfab05 | 466 | //reading the ADV value, only goes up to 0-255; |
electronichamsters | 8:46c5e0bfab05 | 467 | //reading the uart: current time in seconds: -1782, goes negative. |
electronichamsters | 8:46c5e0bfab05 | 468 | //need to be able to count 1800 seconds since that's the length of timer. |
electronichamsters | 8:46c5e0bfab05 | 469 | |
electronichamsters | 8:46c5e0bfab05 | 470 | #if MyDebugEnb |
electronichamsters | 8:46c5e0bfab05 | 471 | device.printf("current time in seconds: %d \r\n", mySeconds); |
electronichamsters | 8:46c5e0bfab05 | 472 | #endif |
electronichamsters | 8:46c5e0bfab05 | 473 | //**** set which pin should be interrupt, set pullups *** |
electronichamsters | 8:46c5e0bfab05 | 474 | |
electronichamsters | 8:46c5e0bfab05 | 475 | //set both pins to pull-up, so they're not floating when we read state |
electronichamsters | 8:46c5e0bfab05 | 476 | button1.mode(PullUp); |
electronichamsters | 8:46c5e0bfab05 | 477 | button2.mode(PullUp); |
electronichamsters | 8:46c5e0bfab05 | 478 | |
electronichamsters | 8:46c5e0bfab05 | 479 | //wait_ms(300); //contact settle |
electronichamsters | 8:46c5e0bfab05 | 480 | |
electronichamsters | 8:46c5e0bfab05 | 481 | |
electronichamsters | 8:46c5e0bfab05 | 482 | //AdvData[12] is automatically CR? why? |
electronichamsters | 8:46c5e0bfab05 | 483 | |
electronichamsters | 8:46c5e0bfab05 | 484 | //0x33 0x2E 0x33 0x32 0x13 |
electronichamsters | 8:46c5e0bfab05 | 485 | // 3 . 3 2 CR |
electronichamsters | 8:46c5e0bfab05 | 486 | |
electronichamsters | 8:46c5e0bfab05 | 487 | //expect either button1 or button2 is grounded, b/c using SPDT reed switch |
electronichamsters | 8:46c5e0bfab05 | 488 | //the "common" pin on the reed switch should be on GND |
electronichamsters | 8:46c5e0bfab05 | 489 | uint8_t button1_state = button1.read(); |
electronichamsters | 8:46c5e0bfab05 | 490 | uint8_t button2_state = button2.read(); |
electronichamsters | 8:46c5e0bfab05 | 491 | |
electronichamsters | 8:46c5e0bfab05 | 492 | |
electronichamsters | 8:46c5e0bfab05 | 493 | //let's just update the pins on every wake. Insurance against const drain. |
electronichamsters | 8:46c5e0bfab05 | 494 | //if state == 0, pin is grounded. Unset interrupt and float pin |
electronichamsters | 8:46c5e0bfab05 | 495 | //set the other input |
electronichamsters | 8:46c5e0bfab05 | 496 | if ( (button1_state == 0) && (button2_state == 1) ) |
electronichamsters | 8:46c5e0bfab05 | 497 | { |
electronichamsters | 8:46c5e0bfab05 | 498 | magnet_near = 1; |
electronichamsters | 8:46c5e0bfab05 | 499 | //AdvData[4] = 0x11; //dont' set ADV data directly. Using json now, need spacing |
electronichamsters | 8:46c5e0bfab05 | 500 | //button1.disable_irq() //don't know if disables IRQ on port or pin |
electronichamsters | 8:46c5e0bfab05 | 501 | button1.fall(NULL); //disable interrupt |
electronichamsters | 8:46c5e0bfab05 | 502 | button1.rise(NULL); //disable interrupt |
electronichamsters | 8:46c5e0bfab05 | 503 | button1.mode(PullNone); //float pin to save battery |
electronichamsters | 8:46c5e0bfab05 | 504 | |
electronichamsters | 8:46c5e0bfab05 | 505 | //button2.disable_irq() //don't know if disables IRQ on port or pin |
electronichamsters | 10:79e8f92ef156 | 506 | button2.fall(buttonReleasedCallback); //enable interrupt |
electronichamsters | 10:79e8f92ef156 | 507 | button2.rise(buttonReleasedCallback); //enable interrupt |
electronichamsters | 10:79e8f92ef156 | 508 | button2.mode(PullUp); //pull up on pin to get interrupt |
electronichamsters | 10:79e8f92ef156 | 509 | #if MyDebugEnb |
electronichamsters | 10:79e8f92ef156 | 510 | device.printf("=== button 1! %d seconds=== \r\n", mySeconds); |
electronichamsters | 10:79e8f92ef156 | 511 | #endif |
electronichamsters | 8:46c5e0bfab05 | 512 | } |
electronichamsters | 8:46c5e0bfab05 | 513 | else if ( (button1_state == 1) && (button2_state == 0) ) //assume other pin is open circuit |
electronichamsters | 8:46c5e0bfab05 | 514 | { |
electronichamsters | 8:46c5e0bfab05 | 515 | magnet_near = 0; |
electronichamsters | 8:46c5e0bfab05 | 516 | //AdvData[4] = 0x22; //dont' set ADV data directly. Using json now, need spacing |
electronichamsters | 8:46c5e0bfab05 | 517 | //button1.disable_irq() //don't know if disables IRQ on port or pin |
electronichamsters | 10:79e8f92ef156 | 518 | button1.fall(buttonReleasedCallback); //enable interrupt |
electronichamsters | 10:79e8f92ef156 | 519 | button1.rise(buttonReleasedCallback); //enable interrupt |
electronichamsters | 10:79e8f92ef156 | 520 | button1.mode(PullUp); //pull up on pin to get interrupt |
electronichamsters | 8:46c5e0bfab05 | 521 | |
electronichamsters | 8:46c5e0bfab05 | 522 | //button2.disable_irq() //don't know if disables IRQ on port or pin |
electronichamsters | 8:46c5e0bfab05 | 523 | button2.fall(NULL); //disable interrupt |
electronichamsters | 8:46c5e0bfab05 | 524 | button2.rise(NULL); //disable interrupt |
electronichamsters | 8:46c5e0bfab05 | 525 | button2.mode(PullNone); //float pin to save battery |
electronichamsters | 10:79e8f92ef156 | 526 | #if MyDebugEnb |
electronichamsters | 10:79e8f92ef156 | 527 | device.printf("=== button 2! === %d seconds\r\n", mySeconds); |
electronichamsters | 10:79e8f92ef156 | 528 | #endif |
electronichamsters | 8:46c5e0bfab05 | 529 | } |
electronichamsters | 8:46c5e0bfab05 | 530 | else //odd state, shouldn't happen, suck battery and pullup both pins |
electronichamsters | 8:46c5e0bfab05 | 531 | { |
electronichamsters | 8:46c5e0bfab05 | 532 | magnet_near = 2; |
electronichamsters | 8:46c5e0bfab05 | 533 | //AdvData[4] = 0x33; |
electronichamsters | 8:46c5e0bfab05 | 534 | //button1.disable_irq() //don't know if disables IRQ on port or pin |
electronichamsters | 8:46c5e0bfab05 | 535 | button1.fall(buttonReleasedCallback); //disable interrupt |
electronichamsters | 8:46c5e0bfab05 | 536 | button1.rise(buttonReleasedCallback); //disable interrupt |
electronichamsters | 8:46c5e0bfab05 | 537 | button1.mode(PullUp); //float pin to save battery |
electronichamsters | 8:46c5e0bfab05 | 538 | |
electronichamsters | 8:46c5e0bfab05 | 539 | //button2.disable_irq() //don't know if disables IRQ on port or pin |
electronichamsters | 8:46c5e0bfab05 | 540 | button2.fall(buttonReleasedCallback); //disable interrupt |
electronichamsters | 8:46c5e0bfab05 | 541 | button2.rise(buttonReleasedCallback); //disable interrupt |
electronichamsters | 8:46c5e0bfab05 | 542 | button2.mode(PullUp); //float pin to save battery |
electronichamsters | 10:79e8f92ef156 | 543 | #if MyDebugEnb |
electronichamsters | 10:79e8f92ef156 | 544 | device.printf("no buttons!! %d seconds\r\n", mySeconds); |
electronichamsters | 10:79e8f92ef156 | 545 | #endif |
electronichamsters | 8:46c5e0bfab05 | 546 | } |
electronichamsters | 8:46c5e0bfab05 | 547 | |
electronichamsters | 8:46c5e0bfab05 | 548 | |
electronichamsters | 8:46c5e0bfab05 | 549 | if (flag_update_io) { |
andresag | 7:0a8bbb6dea16 | 550 | /* Do blocking calls or whatever hardware-specific action is |
andresag | 7:0a8bbb6dea16 | 551 | * necessary to poll the sensor. */ |
electronichamsters | 8:46c5e0bfab05 | 552 | |
electronichamsters | 10:79e8f92ef156 | 553 | Xmit_Cnt++; //increment transmit counter when updating I/O |
electronichamsters | 10:79e8f92ef156 | 554 | |
electronichamsters | 10:79e8f92ef156 | 555 | |
electronichamsters | 10:79e8f92ef156 | 556 | //read battery voltage |
electronichamsters | 8:46c5e0bfab05 | 557 | //analog reading consumes 940uA if not disabled |
electronichamsters | 10:79e8f92ef156 | 558 | |
electronichamsters | 10:79e8f92ef156 | 559 | |
electronichamsters | 8:46c5e0bfab05 | 560 | bat_reading = (float)my_analogin_read_u16(); |
electronichamsters | 10:79e8f92ef156 | 561 | |
electronichamsters | 8:46c5e0bfab05 | 562 | bat_reading = (bat_reading * 3.6) / 1024.0; |
electronichamsters | 8:46c5e0bfab05 | 563 | #if MyDebugEnb |
electronichamsters | 8:46c5e0bfab05 | 564 | device.printf("bat reading: %f \r\n", bat_reading); |
electronichamsters | 8:46c5e0bfab05 | 565 | #endif |
electronichamsters | 8:46c5e0bfab05 | 566 | |
electronichamsters | 8:46c5e0bfab05 | 567 | //memset(&buffer[0], 0, sizeof(buffer)); //clear out buffer |
electronichamsters | 8:46c5e0bfab05 | 568 | //sprintf (buffer, "%f.2", bat_reading); //don't know what i'm doing |
electronichamsters | 8:46c5e0bfab05 | 569 | //sprintf (buffer, "%.2f", bat_reading); |
electronichamsters | 8:46c5e0bfab05 | 570 | //AdvData[8] = buffer[0]; //"3"=0x33 |
electronichamsters | 8:46c5e0bfab05 | 571 | //AdvData[9] = buffer[1]; //"."=0x2E |
electronichamsters | 8:46c5e0bfab05 | 572 | //AdvData[10] = buffer[2];//"3"=0x33 |
electronichamsters | 8:46c5e0bfab05 | 573 | //AdvData[11] = buffer[3];//"2"=0x32 |
electronichamsters | 8:46c5e0bfab05 | 574 | |
electronichamsters | 10:79e8f92ef156 | 575 | //try this |
electronichamsters | 10:79e8f92ef156 | 576 | //https://developer.mbed.org/users/mbed_official/code/mbed-src/file/cb4253f91ada/targets/hal/TARGET_NORDIC/TARGET_NRF51822/analogin_api.c |
electronichamsters | 10:79e8f92ef156 | 577 | NRF_ADC->TASKS_STOP = 1; |
electronichamsters | 10:79e8f92ef156 | 578 | float analogreading; |
electronichamsters | 10:79e8f92ef156 | 579 | analogreading = (float)my_analog_pin_read(); |
electronichamsters | 10:79e8f92ef156 | 580 | analogreading = (analogreading * 3.6) / 1024.0; |
electronichamsters | 10:79e8f92ef156 | 581 | #if MyDebugEnb |
electronichamsters | 10:79e8f92ef156 | 582 | device.printf("separate analog reading: %.02f \r\n", analogreading); |
electronichamsters | 10:79e8f92ef156 | 583 | #endif |
electronichamsters | 10:79e8f92ef156 | 584 | |
electronichamsters | 8:46c5e0bfab05 | 585 | //disable ADC |
electronichamsters | 8:46c5e0bfab05 | 586 | NRF_ADC->TASKS_STOP = 1; |
electronichamsters | 8:46c5e0bfab05 | 587 | NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Disabled; //disable to shutdown ADC & lower bat consumption |
electronichamsters | 8:46c5e0bfab05 | 588 | |
electronichamsters | 10:79e8f92ef156 | 589 | |
electronichamsters | 10:79e8f92ef156 | 590 | |
electronichamsters | 8:46c5e0bfab05 | 591 | //*********************************** |
electronichamsters | 8:46c5e0bfab05 | 592 | //form JSON string in ADV_DATA |
electronichamsters | 8:46c5e0bfab05 | 593 | //1) volts starts at AdvData[8] |
electronichamsters | 8:46c5e0bfab05 | 594 | |
electronichamsters | 8:46c5e0bfab05 | 595 | |
electronichamsters | 8:46c5e0bfab05 | 596 | |
electronichamsters | 8:46c5e0bfab05 | 597 | //write battery voltage |
electronichamsters | 8:46c5e0bfab05 | 598 | uint8_t total_chars; |
electronichamsters | 10:79e8f92ef156 | 599 | memset(&bat_volt_char[0], 0, sizeof(bat_volt_char)); //clear out buffer |
electronichamsters | 10:79e8f92ef156 | 600 | total_chars = sprintf (bat_volt_char, "%.2f", bat_reading); //returns total number of characters |
electronichamsters | 8:46c5e0bfab05 | 601 | |
electronichamsters | 8:46c5e0bfab05 | 602 | #if MyDebugEnb |
electronichamsters | 10:79e8f92ef156 | 603 | device.printf("char buff: %c%c%c%c \r\n", bat_volt_char[0], bat_volt_char[1], bat_volt_char[2], bat_volt_char[3]); |
electronichamsters | 8:46c5e0bfab05 | 604 | device.printf("num chars: %d \r\n", total_chars); |
electronichamsters | 8:46c5e0bfab05 | 605 | #endif |
electronichamsters | 8:46c5e0bfab05 | 606 | |
electronichamsters | 10:79e8f92ef156 | 607 | |
electronichamsters | 10:79e8f92ef156 | 608 | |
electronichamsters | 10:79e8f92ef156 | 609 | //memset(&Adv_First_Section[0], 0, sizeof(Adv_First_Section)); //not needed to reset |
electronichamsters | 10:79e8f92ef156 | 610 | hash_first_section(Adv_First_Section, mac_reverse, bat_volt_char); |
electronichamsters | 10:79e8f92ef156 | 611 | |
electronichamsters | 10:79e8f92ef156 | 612 | |
electronichamsters | 8:46c5e0bfab05 | 613 | |
electronichamsters | 10:79e8f92ef156 | 614 | //------------------------------------------------------------------ |
electronichamsters | 10:79e8f92ef156 | 615 | //start writing out ADVData array |
electronichamsters | 10:79e8f92ef156 | 616 | //------------------------------------------------------------------ |
electronichamsters | 10:79e8f92ef156 | 617 | |
electronichamsters | 10:79e8f92ef156 | 618 | memset(&AdvData[0], 0, sizeof(AdvData)); |
electronichamsters | 10:79e8f92ef156 | 619 | uint8_t JSON_loc=0; //AdvData[0] |
electronichamsters | 10:79e8f92ef156 | 620 | |
electronichamsters | 10:79e8f92ef156 | 621 | AdvData[0] = Adv_First_Section[0]; //AdvData[0] = manf ID 01 |
electronichamsters | 10:79e8f92ef156 | 622 | JSON_loc++; //1 |
electronichamsters | 10:79e8f92ef156 | 623 | AdvData[1] = Adv_First_Section[1]; //AdvData[1] = manf ID 02 |
electronichamsters | 10:79e8f92ef156 | 624 | JSON_loc++; //2 |
electronichamsters | 10:79e8f92ef156 | 625 | AdvData[2] = Adv_First_Section[2]; //AdvData[2] = reserved |
electronichamsters | 10:79e8f92ef156 | 626 | JSON_loc++; //3... |
electronichamsters | 10:79e8f92ef156 | 627 | AdvData[3] = Adv_First_Section[3]; //AdvData[3] = reserved |
electronichamsters | 10:79e8f92ef156 | 628 | JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 629 | AdvData[4] = Adv_First_Section[4]; //AdvData[4] = voltage 01 |
electronichamsters | 10:79e8f92ef156 | 630 | JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 631 | AdvData[5] = Adv_First_Section[5]; //AdvData[5] = voltage 02 |
electronichamsters | 10:79e8f92ef156 | 632 | JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 633 | AdvData[6] = Adv_First_Section[6]; //AdvData[6] = voltage 03 |
electronichamsters | 10:79e8f92ef156 | 634 | JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 635 | AdvData[7] = Adv_First_Section[7]; //AdvData[7] = voltage 04 |
electronichamsters | 10:79e8f92ef156 | 636 | JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 637 | AdvData[8] = Adv_First_Section[8]; //AdvData[8] = reserved |
electronichamsters | 10:79e8f92ef156 | 638 | JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 639 | AdvData[9] = Adv_First_Section[9]; //AdvData[9] = reserved |
electronichamsters | 8:46c5e0bfab05 | 640 | JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 641 | |
electronichamsters | 10:79e8f92ef156 | 642 | #if MyDebugEnb |
electronichamsters | 10:79e8f92ef156 | 643 | |
electronichamsters | 10:79e8f92ef156 | 644 | device.printf("ADV first 10 array: "); |
electronichamsters | 10:79e8f92ef156 | 645 | for (int i=0; i<10; i++) |
electronichamsters | 10:79e8f92ef156 | 646 | { |
electronichamsters | 10:79e8f92ef156 | 647 | device.printf("%x ", AdvData[i]); |
electronichamsters | 10:79e8f92ef156 | 648 | } |
electronichamsters | 10:79e8f92ef156 | 649 | device.printf("\r\n"); |
electronichamsters | 10:79e8f92ef156 | 650 | #endif |
electronichamsters | 10:79e8f92ef156 | 651 | |
electronichamsters | 10:79e8f92ef156 | 652 | |
electronichamsters | 10:79e8f92ef156 | 653 | JSON_loc = 10; |
electronichamsters | 10:79e8f92ef156 | 654 | //start of encrypted data |
electronichamsters | 10:79e8f92ef156 | 655 | //AdvData[10] |
electronichamsters | 10:79e8f92ef156 | 656 | AdvData[10] = mySeconds & 0xFF; //reserved for timer |
electronichamsters | 8:46c5e0bfab05 | 657 | JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 658 | AdvData[11] = (mySeconds >> 8) & 0xFF; //reserved for timer |
electronichamsters | 10:79e8f92ef156 | 659 | JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 660 | AdvData[12] = Xmit_Cnt; |
electronichamsters | 8:46c5e0bfab05 | 661 | JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 662 | //start of jason data |
electronichamsters | 10:79e8f92ef156 | 663 | JSON_loc = 13; |
electronichamsters | 10:79e8f92ef156 | 664 | AdvData[JSON_loc] = 0x22; //" start mag pos=13 |
electronichamsters | 10:79e8f92ef156 | 665 | JSON_loc++; //14 |
electronichamsters | 8:46c5e0bfab05 | 666 | |
electronichamsters | 10:79e8f92ef156 | 667 | AdvData[JSON_loc] = 0x6d; //m, pos=14 |
electronichamsters | 10:79e8f92ef156 | 668 | JSON_loc++; //15 |
electronichamsters | 10:79e8f92ef156 | 669 | |
electronichamsters | 10:79e8f92ef156 | 670 | AdvData[JSON_loc] = 0x61; //a, pos=15 |
electronichamsters | 10:79e8f92ef156 | 671 | JSON_loc++; //16 |
electronichamsters | 10:79e8f92ef156 | 672 | |
electronichamsters | 10:79e8f92ef156 | 673 | AdvData[JSON_loc] = 0x67; //g, pos=16 |
electronichamsters | 10:79e8f92ef156 | 674 | JSON_loc++; //17 |
electronichamsters | 8:46c5e0bfab05 | 675 | |
electronichamsters | 8:46c5e0bfab05 | 676 | if (flag_periodic_call) |
electronichamsters | 8:46c5e0bfab05 | 677 | { |
electronichamsters | 8:46c5e0bfab05 | 678 | //AdvData[JSON_loc] = 0x2f; // "/" |
electronichamsters | 8:46c5e0bfab05 | 679 | //JSON_loc++; |
electronichamsters | 10:79e8f92ef156 | 680 | AdvData[JSON_loc] = 0x2f; // "/" pos=17 |
electronichamsters | 10:79e8f92ef156 | 681 | JSON_loc++;//pos=18 |
electronichamsters | 10:79e8f92ef156 | 682 | AdvData[JSON_loc] = 0x70; // "p" poes=18 |
electronichamsters | 10:79e8f92ef156 | 683 | JSON_loc++;//pos=19 |
electronichamsters | 8:46c5e0bfab05 | 684 | }//end if period call |
electronichamsters | 8:46c5e0bfab05 | 685 | |
electronichamsters | 10:79e8f92ef156 | 686 | AdvData[JSON_loc] = 0x22; //" pos = 17 or 19 |
electronichamsters | 10:79e8f92ef156 | 687 | JSON_loc++; //20 |
electronichamsters | 8:46c5e0bfab05 | 688 | |
electronichamsters | 10:79e8f92ef156 | 689 | AdvData[JSON_loc] = 0x3a; //: pos = 18 or 20 |
electronichamsters | 10:79e8f92ef156 | 690 | JSON_loc++; //22 |
electronichamsters | 8:46c5e0bfab05 | 691 | |
electronichamsters | 8:46c5e0bfab05 | 692 | //prep magnet location (1 or 0) for char[] |
electronichamsters | 8:46c5e0bfab05 | 693 | memset(&buffer[0], 0, sizeof(buffer)); //clear out buffer |
electronichamsters | 8:46c5e0bfab05 | 694 | //magnet_near is an integer |
electronichamsters | 10:79e8f92ef156 | 695 | total_chars = sprintf (buffer, "%d", magnet_near); //returns total number of characters, which is 1 character. |
electronichamsters | 8:46c5e0bfab05 | 696 | for (int i=0; i < total_chars; i++) |
electronichamsters | 8:46c5e0bfab05 | 697 | { |
electronichamsters | 8:46c5e0bfab05 | 698 | AdvData[JSON_loc] = buffer[i]; |
electronichamsters | 10:79e8f92ef156 | 699 | JSON_loc++; //23 |
electronichamsters | 8:46c5e0bfab05 | 700 | } //JSON_loc left at location of next character |
electronichamsters | 8:46c5e0bfab05 | 701 | |
electronichamsters | 8:46c5e0bfab05 | 702 | //MUST null terminate for JSON to read correctly, else get intermittent JSON parse errors at gateway |
electronichamsters | 8:46c5e0bfab05 | 703 | //happens when string is shorter than last string, get trash left overs |
electronichamsters | 8:46c5e0bfab05 | 704 | //not really needed after clearning AdvData at start. |
electronichamsters | 8:46c5e0bfab05 | 705 | |
electronichamsters | 8:46c5e0bfab05 | 706 | |
electronichamsters | 8:46c5e0bfab05 | 707 | //AdvData[JSON_loc] = 0x0; //null terminate here |
electronichamsters | 8:46c5e0bfab05 | 708 | |
rgrover1 | 5:f4d74a8cad43 | 709 | ApplicationData_t appData; |
rgrover1 | 5:f4d74a8cad43 | 710 | setupApplicationData(appData); |
electronichamsters | 8:46c5e0bfab05 | 711 | |
electronichamsters | 10:79e8f92ef156 | 712 | |
electronichamsters | 8:46c5e0bfab05 | 713 | for (int i=0; i<16; i++) |
electronichamsters | 8:46c5e0bfab05 | 714 | { |
electronichamsters | 10:79e8f92ef156 | 715 | src_buf[i] = AdvData[i+10]; //start of encrypted section is at AdvData[10] |
electronichamsters | 8:46c5e0bfab05 | 716 | } |
rgrover1 | 5:f4d74a8cad43 | 717 | |
electronichamsters | 8:46c5e0bfab05 | 718 | //nrf_ecb_set_key(key_buf); |
electronichamsters | 8:46c5e0bfab05 | 719 | nrf_ecb_init(); |
electronichamsters | 8:46c5e0bfab05 | 720 | nrf_ecb_set_key(key_buf); |
electronichamsters | 8:46c5e0bfab05 | 721 | bool successful_ecb = nrf_ecb_crypt(des_buf, src_buf); |
electronichamsters | 8:46c5e0bfab05 | 722 | #if MyDebugEnb |
electronichamsters | 8:46c5e0bfab05 | 723 | device.printf("success ecb = %d \r\n", successful_ecb); |
electronichamsters | 8:46c5e0bfab05 | 724 | device.printf("src_buf: %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x \r\n", src_buf[0], src_buf[1], src_buf[2], src_buf[3], src_buf[4], src_buf[5], src_buf[6], src_buf[7], src_buf[8], src_buf[9], src_buf[10], src_buf[11], src_buf[12], src_buf[13], src_buf[14], src_buf[15]); |
electronichamsters | 8:46c5e0bfab05 | 725 | device.printf("des_buf: %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x \r\n", des_buf[0], des_buf[1], des_buf[2], des_buf[3], des_buf[4], des_buf[5], des_buf[6], des_buf[7], des_buf[8], des_buf[9], des_buf[10], des_buf[11], des_buf[12], des_buf[13], des_buf[14], des_buf[15]); |
electronichamsters | 8:46c5e0bfab05 | 726 | #endif |
electronichamsters | 8:46c5e0bfab05 | 727 | for (int i=0; i<16; i++) |
electronichamsters | 8:46c5e0bfab05 | 728 | { |
electronichamsters | 10:79e8f92ef156 | 729 | AdvData[i+10] = des_buf[i]; |
electronichamsters | 8:46c5e0bfab05 | 730 | } |
electronichamsters | 8:46c5e0bfab05 | 731 | |
electronichamsters | 8:46c5e0bfab05 | 732 | //ble.gap().updateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *) &appData, sizeof(ApplicationData_t)); |
electronichamsters | 8:46c5e0bfab05 | 733 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, AdvData, sizeof(AdvData)); |
electronichamsters | 8:46c5e0bfab05 | 734 | |
electronichamsters | 8:46c5e0bfab05 | 735 | flag_update_io = false; |
electronichamsters | 8:46c5e0bfab05 | 736 | flag_periodic_call = false; |
electronichamsters | 8:46c5e0bfab05 | 737 | |
electronichamsters | 8:46c5e0bfab05 | 738 | //GAP::AddressType_t *myType; |
electronichamsters | 8:46c5e0bfab05 | 739 | //GAP::Address_t myAddress |
electronichamsters | 8:46c5e0bfab05 | 740 | //ble_error_t getAddress(Gap::AddressType_t *typeP, Gap::Address_t address) |
electronichamsters | 8:46c5e0bfab05 | 741 | //ble.gap().getAddress(myType, myAddress); |
electronichamsters | 8:46c5e0bfab05 | 742 | //ble.gap().getAddress(Gap::AddressType_t *typeP, Gap::Address_t address); |
electronichamsters | 10:79e8f92ef156 | 743 | |
electronichamsters | 10:79e8f92ef156 | 744 | |
electronichamsters | 10:79e8f92ef156 | 745 | |
electronichamsters | 8:46c5e0bfab05 | 746 | ble.gap().startAdvertising(); |
electronichamsters | 8:46c5e0bfab05 | 747 | tic_adv.attach(stop_adv_Callback, 2); /* trigger turn off advertisement after X seconds */ |
electronichamsters | 8:46c5e0bfab05 | 748 | |
electronichamsters | 8:46c5e0bfab05 | 749 | /* |
electronichamsters | 8:46c5e0bfab05 | 750 | Timer myTimer; //timed advertising |
electronichamsters | 8:46c5e0bfab05 | 751 | myTimer.start(); |
electronichamsters | 8:46c5e0bfab05 | 752 | uint32_t duration = myTimer.read_ms(); |
electronichamsters | 8:46c5e0bfab05 | 753 | |
electronichamsters | 8:46c5e0bfab05 | 754 | //do this as a ticker instead of keeping processor on |
electronichamsters | 8:46c5e0bfab05 | 755 | while (duration < 15000) //advertise for 1000 ms |
electronichamsters | 8:46c5e0bfab05 | 756 | { |
electronichamsters | 8:46c5e0bfab05 | 757 | duration = myTimer.read_ms(); //read miliseconds |
electronichamsters | 8:46c5e0bfab05 | 758 | } |
electronichamsters | 8:46c5e0bfab05 | 759 | myTimer.stop(); |
electronichamsters | 8:46c5e0bfab05 | 760 | ble.gap().stopAdvertising(); |
electronichamsters | 8:46c5e0bfab05 | 761 | */ |
electronichamsters | 8:46c5e0bfab05 | 762 | |
electronichamsters | 8:46c5e0bfab05 | 763 | }//end flag_update_io |
electronichamsters | 8:46c5e0bfab05 | 764 | |
electronichamsters | 8:46c5e0bfab05 | 765 | |
electronichamsters | 8:46c5e0bfab05 | 766 | /* |
electronichamsters | 8:46c5e0bfab05 | 767 | if (flag_set_debounce_tic == true) |
electronichamsters | 8:46c5e0bfab05 | 768 | { |
electronichamsters | 8:46c5e0bfab05 | 769 | tic_debounce.attach(); |
electronichamsters | 8:46c5e0bfab05 | 770 | //flag_set_debounce_tic = false; |
electronichamsters | 8:46c5e0bfab05 | 771 | |
sunsmile2015 | 0:3dc6e424dba0 | 772 | } |
electronichamsters | 8:46c5e0bfab05 | 773 | */ |
electronichamsters | 8:46c5e0bfab05 | 774 | |
electronichamsters | 8:46c5e0bfab05 | 775 | //if (trigger_Detach_ADV_Tick == false) |
electronichamsters | 8:46c5e0bfab05 | 776 | //{ |
electronichamsters | 8:46c5e0bfab05 | 777 | //} |
electronichamsters | 8:46c5e0bfab05 | 778 | if (flag_detach_adv_tic == true) //Stop Advertising |
electronichamsters | 8:46c5e0bfab05 | 779 | { |
electronichamsters | 8:46c5e0bfab05 | 780 | ble.gap().stopAdvertising(); //may be safer to execute BLE operations in main |
electronichamsters | 8:46c5e0bfab05 | 781 | tic_adv.detach(); |
electronichamsters | 8:46c5e0bfab05 | 782 | flag_detach_adv_tic = false; |
electronichamsters | 8:46c5e0bfab05 | 783 | } |
electronichamsters | 8:46c5e0bfab05 | 784 | //device.printf("Input Voltage: %f\n\r",bat_reading); |
electronichamsters | 8:46c5e0bfab05 | 785 | |
electronichamsters | 8:46c5e0bfab05 | 786 | ble.waitForEvent(); //sleeps until interrupt |
electronichamsters | 8:46c5e0bfab05 | 787 | |
rgrover1 | 5:f4d74a8cad43 | 788 | |
electronichamsters | 8:46c5e0bfab05 | 789 | }//end forever while |
electronichamsters | 8:46c5e0bfab05 | 790 | }//end main |