test

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_UART_HRM1017 by robo 8080

Committer:
nakanishi_tk
Date:
Wed Aug 05 23:58:48 2015 +0000
Revision:
7:4de99a5911ff
Parent:
6:a50b4fd97e1a
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yihui 0:e910d9bb040f 1 /* mbed Microcontroller Library
yihui 0:e910d9bb040f 2 * Copyright (c) 2006-2013 ARM Limited
yihui 0:e910d9bb040f 3 *
yihui 0:e910d9bb040f 4 * Licensed under the Apache License, Version 2.0 (the "License");
yihui 0:e910d9bb040f 5 * you may not use this file except in compliance with the License.
yihui 0:e910d9bb040f 6 * You may obtain a copy of the License at
yihui 0:e910d9bb040f 7 *
yihui 0:e910d9bb040f 8 * http://www.apache.org/licenses/LICENSE-2.0
yihui 0:e910d9bb040f 9 *
yihui 0:e910d9bb040f 10 * Unless required by applicable law or agreed to in writing, software
yihui 0:e910d9bb040f 11 * distributed under the License is distributed on an "AS IS" BASIS,
yihui 0:e910d9bb040f 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
yihui 0:e910d9bb040f 13 * See the License for the specific language governing permissions and
yihui 0:e910d9bb040f 14 * limitations under the License.
yihui 0:e910d9bb040f 15 */
yihui 0:e910d9bb040f 16
yihui 0:e910d9bb040f 17 #include "mbed.h"
Rohit Grover 2:e060367b9024 18 #include "BLEDevice.h"
yihui 0:e910d9bb040f 19
Rohit Grover 2:e060367b9024 20 #define BLE_UUID_NUS_SERVICE 0x0001 /**< The UUID of the Nordic UART Service. */
Rohit Grover 2:e060367b9024 21 #define BLE_UUID_NUS_TX_CHARACTERISTIC 0x0002 /**< The UUID of the TX Characteristic. */
Rohit Grover 2:e060367b9024 22 #define BLE_UUID_NUS_RX_CHARACTERISTIC 0x0003 /**< The UUID of the RX Characteristic. */
yihui 0:e910d9bb040f 23
robo8080 6:a50b4fd97e1a 24 #define NEED_CONSOLE_OUTPUT 0 /* Set this if you need debug messages on the console;
Rohit Grover 2:e060367b9024 25 * it will have an impact on code-size and power consumption. */
yihui 0:e910d9bb040f 26
Rohit Grover 2:e060367b9024 27 #if NEED_CONSOLE_OUTPUT
robo8080 6:a50b4fd97e1a 28 //Serial pc(USBTX, USBRX);
Rohit Grover 2:e060367b9024 29 #define DEBUG(...) { pc.printf(__VA_ARGS__); }
yihui 0:e910d9bb040f 30 #else
Rohit Grover 2:e060367b9024 31 #define DEBUG(...) /* nothing */
Rohit Grover 2:e060367b9024 32 #endif /* #if NEED_CONSOLE_OUTPUT */
yihui 0:e910d9bb040f 33
robo8080 6:a50b4fd97e1a 34 Serial pc(USBTX, USBRX);
Rohit Grover 2:e060367b9024 35 BLEDevice ble;
Rohit Grover 2:e060367b9024 36 DigitalOut led1(LED1);
yihui 0:e910d9bb040f 37
nakanishi_tk 7:4de99a5911ff 38 #define USE_BLE_SERIAL_UUID 0 //BLESerialのUUIDを使う時1にする
nakanishi_tk 7:4de99a5911ff 39 /*#if USE_BLE_SERIAL_UUID
robo8080 6:a50b4fd97e1a 40 // BLESerial
robo8080 6:a50b4fd97e1a 41 const static char DEVICE_NAME[] = "BLESerial";
robo8080 6:a50b4fd97e1a 42 static const uint8_t uart_base_uuid[] = {0x56,0x9a,0x11,0x01,0xb8,0x7F,0x49,0x0c,0x92,0xcb,0x11,0xba,0x5e,0xa5,0x16,0x7c};
robo8080 6:a50b4fd97e1a 43 static const uint8_t uart_tx_uuid[] = {0x56,0x9a,0x20,0x01,0xb8,0x7F,0x49,0x0c,0x92,0xcb,0x11,0xba,0x5e,0xa5,0x16,0x7c};
robo8080 6:a50b4fd97e1a 44 static const uint8_t uart_rx_uuid[] = {0x56,0x9a,0x20,0x00,0xb8,0x7F,0x49,0x0c,0x92,0xcb,0x11,0xba,0x5e,0xa5,0x16,0x7c};
robo8080 6:a50b4fd97e1a 45 static const uint8_t uart_base_uuid_rev[] = {0x7c,0x16,0xa5,0x5e,0xba,0x11,0xcb,0x92,0x0c,0x49,0x7F,0xb8,0x01,0x11,0x9a,0x56};
nakanishi_tk 7:4de99a5911ff 46 #else*/
yihui 0:e910d9bb040f 47 // The Nordic UART Service
robo8080 6:a50b4fd97e1a 48 const static char DEVICE_NAME[] = "mbed HRM1017";
Rohit Grover 2:e060367b9024 49 static const uint8_t uart_base_uuid[] = {0x6e, 0x40, 0x00, 0x01, 0xb5, 0xa3, 0xf3, 0x93, 0xe0, 0xa9, 0xe5,0x0e, 0x24, 0xdc, 0xca, 0x9e};
Rohit Grover 2:e060367b9024 50 static const uint8_t uart_tx_uuid[] = {0x6e, 0x40, 0x00, 0x02, 0xb5, 0xa3, 0xf3, 0x93, 0xe0, 0xa9, 0xe5,0x0e, 0x24, 0xdc, 0xca, 0x9e};
Rohit Grover 2:e060367b9024 51 static const uint8_t uart_rx_uuid[] = {0x6e, 0x40, 0x00, 0x03, 0xb5, 0xa3, 0xf3, 0x93, 0xe0, 0xa9, 0xe5,0x0e, 0x24, 0xdc, 0xca, 0x9e};
Rohit Grover 2:e060367b9024 52 static const uint8_t uart_base_uuid_rev[] = {0x9e, 0xca, 0xdc, 0x24, 0x0e, 0xe5, 0xa9, 0xe0, 0x93, 0xf3, 0xa3, 0xb5, 0x01, 0x00, 0x40, 0x6e};
nakanishi_tk 7:4de99a5911ff 53 //#endif
rgrover1 5:4bc41267a03a 54
nakanishi_tk 7:4de99a5911ff 55 /*static const uint8_t SIZEOF_TX_BUFFER = 21;
nakanishi_tk 7:4de99a5911ff 56 uint8_t thermSCANPayload[SIZEOF_TX_BUFFER] = {0,};// = { 0, 0, 0, 0, 0 };
nakanishi_tk 7:4de99a5911ff 57 GattCharacteristic SCANChar(GattCharacteristic::UUID_SCAN_INTERVAL_WINDOW_CHAR,
nakanishi_tk 7:4de99a5911ff 58 thermSCANPayload, 1, SIZEOF_TX_BUFFER,
nakanishi_tk 7:4de99a5911ff 59 // GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ|
nakanishi_tk 7:4de99a5911ff 60 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE|
nakanishi_tk 7:4de99a5911ff 61 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE
nakanishi_tk 7:4de99a5911ff 62 // GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE
nakanishi_tk 7:4de99a5911ff 63 // GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE
nakanishi_tk 7:4de99a5911ff 64 );*/
robo8080 6:a50b4fd97e1a 65 //static const uint8_t SIZEOF_TX_RX_BUFFER = 128;
nakanishi_tk 7:4de99a5911ff 66 static const uint8_t SIZEOF_TX_RX_BUFFER = 21;
rgrover1 5:4bc41267a03a 67 uint8_t rxPayload[SIZEOF_TX_RX_BUFFER] = {0,};
rgrover1 5:4bc41267a03a 68 uint8_t txPayload[SIZEOF_TX_RX_BUFFER] = {0,};
rgrover1 5:4bc41267a03a 69 GattCharacteristic rxCharacteristic (uart_tx_uuid, rxPayload, 1, SIZEOF_TX_RX_BUFFER,
nakanishi_tk 7:4de99a5911ff 70 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE|
nakanishi_tk 7:4de99a5911ff 71 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
rgrover1 5:4bc41267a03a 72 GattCharacteristic txCharacteristic (uart_rx_uuid, txPayload, 1, SIZEOF_TX_RX_BUFFER, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
nakanishi_tk 7:4de99a5911ff 73 GattCharacteristic *uartChars[] = {&rxCharacteristic, &txCharacteristic/*,&SCANChar*/};
Rohit Grover 2:e060367b9024 74 GattService uartService(uart_base_uuid, uartChars, sizeof(uartChars) / sizeof(GattCharacteristic *));
yihui 0:e910d9bb040f 75
rgrover1 5:4bc41267a03a 76 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
yihui 0:e910d9bb040f 77 {
Rohit Grover 2:e060367b9024 78 DEBUG("Disconnected!\n\r");
robo8080 6:a50b4fd97e1a 79 led1 = 1;
Rohit Grover 2:e060367b9024 80 DEBUG("Restarting the advertising process\n\r");
Rohit Grover 2:e060367b9024 81 ble.startAdvertising();
Rohit Grover 2:e060367b9024 82 }
robo8080 6:a50b4fd97e1a 83 void onConnectionCallback(Gap::Handle_t handle, const Gap::ConnectionParams_t *params)
robo8080 6:a50b4fd97e1a 84 {
robo8080 6:a50b4fd97e1a 85 DEBUG("connected. Got handle %u\r\n", handle);
robo8080 6:a50b4fd97e1a 86 led1 = 0;
robo8080 6:a50b4fd97e1a 87 }
yihui 0:e910d9bb040f 88
rgrover1 5:4bc41267a03a 89 void onDataWritten(uint16_t charHandle, const GattCharacteristicWriteCBParams *params)
yihui 0:e910d9bb040f 90 {
nakanishi_tk 7:4de99a5911ff 91 DEBUG("received handle=%d bytes\n\r", charHandle);
rgrover1 5:4bc41267a03a 92 if (charHandle == rxCharacteristic.getValueAttribute().getHandle()) {
rgrover1 5:4bc41267a03a 93 uint16_t bytesRead = params->len;
rgrover1 5:4bc41267a03a 94 DEBUG("received %u bytes\n\r", bytesRead);
rgrover1 5:4bc41267a03a 95 if (bytesRead < sizeof(rxPayload)) {
rgrover1 5:4bc41267a03a 96 memcpy(rxPayload, params->data, bytesRead);
rgrover1 5:4bc41267a03a 97 rxPayload[bytesRead] = 0;
rgrover1 5:4bc41267a03a 98 }
rgrover1 5:4bc41267a03a 99 DEBUG("ECHO: %s\n\r", (char *)rxPayload);
robo8080 6:a50b4fd97e1a 100 #if NEED_CONSOLE_OUTPUT
rgrover1 5:4bc41267a03a 101 ble.updateCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), rxPayload, bytesRead);
robo8080 6:a50b4fd97e1a 102 #else
nakanishi_tk 7:4de99a5911ff 103 /*
robo8080 6:a50b4fd97e1a 104 for(int i = 0; i < bytesRead; i++) {
robo8080 6:a50b4fd97e1a 105 pc.putc(rxPayload[i]);
robo8080 6:a50b4fd97e1a 106 }
nakanishi_tk 7:4de99a5911ff 107 */
nakanishi_tk 7:4de99a5911ff 108 switch( bytesRead ){
nakanishi_tk 7:4de99a5911ff 109 case 1:
nakanishi_tk 7:4de99a5911ff 110 pc.printf("%c",rxPayload[0]);
nakanishi_tk 7:4de99a5911ff 111 case 2:
nakanishi_tk 7:4de99a5911ff 112 pc.printf("%c%c",rxPayload[0],rxPayload[1]);
nakanishi_tk 7:4de99a5911ff 113 case 3:
nakanishi_tk 7:4de99a5911ff 114 pc.printf("%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2]);
nakanishi_tk 7:4de99a5911ff 115 case 4:
nakanishi_tk 7:4de99a5911ff 116 pc.printf("%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3]);
nakanishi_tk 7:4de99a5911ff 117 case 5:
nakanishi_tk 7:4de99a5911ff 118 pc.printf("%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4]);
nakanishi_tk 7:4de99a5911ff 119 case 6:
nakanishi_tk 7:4de99a5911ff 120 pc.printf("%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5]);
nakanishi_tk 7:4de99a5911ff 121 case 7:
nakanishi_tk 7:4de99a5911ff 122 pc.printf("%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6]);
nakanishi_tk 7:4de99a5911ff 123 case 8:
nakanishi_tk 7:4de99a5911ff 124 pc.printf("%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7]);
nakanishi_tk 7:4de99a5911ff 125 case 9:
nakanishi_tk 7:4de99a5911ff 126 pc.printf("%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8]);
nakanishi_tk 7:4de99a5911ff 127 case 10:
nakanishi_tk 7:4de99a5911ff 128 pc.printf("%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9]);
nakanishi_tk 7:4de99a5911ff 129 case 11:
nakanishi_tk 7:4de99a5911ff 130 pc.printf("%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10]);
nakanishi_tk 7:4de99a5911ff 131 case 12:
nakanishi_tk 7:4de99a5911ff 132 pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11]);
nakanishi_tk 7:4de99a5911ff 133 case 13:
nakanishi_tk 7:4de99a5911ff 134 pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12]);
nakanishi_tk 7:4de99a5911ff 135 case 14:
nakanishi_tk 7:4de99a5911ff 136 pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13]);
nakanishi_tk 7:4de99a5911ff 137 case 15:
nakanishi_tk 7:4de99a5911ff 138 pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14]);
nakanishi_tk 7:4de99a5911ff 139 case 16:
nakanishi_tk 7:4de99a5911ff 140 pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14],rxPayload[15]);
nakanishi_tk 7:4de99a5911ff 141 case 17:
nakanishi_tk 7:4de99a5911ff 142 pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14],rxPayload[15],rxPayload[16]);
nakanishi_tk 7:4de99a5911ff 143 case 18:
nakanishi_tk 7:4de99a5911ff 144 pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14],rxPayload[15],rxPayload[16],rxPayload[17]);
nakanishi_tk 7:4de99a5911ff 145 case 19:
nakanishi_tk 7:4de99a5911ff 146 pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14],rxPayload[15],rxPayload[16],rxPayload[17],rxPayload[18]);
nakanishi_tk 7:4de99a5911ff 147 case 20:
nakanishi_tk 7:4de99a5911ff 148 pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14],rxPayload[15],rxPayload[16],rxPayload[17],rxPayload[18],rxPayload[19]);
nakanishi_tk 7:4de99a5911ff 149 }
robo8080 6:a50b4fd97e1a 150 #endif //NEED_CONSOLE_OUTPUT
yihui 0:e910d9bb040f 151 }
Rohit Grover 2:e060367b9024 152 }
yihui 0:e910d9bb040f 153
robo8080 6:a50b4fd97e1a 154 static volatile bool uartTxUpdatesEnable = false;
robo8080 6:a50b4fd97e1a 155 void onUpdatesEnabled(uint16_t charHandle)
robo8080 6:a50b4fd97e1a 156 {
robo8080 6:a50b4fd97e1a 157 DEBUG("onUpdatesEnabled handle %u!\n\r", charHandle);
robo8080 6:a50b4fd97e1a 158 if (charHandle == txCharacteristic.getValueAttribute().getHandle()) {
robo8080 6:a50b4fd97e1a 159 DEBUG("uartRxCharacteristic!\n\r");
robo8080 6:a50b4fd97e1a 160 uartTxUpdatesEnable = true;
robo8080 6:a50b4fd97e1a 161 }
robo8080 6:a50b4fd97e1a 162 }
robo8080 6:a50b4fd97e1a 163 void onUpdatesDisabled(uint16_t charHandle)
robo8080 6:a50b4fd97e1a 164 {
robo8080 6:a50b4fd97e1a 165 DEBUG("onUpdatesDisabled handle %u!\n\r", charHandle);
robo8080 6:a50b4fd97e1a 166 if (charHandle == txCharacteristic.getValueAttribute().getHandle()) {
robo8080 6:a50b4fd97e1a 167 DEBUG("uartRxCharacteristic!\n\r");
robo8080 6:a50b4fd97e1a 168 uartTxUpdatesEnable = false;
robo8080 6:a50b4fd97e1a 169 }
robo8080 6:a50b4fd97e1a 170 }
robo8080 6:a50b4fd97e1a 171 static volatile bool triggerUartPolling = false;
nakanishi_tk 7:4de99a5911ff 172
nakanishi_tk 7:4de99a5911ff 173 static int eventcount = 0;
nakanishi_tk 7:4de99a5911ff 174
Rohit Grover 2:e060367b9024 175 void periodicCallback(void)
Rohit Grover 2:e060367b9024 176 {
robo8080 6:a50b4fd97e1a 177 // led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
robo8080 6:a50b4fd97e1a 178 /* Note that the periodicCallback() executes in interrupt context, so it is safer to do
robo8080 6:a50b4fd97e1a 179 * heavy-weight sensor polling from the main thread. */
robo8080 6:a50b4fd97e1a 180 triggerUartPolling = true;
nakanishi_tk 7:4de99a5911ff 181 eventcount++;
Rohit Grover 2:e060367b9024 182 }
yihui 0:e910d9bb040f 183
yihui 0:e910d9bb040f 184 int main(void)
yihui 0:e910d9bb040f 185 {
Rohit Grover 2:e060367b9024 186 led1 = 1;
nakanishi_tk 7:4de99a5911ff 187 uint16_t bytesRead = 0;
Rohit Grover 2:e060367b9024 188 Ticker ticker;
nakanishi_tk 7:4de99a5911ff 189 ticker.attach(periodicCallback, 0.05 ); //50ms
nakanishi_tk 7:4de99a5911ff 190
nakanishi_tk 7:4de99a5911ff 191 pc.baud(38400);
nakanishi_tk 7:4de99a5911ff 192
nakanishi_tk 7:4de99a5911ff 193 #if NEED_CONSOLE_OUTPUT
nakanishi_tk 7:4de99a5911ff 194 // pc.baud(38400);
nakanishi_tk 7:4de99a5911ff 195 #endif
yihui 0:e910d9bb040f 196
Rohit Grover 2:e060367b9024 197 DEBUG("Initialising the nRF51822\n\r");
Rohit Grover 2:e060367b9024 198 ble.init();
robo8080 6:a50b4fd97e1a 199 ble.setDeviceName((uint8_t *)DEVICE_NAME);
robo8080 6:a50b4fd97e1a 200 ble.onConnection(onConnectionCallback);
Rohit Grover 2:e060367b9024 201 ble.onDisconnection(disconnectionCallback);
Rohit Grover 2:e060367b9024 202 ble.onDataWritten(onDataWritten);
robo8080 6:a50b4fd97e1a 203 ble.onUpdatesEnabled(onUpdatesEnabled);
robo8080 6:a50b4fd97e1a 204 ble.onUpdatesDisabled(onUpdatesDisabled);
yihui 0:e910d9bb040f 205
Rohit Grover 2:e060367b9024 206 /* setup advertising */
Rohit Grover 2:e060367b9024 207 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
Rohit Grover 2:e060367b9024 208 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
robo8080 6:a50b4fd97e1a 209 #if USE_BLE_SERIAL_UUID
Rohit Grover 2:e060367b9024 210 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
robo8080 6:a50b4fd97e1a 211 (const uint8_t *)"BLESerial", sizeof("BLESerial") - 1);
robo8080 6:a50b4fd97e1a 212 #else
robo8080 6:a50b4fd97e1a 213 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
robo8080 6:a50b4fd97e1a 214 (const uint8_t *)"HRM1017", sizeof("HRM1017") - 1);
robo8080 6:a50b4fd97e1a 215 #endif
Rohit Grover 2:e060367b9024 216 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
Rohit Grover 2:e060367b9024 217 (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid));
nakanishi_tk 7:4de99a5911ff 218 ble.setAdvertisingInterval(80); /* 100ms; in multiples of 0.625ms. */
Rohit Grover 2:e060367b9024 219 ble.startAdvertising();
yihui 0:e910d9bb040f 220
Rohit Grover 2:e060367b9024 221 ble.addService(uartService);
nakanishi_tk 7:4de99a5911ff 222
Rohit Grover 2:e060367b9024 223 while (true) {
robo8080 6:a50b4fd97e1a 224 if (triggerUartPolling) {
nakanishi_tk 7:4de99a5911ff 225 // triggerUartPolling = false;
robo8080 6:a50b4fd97e1a 226 /* Do blocking calls or whatever is necessary for sensor polling. */
robo8080 6:a50b4fd97e1a 227 if(ble.getGapState().connected) {
nakanishi_tk 7:4de99a5911ff 228 //#if !NEED_CONSOLE_OUTPUT
robo8080 6:a50b4fd97e1a 229 if(uartTxUpdatesEnable) {
nakanishi_tk 7:4de99a5911ff 230 bytesRead = 0;
nakanishi_tk 7:4de99a5911ff 231 eventcount = 0;
nakanishi_tk 7:4de99a5911ff 232 while( bytesRead < sizeof(txPayload) - 1 ) {
nakanishi_tk 7:4de99a5911ff 233 if ( bytesRead < sizeof(txPayload) - 1) {
nakanishi_tk 7:4de99a5911ff 234 if ( pc.readable() ){
nakanishi_tk 7:4de99a5911ff 235 txPayload[bytesRead++] = pc.getc();
nakanishi_tk 7:4de99a5911ff 236 /* } else if ( bytesRead > 0 ) {
nakanishi_tk 7:4de99a5911ff 237 ble.waitForEvent();*/
nakanishi_tk 7:4de99a5911ff 238 }
robo8080 6:a50b4fd97e1a 239 } else {
robo8080 6:a50b4fd97e1a 240 break;
robo8080 6:a50b4fd97e1a 241 }
nakanishi_tk 7:4de99a5911ff 242 if ( eventcount > 10 ){
nakanishi_tk 7:4de99a5911ff 243 break;
nakanishi_tk 7:4de99a5911ff 244 }
robo8080 6:a50b4fd97e1a 245 }
nakanishi_tk 7:4de99a5911ff 246 if ( bytesRead <= sizeof(txPayload) - 1 ) {
robo8080 6:a50b4fd97e1a 247 ble.updateCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), (uint8_t*)txPayload, bytesRead);
robo8080 6:a50b4fd97e1a 248 }
robo8080 6:a50b4fd97e1a 249 }
nakanishi_tk 7:4de99a5911ff 250 //#endif
robo8080 6:a50b4fd97e1a 251 }
robo8080 6:a50b4fd97e1a 252 } else {
robo8080 6:a50b4fd97e1a 253 ble.waitForEvent();
robo8080 6:a50b4fd97e1a 254 }
yihui 0:e910d9bb040f 255 }
yihui 0:e910d9bb040f 256 }