#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
typedef void (*GGKLogReceiver)(const char *pMessage);
void ggkLogRegisterDebug(GGKLogReceiver receiver);
void ggkLogRegisterInfo(GGKLogReceiver receiver);
void ggkLogRegisterStatus(GGKLogReceiver receiver);
void ggkLogRegisterWarn(GGKLogReceiver receiver);
void ggkLogRegisterError(GGKLogReceiver receiver);
void ggkLogRegisterFatal(GGKLogReceiver receiver);
void ggkLogRegisterAlways(GGKLogReceiver receiver);
void ggkLogRegisterTrace(GGKLogReceiver receiver);
typedef const void *(*GGKServerDataGetter)(const char *pName);
typedef int (*GGKServerDataSetter)(const char *pName, const void *pData);
int ggkNofifyUpdatedCharacteristic(const char *pObjectPath);
int ggkNofifyUpdatedDescriptor(const char *pObjectPath);
int ggkPushUpdateQueue(const char *pObjectPath, const char *pInterfaceName);
int ggkPopUpdateQueue(char *pElement, int elementLen, int keep);
int ggkUpdateQueueIsEmpty();
int ggkUpdateQueueSize();
void ggkUpdateQueueClear();
int ggkStart(const char *pServiceName, const char *pAdvertisingName, const char *pAdvertisingShortName,
GGKServerDataGetter getter, GGKServerDataSetter setter, int maxAsyncInitTimeoutMS);
int ggkWait();
void ggkTriggerShutdown();
int ggkShutdownAndWait();
enum GGKServerRunState
{
EUninitialized,
EInitializing,
ERunning,
EStopping,
EStopped
};
enum GGKServerRunState ggkGetServerRunState();
const char *ggkGetServerRunStateString(enum GGKServerRunState state);
int ggkIsServerRunning();
enum GGKServerHealth
{
EOk,
EFailedInit,
EFailedRun
};
enum GGKServerHealth ggkGetServerHealth();
const char *ggkGetServerHealthString(enum GGKServerHealth state);
#ifdef __cplusplus
}
#endif