#include "GattDescriptor.h"
#include "GattProperty.h"
#include "DBusObject.h"
#include "Utils.h"
#include "Logger.h"
namespace ggk {
GattDescriptor::GattDescriptor(DBusObject &owner, GattCharacteristic &characteristic, const std::string &name)
: GattInterface(owner, name), characteristic(characteristic), pOnUpdatedValueFunc(nullptr)
{
}
GattCharacteristic &GattDescriptor::gattDescriptorEnd()
{
return characteristic;
}
bool GattDescriptor::callMethod(const std::string &methodName, GDBusConnection *pConnection, GVariant *pParameters, GDBusMethodInvocation *pInvocation, gpointer pUserData) const
{
for (const DBusMethod &method : methods)
{
if (methodName == method.getName())
{
method.call<GattDescriptor>(pConnection, getPath(), getName(), methodName, pParameters, pInvocation, pUserData);
return true;
}
}
return false;
}
GattDescriptor &GattDescriptor::onEvent(int tickFrequency, void *pUserData, EventCallback callback)
{
events.push_back(TickEvent(this, tickFrequency, reinterpret_cast<TickEvent::Callback>(callback), pUserData));
return *this;
}
void GattDescriptor::tickEvents(GDBusConnection *pConnection, void *pUserData) const
{
for (const TickEvent &event : events)
{
event.tick<GattDescriptor>(getPath(), pConnection, pUserData);
}
}
GattDescriptor &GattDescriptor::onReadValue(MethodCallback callback)
{
const char *inArgs[] = {"a{sv}", nullptr};
addMethod("ReadValue", inArgs, "ay", reinterpret_cast<DBusMethod::Callback>(callback));
return *this;
}
GattDescriptor &GattDescriptor::onWriteValue(MethodCallback callback)
{
const char *inArgs[] = {"ay", "a{sv}", nullptr};
addMethod("WriteValue", inArgs, nullptr, reinterpret_cast<DBusMethod::Callback>(callback));
return *this;
}
GattDescriptor &GattDescriptor::onUpdatedValue(UpdatedValueCallback callback)
{
pOnUpdatedValueFunc = callback;
return *this;
}
bool GattDescriptor::callOnUpdatedValue(GDBusConnection *pConnection, void *pUserData) const
{
if (nullptr == pOnUpdatedValueFunc)
{
return false;
}
Logger::trace(SSTR << "Calling OnUpdatedValue function for interface at path '" << getPath() << "'");
return pOnUpdatedValueFunc(*this, pConnection, pUserData);
}
};