Just a quick custom service

Committer:
gaggenwaschke
Date:
Fri Feb 15 11:27:45 2019 +0000
Revision:
1:79a62e074c35
Parent:
0:bc6cd13ebbdb
Changed to speed test;

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 1:79a62e074c35 13 /** definitions for UUID's */
gaggenwaschke 1:79a62e074c35 14 static const char* UUID_COUNTDOWN_SERVICE = "8ca81a4b-6182-4b04-ba9c-e4002a4a7a8b"; // UUID of the contdown service
gaggenwaschke 1:79a62e074c35 15 static const char* UUID_W_CHARACTERISTIC = "6a9e371d-a3fc-4a34-bd21-ad887188532c"; // UUID of the time characteristic
gaggenwaschke 1:79a62e074c35 16 static UUID UUID_Service(UUID_COUNTDOWN_SERVICE);
gaggenwaschke 1:79a62e074c35 17 static UUID UUID_WCharacteristic(UUID_W_CHARACTERISTIC);
gaggenwaschke 1:79a62e074c35 18
gaggenwaschke 1:79a62e074c35 19 typedef struct Buffer {
gaggenwaschke 1:79a62e074c35 20 uint8_t data[512];
gaggenwaschke 1:79a62e074c35 21 } Buffer;
gaggenwaschke 1:79a62e074c35 22
gaggenwaschke 0:bc6cd13ebbdb 23 class CountdownService {
gaggenwaschke 0:bc6cd13ebbdb 24 typedef CountdownService Self;
gaggenwaschke 1:79a62e074c35 25 public:
gaggenwaschke 1:79a62e074c35 26 CountdownService(GattServer &server, Callback<void(uint8_t*, uint16_t)> w_changed_callback):
gaggenwaschke 0:bc6cd13ebbdb 27 server(server),
gaggenwaschke 1:79a62e074c35 28 wChar(UUID_WCharacteristic, NULL),
gaggenwaschke 1:79a62e074c35 29 onWCharWritten(w_changed_callback) {
gaggenwaschke 0:bc6cd13ebbdb 30
gaggenwaschke 1:79a62e074c35 31 GattCharacteristic *charTable[] = {&wChar};
gaggenwaschke 0:bc6cd13ebbdb 32 GattService service(UUID_Service, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
gaggenwaschke 0:bc6cd13ebbdb 33
gaggenwaschke 0:bc6cd13ebbdb 34 server.addService(service);
gaggenwaschke 0:bc6cd13ebbdb 35 server.onDataWritten(this, &CountdownService::onDataWritten);
gaggenwaschke 0:bc6cd13ebbdb 36 }
gaggenwaschke 0:bc6cd13ebbdb 37
gaggenwaschke 1:79a62e074c35 38 void GetWCharValue(uint8_t *data, uint16_t *length) {
gaggenwaschke 1:79a62e074c35 39 server.read(wChar.getValueHandle(), data, length);
gaggenwaschke 0:bc6cd13ebbdb 40 }
gaggenwaschke 0:bc6cd13ebbdb 41
gaggenwaschke 0:bc6cd13ebbdb 42 private:
gaggenwaschke 0:bc6cd13ebbdb 43 void onDataWritten(const GattWriteCallbackParams *params) {
gaggenwaschke 1:79a62e074c35 44 if (params->handle == wChar.getValueHandle()) {
gaggenwaschke 1:79a62e074c35 45 uint16_t length;
gaggenwaschke 1:79a62e074c35 46 uint8_t data[512];
gaggenwaschke 1:79a62e074c35 47 GetWCharValue(data, &length);
gaggenwaschke 1:79a62e074c35 48 onWCharWritten(data, length);
gaggenwaschke 0:bc6cd13ebbdb 49 }
gaggenwaschke 0:bc6cd13ebbdb 50 }
gaggenwaschke 0:bc6cd13ebbdb 51
gaggenwaschke 0:bc6cd13ebbdb 52 private:
gaggenwaschke 0:bc6cd13ebbdb 53 GattServer &server;
gaggenwaschke 1:79a62e074c35 54 WriteOnlyGattCharacteristic<Buffer> wChar;
gaggenwaschke 1:79a62e074c35 55 Callback<void(uint8_t, 512)> onWCharWritten;
gaggenwaschke 0:bc6cd13ebbdb 56 };
gaggenwaschke 0:bc6cd13ebbdb 57 #endif