DesignForAmputee hw 5 project

Dependencies:   mbed BLE_API nRF51822

Committer:
pgao
Date:
Thu Nov 06 05:29:21 2014 +0000
Revision:
1:dbfe14952cdc
Parent:
0:6a0d0bc31c4c
Child:
3:436ef162bf2d
asdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jstroud 0:6a0d0bc31c4c 1 #include "mbed.h"
pgao 1:dbfe14952cdc 2 #include "BLEDevice.h"
pgao 1:dbfe14952cdc 3
pgao 1:dbfe14952cdc 4 #include "UARTService.h"
pgao 1:dbfe14952cdc 5
pgao 1:dbfe14952cdc 6 #define NEED_CONSOLE_OUTPUT 0 /* Set this if you need debug messages on the console;
pgao 1:dbfe14952cdc 7 * it will have an impact on code-size and power consumption. */
pgao 1:dbfe14952cdc 8
pgao 1:dbfe14952cdc 9 #if NEED_CONSOLE_OUTPUT
pgao 1:dbfe14952cdc 10 #define DEBUG(...) { printf(__VA_ARGS__); }
pgao 1:dbfe14952cdc 11 #else
pgao 1:dbfe14952cdc 12 #define DEBUG(...) /* nothing */
pgao 1:dbfe14952cdc 13 #endif /* #if NEED_CONSOLE_OUTPUT */
pgao 1:dbfe14952cdc 14
pgao 1:dbfe14952cdc 15 BLEDevice ble;
pgao 1:dbfe14952cdc 16 DigitalOut led1(LED1);
pgao 1:dbfe14952cdc 17
pgao 1:dbfe14952cdc 18 UARTService *uartServicePtr;
pgao 1:dbfe14952cdc 19
pgao 1:dbfe14952cdc 20 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
pgao 1:dbfe14952cdc 21 {
pgao 1:dbfe14952cdc 22 DEBUG("Disconnected!\n\r");
pgao 1:dbfe14952cdc 23 DEBUG("Restarting the advertising process\n\r");
pgao 1:dbfe14952cdc 24 ble.startAdvertising();
pgao 1:dbfe14952cdc 25 }
pgao 1:dbfe14952cdc 26
pgao 1:dbfe14952cdc 27 void onDataWritten(const GattCharacteristicWriteCBParams *params)
pgao 1:dbfe14952cdc 28 {
pgao 1:dbfe14952cdc 29 if ((uartServicePtr != NULL) && (params->charHandle == uartServicePtr->getTXCharacteristicHandle())) {
pgao 1:dbfe14952cdc 30 uint16_t bytesRead = params->len;
pgao 1:dbfe14952cdc 31 DEBUG("received %u bytes\n\r", bytesRead);
pgao 1:dbfe14952cdc 32 ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead);
jstroud 0:6a0d0bc31c4c 33 }
jstroud 0:6a0d0bc31c4c 34 }
pgao 1:dbfe14952cdc 35
pgao 1:dbfe14952cdc 36 void periodicCallback(void)
pgao 1:dbfe14952cdc 37 {
pgao 1:dbfe14952cdc 38 led1 = !led1;
pgao 1:dbfe14952cdc 39 }
pgao 1:dbfe14952cdc 40
pgao 1:dbfe14952cdc 41 int main(void)
pgao 1:dbfe14952cdc 42 {
pgao 1:dbfe14952cdc 43 led1 = 1;
pgao 1:dbfe14952cdc 44 Ticker ticker;
pgao 1:dbfe14952cdc 45 ticker.attach(periodicCallback, 1);
pgao 1:dbfe14952cdc 46
pgao 1:dbfe14952cdc 47 DEBUG("Initialising the nRF51822\n\r");
pgao 1:dbfe14952cdc 48 ble.init();
pgao 1:dbfe14952cdc 49 ble.onDisconnection(disconnectionCallback);
pgao 1:dbfe14952cdc 50 ble.onDataWritten(onDataWritten);
pgao 1:dbfe14952cdc 51
pgao 1:dbfe14952cdc 52 /* setup advertising */
pgao 1:dbfe14952cdc 53 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
pgao 1:dbfe14952cdc 54 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
pgao 1:dbfe14952cdc 55 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
pgao 1:dbfe14952cdc 56 (const uint8_t *)"pgao", sizeof("pgao") - 1);
pgao 1:dbfe14952cdc 57 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
pgao 1:dbfe14952cdc 58 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
pgao 1:dbfe14952cdc 59
pgao 1:dbfe14952cdc 60 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
pgao 1:dbfe14952cdc 61 ble.startAdvertising();
pgao 1:dbfe14952cdc 62
pgao 1:dbfe14952cdc 63 UARTService uartService(ble);
pgao 1:dbfe14952cdc 64 uartServicePtr = &uartService;
pgao 1:dbfe14952cdc 65
pgao 1:dbfe14952cdc 66 while (true) {
pgao 1:dbfe14952cdc 67 ble.waitForEvent();
pgao 1:dbfe14952cdc 68 }
pgao 1:dbfe14952cdc 69 }
pgao 1:dbfe14952cdc 70