AirConLibに対応したMSC

Dependencies:   BLE_API mbed nRF51822

Fork of nRF51822_SimpleChat_LED_kai by EQUUS_KUBOTA

Committer:
ke_ix1
Date:
Thu Dec 08 10:57:15 2016 +0000
Revision:
5:35728098eeae
Parent:
4:41cf035db84a
Child:
6:b15d219371da
~4?Characteristic???; TxPower??????????????; ??

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RedBearLab 1:1c058e553423 1 /*
RedBearLab 0:cffe8ac1bdf0 2
RedBearLab 1:1c058e553423 3 Copyright (c) 2012-2014 RedBearLab
RedBearLab 1:1c058e553423 4
RedBearLab 1:1c058e553423 5 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
RedBearLab 1:1c058e553423 6 and associated documentation files (the "Software"), to deal in the Software without restriction,
RedBearLab 1:1c058e553423 7 including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
RedBearLab 1:1c058e553423 8 and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
RedBearLab 1:1c058e553423 9 subject to the following conditions:
RedBearLab 1:1c058e553423 10 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
RedBearLab 1:1c058e553423 11
RedBearLab 1:1c058e553423 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
RedBearLab 1:1c058e553423 13 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
RedBearLab 1:1c058e553423 14 PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
RedBearLab 1:1c058e553423 15 FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
RedBearLab 1:1c058e553423 16 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
RedBearLab 1:1c058e553423 17
RedBearLab 1:1c058e553423 18 */
RedBearLab 1:1c058e553423 19
RedBearLab 1:1c058e553423 20 /*
RedBearLab 1:1c058e553423 21 * The application works with the BLEController iOS/Android App.
RedBearLab 1:1c058e553423 22 * Type something from the Terminal to send
RedBearLab 1:1c058e553423 23 * to the BLEController App or vice verse.
RedBearLab 1:1c058e553423 24 * Characteristics received from App will print on Terminal.
RedBearLab 1:1c058e553423 25 */
RedBearLab 1:1c058e553423 26
RedBearLab 0:cffe8ac1bdf0 27 #include "mbed.h"
RedBearLab 2:4b66b69c7ecb 28 #include "ble/BLE.h"
ke_ix1 5:35728098eeae 29 #include "TxPower.h"
ke_ix1 5:35728098eeae 30 #include "ble_gap.h"
RedBearLab 0:cffe8ac1bdf0 31
RedBearLab 0:cffe8ac1bdf0 32 #define BLE_UUID_TXRX_SERVICE 0x0000 /**< The UUID of the Nordic UART Service. */
RedBearLab 0:cffe8ac1bdf0 33 #define BLE_UUID_TX_CHARACTERISTIC 0x0002 /**< The UUID of the TX Characteristic. */
RedBearLab 0:cffe8ac1bdf0 34 #define BLE_UUIDS_RX_CHARACTERISTIC 0x0003 /**< The UUID of the RX Characteristic. */
RedBearLab 0:cffe8ac1bdf0 35
RedBearLab 0:cffe8ac1bdf0 36 #define TXRX_BUF_LEN 20
ke_ix1 4:41cf035db84a 37 #define DIGITAL_OUT_PIN P0_17 //D7
ke_ix1 4:41cf035db84a 38
ke_ix1 5:35728098eeae 39 #define TX_POWER -40
RedBearLab 0:cffe8ac1bdf0 40
RedBearLab 2:4b66b69c7ecb 41 BLE ble;
RedBearLab 0:cffe8ac1bdf0 42
RedBearLab 0:cffe8ac1bdf0 43 Serial pc(USBTX, USBRX);
ke_ix1 5:35728098eeae 44 Ticker steper;
ke_ix1 4:41cf035db84a 45 DigitalOut led1(DIGITAL_OUT_PIN);
ke_ix1 4:41cf035db84a 46 DigitalOut ledori1(LED1);
RedBearLab 0:cffe8ac1bdf0 47
RedBearLab 0:cffe8ac1bdf0 48 // The Nordic UART Service
ke_ix1 4:41cf035db84a 49 //static const uint8_t uart_base_uuid[] = {0x71, 0x3D, 0, 0, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
ke_ix1 4:41cf035db84a 50 //static const uint8_t uart_tx_uuid[] = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
ke_ix1 4:41cf035db84a 51 //static const uint8_t uart_rx_uuid[] = {0x71, 0x3D, 0, 2, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
ke_ix1 4:41cf035db84a 52 //static const uint8_t uart_base_uuid_rev[] = {0x1E, 0x94, 0x8D, 0xF1, 0x48, 0x31, 0x94, 0xBA, 0x75, 0x4C, 0x3E, 0x50, 0, 0, 0x3D, 0x71};
RedBearLab 0:cffe8ac1bdf0 53
ke_ix1 4:41cf035db84a 54 // The Service
ke_ix1 4:41cf035db84a 55 static const uint8_t uart_base_uuid[] = {0x02, 0xF3, 0xF5, 0x38, 0x8D, 0x11, 0x48, 0x02, 0xB6, 0xFC, 0xFB, 0x66, 0x16, 0xD4, 0xCD, 0x70}; //Service
ke_ix1 4:41cf035db84a 56 static const uint8_t uart_tx_uuid[] = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E}; //central_送信用
ke_ix1 4:41cf035db84a 57 static const uint8_t uart_rx_uuid[] = {0x71, 0x3D, 0, 2, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E}; //central_受信用
ke_ix1 5:35728098eeae 58 static const uint8_t power_level_uuid[] = {0x71, 0x3D, 0, 4, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E}; //central_TxPower受信用
ke_ix1 4:41cf035db84a 59 static const uint8_t uart_base_uuid_rev[] = {0x70, 0xCD, 0xD4, 0x16, 0x66, 0xFB, 0xFC, 0xB6, 0x02, 0x48, 0x11, 0x8D, 0x38, 0xF5, 0xF3, 0x02};
ke_ix1 4:41cf035db84a 60
ke_ix1 5:35728098eeae 61 // Tx Power Service
ke_ix1 5:35728098eeae 62 //static const uint8_t power_base_uuid[] = {0x03, 0xF3, 0xF5, 0x38, 0x8D, 0x11, 0x48, 0x02, 0xB6, 0xFC, 0xFB, 0x66, 0x16, 0xD4, 0xCD, 0x70}; //Service
ke_ix1 5:35728098eeae 63 //static const uint8_t power_base_uuid_rev[] = {0x70, 0xCD, 0xD4, 0x16, 0x66, 0xFB, 0xFC, 0xB6, 0x02, 0x48, 0x11, 0x8D, 0x38, 0xF5, 0xF3, 0x03};
ke_ix1 5:35728098eeae 64 //static const uint8_t power_level_uuid[] = {0x71, 0x3D, 0, 4, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E}; //central_TxPower受信用
ke_ix1 5:35728098eeae 65
ke_ix1 5:35728098eeae 66 /*
ke_ix1 5:35728098eeae 67 static const uint16_t txpower_base_uuid[] = {0x18, 0x04};
ke_ix1 5:35728098eeae 68 static const uint16_t txpower_base_uuid_rev[] = {0x04, 0x18};
ke_ix1 5:35728098eeae 69 */
ke_ix1 4:41cf035db84a 70 //02f3f538-8d11-4802-b6fc-fb6616d4cd70
ke_ix1 4:41cf035db84a 71
ke_ix1 5:35728098eeae 72 const static char DEVICE_NAME[] = "KEI_LED2"; // change this
RedBearLab 0:cffe8ac1bdf0 73
RedBearLab 0:cffe8ac1bdf0 74 uint8_t txPayload[TXRX_BUF_LEN] = {0,};
RedBearLab 0:cffe8ac1bdf0 75 uint8_t rxPayload[TXRX_BUF_LEN] = {0,};
ke_ix1 5:35728098eeae 76 uint8_t powerPayload[TXRX_BUF_LEN] = {0,};
RedBearLab 0:cffe8ac1bdf0 77
RedBearLab 0:cffe8ac1bdf0 78 static uint8_t rx_buf[TXRX_BUF_LEN];
RedBearLab 0:cffe8ac1bdf0 79 static uint8_t rx_len=0;
RedBearLab 0:cffe8ac1bdf0 80
ke_ix1 5:35728098eeae 81 static uint8_t power_buf[TXRX_BUF_LEN];
ke_ix1 5:35728098eeae 82 static uint8_t power_len=0;
RedBearLab 0:cffe8ac1bdf0 83
ke_ix1 5:35728098eeae 84 //Uart Service associated
RedBearLab 0:cffe8ac1bdf0 85 GattCharacteristic txCharacteristic (uart_tx_uuid, txPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
RedBearLab 0:cffe8ac1bdf0 86 GattCharacteristic rxCharacteristic (uart_rx_uuid, rxPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
ke_ix1 5:35728098eeae 87 GattCharacteristic txPowerCharacteristic (power_level_uuid, powerPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); //tx power characteristic
ke_ix1 5:35728098eeae 88 GattCharacteristic *uartChars[] = {&txCharacteristic, &rxCharacteristic, &txPowerCharacteristic};
RedBearLab 0:cffe8ac1bdf0 89 GattService uartService(uart_base_uuid, uartChars, sizeof(uartChars) / sizeof(GattCharacteristic *));
RedBearLab 0:cffe8ac1bdf0 90
ke_ix1 5:35728098eeae 91 //TxPowerService *txPowerService = NULL;
ke_ix1 5:35728098eeae 92 //BatteryService *batteryService = NULL;
ke_ix1 5:35728098eeae 93 //uint8_t batteryLevel = 50;
RedBearLab 0:cffe8ac1bdf0 94
RedBearLab 3:b3f6c612b603 95 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
RedBearLab 0:cffe8ac1bdf0 96 {
RedBearLab 0:cffe8ac1bdf0 97 pc.printf("Disconnected \r\n");
RedBearLab 0:cffe8ac1bdf0 98 pc.printf("Restart advertising \r\n");
RedBearLab 0:cffe8ac1bdf0 99 ble.startAdvertising();
RedBearLab 0:cffe8ac1bdf0 100 }
RedBearLab 0:cffe8ac1bdf0 101
ke_ix1 4:41cf035db84a 102 void ConnectionCallback(const Gap::ConnectionCallbackParams_t *params)
ke_ix1 4:41cf035db84a 103 {
ke_ix1 4:41cf035db84a 104 pc.printf("Disconnected \r\n");
ke_ix1 4:41cf035db84a 105 pc.printf("Restart advertising \r\n");
ke_ix1 4:41cf035db84a 106 ble.startAdvertising();
ke_ix1 4:41cf035db84a 107 }
ke_ix1 4:41cf035db84a 108
RedBearLab 2:4b66b69c7ecb 109 void WrittenHandler(const GattWriteCallbackParams *Handler)
RedBearLab 0:cffe8ac1bdf0 110 {
RedBearLab 0:cffe8ac1bdf0 111 uint8_t buf[TXRX_BUF_LEN];
RedBearLab 0:cffe8ac1bdf0 112 uint16_t bytesRead, index;
RedBearLab 0:cffe8ac1bdf0 113
ke_ix1 5:35728098eeae 114 if (Handler->handle == txCharacteristic.getValueAttribute().getHandle())
RedBearLab 0:cffe8ac1bdf0 115 {
RedBearLab 0:cffe8ac1bdf0 116 ble.readCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), buf, &bytesRead);
RedBearLab 0:cffe8ac1bdf0 117 memset(txPayload, 0, TXRX_BUF_LEN);
ke_ix1 5:35728098eeae 118 memcpy(txPayload, buf, TXRX_BUF_LEN);
RedBearLab 0:cffe8ac1bdf0 119 pc.printf("WriteHandler \r\n");
RedBearLab 0:cffe8ac1bdf0 120 pc.printf("Length: ");
ke_ix1 4:41cf035db84a 121 pc.putc(bytesRead); //受け取った文字の先頭アドレス?
ke_ix1 4:41cf035db84a 122 pc.printf("\r\n");
ke_ix1 4:41cf035db84a 123 pc.printf("[0]: ");
ke_ix1 4:41cf035db84a 124 pc.putc(txPayload[1]); //1文字目を表示
ke_ix1 4:41cf035db84a 125 if(txPayload[1]=='a') {
ke_ix1 4:41cf035db84a 126 pc.printf("yeahhhhhh!!!!!!!!");
ke_ix1 4:41cf035db84a 127 // if(led1 == 0) {
ke_ix1 4:41cf035db84a 128 led1 = 1;
ke_ix1 5:35728098eeae 129 ledori1 = 0;
ke_ix1 4:41cf035db84a 130 // } else {
ke_ix1 4:41cf035db84a 131 // led1 = 0;
ke_ix1 4:41cf035db84a 132 // }
ke_ix1 4:41cf035db84a 133 } else if(txPayload[1]=='b') {
ke_ix1 4:41cf035db84a 134 led1 = 0;
ke_ix1 5:35728098eeae 135 ledori1 = 1;
ke_ix1 4:41cf035db84a 136 }
RedBearLab 0:cffe8ac1bdf0 137 pc.printf("\r\n");
RedBearLab 0:cffe8ac1bdf0 138 pc.printf("Data: ");
RedBearLab 0:cffe8ac1bdf0 139 for(index=0; index<bytesRead; index++)
RedBearLab 0:cffe8ac1bdf0 140 {
ke_ix1 4:41cf035db84a 141 pc.putc(txPayload[index]);
RedBearLab 0:cffe8ac1bdf0 142 }
RedBearLab 0:cffe8ac1bdf0 143 pc.printf("\r\n");
RedBearLab 0:cffe8ac1bdf0 144 }
RedBearLab 0:cffe8ac1bdf0 145 }
RedBearLab 0:cffe8ac1bdf0 146
ke_ix1 5:35728098eeae 147
ke_ix1 5:35728098eeae 148 void txPowerUpdate(int newTxPower) {
ke_ix1 5:35728098eeae 149 sd_ble_gap_tx_power_set(-40);
ke_ix1 5:35728098eeae 150 //ここから-------------
ke_ix1 5:35728098eeae 151 char bufbuf_c[20];
ke_ix1 5:35728098eeae 152 uint8_t bufbuf[40];
ke_ix1 5:35728098eeae 153 sprintf(bufbuf_c, "%d", newTxPower);
ke_ix1 5:35728098eeae 154 int a;
ke_ix1 5:35728098eeae 155 for(a=0; bufbuf_c[a] != '\0'; a++) {
ke_ix1 5:35728098eeae 156 bufbuf[a] = bufbuf_c[a];
ke_ix1 5:35728098eeae 157 }
ke_ix1 5:35728098eeae 158 ble.updateCharacteristicValue(txPowerCharacteristic.getValueAttribute().getHandle(), bufbuf, a);
ke_ix1 5:35728098eeae 159 //ここまで-------------
ke_ix1 5:35728098eeae 160 //をこぴればデータを送信可能
ke_ix1 5:35728098eeae 161 }
ke_ix1 5:35728098eeae 162
RedBearLab 0:cffe8ac1bdf0 163 void uartCB(void)
RedBearLab 0:cffe8ac1bdf0 164 {
RedBearLab 0:cffe8ac1bdf0 165 while(pc.readable())
RedBearLab 0:cffe8ac1bdf0 166 {
RedBearLab 0:cffe8ac1bdf0 167 rx_buf[rx_len++] = pc.getc();
RedBearLab 0:cffe8ac1bdf0 168 if(rx_len>=20 || rx_buf[rx_len-1]=='\0' || rx_buf[rx_len-1]=='\n')
RedBearLab 0:cffe8ac1bdf0 169 {
ke_ix1 5:35728098eeae 170 txPowerUpdate(TX_POWER);
ke_ix1 5:35728098eeae 171
RedBearLab 0:cffe8ac1bdf0 172 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), rx_buf, rx_len);
RedBearLab 0:cffe8ac1bdf0 173 pc.printf("RecHandler \r\n");
RedBearLab 0:cffe8ac1bdf0 174 pc.printf("Length: ");
RedBearLab 0:cffe8ac1bdf0 175 pc.putc(rx_len);
RedBearLab 0:cffe8ac1bdf0 176 pc.printf("\r\n");
RedBearLab 0:cffe8ac1bdf0 177 rx_len = 0;
RedBearLab 0:cffe8ac1bdf0 178 break;
RedBearLab 0:cffe8ac1bdf0 179 }
RedBearLab 0:cffe8ac1bdf0 180 }
RedBearLab 0:cffe8ac1bdf0 181 }
RedBearLab 0:cffe8ac1bdf0 182
ke_ix1 5:35728098eeae 183
ke_ix1 5:35728098eeae 184 // 1++していく
ke_ix1 5:35728098eeae 185 void txStep() {
ke_ix1 5:35728098eeae 186 //ここから-------------
ke_ix1 5:35728098eeae 187 char bufbuf_c[20];
ke_ix1 5:35728098eeae 188 uint8_t bufbuf[40];
ke_ix1 5:35728098eeae 189 sprintf(bufbuf_c, "%d", TX_POWER);
ke_ix1 5:35728098eeae 190 int a;
ke_ix1 5:35728098eeae 191 for(a=0; bufbuf_c[a] != '\0'; a++) {
ke_ix1 5:35728098eeae 192 bufbuf[a] = bufbuf_c[a];
ke_ix1 5:35728098eeae 193 }
ke_ix1 5:35728098eeae 194 ble.updateCharacteristicValue(txPowerCharacteristic.getValueAttribute().getHandle(), bufbuf, a);
ke_ix1 5:35728098eeae 195 }
ke_ix1 5:35728098eeae 196
RedBearLab 0:cffe8ac1bdf0 197 int main(void)
RedBearLab 0:cffe8ac1bdf0 198 {
ke_ix1 4:41cf035db84a 199 led1 = 0;
ke_ix1 4:41cf035db84a 200 ledori1 = 0;
RedBearLab 0:cffe8ac1bdf0 201 ble.init();
RedBearLab 0:cffe8ac1bdf0 202 ble.onDisconnection(disconnectionCallback);
ke_ix1 4:41cf035db84a 203 ble.onDataWritten(WrittenHandler);
ke_ix1 4:41cf035db84a 204 ble.onConnection(ConnectionCallback);
RedBearLab 0:cffe8ac1bdf0 205
RedBearLab 0:cffe8ac1bdf0 206 pc.baud(9600);
RedBearLab 0:cffe8ac1bdf0 207 pc.printf("SimpleChat Init \r\n");
RedBearLab 0:cffe8ac1bdf0 208
RedBearLab 0:cffe8ac1bdf0 209 pc.attach( uartCB , pc.RxIrq);
ke_ix1 5:35728098eeae 210
ke_ix1 5:35728098eeae 211 // txPowerService = new TxPowerService(ble, -40);
ke_ix1 5:35728098eeae 212 // txPowerService->updateTxPower(TX_POWER);
ke_ix1 5:35728098eeae 213
ke_ix1 5:35728098eeae 214
ke_ix1 5:35728098eeae 215 //TxPowerService tx(ble, -40); // setting up the service and assigning an initial value
ke_ix1 5:35728098eeae 216 //tx.updateTxPower(TX_POWER); //changing the initial value just for testing ....
ke_ix1 5:35728098eeae 217
RedBearLab 0:cffe8ac1bdf0 218 // setup advertising
ke_ix1 5:35728098eeae 219 // ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
ke_ix1 5:35728098eeae 220 // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)txpower_base_uuid_rev, sizeof(txpower_base_uuid_rev));
ke_ix1 5:35728098eeae 221
RedBearLab 0:cffe8ac1bdf0 222 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
RedBearLab 0:cffe8ac1bdf0 223 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
RedBearLab 0:cffe8ac1bdf0 224 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
ke_ix1 4:41cf035db84a 225 (const uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME) - 1);
RedBearLab 0:cffe8ac1bdf0 226 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
RedBearLab 0:cffe8ac1bdf0 227 (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid));
ke_ix1 5:35728098eeae 228
RedBearLab 0:cffe8ac1bdf0 229 // 100ms; in multiples of 0.625ms.
ke_ix1 4:41cf035db84a 230 ble.setAdvertisingInterval(50);
RedBearLab 0:cffe8ac1bdf0 231
RedBearLab 0:cffe8ac1bdf0 232 ble.addService(uartService);
RedBearLab 0:cffe8ac1bdf0 233
ke_ix1 5:35728098eeae 234 ble.setScanParams(GapScanningParams::SCAN_INTERVAL_MIN,
ke_ix1 5:35728098eeae 235 GapScanningParams::SCAN_WINDOW_MIN,
ke_ix1 5:35728098eeae 236 0);
ke_ix1 5:35728098eeae 237
RedBearLab 0:cffe8ac1bdf0 238 ble.startAdvertising();
RedBearLab 0:cffe8ac1bdf0 239 pc.printf("Advertising Start \r\n");
RedBearLab 0:cffe8ac1bdf0 240
ke_ix1 5:35728098eeae 241 steper.attach(&txStep, 2.0);
ke_ix1 5:35728098eeae 242
RedBearLab 0:cffe8ac1bdf0 243 while(1)
RedBearLab 0:cffe8ac1bdf0 244 {
RedBearLab 0:cffe8ac1bdf0 245 ble.waitForEvent();
RedBearLab 0:cffe8ac1bdf0 246 }
RedBearLab 0:cffe8ac1bdf0 247 }