Just a quick custom service
CountdownService.h@0:bc6cd13ebbdb, 2018-11-23 (annotated)
- Committer:
- gaggenwaschke
- Date:
- Fri Nov 23 08:59:41 2018 +0000
- Revision:
- 0:bc6cd13ebbdb
- Child:
- 1:79a62e074c35
Initial commit;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gaggenwaschke | 0:bc6cd13ebbdb | 1 | /* code is property of aconno.de */ |
gaggenwaschke | 0:bc6cd13ebbdb | 2 | |
gaggenwaschke | 0:bc6cd13ebbdb | 3 | |
gaggenwaschke | 0:bc6cd13ebbdb | 4 | #ifndef COUNTDOWN_SERVICE |
gaggenwaschke | 0:bc6cd13ebbdb | 5 | #define COUNTDOWN_SERVICE |
gaggenwaschke | 0:bc6cd13ebbdb | 6 | |
gaggenwaschke | 0:bc6cd13ebbdb | 7 | #include <stdbool.h> |
gaggenwaschke | 0:bc6cd13ebbdb | 8 | #include "mbed.h" |
gaggenwaschke | 0:bc6cd13ebbdb | 9 | #include <events/mbed_events.h> |
gaggenwaschke | 0:bc6cd13ebbdb | 10 | #include "ble/BLE.h" |
gaggenwaschke | 0:bc6cd13ebbdb | 11 | |
gaggenwaschke | 0:bc6cd13ebbdb | 12 | |
gaggenwaschke | 0:bc6cd13ebbdb | 13 | class CountdownService { |
gaggenwaschke | 0:bc6cd13ebbdb | 14 | typedef CountdownService Self; |
gaggenwaschke | 0:bc6cd13ebbdb | 15 | public: |
gaggenwaschke | 0:bc6cd13ebbdb | 16 | const static uint16_t UUID_Service = 0xFFFF; |
gaggenwaschke | 0:bc6cd13ebbdb | 17 | const static uint16_t UUID_TimeCharacteristic = 0xFFFF; |
gaggenwaschke | 0:bc6cd13ebbdb | 18 | |
gaggenwaschke | 0:bc6cd13ebbdb | 19 | CountdownService(GattServer &server, Callback<void(uint32_t)> countdown_changed_callback = NULL): |
gaggenwaschke | 0:bc6cd13ebbdb | 20 | server(server), |
gaggenwaschke | 0:bc6cd13ebbdb | 21 | countdownChar(UUID_TimeCharacteristic,0), |
gaggenwaschke | 0:bc6cd13ebbdb | 22 | onCountdownReset(countdown_changed_callback) { |
gaggenwaschke | 0:bc6cd13ebbdb | 23 | |
gaggenwaschke | 0:bc6cd13ebbdb | 24 | GattCharacteristic *charTable[] = {&countdownChar}; |
gaggenwaschke | 0:bc6cd13ebbdb | 25 | GattService service(UUID_Service, charTable, sizeof(charTable) / sizeof(GattCharacteristic *)); |
gaggenwaschke | 0:bc6cd13ebbdb | 26 | |
gaggenwaschke | 0:bc6cd13ebbdb | 27 | server.addService(service); |
gaggenwaschke | 0:bc6cd13ebbdb | 28 | server.onDataWritten(this, &CountdownService::onDataWritten); |
gaggenwaschke | 0:bc6cd13ebbdb | 29 | } |
gaggenwaschke | 0:bc6cd13ebbdb | 30 | |
gaggenwaschke | 0:bc6cd13ebbdb | 31 | |
gaggenwaschke | 0:bc6cd13ebbdb | 32 | void SetCountdown(uint32_t value) { |
gaggenwaschke | 0:bc6cd13ebbdb | 33 | server.write(countdownChar.getValueHandle(), (const uint8_t*)&value, sizeof(uint32_t)); |
gaggenwaschke | 0:bc6cd13ebbdb | 34 | } |
gaggenwaschke | 0:bc6cd13ebbdb | 35 | uint32_t GetCountdown() { |
gaggenwaschke | 0:bc6cd13ebbdb | 36 | uint16_t len = 4; |
gaggenwaschke | 0:bc6cd13ebbdb | 37 | uint32_t value; |
gaggenwaschke | 0:bc6cd13ebbdb | 38 | uint8_t* buffer = (uint8_t*)&value; |
gaggenwaschke | 0:bc6cd13ebbdb | 39 | server.read(countdownChar.getValueHandle(), buffer, &len); |
gaggenwaschke | 0:bc6cd13ebbdb | 40 | return value; |
gaggenwaschke | 0:bc6cd13ebbdb | 41 | } |
gaggenwaschke | 0:bc6cd13ebbdb | 42 | |
gaggenwaschke | 0:bc6cd13ebbdb | 43 | private: |
gaggenwaschke | 0:bc6cd13ebbdb | 44 | void onDataWritten(const GattWriteCallbackParams *params) { |
gaggenwaschke | 0:bc6cd13ebbdb | 45 | if (params->handle == countdownChar.getValueHandle()) { |
gaggenwaschke | 0:bc6cd13ebbdb | 46 | onCountdownReset(GetCountdown()); |
gaggenwaschke | 0:bc6cd13ebbdb | 47 | } |
gaggenwaschke | 0:bc6cd13ebbdb | 48 | } |
gaggenwaschke | 0:bc6cd13ebbdb | 49 | |
gaggenwaschke | 0:bc6cd13ebbdb | 50 | private: |
gaggenwaschke | 0:bc6cd13ebbdb | 51 | GattServer &server; |
gaggenwaschke | 0:bc6cd13ebbdb | 52 | ReadWriteGattCharacteristic<uint32_t> countdownChar; |
gaggenwaschke | 0:bc6cd13ebbdb | 53 | Callback<void(uint32_t)> onCountdownReset; |
gaggenwaschke | 0:bc6cd13ebbdb | 54 | }; |
gaggenwaschke | 0:bc6cd13ebbdb | 55 | #endif |