Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Committer:
kris@kris-X682X
Date:
Mon May 20 09:55:38 2019 +0200
Revision:
6:ee9c86f06eae
Parent:
3:f594022fe519
Child:
7:9cda1b0f25ae
WIP

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