diff --git a/aqhome/dataclient/client.c b/aqhome/dataclient/client.c index 780265a..d590a5d 100644 --- a/aqhome/dataclient/client.c +++ b/aqhome/dataclient/client.c @@ -12,6 +12,7 @@ #include "./client_p.h" +#include "aqhome/aqhome.h" #include "aqhome/msg/ipc/m_ipc.h" #include "aqhome/msg/ipc/m_ipc_tag16.h" #include "aqhome/msg/ipc/m_ipc_result.h" @@ -31,84 +32,116 @@ #include #include #include +#include +#include #define AQH_DATA_CLIENT_DEFAULT_CMD_TIMEOUT 5 -GWEN_INHERIT(AQH_OBJECT, AQH_DATA_CLIENT) - - - - -static void GWENHYWFAR_CB _freeData(void *bp, void *p); - -static int _connectEndpoint(AQH_OBJECT *o, const char *addr, int port, uint32_t flags); -static int _exchangeConnectMsgs(AQH_DATA_CLIENT *xo, const char *userId, const char *passwd, const char *clientId, uint32_t flags); -static uint64_t _getFirstOrLastData(AQH_OBJECT *o, const char *valueName, uint64_t *dataPtr, uint64_t maxNum, int mode); -static uint64_t _handleDataResponses(AQH_DATA_CLIENT *xo, uint64_t *dataPtr, uint64_t maxNum, uint32_t msgId); -static int _handleResult(AQH_DATA_CLIENT *xo, uint32_t msgId); +static int _connectEndpoint(AQH_DATACLIENT *dc, const char *addr, int port, uint32_t flags); +static int _exchangeConnectMsgs(AQH_DATACLIENT *dc, const char *userId, const char *passwd, const char *clientId, uint32_t flags); +static uint64_t _getFirstOrLastData(AQH_DATACLIENT *dc, const char *valueName, uint64_t *dataPtr, uint64_t maxNum, int mode); +static uint64_t _handleDataResponses(AQH_DATACLIENT *dc, uint64_t *dataPtr, uint64_t maxNum, uint32_t msgId); +static int _handleResult(AQH_DATACLIENT *dc, uint32_t msgId); -AQH_OBJECT *AQH_DataClient_new(AQH_EVENT_LOOP *eventLoop, uint8_t protoId, uint8_t protoVer) +AQH_DATACLIENT *AQH_DataClient_new(AQH_EVENT_LOOP *eventLoop, uint8_t protoId, uint8_t protoVer) { - AQH_OBJECT *o; - AQH_DATA_CLIENT *xo; + AQH_DATACLIENT *dc; - o=AQH_Object_new(eventLoop); - GWEN_NEW_OBJECT(AQH_DATA_CLIENT, xo); - GWEN_INHERIT_SETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o, xo, _freeData); + GWEN_NEW_OBJECT(AQH_DATACLIENT, dc); - xo->protoId=protoId; - xo->protoVer=protoVer; - xo->timeoutInSeconds=AQH_DATA_CLIENT_DEFAULT_CMD_TIMEOUT; + dc->eventLoop=eventLoop; + dc->protoId=protoId; + dc->protoVer=protoVer; + dc->timeoutInSeconds=AQH_DATA_CLIENT_DEFAULT_CMD_TIMEOUT; - return 0; + return dc; } -void GWENHYWFAR_CB _freeData(GWEN_UNUSED void *bp, void *p) +void AQH_DataClient_free(AQH_DATACLIENT *dc) { - AQH_DATA_CLIENT *xo; - - xo=(AQH_DATA_CLIENT*)p; - AQH_Object_free(xo->ipcEndpoint); - GWEN_FREE_OBJECT(xo); + if (dc) { + AQH_Object_free(dc->ipcEndpoint); + GWEN_FREE_OBJECT(dc); + } } -int AQH_DataClient_Connect(AQH_OBJECT *o, +int AQH_DataClient_ReadLocalArgs(AQH_DATACLIENT *dc, + GWEN_DB_NODE *dbGlobalArgs, const GWEN_ARGS *args, + int argc, char **argv) +{ + if (dc) { + int rv; + + GWEN_DB_Group_free(dc->dbLocalArgs); + dc->dbLocalArgs=GWEN_DB_GetGroup(dbGlobalArgs, GWEN_DB_FLAGS_DEFAULT, "local"); + rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, dc->dbLocalArgs); + if (rv==GWEN_ARGS_RESULT_ERROR) { + fprintf(stderr, "ERROR: Could not parse arguments\n"); + return 1; + } + else if (rv==GWEN_ARGS_RESULT_HELP) { + GWEN_BUFFER *ubuf; + + ubuf=GWEN_Buffer_new(0, 1024, 0, 1); + if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { + fprintf(stderr, "ERROR: Could not create help string\n"); + return 1; + } + fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); + GWEN_Buffer_free(ubuf); + return 1; + } + dc->timeoutInSeconds=GWEN_DB_GetIntValue(dc->dbLocalArgs, "timeout", 0, 5); + + AQH_MergeConfigFileIntoConfig(dc->dbLocalArgs, "ConfigFile"); + return 0; + } + return GWEN_ERROR_INVALID; +} + + + +GWEN_DB_NODE *AQH_DataClient_GetDbLocalArgs(const AQH_DATACLIENT *dc) +{ + return dc?dc->dbLocalArgs:NULL; +} + + + +int AQH_DataClient_Connect(AQH_DATACLIENT *dc, const char *addr, int port, const char *userId, const char *passwd, const char *clientId, uint32_t flags) { - AQH_DATA_CLIENT *xo; - - xo=GWEN_INHERIT_GETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o); - if (xo) { + if (dc) { int rv; - AQH_Object_free(xo->ipcEndpoint); - xo->ipcEndpoint=NULL; + AQH_Object_free(dc->ipcEndpoint); + dc->ipcEndpoint=NULL; - rv=_connectEndpoint(o, addr, port, 0 /* connection flags */); + rv=_connectEndpoint(dc, addr, port, 0 /* connection flags */); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } - rv=_exchangeConnectMsgs(xo, userId, passwd, clientId, flags); + rv=_exchangeConnectMsgs(dc, userId, passwd, clientId, flags); if (rv<0) { - AQH_Object_free(xo->ipcEndpoint); - xo->ipcEndpoint=NULL; + AQH_Object_free(dc->ipcEndpoint); + dc->ipcEndpoint=NULL; DBG_INFO(NULL, "here (%d)", rv); return rv; } @@ -119,14 +152,11 @@ int AQH_DataClient_Connect(AQH_OBJECT *o, -int AQH_DataClient_Disconnect(AQH_OBJECT *o) +int AQH_DataClient_Disconnect(AQH_DATACLIENT *dc) { - AQH_DATA_CLIENT *xo; - - xo=GWEN_INHERIT_GETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o); - if (xo) { - AQH_Object_free(xo->ipcEndpoint); - xo->ipcEndpoint=NULL; + if (dc) { + AQH_Object_free(dc->ipcEndpoint); + dc->ipcEndpoint=NULL; return 0; } return GWEN_ERROR_INVALID; @@ -134,35 +164,29 @@ int AQH_DataClient_Disconnect(AQH_OBJECT *o) -void AQH_DataClient_SetTimeout(AQH_OBJECT *o, int i) +void AQH_DataClient_SetTimeout(AQH_DATACLIENT *dc, int i) { - AQH_DATA_CLIENT *xo; - - xo=GWEN_INHERIT_GETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o); - if (xo) { - xo->timeoutInSeconds=i; + if (dc) { + dc->timeoutInSeconds=i; } } -AQH_DEVICE_LIST *AQH_DataClient_GetDevices(AQH_OBJECT *o) +AQH_DEVICE_LIST *AQH_DataClient_GetDevices(AQH_DATACLIENT *dc) { - AQH_DATA_CLIENT *xo; - - xo=GWEN_INHERIT_GETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o); - if (xo) { + if (dc) { AQH_MESSAGE *msgOut; AQH_MESSAGE *msgIn; uint32_t msgId; AQH_DEVICE_LIST *fullDeviceList; fullDeviceList=AQH_Device_List_new(); - msgId=++(xo->lastMsgId); - msgOut=AQH_IpcMessage_new(xo->protoId, xo->protoVer, AQH_MSGTYPE_IPC_DATA_GETDEVICES_REQ, msgId, 0, 0, NULL); - AQH_Endpoint_AddMsgOut(xo->ipcEndpoint, msgOut); + msgId=++(dc->lastMsgId); + msgOut=AQH_IpcMessage_new(dc->protoId, dc->protoVer, AQH_MSGTYPE_IPC_DATA_GETDEVICES_REQ, msgId, 0, 0, NULL); + AQH_Endpoint_AddMsgOut(dc->ipcEndpoint, msgOut); - while( (msgIn=AQH_IpcEndpoint_WaitForResponseMsg(xo->ipcEndpoint, msgId, xo->timeoutInSeconds)) ) { + while( (msgIn=AQH_IpcEndpoint_WaitForResponseMsg(dc->ipcEndpoint, msgId, dc->timeoutInSeconds)) ) { GWEN_TAG16_LIST *tagList; tagList=AQH_IpcMessageTag16_ParsePayload(msgIn, 0); @@ -208,23 +232,20 @@ AQH_DEVICE_LIST *AQH_DataClient_GetDevices(AQH_OBJECT *o) -AQH_VALUE_LIST *AQH_DataClient_GetValues(AQH_OBJECT *o, const char *deviceName, int modality) +AQH_VALUE_LIST *AQH_DataClient_GetValues(AQH_DATACLIENT *dc, const char *deviceName, int modality) { - AQH_DATA_CLIENT *xo; - - xo=GWEN_INHERIT_GETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o); - if (xo) { + if (dc) { AQH_MESSAGE *msgOut; AQH_MESSAGE *msgIn; uint32_t msgId; AQH_VALUE_LIST *fullValueList; fullValueList=AQH_Value_List_new(); - msgId=++(xo->lastMsgId); + msgId=++(dc->lastMsgId); msgOut=AQH_IpcdMessageGetValues_new(AQH_MSGTYPE_IPC_DATA_GETVALUES_REQ, msgId, 0, deviceName, modality); - AQH_Endpoint_AddMsgOut(xo->ipcEndpoint, msgOut); + AQH_Endpoint_AddMsgOut(dc->ipcEndpoint, msgOut); - while( (msgIn=AQH_IpcEndpoint_WaitForResponseMsg(xo->ipcEndpoint, msgId, xo->timeoutInSeconds)) ) { + while( (msgIn=AQH_IpcEndpoint_WaitForResponseMsg(dc->ipcEndpoint, msgId, dc->timeoutInSeconds)) ) { GWEN_TAG16_LIST *tagList; tagList=AQH_IpcMessageTag16_ParsePayload(msgIn, 0); @@ -270,59 +291,53 @@ AQH_VALUE_LIST *AQH_DataClient_GetValues(AQH_OBJECT *o, const char *deviceName, -uint64_t AQH_DataClient_GetFirstData(AQH_OBJECT *o, const char *valueName, uint64_t *dataPtr, uint64_t maxNum) +uint64_t AQH_DataClient_GetFirstData(AQH_DATACLIENT *dc, const char *valueName, uint64_t *dataPtr, uint64_t maxNum) { - return _getFirstOrLastData(o, valueName, dataPtr, maxNum, AQH_MSGDATA_GETDATA_MODE_FIRST); + return _getFirstOrLastData(dc, valueName, dataPtr, maxNum, AQH_MSGDATA_GETDATA_MODE_FIRST); } -uint64_t AQH_DataClient_GetLastData(AQH_OBJECT *o, const char *valueName, uint64_t *dataPtr, uint64_t maxNum) +uint64_t AQH_DataClient_GetLastData(AQH_DATACLIENT *dc, const char *valueName, uint64_t *dataPtr, uint64_t maxNum) { - return _getFirstOrLastData(o, valueName, dataPtr, maxNum, AQH_MSGDATA_GETDATA_MODE_LAST); + return _getFirstOrLastData(dc, valueName, dataPtr, maxNum, AQH_MSGDATA_GETDATA_MODE_LAST); } -uint64_t AQH_DataClient_GetPeriodData(AQH_OBJECT *o, const char *valueName, +uint64_t AQH_DataClient_GetPeriodData(AQH_DATACLIENT *dc, const char *valueName, uint64_t *dataPtr, uint64_t maxNum, uint64_t tsBegin, uint64_t tsEnd) { - AQH_DATA_CLIENT *xo; - - xo=GWEN_INHERIT_GETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o); - if (xo) { + if (dc) { AQH_MESSAGE *msgOut; uint32_t msgId; - msgId=++(xo->lastMsgId); + msgId=++(dc->lastMsgId); msgOut=AQH_IpcdMessageGetData_new(AQH_MSGTYPE_IPC_DATA_GETDATA_REQ, msgId, 0, AQH_MSGDATA_GETDATA_MODE_PERIOD, valueName, tsBegin, tsEnd, maxNum); - AQH_Endpoint_AddMsgOut(xo->ipcEndpoint, msgOut); + AQH_Endpoint_AddMsgOut(dc->ipcEndpoint, msgOut); - return _handleDataResponses(xo, dataPtr, maxNum, msgId); + return _handleDataResponses(dc, dataPtr, maxNum, msgId); } return 0; } -int AQH_DataClient_SetData(AQH_OBJECT *o, const AQH_VALUE *v, const char *data) +int AQH_DataClient_SetData(AQH_DATACLIENT *dc, const AQH_VALUE *v, const char *data) { - AQH_DATA_CLIENT *xo; - - xo=GWEN_INHERIT_GETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o); - if (xo) { + if (dc) { AQH_MESSAGE *msgOut; uint32_t msgId; - msgId=++(xo->lastMsgId); + msgId=++(dc->lastMsgId); msgOut=AQH_IpcdMessageSetData_new(AQH_MSGTYPE_IPC_DATA_SETDATA, msgId, 0, v, data); - AQH_Endpoint_AddMsgOut(xo->ipcEndpoint, msgOut); + AQH_Endpoint_AddMsgOut(dc->ipcEndpoint, msgOut); - return _handleResult(xo, msgId); + return _handleResult(dc, msgId); } return GWEN_ERROR_INVALID; @@ -330,20 +345,17 @@ int AQH_DataClient_SetData(AQH_OBJECT *o, const AQH_VALUE *v, const char *data) -int AQH_DataClient_UpdateData(AQH_OBJECT *o, const AQH_VALUE *v, uint64_t timeStamp, double dataPoint) +int AQH_DataClient_UpdateData(AQH_DATACLIENT *dc, const AQH_VALUE *v, uint64_t timeStamp, double dataPoint) { - AQH_DATA_CLIENT *xo; - - xo=GWEN_INHERIT_GETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o); - if (xo) { + if (dc) { AQH_MESSAGE *msgOut; uint32_t msgId; - msgId=++(xo->lastMsgId); + msgId=++(dc->lastMsgId); msgOut=AQH_IpcdMessageMultiData_newForOne(AQH_MSGTYPE_IPC_DATA_UPDATEDATA, msgId, 0, v, timeStamp, dataPoint); - AQH_Endpoint_AddMsgOut(xo->ipcEndpoint, msgOut); + AQH_Endpoint_AddMsgOut(dc->ipcEndpoint, msgOut); - return _handleResult(xo, msgId); + return _handleResult(dc, msgId); } return GWEN_ERROR_INVALID; @@ -354,12 +366,9 @@ int AQH_DataClient_UpdateData(AQH_OBJECT *o, const AQH_VALUE *v, uint64_t timeSt -int _connectEndpoint(AQH_OBJECT *o, const char *addr, int port, uint32_t flags) +int _connectEndpoint(AQH_DATACLIENT *dc, const char *addr, int port, uint32_t flags) { - AQH_DATA_CLIENT *xo; - - xo=GWEN_INHERIT_GETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o); - if (xo) { + if (dc) { AQH_OBJECT *ep; int fd; @@ -369,10 +378,10 @@ int _connectEndpoint(AQH_OBJECT *o, const char *addr, int port, uint32_t flags) return GWEN_ERROR_IO; } - ep=AQH_IpcClientObject_new(AQH_Object_GetEventLoop(o), fd); + ep=AQH_IpcClientObject_new(dc->eventLoop, fd); assert(ep); AQH_Endpoint_AddFlags(ep, flags); - xo->ipcEndpoint=ep; + dc->ipcEndpoint=ep; return 0; } @@ -381,54 +390,51 @@ int _connectEndpoint(AQH_OBJECT *o, const char *addr, int port, uint32_t flags) -int _exchangeConnectMsgs(AQH_DATA_CLIENT *xo, const char *userId, const char *passwd, const char *clientId, uint32_t flags) +int _exchangeConnectMsgs(AQH_DATACLIENT *dc, const char *userId, const char *passwd, const char *clientId, uint32_t flags) { AQH_MESSAGE *msgOut; uint32_t msgId; - DBG_INFO(NULL, "Sending connect message for proto=%d.%d", xo->protoId, xo->protoVer); - msgId=AQH_Endpoint_GetNextMessageId(xo->ipcEndpoint); - msgOut=AQH_IpcMessageConnect_new(xo->protoId, xo->protoVer, + DBG_INFO(NULL, "Sending connect message for proto=%d.%d", dc->protoId, dc->protoVer); + msgId=AQH_Endpoint_GetNextMessageId(dc->ipcEndpoint); + msgOut=AQH_IpcMessageConnect_new(dc->protoId, dc->protoVer, AQH_MSGTYPE_IPC_CONNECT_REQ, msgId, 0, clientId, userId, passwd, flags); - AQH_Endpoint_AddMsgOut(xo->ipcEndpoint, msgOut); - return AQH_IpcEndpoint_WaitForResultMsg(xo->ipcEndpoint, - xo->protoId, xo->protoVer, AQH_MSGTYPE_IPC_RESULT, - msgId, xo->timeoutInSeconds); + AQH_Endpoint_AddMsgOut(dc->ipcEndpoint, msgOut); + return AQH_IpcEndpoint_WaitForResultMsg(dc->ipcEndpoint, + dc->protoId, dc->protoVer, AQH_MSGTYPE_IPC_RESULT, + msgId, dc->timeoutInSeconds); } -uint64_t _getFirstOrLastData(AQH_OBJECT *o, const char *valueName, uint64_t *dataPtr, uint64_t maxNum, int mode) +uint64_t _getFirstOrLastData(AQH_DATACLIENT *dc, const char *valueName, uint64_t *dataPtr, uint64_t maxNum, int mode) { - AQH_DATA_CLIENT *xo; - - xo=GWEN_INHERIT_GETDATA(AQH_OBJECT, AQH_DATA_CLIENT, o); - if (xo) { + if (dc) { AQH_MESSAGE *msgOut; uint32_t msgId; - msgId=++(xo->lastMsgId); + msgId=++(dc->lastMsgId); msgOut=AQH_IpcdMessageGetData_new(AQH_MSGTYPE_IPC_DATA_GETDATA_REQ, msgId, 0, mode, valueName, 0, 0, maxNum); - AQH_Endpoint_AddMsgOut(xo->ipcEndpoint, msgOut); + AQH_Endpoint_AddMsgOut(dc->ipcEndpoint, msgOut); - return _handleDataResponses(xo, dataPtr, maxNum, msgId); + return _handleDataResponses(dc, dataPtr, maxNum, msgId); } return 0; } -uint64_t _handleDataResponses(AQH_DATA_CLIENT *xo, uint64_t *dataPtr, uint64_t maxNum, uint32_t msgId) +uint64_t _handleDataResponses(AQH_DATACLIENT *dc, uint64_t *dataPtr, uint64_t maxNum, uint32_t msgId) { AQH_MESSAGE *msgIn; uint64_t fullNumberOfPoints=0; - while( (msgIn=AQH_IpcEndpoint_WaitForResponseMsg(xo->ipcEndpoint, msgId, xo->timeoutInSeconds)) ) { + while( (msgIn=AQH_IpcEndpoint_WaitForResponseMsg(dc->ipcEndpoint, msgId, dc->timeoutInSeconds)) ) { GWEN_TAG16_LIST *tagList; tagList=AQH_IpcMessageTag16_ParsePayload(msgIn, 0); @@ -478,11 +484,11 @@ uint64_t _handleDataResponses(AQH_DATA_CLIENT *xo, uint64_t *dataPtr, uint64_t m -int _handleResult(AQH_DATA_CLIENT *xo, uint32_t msgId) +int _handleResult(AQH_DATACLIENT *dc, uint32_t msgId) { AQH_MESSAGE *msgIn; - while( (msgIn=AQH_IpcEndpoint_WaitForResponseMsg(xo->ipcEndpoint, msgId, xo->timeoutInSeconds)) ) { + while( (msgIn=AQH_IpcEndpoint_WaitForResponseMsg(dc->ipcEndpoint, msgId, dc->timeoutInSeconds)) ) { GWEN_TAG16_LIST *tagList; tagList=AQH_IpcMessageTag16_ParsePayload(msgIn, 0); @@ -517,4 +523,33 @@ int _handleResult(AQH_DATA_CLIENT *xo, uint32_t msgId) +int AQH_DataClient_ConnectWithArgs(AQH_DATACLIENT *dc, uint32_t flags) +{ + const char *brokerAddress; + int brokerPort; + const char *userId; + const char *passwd; + const char *clientId; + int rv; + + brokerAddress=GWEN_DB_GetCharValue(dc->dbLocalArgs, "brokerAddress", 0, NULL); + if (!(brokerAddress && *brokerAddress)) + brokerAddress=GWEN_DB_GetCharValue(dc->dbLocalArgs, "ConfigFile/brokerAddress", 0, "127.0.0.1"); + + brokerPort=GWEN_DB_GetIntValue(dc->dbLocalArgs, "brokerPort", 0, -1); + if (brokerPort<0) + brokerPort=GWEN_DB_GetIntValue(dc->dbLocalArgs, "ConfigFile/brokerPort", 0, 45456); + + userId=GWEN_DB_GetCharValue(dc->dbLocalArgs, "userId", 0, NULL); + passwd=GWEN_DB_GetCharValue(dc->dbLocalArgs, "password", 0, NULL); + clientId=GWEN_DB_GetCharValue(dc->dbLocalArgs, "brokerClientId", 0, NULL); + + rv=AQH_DataClient_Connect(dc, brokerAddress, brokerPort, userId, passwd, clientId, flags); + if (rv<0) { + DBG_INFO(NULL, "here (%d)", rv); + return rv; + } + + return 0; +} diff --git a/aqhome/dataclient/client.h b/aqhome/dataclient/client.h index 85cbb77..05db794 100644 --- a/aqhome/dataclient/client.h +++ b/aqhome/dataclient/client.h @@ -14,32 +14,44 @@ #include #include +#include -AQHOME_API AQH_OBJECT *AQH_DataClient_new(AQH_EVENT_LOOP *eventLoop, uint8_t protoId, uint8_t protoVer); - -AQHOME_API void AQH_DataClient_SetTimeout(AQH_OBJECT *o, int i); +typedef struct AQH_DATACLIENT AQH_DATACLIENT; -AQHOME_API int AQH_DataClient_Connect(AQH_OBJECT *o, +AQHOME_API AQH_DATACLIENT *AQH_DataClient_new(AQH_EVENT_LOOP *eventLoop, uint8_t protoId, uint8_t protoVer); +AQHOME_API void AQH_DataClient_free(AQH_DATACLIENT *dc); + +AQHOME_API void AQH_DataClient_SetTimeout(AQH_DATACLIENT *dc, int i); + + +AQHOME_API int AQH_DataClient_Connect(AQH_DATACLIENT *dc, const char *addr, int port, const char *userId, const char *passwd, const char *clientId, uint32_t flags); -AQHOME_API int AQH_DataClient_Disconnect(AQH_OBJECT *o); +AQHOME_API int AQH_DataClient_Disconnect(AQH_DATACLIENT *dc); -AQHOME_API AQH_DEVICE_LIST *AQH_DataClient_GetDevices(AQH_OBJECT *o); -AQHOME_API AQH_VALUE_LIST *AQH_DataClient_GetValues(AQH_OBJECT *o, const char *deviceName, int modality); +AQHOME_API AQH_DEVICE_LIST *AQH_DataClient_GetDevices(AQH_DATACLIENT *dc); +AQHOME_API AQH_VALUE_LIST *AQH_DataClient_GetValues(AQH_DATACLIENT *dc, const char *deviceName, int modality); -AQHOME_API uint64_t AQH_DataClient_GetFirstData(AQH_OBJECT *o, const char *valueName, uint64_t *dataPtr, uint64_t maxNum); -AQHOME_API uint64_t AQH_DataClient_GetLastData(AQH_OBJECT *o, const char *valueName, uint64_t *dataPtr, uint64_t maxNum); -AQHOME_API uint64_t AQH_DataClient_GetPeriodData(AQH_OBJECT *o, const char *valueName, +AQHOME_API uint64_t AQH_DataClient_GetFirstData(AQH_DATACLIENT *dc, const char *valueName, uint64_t *dataPtr, uint64_t maxNum); +AQHOME_API uint64_t AQH_DataClient_GetLastData(AQH_DATACLIENT *dc, const char *valueName, uint64_t *dataPtr, uint64_t maxNum); +AQHOME_API uint64_t AQH_DataClient_GetPeriodData(AQH_DATACLIENT *dc, const char *valueName, uint64_t *dataPtr, uint64_t maxNum, uint64_t tsBegin, uint64_t tsEnd); -AQHOME_API int AQH_DataClient_SetData(AQH_OBJECT *o, const AQH_VALUE *v, const char *data); -AQHOME_API int AQH_DataClient_UpdateData(AQH_OBJECT *o, const AQH_VALUE *v, uint64_t timeStamp, double dataPoint); +AQHOME_API int AQH_DataClient_SetData(AQH_DATACLIENT *dc, const AQH_VALUE *v, const char *data); +AQHOME_API int AQH_DataClient_UpdateData(AQH_DATACLIENT *dc, const AQH_VALUE *v, uint64_t timeStamp, double dataPoint); + + +AQHOME_API int AQH_DataClient_ReadLocalArgs(AQH_DATACLIENT *dc, + GWEN_DB_NODE *dbGlobalArgs, const GWEN_ARGS *argDescrs, + int argc, char **argv); +AQHOME_API int AQH_DataClient_ConnectWithArgs(AQH_DATACLIENT *dc, uint32_t flags); +AQHOME_API GWEN_DB_NODE *AQH_DataClient_GetDbLocalArgs(const AQH_DATACLIENT *dc); #endif diff --git a/aqhome/dataclient/client_p.h b/aqhome/dataclient/client_p.h index fdfac3f..b62eadd 100644 --- a/aqhome/dataclient/client_p.h +++ b/aqhome/dataclient/client_p.h @@ -12,8 +12,9 @@ #include "aqhome/dataclient/client.h" -typedef struct AQH_DATA_CLIENT AQH_DATA_CLIENT; -struct AQH_DATA_CLIENT { +struct AQH_DATACLIENT { + AQH_EVENT_LOOP *eventLoop; + AQH_OBJECT *ipcEndpoint; int timeoutInSeconds; @@ -21,6 +22,9 @@ struct AQH_DATA_CLIENT { uint8_t protoVer; uint32_t lastMsgId; + + GWEN_DB_NODE *dbLocalArgs; + };