Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Committer:
kris@kris-X682X
Date:
Tue Jun 11 11:16:55 2019 +0200
Revision:
9:92d861703f96
Parent:
8:369b80cef5ae
Child:
10:d845189d146e
WS2812 working

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