Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Committer:
kris@kris-X682X
Date:
Thu Jun 20 13:20:24 2019 +0200
Revision:
11:d6ed1437c2ee
Parent:
10:d845189d146e
Refactored

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kris@kris-X682X 6:ee9c86f06eae 1 #ifndef __BLE_COLOR_SERVICE_H__
krissl 1:9fc54848a198 2 #define __BLE_COLOR_SERVICE_H__
krissl 1:9fc54848a198 3
krissl 1:9fc54848a198 4 #include "ble/BLE.h"
krissl 1:9fc54848a198 5 #include "CustomUUIDs.h"
kris@kris-X682X 10:d845189d146e 6 #include "MyStripSingleton.h"
kris@kris-X682X 9:92d861703f96 7
krissl 3:f594022fe519 8
krissl 1:9fc54848a198 9 class ColorService {
kris@kris-X682X 6:ee9c86f06eae 10 public:
krissl 1:9fc54848a198 11 /**
krissl 1:9fc54848a198 12 * @brief ColorService constructor.
krissl 1:9fc54848a198 13 * @param ble Reference to BLE device.
krissl 1:9fc54848a198 14 */
kris@kris-X682X 10:d845189d146e 15 typedef uint32_t ColorType_t;
krissl 1:9fc54848a198 16 ColorService(BLE& _ble) :
kris@kris-X682X 10:d845189d146e 17 ble(_ble),
kris@kris-X682X 10:d845189d146e 18 colorCharacteristic((UUID)CustomUUIDs::UUID_COLOR_CHAR, &color)
krissl 1:9fc54848a198 19 {
krissl 1:9fc54848a198 20 static bool serviceAdded = false; /* We should only ever need to add the information service once. */
krissl 1:9fc54848a198 21 if (serviceAdded) {
krissl 1:9fc54848a198 22 return;
krissl 1:9fc54848a198 23 }
kris@kris-X682X 6:ee9c86f06eae 24 printf("[PERIPHERAL] Adding service.. \r\n");
krissl 1:9fc54848a198 25 GattCharacteristic *charTable[] = { &colorCharacteristic };
krissl 1:9fc54848a198 26
krissl 3:f594022fe519 27 GattService colorService(
kris@kris-X682X 10:d845189d146e 28 CustomUUIDs::UUID_COLOR_SERVICE,
kris@kris-X682X 10:d845189d146e 29 charTable,
kris@kris-X682X 10:d845189d146e 30 sizeof(charTable) / sizeof(GattCharacteristic *));
krissl 3:f594022fe519 31 ble.gattServer().addService(colorService);
krissl 1:9fc54848a198 32
kris@kris-X682X 6:ee9c86f06eae 33 ble.gattServer().onDataWritten(this, &ColorService::onDataWritten);
krissl 1:9fc54848a198 34 }
krissl 1:9fc54848a198 35
kris@kris-X682X 6:ee9c86f06eae 36 virtual ~ColorService() {
kris@kris-X682X 6:ee9c86f06eae 37 printf("[PERIPHERAL]\t Destructing ColorService");
kris@kris-X682X 6:ee9c86f06eae 38 }
kris@kris-X682X 6:ee9c86f06eae 39
krissl 3:f594022fe519 40 virtual void onDataWritten(const GattWriteCallbackParams *writeParams) {
krissl 3:f594022fe519 41 uint16_t handle = writeParams->handle;
kris@kris-X682X 6:ee9c86f06eae 42 printf("You wrote some data... But for which char? \r\n");
kris@kris-X682X 6:ee9c86f06eae 43 printf("%d == %d", handle, colorCharacteristic.getValueHandle());//colorCharacteristic.getValueHandle());
kris@kris-X682X 10:d845189d146e 44 if(handle == colorCharacteristic.getValueHandle()){
kris@kris-X682X 9:92d861703f96 45 printf("[PERIPHERAL]\t You wrote a color! \r\n");
kris@kris-X682X 10:d845189d146e 46 printf("[PERIPHERAL]\t The value should be an integer.\r\n");
kris@kris-X682X 10:d845189d146e 47 color = (unsigned char)writeParams->data[0] << 16 | writeParams->data[1] << 8 | writeParams->data[2];
kris@kris-X682X 10:d845189d146e 48 printf("[PERIPHERAL]\t Setting color %06X\n\r", color);
kris@kris-X682X 10:d845189d146e 49
kris@kris-X682X 10:d845189d146e 50 MyStripSingleton::getInstance()->ambientColor = color;
kris@kris-X682X 10:d845189d146e 51 MyStripSingleton::getInstance()->solidColor(color);
krissl 3:f594022fe519 52 }
kris@kris-X682X 9:92d861703f96 53 printf("[PERIPHERAL]\t Did that work?\n\r");
krissl 3:f594022fe519 54 }
krissl 1:9fc54848a198 55 private:
krissl 1:9fc54848a198 56 BLE& ble;
krissl 1:9fc54848a198 57 ColorType_t color;
krissl 1:9fc54848a198 58 ReadWriteGattCharacteristic<ColorType_t> colorCharacteristic;
krissl 1:9fc54848a198 59 };
krissl 1:9fc54848a198 60 #endif /* #ifndef __BLE_COLOR_SERVICE_H__*/