Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Committer:
kris@kris-X682X
Date:
Fri Jun 14 10:24:57 2019 +0200
Revision:
10:d845189d146e
Parent:
9:92d861703f96
Child:
11:d6ed1437c2ee
WS2801 working, fancy lightshows

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);
kris@kris-X682X 7:9cda1b0f25ae 34 // serviceAdded = true;
krissl 1:9fc54848a198 35 }
krissl 1:9fc54848a198 36
krissl 1:9fc54848a198 37
krissl 1:9fc54848a198 38 /**
krissl 1:9fc54848a198 39 * @brief Update temperature characteristic.
krissl 1:9fc54848a198 40 * @param newTemperatureVal New temperature measurement.
krissl 1:9fc54848a198 41 */
kris@kris-X682X 10:d845189d146e 42 // void updateColor(const ColorType_t newColorVal)
kris@kris-X682X 10:d845189d146e 43 // {
kris@kris-X682X 10:d845189d146e 44 // color = ( *((int*)newColorVal ) );
kris@kris-X682X 10:d845189d146e 45 // ble.gattServer().write(colorCharacteristic.getValueHandle(), (uint8_t *) &color, sizeof(ColorType_t));
kris@kris-X682X 10:d845189d146e 46 // }
kris@kris-X682X 6:ee9c86f06eae 47
kris@kris-X682X 6:ee9c86f06eae 48 virtual ~ColorService() {
kris@kris-X682X 6:ee9c86f06eae 49 printf("[PERIPHERAL]\t Destructing ColorService");
kris@kris-X682X 6:ee9c86f06eae 50 }
kris@kris-X682X 6:ee9c86f06eae 51
krissl 3:f594022fe519 52 virtual void onDataWritten(const GattWriteCallbackParams *writeParams) {
krissl 3:f594022fe519 53 uint16_t handle = writeParams->handle;
kris@kris-X682X 6:ee9c86f06eae 54 printf("You wrote some data... But for which char? \r\n");
kris@kris-X682X 6:ee9c86f06eae 55 printf("%d == %d", handle, colorCharacteristic.getValueHandle());//colorCharacteristic.getValueHandle());
kris@kris-X682X 10:d845189d146e 56 if(handle == colorCharacteristic.getValueHandle()){
kris@kris-X682X 9:92d861703f96 57 printf("[PERIPHERAL]\t You wrote a color! \r\n");
kris@kris-X682X 10:d845189d146e 58 printf("[PERIPHERAL]\t The value should be an integer.\r\n");
kris@kris-X682X 10:d845189d146e 59 color = (unsigned char)writeParams->data[0] << 16 | writeParams->data[1] << 8 | writeParams->data[2];
kris@kris-X682X 10:d845189d146e 60 printf("[PERIPHERAL]\t Setting color %06X\n\r", color);
kris@kris-X682X 10:d845189d146e 61
kris@kris-X682X 10:d845189d146e 62 MyStripSingleton::getInstance()->ambientColor = color;
kris@kris-X682X 10:d845189d146e 63 MyStripSingleton::getInstance()->solidColor(color);
krissl 3:f594022fe519 64 }
kris@kris-X682X 9:92d861703f96 65 printf("[PERIPHERAL]\t Did that work?\n\r");
krissl 3:f594022fe519 66 }
krissl 1:9fc54848a198 67 private:
krissl 1:9fc54848a198 68 BLE& ble;
krissl 1:9fc54848a198 69 ColorType_t color;
krissl 1:9fc54848a198 70 ReadWriteGattCharacteristic<ColorType_t> colorCharacteristic;
krissl 1:9fc54848a198 71 };
krissl 1:9fc54848a198 72 #endif /* #ifndef __BLE_COLOR_SERVICE_H__*/