Connect the BLE_UART Console to a PC USB/Serial Console. Data written to PC console is sent over BLE UART Data received from BLE UART is displayed in PC console
Dependencies: BLE_API mbed nRF51822
Fork of BLE_LED_Controller by
Diff: main.cpp
- Revision:
- 13:291a8f177400
- Parent:
- 12:36a9f01cfa0a
- Child:
- 14:8ff3bfb6b19d
--- a/main.cpp Wed Dec 17 19:46:22 2014 +0000 +++ b/main.cpp Wed Dec 17 22:43:40 2014 +0000 @@ -19,7 +19,7 @@ #include "UARTService.h" -#define NEED_CONSOLE_OUTPUT 0 /* Set this if you need debug messages on the console; +#define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console; * it will have an impact on code-size and power consumption. */ #if NEED_CONSOLE_OUTPUT @@ -28,24 +28,39 @@ #define DEBUG(...) /* nothing */ #endif /* #if NEED_CONSOLE_OUTPUT */ -BLEDevice ble; -DigitalOut led1(LED1); +#define LED2OFF "led2 off" +#define LED2ON "led2 on" + + +//char rxPayload[CMD_SIZE]; + +BLEDevice ble; // Create Bluetooth object +DigitalOut led1(LED1); // Set the pin attached to LED1 as an output +DigitalOut led2(LED2); // Set the pin attached to LED2 as an output UARTService *uartServicePtr; +/* BLE disconnected callback */ void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) { DEBUG("Disconnected!\n\r"); DEBUG("Restarting the advertising process\n\r"); ble.startAdvertising(); } - +/* BLE UART data received callback */ void onDataWritten(const GattCharacteristicWriteCBParams *params) { - if ((uartServicePtr != NULL) && (params->charHandle == uartServicePtr->getTXCharacteristicHandle())) { + if ((uartServicePtr != NULL) && (params->charHandle == uartServicePtr->getTXCharacteristicHandle())) { //If characters received over BLE uint16_t bytesRead = params->len; DEBUG("received %u bytes\n\r", bytesRead); - ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead); + //strncpy(rxPayload, (const char *)params->data, bytesRead); + DEBUG("Received string: '"); + DEBUG((const char *)params->data); //Note the size of data expands to the largest string received. Need to use bytesRead to resize. + DEBUG("'\n\r"); + if (!strncmp(LED2ON,(const char *)params->data,bytesRead)) led2 = 1; // If the received and command string are equal turn led2 on. Note strcmp returns 0 if strings are equal + if (!strncmp(LED2OFF,(const char *)params->data,bytesRead)) led2 = 0; // If the received and command string are equal turn led2 off. + //Toggle LED2 when data received + ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead); // Echo received characters back over BLE } } @@ -58,29 +73,30 @@ int main(void) { led1 = 1; + led2 = 0; Ticker ticker; // Create period timer ticker.attach(periodicCallback, 1); // Attach ticker callback function with a period of 1 second DEBUG("Initialising the nRF51822\n\r"); ble.init(); - ble.onDisconnection(disconnectionCallback); - ble.onDataWritten(onDataWritten); + ble.onDisconnection(disconnectionCallback); // Define callback function for BLE disconnection event + ble.onDataWritten(onDataWritten); // Define callback function for BLE Data received event /* setup advertising */ - ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); + ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); // Indicate that Legacy Bluetooth in not supported ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); - ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(1000)); - ble.startAdvertising(); + ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(1000)); // Set advertising interval to 1 second + ble.startAdvertising(); // Start advertising - UARTService uartService(ble); - uartServicePtr = &uartService; + UARTService uartService(ble); // Create BLE UART service + uartServicePtr = &uartService; // Initalise pointer to point to UART Service while (true) { - ble.waitForEvent(); + ble.waitForEvent(); // Wait for BLE events } }