#pragma once
#include <gio/gio.h>
#include <string>
#include <list>
#include "TickEvent.h"
#include "Utils.h"
#include "GattInterface.h"
namespace ggk {
struct GattCharacteristic;
struct GattDescriptor;
struct GattProperty;
struct DBusObject;
#define DESCRIPTOR_UPDATED_VALUE_CALLBACK_LAMBDA [] \
( \
const GattDescriptor &self, \
GDBusConnection *pConnection, \
void *pUserData \
) -> bool
#define DESCRIPTOR_EVENT_CALLBACK_LAMBDA [] \
( \
const GattDescriptor &self, \
const TickEvent &event, \
GDBusConnection *pConnection, \
void *pUserData \
)
#define DESCRIPTOR_METHOD_CALLBACK_LAMBDA [] \
( \
const GattDescriptor &self, \
GDBusConnection *pConnection, \
const std::string &methodName, \
GVariant *pParameters, \
GDBusMethodInvocation *pInvocation, \
void *pUserData \
)
struct GattDescriptor : GattInterface
{
static constexpr const char *kInterfaceType = "GattDescriptor";
typedef void (*MethodCallback)(const GattDescriptor &self, GDBusConnection *pConnection, const std::string &methodName, GVariant *pParameters, GDBusMethodInvocation *pInvocation, void *pUserData);
typedef void (*EventCallback)(const GattDescriptor &self, const TickEvent &event, GDBusConnection *pConnection, void *pUserData);
typedef bool (*UpdatedValueCallback)(const GattDescriptor &self, GDBusConnection *pConnection, void *pUserData);
GattDescriptor(DBusObject &owner, GattCharacteristic &characteristic, const std::string &name);
virtual ~GattDescriptor() {}
virtual const std::string getInterfaceType() const { return GattDescriptor::kInterfaceType; }
GattCharacteristic &gattDescriptorEnd();
virtual bool callMethod(const std::string &methodName, GDBusConnection *pConnection, GVariant *pParameters, GDBusMethodInvocation *pInvocation, gpointer pUserData) const;
GattDescriptor &onEvent(int tickFrequency, void *pUserData, EventCallback callback);
virtual void tickEvents(GDBusConnection *pConnection, void *pUserData) const;
GattDescriptor &onReadValue(MethodCallback callback);
GattDescriptor &onWriteValue(MethodCallback callback);
GattDescriptor &onUpdatedValue(UpdatedValueCallback callback);
bool callOnUpdatedValue(GDBusConnection *pConnection, void *pUserData) const;
protected:
GattCharacteristic &characteristic;
UpdatedValueCallback pOnUpdatedValueFunc;
};
};