Just a quick custom service

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?

UserRevisionLine numberNew 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