Just a quick custom service

CountdownService.h

Committer:
gaggenwaschke
Date:
2018-11-23
Revision:
0:bc6cd13ebbdb
Child:
1:79a62e074c35

File content as of revision 0:bc6cd13ebbdb:

/*  code is property of aconno.de */


#ifndef COUNTDOWN_SERVICE
#define COUNTDOWN_SERVICE

#include <stdbool.h>
#include "mbed.h"
#include <events/mbed_events.h>
#include "ble/BLE.h"


class CountdownService {
typedef CountdownService Self;
public:
    const static uint16_t UUID_Service = 0xFFFF;
    const static uint16_t UUID_TimeCharacteristic = 0xFFFF;
    
    CountdownService(GattServer &server, Callback<void(uint32_t)> countdown_changed_callback = NULL):
    server(server),
    countdownChar(UUID_TimeCharacteristic,0),
    onCountdownReset(countdown_changed_callback) {
        
        GattCharacteristic *charTable[] = {&countdownChar};
        GattService service(UUID_Service, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
        
        server.addService(service); 
        server.onDataWritten(this, &CountdownService::onDataWritten);
    }
    
    
    void SetCountdown(uint32_t value) {
        server.write(countdownChar.getValueHandle(), (const uint8_t*)&value, sizeof(uint32_t)); 
    }
    uint32_t GetCountdown() {
        uint16_t len = 4;
        uint32_t value;
        uint8_t* buffer = (uint8_t*)&value;
        server.read(countdownChar.getValueHandle(), buffer, &len);
        return value;
    }
    
private:
    void onDataWritten(const GattWriteCallbackParams *params) {
        if (params->handle == countdownChar.getValueHandle()) {
            onCountdownReset(GetCountdown());
        }
    }
    
private:
    GattServer &server;
    ReadWriteGattCharacteristic<uint32_t> countdownChar;
    Callback<void(uint32_t)> onCountdownReset;
};
#endif