Application running on nRF51822 PCA10001
Dependencies: BLE_API MMA8652 nRF51822 mbed-src
BuddiService.cpp
- Committer:
- rosterloh84
- Date:
- 2014-10-14
- Revision:
- 6:2fb6cf3c9047
- Parent:
- 4:630f1560a0f3
File content as of revision 6:2fb6cf3c9047:
#include "mbed.h" #include "BuddiService.h" #include "Logger.h" #include "Configuration.h" namespace Nudge { // Buddi base UUID: 92D7DC20-xxxx-4DF8-84B1-AD8AF6E1EA4A #define buddi_UUID(x) {0x92, 0xD7, 0xDC, 0x20, (((x) & 0xFF00) >> 8), ((x) & 0xFF), 0x4D, 0xF8, 0x82, 0xB1, 0xAD, 0x8A, 0xF6, 0xE1, 0xEA, 0x4A} // UUID byte arrays static const uint8_t buddiServiceUUID[] = buddi_UUID(0xBA55); static const uint8_t commandUUID[16] = buddi_UUID(0xBB01); static const uint8_t notificationUUID[] = buddi_UUID(0xBB02); // Storage for the value of the characteristics typedef struct { uint8_t module; uint8_t opcode; uint8_t data[15]; } Command_t; static Command_t commandPayload; //uint8_t commandPayload[17] = {0,}; // Other things needed for operation static BLEDevice* ble; static GattCharacteristic commandCharacteristic(commandUUID, (uint8_t *)&commandPayload, sizeof(Command_t), //1, sizeof(Command_t), //8, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); uint8_t notificationPayload[8] = {0,}; static GattCharacteristic notificationCharacteristic(notificationUUID, notificationPayload, 1, 8, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); static GattCharacteristic *allChars[] = {&commandCharacteristic, ¬ificationCharacteristic}; static GattService buddiService(buddiServiceUUID, allChars, sizeof(allChars) / sizeof(GattCharacteristic *)); PwmOut ledr(p22); /* Red LED on PCA10000 */ PwmOut ledg(p23); /* Green LED on PCA10000 */ PwmOut ledb(p21); /* Blue LED on PCA10000 */ void init(BLEDevice &bleDevice) { ledr = 1.0f; ledg = 1.0f; ledb = 1.0f; ble = &bleDevice; ble->addService(buddiService); DEBUG("Added buddi service\r\n"); } const uint8_t *getServiceUUIDp() { return buddiServiceUUID; } void setLEDValue(uint8_t led, uint8_t value) { float val = ((float)value)/255; DEBUG("Setting LED %u to %1.3f\r\n", led, val); switch(led) { case 0: ledg = val; break; case 1: ledr = val; break; case 2: ledb = val; break; default: DEBUG("Unknown LED %u selected\r\n", led); break; } } void handleDataWritten(uint16_t handle, const GattCharacteristicWriteCBParams *params) { if (!ble) { return; } if (handle == commandCharacteristic.getValueAttribute().getHandle()) { //uint16_t len = sizeof(commandPayload); //ble->readCharacteristicValue(handle, (uint8_t *) &commandPayload, &len); if (params->len != sizeof(Command_t)) { DEBUG("invalid write into fileInfo characteristic\r\n"); return; } memcpy(&commandPayload, params->data, params->len); DEBUG("RX: MOD: 0x%X OP: 0x%X D0: 0x%X D1: 0x%X", commandPayload.module, commandPayload.opcode, commandPayload.data[0], commandPayload.data[1]); //ble->updateCharacteristicValue(notificationCharacteristic.getValueAttribute().getHandle(), commandPayload, bytesRead); switch(commandPayload.module) { case MODULE_NEO_PIXEL: setLEDValue(0, commandPayload.data[2]); setLEDValue(1, commandPayload.data[3]); setLEDValue(2, commandPayload.data[4]); break; default: DEBUG("Module %u not implemented yet", commandPayload.module); break; } } else { DEBUG("Got data on unexpected characteristic handle %u!\r\n", handle); } } } // namespace nudge