Kris Scholte Lubberink
/
SSS_Ble
Ble for smart sOlutions
source/ColorService.h@9:92d861703f96, 2019-06-11 (annotated)
- 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?
User | Revision | Line number | New 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__*/ |