Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Committer:
kris@kris-X682X
Date:
Tue May 21 13:57:27 2019 +0200
Revision:
8:369b80cef5ae
Parent:
7:9cda1b0f25ae
Child:
9:92d861703f96
Removed WS2801

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 6:ee9c86f06eae 6 #define STRIP_LENGTH 20
krissl 3:f594022fe519 7
krissl 1:9fc54848a198 8 class ColorService {
kris@kris-X682X 6:ee9c86f06eae 9 public:
krissl 1:9fc54848a198 10 /**
krissl 1:9fc54848a198 11 * @brief ColorService constructor.
krissl 1:9fc54848a198 12 * @param ble Reference to BLE device.
krissl 1:9fc54848a198 13 */
kris@kris-X682X 6:ee9c86f06eae 14
kris@kris-X682X 6:ee9c86f06eae 15 typedef int ColorType_t[STRIP_LENGTH * 4];
krissl 1:9fc54848a198 16 ColorService(BLE& _ble) :
kris@kris-X682X 6:ee9c86f06eae 17 ble(_ble),
kris@kris-X682X 6:ee9c86f06eae 18 mystrip(Adafruit_WS2801(STRIP_LENGTH, p26,p27, WS2801_RGB)),
kris@kris-X682X 6:ee9c86f06eae 19 colorCharacteristic((UUID)CustomUUIDs::UUID_COLOR_CHAR, &color)
krissl 1:9fc54848a198 20 {
krissl 1:9fc54848a198 21 static bool serviceAdded = false; /* We should only ever need to add the information service once. */
krissl 1:9fc54848a198 22 if (serviceAdded) {
krissl 1:9fc54848a198 23 return;
krissl 1:9fc54848a198 24 }
kris@kris-X682X 6:ee9c86f06eae 25 printf("[PERIPHERAL] Adding service.. \r\n");
krissl 1:9fc54848a198 26 GattCharacteristic *charTable[] = { &colorCharacteristic };
krissl 1:9fc54848a198 27
krissl 3:f594022fe519 28 GattService colorService(
krissl 1:9fc54848a198 29 CustomUUIDs::UUID_COLOR_SERVICE,
kris@kris-X682X 6:ee9c86f06eae 30 charTable,
krissl 1:9fc54848a198 31 sizeof(charTable) / sizeof(GattCharacteristic *));
krissl 3:f594022fe519 32 ble.gattServer().addService(colorService);
krissl 1:9fc54848a198 33
kris@kris-X682X 6:ee9c86f06eae 34 ble.gattServer().onDataWritten(this, &ColorService::onDataWritten);
kris@kris-X682X 7:9cda1b0f25ae 35 // serviceAdded = true;
krissl 1:9fc54848a198 36 }
krissl 1:9fc54848a198 37
krissl 1:9fc54848a198 38
krissl 1:9fc54848a198 39 /**
krissl 1:9fc54848a198 40 * @brief Update temperature characteristic.
krissl 1:9fc54848a198 41 * @param newTemperatureVal New temperature measurement.
krissl 1:9fc54848a198 42 */
kris@kris-X682X 6:ee9c86f06eae 43 void updateColor(const ColorType_t newColorVal)
krissl 1:9fc54848a198 44 {
krissl 3:f594022fe519 45 for (int i = 0; i < STRIP_LENGTH; i++) {
kris@kris-X682X 6:ee9c86f06eae 46 printf("Index: %d, val %d \r\n", i, *((int*)newColorVal + i));
krissl 3:f594022fe519 47 color[i] = ( *((int*)newColorVal + i) );
krissl 3:f594022fe519 48 }
krissl 3:f594022fe519 49
krissl 1:9fc54848a198 50 ble.gattServer().write(colorCharacteristic.getValueHandle(), (uint8_t *) &color, sizeof(ColorType_t));
krissl 1:9fc54848a198 51 }
kris@kris-X682X 6:ee9c86f06eae 52
kris@kris-X682X 6:ee9c86f06eae 53 virtual ~ColorService() {
kris@kris-X682X 6:ee9c86f06eae 54 printf("[PERIPHERAL]\t Destructing ColorService");
kris@kris-X682X 6:ee9c86f06eae 55 }
kris@kris-X682X 6:ee9c86f06eae 56
krissl 3:f594022fe519 57 virtual void onDataWritten(const GattWriteCallbackParams *writeParams) {
krissl 3:f594022fe519 58 uint16_t handle = writeParams->handle;
kris@kris-X682X 6:ee9c86f06eae 59 printf("You wrote some data... But for which char? \r\n");
kris@kris-X682X 6:ee9c86f06eae 60 printf("%d == %d", handle, colorCharacteristic.getValueHandle());//colorCharacteristic.getValueHandle());
kris@kris-X682X 6:ee9c86f06eae 61 if(handle == colorCharacteristic.getValueHandle()){
kris@kris-X682X 6:ee9c86f06eae 62 printf("You wrote a color!");
kris@kris-X682X 6:ee9c86f06eae 63 printf("The value should be an array of integers.");
krissl 3:f594022fe519 64 // color = writeParams->data;
krissl 3:f594022fe519 65 int ledIndex = 0;
kris@kris-X682X 6:ee9c86f06eae 66 for (int i=0; i < this->mystrip.numPixels()*4; i+=4) {
kris@kris-X682X 6:ee9c86f06eae 67 color[i] = writeParams->data[i] << 24 | (writeParams->data[i+1] & 0xff) << 16 | (writeParams->data[i+2] & 0xff) << 8| (writeParams->data[i+3] & 0xff);
krissl 3:f594022fe519 68 // color[i] = writeParams->data[i];
kris@kris-X682X 6:ee9c86f06eae 69 this->mystrip.setPixelColor(ledIndex, color[i]);
krissl 3:f594022fe519 70 ledIndex++;
kris@kris-X682X 6:ee9c86f06eae 71 printf("Index: %d, val %08X \r\n", ledIndex, color[i]);
krissl 3:f594022fe519 72
krissl 3:f594022fe519 73 }
krissl 3:f594022fe519 74 }
kris@kris-X682X 6:ee9c86f06eae 75 this->mystrip.show();
krissl 3:f594022fe519 76 }
krissl 1:9fc54848a198 77 private:
krissl 1:9fc54848a198 78 BLE& ble;
krissl 1:9fc54848a198 79 ColorType_t color;
kris@kris-X682X 6:ee9c86f06eae 80 Adafruit_WS2801 mystrip;
krissl 1:9fc54848a198 81 ReadWriteGattCharacteristic<ColorType_t> colorCharacteristic;
krissl 1:9fc54848a198 82 };
krissl 1:9fc54848a198 83 #endif /* #ifndef __BLE_COLOR_SERVICE_H__*/