diff --git a/apps/aqhome-data/0BUILD b/apps/aqhome-data/0BUILD
index 97fde3b..b690de8 100644
--- a/apps/aqhome-data/0BUILD
+++ b/apps/aqhome-data/0BUILD
@@ -35,11 +35,6 @@
- aqhome_data.h
- aqhome_data_p.h
- fini.h
- init.h
- loop.h
server.h
server_p.h
s_connect.h
@@ -51,33 +46,11 @@
s_setdata.h
s_getdatapoints.h
s_moddevice.h
- c_connect.h
- c_updatedata.h
- c_getvalues.h
- c_getdevices.h
- c_getdatapoints.h
- c_setdata.h
- c_addvalue.h
- c_annvalue.h
- c_moddevice.h
$(local/typefiles)
- aqhome_data.c
- fini.c
- init.c
- loop.c
- c_connect.c
- c_updatedata.c
- c_getvalues.c
- c_getdevices.c
- c_getdatapoints.c
- c_setdata.c
- c_addvalue.c
- c_annvalue.c
- c_moddevice.c
server.c
s_connect.c
s_getdevices.c
diff --git a/apps/aqhome-data/aqhome_data.c b/apps/aqhome-data/aqhome_data.c
deleted file mode 100644
index 4223084..0000000
--- a/apps/aqhome-data/aqhome_data.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./aqhome_data_p.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-
-#include
-#include
-
-
-
-
-
-AQHOME_DATA *AqHomeData_new()
-{
- AQHOME_DATA *aqh;
-
- GWEN_NEW_OBJECT(AQHOME_DATA, aqh);
- aqh->storageMutex=GWEN_Mutex_new();
- aqh->requestTree=GWEN_MsgRequest_new();
-
- return aqh;
-}
-
-
-
-void AqHomeData_free(AQHOME_DATA *aqh)
-{
- if (aqh) {
- GWEN_Mutex_free(aqh->storageMutex);
-
- GWEN_MsgRequest_free(aqh->requestTree);
- GWEN_MsgEndpoint_free(aqh->ipcdEndpoint);
- GWEN_DB_Group_free(aqh->dbArgs);
- AQH_Storage_free(aqh->storage);
- free(aqh->pidFile);
-
- GWEN_FREE_OBJECT(aqh);
- }
-}
-
-
-
-GWEN_MSG_ENDPOINT *AqHomeData_GetIpcdEndpoint(const AQHOME_DATA *aqh)
-{
- return aqh?(aqh->ipcdEndpoint):NULL;
-}
-
-
-
-GWEN_DB_NODE *AqHomeData_GetDbArgs(const AQHOME_DATA *aqh)
-{
- return aqh?(aqh->dbArgs):NULL;
-}
-
-
-
-AQH_STORAGE *AqHomeData_GetStorage(const AQHOME_DATA *aqh)
-{
- return aqh?(aqh->storage):NULL;
-}
-
-
-
-GWEN_MSG_REQUEST *AqHomeData_GetRequestTree(const AQHOME_DATA *aqh)
-{
- return aqh?aqh->requestTree:NULL;
-}
-
-
-
-void AqHomeData_AddRequestToTree(AQHOME_DATA *aqh, GWEN_MSG_REQUEST *rq)
-{
- if (aqh && rq)
- GWEN_MsgRequest_Tree2_AddChild(aqh->requestTree, rq);
-}
-
-
-
-const char *AqHomeData_GetPidFile(const AQHOME_DATA *aqh)
-{
- return aqh?aqh->pidFile:NULL;
-}
-
-
-
-int AqHomeData_GetTimeout(const AQHOME_DATA *aqh)
-{
- return aqh?aqh->timeout:0;
-}
-
-
-
-int AqHomeData_LockStorage(AQHOME_DATA *aqh)
-{
- int rv;
-
- rv=GWEN_Mutex_Lock(aqh->storageMutex);
- if (rv<0) {
- DBG_ERROR(AQH_LOGDOMAIN, "Error obtaining lock on storage mutex");
- return rv;
- }
- return rv;
-}
-
-
-
-int AqHomeData_UnlockStorage(AQHOME_DATA *aqh)
-{
- int rv;
-
- rv=GWEN_Mutex_Unlock(aqh->storageMutex);
- if (rv<0) {
- DBG_ERROR(AQH_LOGDOMAIN, "Error releasing lock on storage mutex");
- return rv;
- }
- return rv;
-}
-
-
-
-GWEN_MSG_ENDPOINT *AqHomeData_GetIpcEndpointByServiceName(const AQHOME_DATA *aqh, const char *serviceName)
-{
- GWEN_MSG_ENDPOINT *ep;
-
- ep=GWEN_MsgEndpoint_Tree2_GetFirstChild(aqh->ipcdEndpoint);
- while(ep) {
- const char *s;
-
- s=AQH_IpcEndpoint_GetServiceName(ep);
- if (s && *s && strcasecmp(s, serviceName)==0)
- return ep;
- ep=GWEN_MsgEndpoint_Tree2_GetNext(ep);
- }
-
- return NULL;
-}
-
-
-
-
-
diff --git a/apps/aqhome-data/aqhome_data.h b/apps/aqhome-data/aqhome_data.h
deleted file mode 100644
index 17503f3..0000000
--- a/apps/aqhome-data/aqhome_data.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_H
-#define AQHOME_DATA_H
-
-
-#include "aqhome/data/storage.h"
-
-#include
-#include
-
-
-
-typedef struct AQHOME_DATA AQHOME_DATA;
-
-
-AQHOME_DATA *AqHomeData_new();
-void AqHomeData_free(AQHOME_DATA *aqh);
-
-GWEN_MSG_ENDPOINT *AqHomeData_GetIpcdEndpoint(const AQHOME_DATA *aqh);
-
-GWEN_MSG_ENDPOINT *AqHomeData_GetIpcEndpointByServiceName(const AQHOME_DATA *aqh, const char *serviceName);
-
-GWEN_DB_NODE *AqHomeData_GetDbArgs(const AQHOME_DATA *aqh);
-
-AQH_STORAGE *AqHomeData_GetStorage(const AQHOME_DATA *aqh);
-
-const char *AqHomeData_GetPidFile(const AQHOME_DATA *aqh);
-
-int AqHomeData_GetTimeout(const AQHOME_DATA *aqh);
-
-int AqHomeData_LockStorage(AQHOME_DATA *aqh);
-int AqHomeData_UnlockStorage(AQHOME_DATA *aqh);
-
-GWEN_MSG_REQUEST *AqHomeData_GetRequestTree(const AQHOME_DATA *aqh);
-void AqHomeData_AddRequestToTree(AQHOME_DATA *aqh, GWEN_MSG_REQUEST *rq);
-
-
-
-#endif
-
diff --git a/apps/aqhome-data/aqhome_data_p.h b/apps/aqhome-data/aqhome_data_p.h
deleted file mode 100644
index 65a2dc5..0000000
--- a/apps/aqhome-data/aqhome_data_p.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_P_H
-#define AQHOME_DATA_P_H
-
-
-#include "./aqhome_data.h"
-
-#include
-
-
-#define AQHOME_DATA_DEFAULT_PIDFILE "/var/run/aqhome-data.pid"
-#define AQHOME_DATA_DEFAULT_DATADIR "/var/lib/aqhome-data/data"
-#define AQHOME_DATA_DEFAULT_IPC_PORT 45456
-
-#define AQHOME_DATA_STATEFILENAME "statefile"
-
-
-
-struct AQHOME_DATA {
- GWEN_MSG_ENDPOINT *ipcdEndpoint;
-
- GWEN_DB_NODE *dbArgs;
-
- AQH_STORAGE *storage;
-
- char *pidFile;
-
- int timeout; /* timeout for run e.g. inside valgrind */
-
- GWEN_MUTEX *storageMutex;
-
- GWEN_MSG_REQUEST *requestTree;
-};
-
-
-#endif
-
diff --git a/apps/aqhome-data/c_addvalue.c b/apps/aqhome-data/c_addvalue.c
deleted file mode 100644
index 67d1fbe..0000000
--- a/apps/aqhome-data/c_addvalue.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./c_addvalue.h"
-#include "./aqhome_data_p.h"
-#include "./loop.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-#include "aqhome/ipc/msg_ipc_result.h"
-#include "aqhome/ipc/data/msg_data_values.h"
-#include "aqhome/ipc/msg_ipc_tag16.h"
-
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-void AqHomeData_HandleAddValue(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg)
-{
- GWEN_MSG *outMsg;
- int resultCode=AQH_MSG_IPC_SUCCESS;
- AQH_VALUE *recvdValue;
-
- AQH_ValuesDataIpcMsg_Parse(msg, 0);
- recvdValue=AQH_ValuesDataIpcMsg_ReadFirstValue(msg);
- if (recvdValue) {
- AQH_VALUE *value;
-
- value=AqHomeData_GetOrCreateValueForDriverWithTemplate(aqh, ep, recvdValue);
- if (value==NULL)
- resultCode=AQH_MSG_IPC_ERROR_PERMS;
- AQH_Value_free(recvdValue);
- }
-
- outMsg=AQH_ResultIpcMsg_new(AQH_MSGTYPE_IPC_DATA_RESULT,
- GWEN_MsgEndpoint_GetNextMessageId(ep), GWEN_IpcMsg_GetMsgId(msg),
- resultCode);
- GWEN_MsgEndpoint_AddSendMessage(ep, outMsg);
-}
-
-
-
diff --git a/apps/aqhome-data/c_addvalue.h b/apps/aqhome-data/c_addvalue.h
deleted file mode 100644
index 8220873..0000000
--- a/apps/aqhome-data/c_addvalue.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_C_ADDVALUE_H
-#define AQHOME_DATA_C_ADDVALUE_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_HandleAddValue(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg);
-
-
-
-#endif
-
-
-
-
-
diff --git a/apps/aqhome-data/c_annvalue.c b/apps/aqhome-data/c_annvalue.c
deleted file mode 100644
index 48d9519..0000000
--- a/apps/aqhome-data/c_annvalue.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2024 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./c_annvalue.h"
-#include "./aqhome_data_p.h"
-#include "./loop.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-#include "aqhome/ipc/data/msg_data_values.h"
-#include "aqhome/ipc/msg_ipc_tag16.h"
-
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-void AqHomeData_HandleAnnounceValue(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg)
-{
- AQH_VALUE *recvdValue;
-
- AQH_ValuesDataIpcMsg_Parse(msg, 0);
- recvdValue=AQH_ValuesDataIpcMsg_ReadFirstValue(msg);
- if (recvdValue) {
- AQH_VALUE *value;
-
- value=AqHomeData_GetOrCreateValueForDriverWithTemplate(aqh, ep, recvdValue);
- if (value==NULL) {
- DBG_ERROR(AQH_LOGDOMAIN, "Could not create announced value");
- }
- AQH_Value_free(recvdValue);
- }
-}
-
-
-
diff --git a/apps/aqhome-data/c_annvalue.h b/apps/aqhome-data/c_annvalue.h
deleted file mode 100644
index b19d753..0000000
--- a/apps/aqhome-data/c_annvalue.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2024 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_C_ANNVALUE_H
-#define AQHOME_DATA_C_ANNVALUE_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_HandleAnnounceValue(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg);
-
-
-
-#endif
-
-
-
-
-
diff --git a/apps/aqhome-data/c_connect.c b/apps/aqhome-data/c_connect.c
deleted file mode 100644
index 3eb1261..0000000
--- a/apps/aqhome-data/c_connect.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./c_connect.h"
-#include "./aqhome_data_p.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-#include "aqhome/ipc/msg_ipc_result.h"
-#include "aqhome/ipc/data/msg_data_connect.h"
-#include "aqhome/ipc/msg_ipc_tag16.h"
-
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-void AqHomeData_HandleConnect(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg)
-{
- GWEN_MSG *outMsg;
- int resultCode=AQH_MSG_IPC_SUCCESS;
- char *clientId=NULL;
- char *userId=NULL;
- char *passw=NULL;
- uint32_t flags;
-
- AQH_ConnectDataIpcMsg_Parse(msg, 0);
- clientId=AQH_Tag16IpcMsg_GetTagDataAsNewString(msg, AQH_MSGDATA_CONNECT_TAGS_CLIENTID, NULL);
- userId=AQH_Tag16IpcMsg_GetTagDataAsNewString(msg, AQH_MSGDATA_CONNECT_TAGS_USERID, NULL);
- flags=AQH_Tag16IpcMsg_GetTagDataAsUint32(msg, AQH_MSGDATA_CONNECT_TAGS_FLAGS, 0);
- passw=AQH_Tag16IpcMsg_GetTagDataAsNewString(msg, AQH_MSGDATA_CONNECT_TAGS_PASSWORD, NULL);
-
- if (clientId)
- AQH_IpcEndpoint_SetServiceName(ep, clientId);
- if (userId)
- AQH_IpcEndpoint_SetUserName(ep, userId);
-
- if (flags & AQH_MSGDATA_CONNECT_FLAGS_WANTUPDATES)
- GWEN_MsgEndpoint_AddFlags(ep, AQH_IPCENDPOINT_FLAGS_WANTUPDATES);
-
- /* TODO: add user management, for now we allow all */
- AQH_IpcEndpoint_SetPermissions(ep,
- AQH_IPCENDPOINT_PERMS_LISTVALUES |
- AQH_IPCENDPOINT_PERMS_READVALUE |
- AQH_IPCENDPOINT_PERMS_ADDVALUE |
- AQH_IPCENDPOINT_PERMS_LISTDATA |
- AQH_IPCENDPOINT_PERMS_READDATA |
- AQH_IPCENDPOINT_PERMS_ADDDATA |
- AQH_IPCENDPOINT_PERMS_LISTDEVICES |
- AQH_IPCENDPOINT_PERMS_READDEVICE |
- AQH_IPCENDPOINT_PERMS_ADDDEVICE |
- AQH_IPCENDPOINT_PERMS_MODDEVICE);
- free(passw);
- free(userId);
- free(clientId);
-
- outMsg=AQH_ResultIpcMsg_new(AQH_MSGTYPE_IPC_DATA_RESULT,
- GWEN_MsgEndpoint_GetNextMessageId(ep), GWEN_IpcMsg_GetMsgId(msg),
- resultCode);
- GWEN_MsgEndpoint_AddSendMessage(ep, outMsg);
-}
-
-
-
diff --git a/apps/aqhome-data/c_connect.h b/apps/aqhome-data/c_connect.h
deleted file mode 100644
index c6a3792..0000000
--- a/apps/aqhome-data/c_connect.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_C_CONNECT_H
-#define AQHOME_DATA_C_CONNECT_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_HandleConnect(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg);
-
-
-
-#endif
-
-
-
-
-
diff --git a/apps/aqhome-data/c_getdatapoints.c b/apps/aqhome-data/c_getdatapoints.c
deleted file mode 100644
index ebd8912..0000000
--- a/apps/aqhome-data/c_getdatapoints.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./c_getdatapoints.h"
-#include "./aqhome_data_p.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/data/msg_data_multidata.h"
-#include "aqhome/ipc/data/msg_data_getdata.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-#include "aqhome/ipc/msg_ipc_result.h"
-#include "aqhome/ipc/msg_ipc_tag16.h"
-
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-#define AQHOMEDATA_HANDLEGETDATAPOINTS_MAXTABLEENTRIES 2048
-#define AQHOMEDATA_HANDLEGETDATAPOINTS_MAXDATAPOINTS 1024
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-static int _getAndSendDataPoints(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep,
- const AQH_VALUE *value,
- uint64_t tsBegin, uint64_t tsEnd, uint64_t num, uint32_t refMsgId);
-static int _getAndSendDataPointsNoNum(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE *value, uint64_t tsBegin, uint64_t tsEnd,
- uint32_t refMsgId);
-static int _getAndSendDataPointsWithNum(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE *value, uint64_t num, uint32_t refMsgId);
-static void _sendDataPointsResponse(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE *value, const uint64_t *tablePtr,
- uint32_t refMsgId);
-static void _getAndSendLastDatapoint(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE *value, uint32_t refMsgId);
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-
-void AqHomeData_HandleGetDataPoints(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *recvdMsg)
-{
- GWEN_MSG *outMsg;
- int resultCode=AQH_MSG_IPC_SUCCESS;
-
- if (AQH_IpcEndpoint_GetPermissions(ep) & AQH_IPCENDPOINT_PERMS_READDATA) {
- AQH_VALUE *value;
- char *valueName;
- uint64_t tsBegin;
- uint64_t tsEnd;
- uint64_t numRequested;
-
- AQH_GetDataDataIpcMsg_Parse(recvdMsg, 0);
- valueName=AQH_Tag16IpcMsg_GetTagDataAsNewString(recvdMsg, AQH_MSGDATA_GETDATA_TAGS_NAME, NULL);
- tsBegin=AQH_Tag16IpcMsg_GetTagDataAsUint64(recvdMsg, AQH_MSGDATA_GETDATA_TAGS_BEGIN, 0);
- tsEnd=AQH_Tag16IpcMsg_GetTagDataAsUint64(recvdMsg, AQH_MSGDATA_GETDATA_TAGS_END, 0);
- numRequested=AQH_Tag16IpcMsg_GetTagDataAsUint64(recvdMsg, AQH_MSGDATA_GETDATA_TAGS_NUM, 0);
-
- value=AQH_Storage_GetValueByNameForSystem(aqh->storage, valueName);
- if (value) {
- resultCode=_getAndSendDataPoints(aqh, ep, value, tsBegin, tsEnd, numRequested, GWEN_IpcMsg_GetMsgId(recvdMsg));
- if (resultCode==AQH_MSG_IPC_SUCCESS)
- return;
- }
- else {
- DBG_INFO(NULL, "Value \"%s\" does not exist", valueName);
- resultCode=AQH_MSG_IPC_ERROR_NOTFOUND;
- }
- free(valueName);
- }
- else {
- DBG_ERROR(AQH_LOGDOMAIN, "No permissions to read data");
- resultCode=AQH_MSG_IPC_ERROR_PERMS;
- }
-
- outMsg=AQH_ResultIpcMsg_new(AQH_MSGTYPE_IPC_DATA_RESULT,
- GWEN_MsgEndpoint_GetNextMessageId(ep), GWEN_IpcMsg_GetMsgId(recvdMsg),
- resultCode);
- GWEN_MsgEndpoint_AddSendMessage(ep, outMsg);
-}
-
-
-
-int _getAndSendDataPoints(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE *value, uint64_t tsBegin, uint64_t tsEnd, uint64_t num,
- uint32_t refMsgId)
-{
- if (num==0)
- return _getAndSendDataPointsNoNum(aqh, ep, value, tsBegin, tsEnd, refMsgId);
- else if (num==1) {
- _getAndSendLastDatapoint(aqh, ep, value, refMsgId);
- return AQH_MSG_IPC_SUCCESS;
- }
- else
- return _getAndSendDataPointsWithNum(aqh, ep, value, num, refMsgId);
-}
-
-
-
-int _getAndSendDataPointsNoNum(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE *value, uint64_t tsBegin, uint64_t tsEnd,
- uint32_t refMsgId)
-{
- uint64_t valueId;
- uint64_t *tablePtr;
-
- valueId=AQH_Value_GetId(value);
- tablePtr=AQH_Storage_GetDataPoints(aqh->storage, valueId, tsBegin, tsEnd, AQHOMEDATA_HANDLEGETDATAPOINTS_MAXTABLEENTRIES);
- if (tablePtr) {
- _sendDataPointsResponse(aqh, ep, value, tablePtr, refMsgId);
- free(tablePtr);
- return AQH_MSG_IPC_SUCCESS;
- }
- else {
- DBG_INFO(NULL, "No matching datapoints for value \"%s\"", AQH_Value_GetNameForSystem(value));
- return AQH_MSG_IPC_ERROR_NODATA;
- }
-}
-
-
-
-int _getAndSendDataPointsWithNum(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE *value, uint64_t num, uint32_t refMsgId)
-{
- uint64_t valueId;
- uint64_t *tablePtr;
-
- if (num>AQHOMEDATA_HANDLEGETDATAPOINTS_MAXDATAPOINTS)
- num=AQHOMEDATA_HANDLEGETDATAPOINTS_MAXDATAPOINTS;
- valueId=AQH_Value_GetId(value);
- tablePtr=AQH_Storage_GetLastNDataPoints(aqh->storage, valueId, num);
- if (tablePtr) {
- _sendDataPointsResponse(aqh, ep, value, tablePtr, refMsgId);
- free(tablePtr);
- return AQH_MSG_IPC_SUCCESS;
- }
- else {
- DBG_INFO(NULL, "No matching datapoints for value \"%s\"", AQH_Value_GetNameForSystem(value));
- return AQH_MSG_IPC_ERROR_NODATA;
- }
-}
-
-
-
-void _sendDataPointsResponse(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE *value, const uint64_t *tablePtr,
- uint32_t refMsgId)
-{
- int numTableEntries;
- int numDataPoints;
- GWEN_MSG *outMsg;
-
- numTableEntries=(int)(tablePtr[0]);
- numDataPoints=numTableEntries/2;
- outMsg=AQH_MultiDataDataIpcMsg_new(AQH_MSGTYPE_IPC_DATA_GETDATA_RSP,
- GWEN_MsgEndpoint_GetNextMessageId(ep), refMsgId,
- value, &(tablePtr[1]), numDataPoints);
- GWEN_MsgEndpoint_AddSendMessage(ep, outMsg);
-}
-
-
-
-void _getAndSendLastDatapoint(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE *value, uint32_t refMsgId)
-{
- GWEN_MSG *outMsg;
- int resultCode=AQH_MSG_IPC_SUCCESS;
- int rv;
- uint64_t timestamp=0;
- double data=0.0;
-
- rv=AQH_Storage_GetLastDataPoint(aqh->storage, AQH_Value_GetId(value), ×tamp, &data);
- if (rv<0) {
- switch(rv) {
- case GWEN_ERROR_INVALID: resultCode=AQH_MSG_IPC_ERROR_INVALID; break;
- case GWEN_ERROR_NO_DATA: resultCode=AQH_MSG_IPC_ERROR_NODATA; break;
- default: resultCode=AQH_MSG_IPC_ERROR_GENERIC; break;
- }
- }
- else {
- outMsg=AQH_MultiDataDataIpcMsg_newForOne(AQH_MSGTYPE_IPC_DATA_GETDATA_RSP,
- GWEN_MsgEndpoint_GetNextMessageId(ep), refMsgId,
- value, timestamp, data);
- GWEN_MsgEndpoint_AddSendMessage(ep, outMsg);
- return;
- }
-
- outMsg=AQH_ResultIpcMsg_new(AQH_MSGTYPE_IPC_DATA_RESULT,
- GWEN_MsgEndpoint_GetNextMessageId(ep), refMsgId,
- resultCode);
- GWEN_MsgEndpoint_AddSendMessage(ep, outMsg);
-}
-
-
-
-
-
-
diff --git a/apps/aqhome-data/c_getdatapoints.h b/apps/aqhome-data/c_getdatapoints.h
deleted file mode 100644
index 3add821..0000000
--- a/apps/aqhome-data/c_getdatapoints.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_C_GETDATAPOINTS_H
-#define AQHOME_DATA_C_GETDATAPOINTS_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_HandleGetDataPoints(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg);
-
-
-
-#endif
-
-
-
-
-
diff --git a/apps/aqhome-data/c_getdevices.c b/apps/aqhome-data/c_getdevices.c
deleted file mode 100644
index 8b8ba69..0000000
--- a/apps/aqhome-data/c_getdevices.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./c_getdevices.h"
-#include "./aqhome_data_p.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/data/msg_data_devices.h"
-#include "aqhome/ipc/msg_ipc_result.h"
-
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-#define AQHOMEDATA_DEVICESPERMSG 10
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-static void _sendDeviceList(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_DEVICE_LIST *vl, uint32_t flags, uint32_t refMsgId);
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-void AqHomeData_HandleGetDevices(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const GWEN_MSG *msg)
-{
- const AQH_DEVICE_LIST *origDeviceList;
-
- DBG_INFO(NULL, "HandleGetDevices");
- origDeviceList=AQH_Storage_GetDeviceList(aqh->storage);
- if (origDeviceList) {
- DBG_INFO(NULL, "Have a list of %d devices", AQH_Device_List_GetCount(origDeviceList));
- if (AQH_Device_List_GetCount(origDeviceList)=AQHOMEDATA_DEVICESPERMSG) {
- DBG_INFO(NULL, "Sending %d devices", AQH_Device_List_GetCount(tmpDeviceList));
- _sendDeviceList(aqh, ep, tmpDeviceList, next?0:AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, GWEN_IpcMsg_GetMsgId(msg));
- AQH_Device_List_Clear(tmpDeviceList);
- }
- v=next;
- }
- if (AQH_Device_List_GetCount(tmpDeviceList)) {
- DBG_INFO(NULL, "Sending %d devices", AQH_Device_List_GetCount(tmpDeviceList));
- _sendDeviceList(aqh, ep, tmpDeviceList, AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, GWEN_IpcMsg_GetMsgId(msg)); /* send remaining */
- }
- AQH_Device_List_free(tmpDeviceList);
- }
- }
- else {
- /* empty list */
- _sendDeviceList(aqh, ep, NULL, AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, GWEN_IpcMsg_GetMsgId(msg));
- }
-}
-
-
-
-void _sendDeviceList(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_DEVICE_LIST *vl, uint32_t flags, uint32_t refMsgId)
-{
- GWEN_MSG *msg;
-
- msg=AQH_DevicesDataIpcMsg_new(AQH_MSGTYPE_IPC_DATA_GETDEVICES_RSP,
- GWEN_MsgEndpoint_GetNextMessageId(ep), refMsgId,
- flags, vl);
- GWEN_MsgEndpoint_AddSendMessage(ep, msg);
-}
-
-
-
diff --git a/apps/aqhome-data/c_getdevices.h b/apps/aqhome-data/c_getdevices.h
deleted file mode 100644
index 5d1dc01..0000000
--- a/apps/aqhome-data/c_getdevices.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_C_GETDEVICES_H
-#define AQHOME_DATA_C_GETDEVICES_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_HandleGetDevices(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const GWEN_MSG *msg);
-
-
-
-#endif
-
-
-
-
-
diff --git a/apps/aqhome-data/c_getlastdatapoint.c b/apps/aqhome-data/c_getlastdatapoint.c
deleted file mode 100644
index 33aac85..0000000
--- a/apps/aqhome-data/c_getlastdatapoint.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./c_getlastdatapoint.h"
-#include "./aqhome_data_p.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/data/msg_data_getdata.h"
-#include "aqhome/ipc/data/msg_data_multidata.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-#include "aqhome/ipc/msg_ipc_result.h"
-#include "aqhome/ipc/msg_ipc_tag16.h"
-
-#include
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-
-void AqHomeData_HandleGetLastDataPoint(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *recvdMsg)
-{
- GWEN_MSG *outMsg;
- int resultCode=AQH_MSG_IPC_SUCCESS;
-
- if (AQH_IpcEndpoint_GetPermissions(ep) & AQH_IPCENDPOINT_PERMS_READDATA) {
- char *valueName;
-
- AQH_GetDataDataIpcMsg_Parse(recvdMsg, 0);
- valueName=AQH_Tag16IpcMsg_GetTagDataAsNewString(recvdMsg, AQH_MSGDATA_GETDATA_TAGS_NAME, NULL);
- if (valueName && *valueName) {
- const AQH_VALUE *storedValue;
-
- storedValue=AQH_Storage_GetValueByNameForSystem(aqh->storage, valueName);
- if (storedValue) {
- uint64_t timestamp=0;
- double data=0.0;
- int rv;
-
- rv=AQH_Storage_GetLastDataPoint(aqh->storage, AQH_Value_GetId(storedValue), ×tamp, &data);
- if (rv<0) {
- switch(rv) {
- case GWEN_ERROR_INVALID: resultCode=AQH_MSG_IPC_ERROR_INVALID; break;
- case GWEN_ERROR_NO_DATA: resultCode=AQH_MSG_IPC_ERROR_NODATA; break;
- default: resultCode=AQH_MSG_IPC_ERROR_GENERIC; break;
- }
- }
- else {
- outMsg=AQH_MultiDataDataIpcMsg_newForOne(AQH_MSGTYPE_IPC_DATA_GETLASTDATA_RSP,
- GWEN_MsgEndpoint_GetNextMessageId(ep), GWEN_IpcMsg_GetMsgId(recvdMsg),
- storedValue, timestamp, data);
- GWEN_MsgEndpoint_AddSendMessage(ep, outMsg);
- free(valueName);
- return;
- }
- }
- else {
- DBG_INFO(NULL, "Value \"%s\" not found", valueName);
- resultCode=AQH_MSG_IPC_ERROR_NOTFOUND;
- }
- free(valueName);
- }
- else {
- DBG_INFO(NULL, "No name for value");
- resultCode=AQH_MSG_IPC_ERROR_NOTFOUND;
- }
- }
- else {
- DBG_ERROR(AQH_LOGDOMAIN, "No permissions to read data");
- resultCode=AQH_MSG_IPC_ERROR_PERMS;
- }
-
- outMsg=AQH_ResultIpcMsg_new(AQH_MSGTYPE_IPC_DATA_RESULT,
- GWEN_MsgEndpoint_GetNextMessageId(ep), GWEN_IpcMsg_GetMsgId(recvdMsg),
- resultCode);
- GWEN_MsgEndpoint_AddSendMessage(ep, outMsg);
-}
-
-
-
diff --git a/apps/aqhome-data/c_getlastdatapoint.h b/apps/aqhome-data/c_getlastdatapoint.h
deleted file mode 100644
index 2524c2d..0000000
--- a/apps/aqhome-data/c_getlastdatapoint.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_C_GETLASTDATAPOINT_H
-#define AQHOME_DATA_C_GETLASTDATAPOINT_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_HandleGetLastDataPoint(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg);
-
-
-
-#endif
-
-
-
-
-
diff --git a/apps/aqhome-data/c_getvalues.c b/apps/aqhome-data/c_getvalues.c
deleted file mode 100644
index 49bcf16..0000000
--- a/apps/aqhome-data/c_getvalues.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./c_getvalues.h"
-#include "./aqhome_data_p.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/data/msg_data_values.h"
-#include "aqhome/ipc/msg_ipc_result.h"
-
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-#define AQHOMEDATA_VALUESPERMSG 10
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-static void _sendValueList(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE_LIST *vl, uint32_t flags, uint32_t refMsgId);
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-void AqHomeData_HandleGetValues(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const GWEN_MSG *msg)
-{
- const AQH_VALUE_LIST *origValueList;
-
- DBG_INFO(NULL, "HandleGetValues");
- origValueList=AQH_Storage_GetValueList(aqh->storage);
- if (origValueList) {
- DBG_INFO(NULL, "Have a list of %d values", AQH_Value_List_GetCount(origValueList));
- if (AQH_Value_List_GetCount(origValueList)=AQHOMEDATA_VALUESPERMSG) {
- DBG_INFO(NULL, "Sending %d values", AQH_Value_List_GetCount(tmpValueList));
- _sendValueList(aqh, ep, tmpValueList, next?0:AQH_MSGDATA_VALUES_FLAGS_LASTMSG, GWEN_IpcMsg_GetMsgId(msg));
- AQH_Value_List_Clear(tmpValueList);
- }
- v=next;
- }
- if (AQH_Value_List_GetCount(tmpValueList)) {
- DBG_INFO(NULL, "Sending %d values", AQH_Value_List_GetCount(tmpValueList));
- _sendValueList(aqh, ep, tmpValueList, AQH_MSGDATA_VALUES_FLAGS_LASTMSG, GWEN_IpcMsg_GetMsgId(msg)); /* send remaining */
- }
- AQH_Value_List_free(tmpValueList);
- }
- }
- else {
- /* empty list */
- _sendValueList(aqh, ep, NULL, AQH_MSGDATA_VALUES_FLAGS_LASTMSG, GWEN_IpcMsg_GetMsgId(msg));
- }
-}
-
-
-
-void _sendValueList(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const AQH_VALUE_LIST *vl, uint32_t flags, uint32_t refMsgId)
-{
- GWEN_MSG *msg;
-
- msg=AQH_ValuesDataIpcMsg_new(AQH_MSGTYPE_IPC_DATA_GETVALUES_RSP,
- GWEN_MsgEndpoint_GetNextMessageId(ep), refMsgId,
- flags, vl);
- GWEN_MsgEndpoint_AddSendMessage(ep, msg);
-}
-
-
-
diff --git a/apps/aqhome-data/c_getvalues.h b/apps/aqhome-data/c_getvalues.h
deleted file mode 100644
index 5cdfde6..0000000
--- a/apps/aqhome-data/c_getvalues.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_C_GETVALUES_H
-#define AQHOME_DATA_C_GETVALUES_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_HandleGetValues(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, const GWEN_MSG *msg);
-
-
-
-#endif
-
-
-
-
-
diff --git a/apps/aqhome-data/c_moddevice.c b/apps/aqhome-data/c_moddevice.c
deleted file mode 100644
index 0d26117..0000000
--- a/apps/aqhome-data/c_moddevice.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./c_getlastdatapoint.h"
-#include "./aqhome_data_p.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/data/msg_data_devices.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-#include "aqhome/ipc/msg_ipc_result.h"
-#include "aqhome/ipc/msg_ipc_tag16.h"
-
-#include
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-
-void AqHomeData_HandleModDevice(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *recvdMsg)
-{
- GWEN_MSG *outMsg;
- int resultCode=AQH_MSG_IPC_SUCCESS;
-
- if (AQH_IpcEndpoint_GetPermissions(ep) & AQH_IPCENDPOINT_PERMS_MODDEVICE) {
- AQH_DEVICE *device;
-
- AQH_DevicesDataIpcMsg_Parse(recvdMsg, 0);
- device=AQH_DevicesDataIpcMsg_ReadFirstDevice(recvdMsg);
- if (device) {
- const char *deviceNameForSystem;
-
- deviceNameForSystem=AQH_Device_GetNameForSystem(device);
- if (deviceNameForSystem && *deviceNameForSystem) {
- AQH_DEVICE *storedDevice;
-
- storedDevice=AQH_Storage_GetDeviceByNameForSystem(aqh->storage, deviceNameForSystem);
- if (storedDevice) {
- const char *s;
-
- s=AQH_Device_GetNameForGui(device);
- if (s && *s)
- AQH_Device_SetNameForGui(storedDevice, s);
-
- s=AQH_Device_GetRoomName(device);
- if (s && *s)
- AQH_Device_SetRoomName(storedDevice, s);
-
- s=AQH_Device_GetLocation(device);
- if (s && *s)
- AQH_Device_SetLocation(storedDevice, s);
-
- s=AQH_Device_GetDescription(device);
- if (s && *s)
- AQH_Device_SetDescription(storedDevice, s);
-
- AQH_Storage_AddRuntimeFlags(aqh->storage, AQH_STORAGE_RTFLAGS_MODIFIED);
- resultCode=AQH_MSG_IPC_SUCCESS;
- }
- else {
- DBG_INFO(NULL, "Device \"%s\" not found", deviceNameForSystem);
- resultCode=AQH_MSG_IPC_ERROR_NOTFOUND;
- }
- }
- else {
- DBG_INFO(NULL, "No name for value");
- resultCode=AQH_MSG_IPC_ERROR_NOTFOUND;
- }
- }
- else {
- DBG_INFO(NULL, "No device info in message");
- resultCode=AQH_MSG_IPC_ERROR_INVALID;
- }
- }
- else {
- DBG_ERROR(AQH_LOGDOMAIN, "No permissions to read data");
- resultCode=AQH_MSG_IPC_ERROR_PERMS;
- }
-
- outMsg=AQH_ResultIpcMsg_new(AQH_MSGTYPE_IPC_DATA_RESULT,
- GWEN_MsgEndpoint_GetNextMessageId(ep), GWEN_IpcMsg_GetMsgId(recvdMsg),
- resultCode);
- GWEN_MsgEndpoint_AddSendMessage(ep, outMsg);
-}
-
-
-
diff --git a/apps/aqhome-data/c_moddevice.h b/apps/aqhome-data/c_moddevice.h
deleted file mode 100644
index e3cea44..0000000
--- a/apps/aqhome-data/c_moddevice.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_C_MODDEVICE_H
-#define AQHOME_DATA_C_MODDEVICE_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_HandleModDevice(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *recvdMsg);
-
-
-
-#endif
-
-
-
-
-
diff --git a/apps/aqhome-data/c_setdata.c b/apps/aqhome-data/c_setdata.c
deleted file mode 100644
index 326e8fd..0000000
--- a/apps/aqhome-data/c_setdata.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./c_setdata.h"
-#include "./aqhome_data_p.h"
-#include "./loop.h"
-#include "aqhome/aqhome.h"
-#include "aqhome/ipc/requests.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/data/msg_data_set.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-#include "aqhome/ipc/msg_ipc_result.h"
-#include "aqhome/ipc/msg_ipc_tag16.h"
-
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-#define R_SETDATA_REQUEST_EXPIRE_SECS 20
-#define R_SETDATA_SUBREQUEST_EXPIRE_SECS 10
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-static GWEN_MSG_REQUEST *_mkRequest_SetData(AQHOME_DATA *aqh,
- GWEN_MSG_ENDPOINT *epSrc, uint32_t requestMsgId,
- GWEN_MSG_ENDPOINT *epDriver,
- const AQH_VALUE *v, const char *data);
-static void _rqSubRequestFinished(GWEN_MSG_REQUEST *rq, GWEN_MSG_REQUEST *subRq, int reason);
-static void _rqAbort(GWEN_MSG_REQUEST *rq, int reason);
-
-static GWEN_MSG_REQUEST *_mkSubRequest_SetData(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *epDriver, const AQH_VALUE *v, const char *data);
-static int _subRqHandleResponse(GWEN_MSG_REQUEST *rq, GWEN_MSG *msg);
-static void _subRqAbort(GWEN_MSG_REQUEST *rq, int reason);
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-void AqHomeData_HandleSetData(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *epSrc, GWEN_MSG *recvdMsg)
-{
- uint32_t msgId;
- AQH_VALUE *recvdValue;
- const char *valueName;
- char *valueDataFreeable;
- AQH_VALUE *systemValue;
-
- msgId=GWEN_IpcMsg_GetMsgId(recvdMsg);
- DBG_INFO(NULL, "Received IPC SetDataRequest message (msgId=%d)", msgId);
-
- AQH_SetDataIpcMsg_Parse(recvdMsg, 0);
- recvdValue=AQH_SetDataIpcMsg_ReadValue(recvdMsg);
- valueName=recvdValue?AQH_Value_GetNameForSystem(recvdValue):NULL;
- valueDataFreeable=AQH_SetDataIpcMsg_ReadData(recvdMsg);
-
- systemValue=AQH_Storage_GetValueByNameForSystem(aqh->storage, valueName);
- if (systemValue) {
- if (AQH_Value_GetValueType(systemValue)==AQH_ValueType_Actor) {
- const char *driverName;
-
- driverName=AQH_Value_GetDriver(systemValue);
- if (driverName && *driverName) {
- GWEN_MSG_ENDPOINT *epDriver;
-
- epDriver=AqHomeData_GetIpcEndpointByServiceName(aqh, driverName);
- if (epDriver) {
- GWEN_MSG_REQUEST *rq;
-
- DBG_DEBUG(NULL, "Creating SETDATA request for driver endpoint (%s)", GWEN_MsgEndpoint_GetName(epDriver));
- rq=_mkRequest_SetData(aqh, epSrc, msgId, epDriver, systemValue, valueDataFreeable);
- AqHomeData_AddRequestToTree(aqh, rq);
- }
- else {
- DBG_ERROR(NULL, "Driver \"%s\" not available", driverName);
- AQH_IpcEndpoint_SendResponseResult(epSrc, msgId, AQH_MSGTYPE_IPC_DATA_RESULT, AQH_MSG_IPC_ERROR_GENERIC);
- }
- }
- else {
- DBG_ERROR(NULL, "No driver name");
- AQH_IpcEndpoint_SendResponseResult(epSrc, msgId, AQH_MSGTYPE_IPC_DATA_RESULT, AQH_MSG_IPC_ERROR_GENERIC);
- }
- }
- else {
- DBG_ERROR(NULL, "Value \"%s\" is not an actor", valueName);
- AQH_IpcEndpoint_SendResponseResult(epSrc, msgId, AQH_MSGTYPE_IPC_DATA_RESULT, AQH_MSG_IPC_ERROR_INVALID);
- }
- }
- else {
- DBG_ERROR(NULL, "Unknown value \"%s\"", valueName);
- AQH_IpcEndpoint_SendResponseResult(epSrc, msgId, AQH_MSGTYPE_IPC_DATA_RESULT, AQH_MSG_IPC_ERROR_NOTFOUND);
- }
- AQH_Value_free(recvdValue);
- free(valueDataFreeable);
-}
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * IPC Request SETDATA
- */
-
-GWEN_MSG_REQUEST *_mkRequest_SetData(AQHOME_DATA *aqh,
- GWEN_MSG_ENDPOINT *epSrc, uint32_t requestMsgId,
- GWEN_MSG_ENDPOINT *epDriver,
- const AQH_VALUE *v, const char *data)
-{
- GWEN_MSG_REQUEST *rq;
- GWEN_MSG_REQUEST *subRq;
-
- rq=GWEN_MsgRequest_new();
- GWEN_MsgRequest_SetPrivateData(rq, aqh);
- GWEN_MsgRequest_SetEndpoint(rq, epSrc);
- GWEN_MsgRequest_SetRequestMsgId(rq, requestMsgId);
- GWEN_MsgRequest_SetSubRequestFinishedFn(rq, _rqSubRequestFinished);
- GWEN_MsgRequest_SetAbortFn(rq, _rqAbort);
- GWEN_MsgRequest_SetTimestamps(rq, R_SETDATA_REQUEST_EXPIRE_SECS);
-
- subRq=_mkSubRequest_SetData(aqh, epDriver, v, data);
- GWEN_MsgRequest_Tree2_AddChild(rq, subRq);
-
- return rq;
-}
-
-
-
-void _rqSubRequestFinished(GWEN_MSG_REQUEST *rq, GWEN_MSG_REQUEST *subRq, int reason)
-{
- GWEN_MSG_ENDPOINT *ep;
- uint32_t refMsgId;
- int result;
-
- DBG_DEBUG(NULL, "SubRequest finished (reason: %d)", reason);
- refMsgId=GWEN_MsgRequest_GetRequestMsgId(rq);
- ep=GWEN_MsgRequest_GetEndpoint(rq);
- result=GWEN_MsgRequest_GetResult(subRq);
-
- if (reason==GWEN_MSG_REQUEST_REASON_ABORTED)
- AQH_IpcEndpoint_SendResponseResult(ep, refMsgId, AQH_MSGTYPE_IPC_DATA_RESULT, AQH_MSG_IPC_ERROR_GENERIC);
- else
- AQH_IpcEndpoint_SendResponseResult(ep, refMsgId, AQH_MSGTYPE_IPC_DATA_RESULT, result);
-
- GWEN_MsgRequest_SetResult(rq, result);
- GWEN_MsgRequest_SetState(rq, GWEN_MSG_REQUEST_STATE_DONE);
-}
-
-
-
-void _rqAbort(GWEN_MSG_REQUEST *rq, int reason)
-{
- GWEN_MSG_ENDPOINT *ep;
- uint32_t refMsgId;
- GWEN_MSG_REQUEST *rqParent;
-
- DBG_INFO(NULL, "Aborting request");
- refMsgId=GWEN_MsgRequest_GetRequestMsgId(rq);
- ep=GWEN_MsgRequest_GetEndpoint(rq);
- AQH_IpcEndpoint_SendResponseResult(ep, refMsgId, AQH_MSGTYPE_IPC_DATA_RESULT, AQH_MSG_IPC_ERROR_GENERIC);
- GWEN_MsgRequest_SetState(rq, GWEN_MSG_REQUEST_STATE_DONE);
-
- rqParent=GWEN_MsgRequest_Tree2_GetParent(rq);
- if (rqParent)
- GWEN_MsgRequest_SubRequestFinished(rqParent, rq, reason);
-}
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * Driver Request SETDATA
- */
-
-
-GWEN_MSG_REQUEST *_mkSubRequest_SetData(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *epDriver, const AQH_VALUE *v, const char *data)
-{
- GWEN_MSG_REQUEST *rq;
- uint16_t msgId;
- GWEN_MSG *driverMsg;
-
- rq=GWEN_MsgRequest_new();
- GWEN_MsgRequest_SetPrivateData(rq, aqh);
- GWEN_MsgRequest_SetEndpoint(rq, epDriver);
-
- GWEN_MsgRequest_SetHandleResponseFn(rq, _subRqHandleResponse);
- GWEN_MsgRequest_SetAbortFn(rq, _subRqAbort);
-
- msgId=GWEN_MsgEndpoint_GetNextMessageId(epDriver);
- GWEN_MsgRequest_SetRequestMsgId(rq, msgId);
- GWEN_MsgRequest_SetTimestamps(rq, R_SETDATA_SUBREQUEST_EXPIRE_SECS);
-
- driverMsg=AQH_SetDataIpcMsg_new(AQH_MSGTYPE_IPC_DATA_SETDATA, msgId, 0, v, data);
- GWEN_MsgEndpoint_AddSendMessage(epDriver, driverMsg);
-
- return rq;
-}
-
-
-
-int _subRqHandleResponse(GWEN_MSG_REQUEST *rq, GWEN_MSG *msg)
-{
- DBG_DEBUG(NULL, "Checking message from driver");
- if (GWEN_IpcMsg_GetCode(msg)==AQH_MSGTYPE_IPC_DATA_RESULT) {
- uint32_t result;
- GWEN_MSG_REQUEST *rqParent;
-
- result=AQH_ResultIpcMsg_GetResultCode(msg);
- DBG_INFO(NULL, "Received result for request: %d", result);
- GWEN_MsgRequest_SetResult(rq, result);
- GWEN_MsgRequest_SetState(rq, GWEN_MSG_REQUEST_STATE_DONE);
- rqParent=GWEN_MsgRequest_Tree2_GetParent(rq);
- if (rqParent)
- GWEN_MsgRequest_SubRequestFinished(rqParent, rq, GWEN_MSG_REQUEST_REASON_DONE);
- return GWEN_MSG_REQUEST_RESULT_HANDLED;
- }
- else {
- DBG_ERROR(NULL, "Unexpected response message %d", GWEN_IpcMsg_GetCode(msg));
- }
-
- return GWEN_MSG_REQUEST_RESULT_NOT_HANDLED;
-}
-
-
-
-void _subRqAbort(GWEN_MSG_REQUEST *rq, int reason)
-{
- GWEN_MSG_REQUEST *rqParent;
-
- DBG_INFO(NULL, "Aborting request");
-
- GWEN_MsgRequest_SetResult(rq, AQH_MSG_IPC_ERROR_GENERIC);
- GWEN_MsgRequest_SetState(rq, GWEN_MSG_REQUEST_STATE_DONE);
-
- rqParent=GWEN_MsgRequest_Tree2_GetParent(rq);
- if (rqParent)
- GWEN_MsgRequest_SubRequestFinished(rqParent, rq, reason);
-}
-
-
diff --git a/apps/aqhome-data/c_setdata.h b/apps/aqhome-data/c_setdata.h
deleted file mode 100644
index f4c0566..0000000
--- a/apps/aqhome-data/c_setdata.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_C_SETDATA_H
-#define AQHOME_DATA_C_SETDATA_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_HandleSetData(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *recvdMsg);
-
-
-
-#endif
-
-
-
-
-
diff --git a/apps/aqhome-data/c_updatedata.c b/apps/aqhome-data/c_updatedata.c
deleted file mode 100644
index f515f24..0000000
--- a/apps/aqhome-data/c_updatedata.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./c_updatedata.h"
-#include "./aqhome_data_p.h"
-#include "./loop.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/data/msg_data_multidata.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-#include "aqhome/ipc/msg_ipc_result.h"
-#include "aqhome/ipc/msg_ipc_tag16.h"
-
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-#define DISABLE_DEBUGLOG
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-static int _storeDataPoints(AQHOME_DATA *aqh, const AQH_VALUE *v, const uint64_t *dataPoints, unsigned int numValues);
-static void _sendDataChangedMsgToAllClients(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *epSrc, const AQH_VALUE *v,
- const uint64_t *dataPoints, uint32_t numValues);
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-void AqHomeData_HandleUpdateData(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *recvdMsg)
-{
- GWEN_MSG *outMsg;
- int resultCode=AQH_MSG_IPC_SUCCESS;
- const GWEN_TAG16 *tag;
- AQH_VALUE *recvdValue;
- const char *valueName;
- const uint64_t *dataPoints=NULL;
- unsigned int numberOfPoints=0;
-
- AQH_MultiDataDataIpcMsg_Parse(recvdMsg, 0);
-
- recvdValue=AQH_MultiDataDataIpcMsg_ReadValue(recvdMsg);
- valueName=recvdValue?AQH_Value_GetName(recvdValue):NULL;
- tag=AQH_Tag16IpcMsg_FindFirstTagByType(recvdMsg, AQH_MSGDATA_MULTIDATA_TAGS_DATA);
- dataPoints=tag?((const uint64_t*)GWEN_Tag16_GetTagData(tag)):NULL;
- numberOfPoints=(tag?GWEN_Tag16_GetTagLength(tag):0)/(2*sizeof(uint64_t));
-
- if (numberOfPoints>0) {
- AQH_VALUE *value;
-
- value=AqHomeData_GetOrCreateValueForDriverWithTemplate(aqh, ep, recvdValue);
- if (value) {
- resultCode=_storeDataPoints(aqh, value, dataPoints, numberOfPoints);
- if (resultCode==AQH_MSG_IPC_SUCCESS)
- _sendDataChangedMsgToAllClients(aqh, ep, value, dataPoints, numberOfPoints);
- }
- else {
- DBG_INFO(NULL, "No permissions to add datapoint for value \"%s\"", valueName);
- resultCode=AQH_MSG_IPC_ERROR_PERMS;
- }
- }
- else {
- DBG_INFO(NULL, "No datapoints");
- resultCode=AQH_MSG_IPC_ERROR_INVALID;
- }
- AQH_Value_free(recvdValue);
-
- outMsg=AQH_ResultIpcMsg_new(AQH_MSGTYPE_IPC_DATA_RESULT,
- GWEN_MsgEndpoint_GetNextMessageId(ep), GWEN_IpcMsg_GetMsgId(recvdMsg),
- resultCode);
- GWEN_MsgEndpoint_AddSendMessage(ep, outMsg);
-}
-
-
-
-int _storeDataPoints(AQHOME_DATA *aqh, const AQH_VALUE *v, const uint64_t *dataPoints, unsigned int numValues)
-{
- uint32_t i;
-
- for(i=0; istorage, AQH_Value_GetId(v), timestamp, u.f);
- if (rv<0) {
- DBG_INFO(NULL, "here (%d)", rv);
- return AQH_MSG_IPC_ERROR_GENERIC;
- }
- else {
- DBG_DEBUG(NULL, "Datapoint added for value \"%s\"", AQH_Value_GetNameForSystem(v));
- }
- } /* for */
-
- return AQH_MSG_IPC_SUCCESS;
-}
-
-
-
-void _sendDataChangedMsgToAllClients(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *epSrc, const AQH_VALUE *v,
- const uint64_t *dataPoints, uint32_t numValues)
-{
- GWEN_MSG_ENDPOINT *ep;
-
- ep=GWEN_MsgEndpoint_Tree2_GetFirstChild(aqh->ipcdEndpoint);
- while(ep) {
- if (ep!=epSrc) {
- if (GWEN_MsgEndpoint_GetFlags(ep) & AQH_IPCENDPOINT_FLAGS_WANTUPDATES) {
- GWEN_MSG *msg;
-
- DBG_DEBUG(AQH_LOGDOMAIN, "Sending update msg to endpoint %s", GWEN_MsgEndpoint_GetName(ep));
- msg=AQH_MultiDataDataIpcMsg_new(AQH_MSGTYPE_IPC_DATA_DATACHANGED,
- GWEN_MsgEndpoint_GetNextMessageId(ep), 0,
- v, dataPoints, numValues);
- GWEN_MsgEndpoint_AddSendMessage(ep, msg);
- }
- else {
- DBG_DEBUG(AQH_LOGDOMAIN, "Endpoint %s doesn't want updates", GWEN_MsgEndpoint_GetName(ep));
- }
- }
- else {
- DBG_DEBUG(AQH_LOGDOMAIN, "Not sending update msg to source of updates");
- }
- ep=GWEN_MsgEndpoint_Tree2_GetNext(ep);
- }
-}
-
-
-
diff --git a/apps/aqhome-data/c_updatedata.h b/apps/aqhome-data/c_updatedata.h
deleted file mode 100644
index ca09fd2..0000000
--- a/apps/aqhome-data/c_updatedata.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_C_UPDATEDATA_H
-#define AQHOME_DATA_C_UPDATEDATA_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_HandleUpdateData(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *recvdMsg);
-
-
-
-#endif
-
-
-
-
-
diff --git a/apps/aqhome-data/fini.c b/apps/aqhome-data/fini.c
deleted file mode 100644
index 6bd434c..0000000
--- a/apps/aqhome-data/fini.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./fini.h"
-#include "./aqhome_data_p.h"
-
-#include
-#include
-#include
-#include
-
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-static void _disconnectTree(GWEN_MSG_ENDPOINT *ep);
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-void AqHomeData_Fini(AQHOME_DATA *aqh)
-{
- if (aqh) {
- if (aqh->ipcdEndpoint) {
- _disconnectTree(aqh->ipcdEndpoint);
- GWEN_MsgEndpoint_Disconnect(aqh->ipcdEndpoint);
- }
- GWEN_MsgEndpoint_free(aqh->ipcdEndpoint);
- aqh->ipcdEndpoint=NULL;
-
- if (aqh->pidFile)
- remove(aqh->pidFile);
- }
-}
-
-
-
-void _disconnectTree(GWEN_MSG_ENDPOINT *ep)
-{
- GWEN_MSG_ENDPOINT *epChild;
-
- epChild=GWEN_MsgEndpoint_Tree2_GetFirstChild(ep);
- while(epChild) {
- _disconnectTree(epChild);
- epChild=GWEN_MsgEndpoint_Tree2_GetNext(epChild);
- } /* while */
-
- GWEN_MsgEndpoint_Disconnect(ep);
-}
-
-
-
-
diff --git a/apps/aqhome-data/fini.h b/apps/aqhome-data/fini.h
deleted file mode 100644
index 93564fd..0000000
--- a/apps/aqhome-data/fini.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_FINI_H
-#define AQHOME_DATA_FINI_H
-
-
-#include "./aqhome_data.h"
-
-
-
-void AqHomeData_Fini(AQHOME_DATA *aqh);
-
-
-
-#endif
-
-
diff --git a/apps/aqhome-data/init.c b/apps/aqhome-data/init.c
deleted file mode 100644
index dd98631..0000000
--- a/apps/aqhome-data/init.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./init.h"
-#include "./aqhome_data_p.h"
-
-#include "aqhome/aqhome.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#ifdef HAVE_SYS_TYPES_H
-# include
-#endif
-
-#ifdef HAVE_SYS_STAT_H
-# include
-#endif
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-#define I18N(msg) msg
-#define I18S(msg) msg
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-static int _setupStorage(AQHOME_DATA *aqh, GWEN_DB_NODE *dbArgs);
-
-static void _setupIpc(AQHOME_DATA *aqh, GWEN_DB_NODE *dbArgs);
-
-static GWEN_MSG_ENDPOINT *_acceptIpcFn(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKET *sk, const GWEN_INETADDRESS *addr, void *data);
-
-static int _readArgs(int argc, char **argv, GWEN_DB_NODE *dbArgs);
-static int _createPidFile(const char *pidFilename);
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-int AqHomeData_Init(AQHOME_DATA *aqh, int argc, char **argv)
-{
- GWEN_DB_NODE *dbArgs;
- int rv;
- const char *s;
-
- dbArgs=GWEN_DB_Group_new("args");
- rv=_readArgs(argc, argv, dbArgs);
- if (rv<0) {
- DBG_ERROR(NULL, "Error reading args (%d)", rv);
- return rv;
- }
- AQH_MergeConfigFileIntoConfig(dbArgs, "ConfigFile");
-
- aqh->dbArgs=dbArgs;
-
- s=GWEN_DB_GetCharValue(dbArgs, "loglevel", 0, NULL);
- if (s && *s) {
- GWEN_LOGGER_LEVEL ll;
-
- ll=GWEN_Logger_Name2Level(s);
- GWEN_Logger_SetLevel(NULL, ll);
- }
-
- aqh->timeout=GWEN_DB_GetIntValue(dbArgs, "timeout", 0, 0);
-
- s=GWEN_DB_GetCharValue(dbArgs, "pidfile", 0, AQHOME_DATA_DEFAULT_PIDFILE);
- if (s && *s) {
- free(aqh->pidFile);
- aqh->pidFile=strdup(s);
- rv=_createPidFile(s);
- if (rv<0) {
- DBG_ERROR(NULL, "Error creating PID file (%d)", rv);
- return rv;
- }
- }
-
- rv=_setupStorage(aqh, dbArgs);
- if (rv<0) {
- DBG_INFO(NULL, "here (%d)", rv);
- return rv;
- }
-
- _setupIpc(aqh, dbArgs);
-
- return 0;
-}
-
-
-
-int _setupStorage(AQHOME_DATA *aqh, GWEN_DB_NODE *dbArgs)
-{
- const char *dataFolder;
- GWEN_BUFFER *nameBuf;
- AQH_STORAGE *sto;
- int rv;
-
- dataFolder=GWEN_DB_GetCharValue(dbArgs, "dataFolder", 0, AQHOME_DATA_DEFAULT_DATADIR);
- nameBuf=GWEN_Buffer_new(0, 256, 0, 1);
- GWEN_Buffer_AppendArgs(nameBuf, "%s%s%s", dataFolder, GWEN_DIR_SEPARATOR_S, AQHOME_DATA_STATEFILENAME);
-
- sto=AQH_Storage_new();
- AQH_Storage_SetStateFile(sto, GWEN_Buffer_GetStart(nameBuf));
- AQH_Storage_SetDataFileFolder(sto, dataFolder);
- GWEN_Buffer_free(nameBuf);
-
- rv=AQH_Storage_Init(sto);
- if (rv<0) {
- DBG_INFO(NULL, "here (%d)", rv);
- AQH_Storage_free(sto);
- return rv;
- }
- aqh->storage=sto;
- return 0;
-}
-
-
-
-void _setupIpc(AQHOME_DATA *aqh, GWEN_DB_NODE *dbArgs)
-{
- const char *tcpAddress;
- int tcpPort;
-
- tcpAddress=GWEN_DB_GetCharValue(dbArgs, "tcpAddress", 0, NULL);
- if (!(tcpAddress && *tcpAddress))
- tcpAddress=GWEN_DB_GetCharValue(dbArgs, "ConfigFile/brokerAddress", 0, NULL);
-
- tcpPort=GWEN_DB_GetIntValue(dbArgs, "tcpPort", 0, -1);
- if (tcpPort<0)
- tcpPort=GWEN_DB_GetIntValue(dbArgs, "ConfigFile/brokerPort", 0, AQHOME_DATA_DEFAULT_IPC_PORT);
-
- if (tcpAddress && *tcpAddress && tcpPort>0) {
- GWEN_MSG_ENDPOINT *ep;
-
- DBG_INFO(NULL, "Starting TCP service on \"%s\":%d", tcpAddress, tcpPort);
- ep=GWEN_TcpdEndpoint_new(tcpAddress, tcpPort, NULL, 0);
- GWEN_TcpdEndpoint_SetAcceptFn(ep, _acceptIpcFn, aqh);
-
- aqh->ipcdEndpoint=ep;
- }
-}
-
-
-
-GWEN_MSG_ENDPOINT *_acceptIpcFn(GWEN_MSG_ENDPOINT *ep,
- GWEN_SOCKET *sk,
- const GWEN_INETADDRESS *addr,
- GWEN_UNUSED void *data)
-{
-/* AQHOME_DATA *aqh;
- *
- * aqh=(AQHOME_DATA*) data;
- */
- DBG_INFO(NULL, "Incoming IPC connection");
- return AQH_IpcEndpoint_CreateIpcTcpServiceForSocket(sk, NULL, 0);
-}
-
-
-
-int _createPidFile(const char *pidFilename)
-{
- FILE *f;
- int pidfd;
-
- if (remove(pidFilename)==0) {
- DBG_ERROR(0, "Old PID file existed, removed. (Unclean shutdown?)");
- }
-
-#ifdef HAVE_SYS_STAT_H
- pidfd = open(pidFilename, O_EXCL|O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
- if (pidfd < 0) {
- DBG_ERROR(NULL, "Could not create PID file \"%s\" (%s), aborting.", pidFilename, strerror(errno));
- return GWEN_ERROR_IO;
- }
-
- f = fdopen(pidfd, "w");
-#else /* HAVE_STAT_H */
- f=fopen(pidFilename,"w+");
-#endif /* HAVE_STAT_H */
-
- /* write pid */
-#ifdef HAVE_GETPID
- fprintf(f,"%d\n",getpid());
-#else
- fprintf(f,"-1\n");
-#endif
- if (fclose(f)) {
- DBG_ERROR(0, "Could not close PID file \"%s\" (%s), aborting.", pidFilename, strerror(errno));
- return GWEN_ERROR_IO;
- }
- return 0;
-}
-
-
-
-
-int _readArgs(int argc, char **argv, GWEN_DB_NODE *dbArgs)
-{
- int rv;
- const GWEN_ARGS args[]= {
- {
- GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
- GWEN_ArgsType_Char, /* type */
- "loglevel", /* name */
- 0, /* minnum */
- 1, /* maxnum */
- "L", /* short option */
- "loglevel", /* long option */
- I18S("Specify loglevel"), /* short description */
- I18S("Specify loglevel") /* long description */
- },
- {
- GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
- GWEN_ArgsType_Char, /* type */
- "tcpAddress", /* name */
- 0, /* minnum */
- 1, /* maxnum */
- "t", /* short option */
- "tcpaddress", /* long option */
- I18S("Specify the TCP address to listen on (disabled if missing)"),
- I18S("Specify the TCP address to listen on (disabled if missing)")
- },
- {
- GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
- GWEN_ArgsType_Int, /* type */
- "tcpPort", /* name */
- 0, /* minnum */
- 1, /* maxnum */
- "P", /* short option */
- "tcpport", /* long option */
- I18S("Specify the TCP port to listen on"),
- I18S("Specify the TCP port to listen on")
- },
- {
- GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
- GWEN_ArgsType_Char, /* type */
- "datafolder", /* name */
- 0, /* minnum */
- 1, /* maxnum */
- NULL, /* short option */
- "datafolder", /* long option */
- I18S("Folder where data files are stored"),
- I18S("Folder where data files are stored")
- },
- {
- GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
- GWEN_ArgsType_Char, /* type */
- "pidfile", /* name */
- 0, /* minnum */
- 1, /* maxnum */
- "p", /* short option */
- "pidfile", /* long option */
- I18S("Specify the PID file"),
- I18S("Specify the PID file")
- },
- {
- GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
- GWEN_ArgsType_Int, /* type */
- "timeout", /* name */
- 0, /* minnum */
- 1, /* maxnum */
- "T", /* short option */
- "timeout", /* long option */
- I18S("Specify timeout in second (default: no timeout)"),
- I18S("Specify timeout in second (default: no timeout)")
- },
- {
- GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
- GWEN_ArgsType_Int, /* type */
- "help", /* name */
- 0, /* minnum */
- 0, /* maxnum */
- "h", /* short option */
- "help",
- I18S("Show this help screen."),
- I18S("Show this help screen.")
- }
- };
-
- rv=GWEN_Args_Check(argc, argv, 1, 0, args, dbArgs);
- if (rv==GWEN_ARGS_RESULT_ERROR) {
- fprintf(stderr, "ERROR: Could not parse arguments main\n");
- return GWEN_ERROR_INVALID;
- }
- else if (rv==GWEN_ARGS_RESULT_HELP) {
- GWEN_BUFFER *ubuf;
-
- ubuf=GWEN_Buffer_new(0, 1024, 0, 1);
- GWEN_Buffer_AppendArgs(ubuf,
- I18N("This is version %s.\nUsage: %s [OPTIONS]\n\nOptions:\n"),
- AQHOME_VERSION_STRING,
- argv[0]);
- if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) {
- fprintf(stderr, "ERROR: Could not create help string\n");
- return 1;
- }
- GWEN_Buffer_AppendString(ubuf, "\n");
-
- fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf));
- GWEN_Buffer_free(ubuf);
- return GWEN_ERROR_CLOSE;
- }
- return 0;
-}
-
-
-
diff --git a/apps/aqhome-data/init.h b/apps/aqhome-data/init.h
deleted file mode 100644
index 082bbc2..0000000
--- a/apps/aqhome-data/init.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_INIT_H
-#define AQHOME_DATA_INIT_H
-
-
-#include "./aqhome_data.h"
-
-
-
-int AqHomeData_Init(AQHOME_DATA *aqh, int argc, char **argv);
-
-
-
-#endif
-
-
diff --git a/apps/aqhome-data/loop.c b/apps/aqhome-data/loop.c
deleted file mode 100644
index a7a2aff..0000000
--- a/apps/aqhome-data/loop.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include
-#endif
-
-
-#include "./loop.h"
-#include "./c_connect.h"
-#include "./c_updatedata.h"
-#include "./c_getdatapoints.h"
-#include "./c_getvalues.h"
-#include "./c_getdevices.h"
-#include "./c_setdata.h"
-#include "./c_addvalue.h"
-#include "./c_annvalue.h"
-#include "./c_moddevice.h"
-#include "./aqhome_data_p.h"
-#include "aqhome/ipc/data/ipc_data.h"
-#include "aqhome/ipc/data/msg_data_values.h"
-#include "aqhome/ipc/data/msg_data_datapoints.h"
-#include "aqhome/ipc/endpoint_ipc.h"
-#include "aqhome/ipc/msg_ipc_result.h"
-#include "aqhome/ipc/requests.h"
-
-#include
-#include
-#include
-#include
-#include
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * defines
- * ------------------------------------------------------------------------------------------------
- */
-
-#define DISABLE_DEBUGLOG
-
-
-/* ------------------------------------------------------------------------------------------------
- * forward declarations
- * ------------------------------------------------------------------------------------------------
- */
-
-static void _readAndHandleIpcMessages(AQHOME_DATA *aqh);
-static void _handleIpcEndpoint(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep);
-static void _handleIpcMsg(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg);
-static AQH_DEVICE *_getOrCreateDeviceForDriver(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *epDriver, const char *nameForDriver);
-
-
-
-/* ------------------------------------------------------------------------------------------------
- * implementations
- * ------------------------------------------------------------------------------------------------
- */
-
-void AqHomeData_Loop(AQHOME_DATA *aqh, int timeoutInMsecs)
-{
- if (aqh) {
- GWEN_MsgEndpoint_IoLoop(aqh->ipcdEndpoint, timeoutInMsecs);
- _readAndHandleIpcMessages(aqh);
-
- AQH_Requests_CheckTimeouts(aqh->requestTree);
- AQH_Requests_Cleanup(aqh->requestTree);
- }
-}
-
-
-
-int AqHomeData_WriteStorageIfChanged(AQHOME_DATA *aqh)
-{
- if (AQH_Storage_GetRuntimeFlags(aqh->storage) & AQH_STORAGE_RTFLAGS_MODIFIED) {
- int rv;
-
- DBG_INFO(NULL, "Storage modified, writing statefile");
- rv=AqHomeData_LockStorage(aqh);
- if (rv<0) {
- DBG_INFO(NULL, "Error locking storage (%d)", rv);
- return rv;
- }
- rv=AQH_Storage_WriteState(aqh->storage);
- if (rv<0) {
- DBG_INFO(NULL, "Error writing state file (%d)", rv);
- AqHomeData_UnlockStorage(aqh);
- return rv;
- }
-
- rv=AqHomeData_UnlockStorage(aqh);
- if (rv<0) {
- DBG_INFO(NULL, "Error unlocking storage (%d)", rv);
- return rv;
- }
- }
-
- return 0;
-}
-
-
-
-AQH_VALUE *AqHomeData_GetOrCreateValueForDriverWithTemplate(AQHOME_DATA *aqh,
- GWEN_MSG_ENDPOINT *epDriver,
- const AQH_VALUE *valueTemplate)
-{
- const char *serviceName;
- AQH_VALUE *v;
- GWEN_BUFFER *buf;
- const char *valueName;
- const char *deviceName;
-
- serviceName=AQH_IpcEndpoint_GetServiceName(epDriver);
- valueName=AQH_Value_GetName(valueTemplate);
- deviceName=AQH_Value_GetDeviceName(valueTemplate);
-
- buf=GWEN_Buffer_new(0, 256, 0, 1);
- if (deviceName && *deviceName)
- GWEN_Buffer_AppendArgs(buf, "%s/%s/%s", (serviceName && *serviceName)?serviceName:"unknown", deviceName, valueName);
- else
- GWEN_Buffer_AppendArgs(buf, "%s/%s", (serviceName && *serviceName)?serviceName:"unknown", valueName);
-
- v=AQH_Storage_GetValueByNameForSystem(aqh->storage, GWEN_Buffer_GetStart(buf));
- if (v==NULL) {
- if (AQH_IpcEndpoint_GetPermissions(epDriver) & AQH_IPCENDPOINT_PERMS_ADDVALUE) {
- AQH_DEVICE *device;
-
- DBG_INFO(AQH_LOGDOMAIN, "Creating value \"%s\"", GWEN_Buffer_GetStart(buf));
- device=(deviceName && *deviceName)?_getOrCreateDeviceForDriver(aqh, epDriver, deviceName):NULL;
-
- v=AQH_Value_new();
- AQH_Value_SetDriver(v, serviceName);
- AQH_Value_SetName(v, AQH_Value_GetName(valueTemplate));
- AQH_Value_SetNameForSystem(v, GWEN_Buffer_GetStart(buf));
- AQH_Value_SetValueUnits(v, AQH_Value_GetValueUnits(valueTemplate));
- AQH_Value_SetValueType(v, AQH_Value_GetValueType(valueTemplate));
- AQH_Value_SetModality(v, AQH_Value_GetModality(valueTemplate));
- AQH_Value_SetTimestampCreation(v, (uint64_t) time(NULL));
- if (device) {
- AQH_Value_SetDeviceNameForSystem(v, AQH_Device_GetNameForSystem(device));
- AQH_Value_SetDeviceName(v, AQH_Device_GetName(device));
- }
- AQH_Storage_AddValue(aqh->storage, v);
- }
- else {
- DBG_ERROR(AQH_LOGDOMAIN, "No permissions to create value \"%s\"", GWEN_Buffer_GetStart(buf));
- GWEN_Buffer_free(buf);
- return NULL;
- }
- }
- GWEN_Buffer_free(buf);
- return v;
-}
-
-
-
-AQH_DEVICE *_getOrCreateDeviceForDriver(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *epDriver, const char *deviceName)
-{
- const char *serviceName;
- AQH_DEVICE *device;
- GWEN_BUFFER *buf;
-
- serviceName=AQH_IpcEndpoint_GetServiceName(epDriver);
-
- buf=GWEN_Buffer_new(0, 256, 0, 1);
- GWEN_Buffer_AppendArgs(buf, "%s/%s", (serviceName && *serviceName)?serviceName:"unknown", deviceName);
-
- device=AQH_Storage_GetDeviceByNameForSystem(aqh->storage, GWEN_Buffer_GetStart(buf));
- if (device==NULL) {
- if (AQH_IpcEndpoint_GetPermissions(epDriver) & AQH_IPCENDPOINT_PERMS_ADDDEVICE) {
- DBG_INFO(AQH_LOGDOMAIN, "Creating device \"%s\"", GWEN_Buffer_GetStart(buf));
- device=AQH_Device_new();
- AQH_Device_SetDriver(device, serviceName);
- AQH_Device_SetName(device, deviceName);
- AQH_Device_SetNameForSystem(device, GWEN_Buffer_GetStart(buf));
- AQH_Device_SetTimestampCreation(device, (uint64_t) time(NULL));
- AQH_Storage_AddDevice(aqh->storage, device);
- }
- else {
- DBG_ERROR(AQH_LOGDOMAIN, "No permissions to create device \"%s\"", GWEN_Buffer_GetStart(buf));
- GWEN_Buffer_free(buf);
- return NULL;
- }
- }
- GWEN_Buffer_free(buf);
- return device;
-}
-
-
-
-void _readAndHandleIpcMessages(AQHOME_DATA *aqh)
-{
- if (aqh->ipcdEndpoint) {
- GWEN_MSG_ENDPOINT *ep;
-
- ep=GWEN_MsgEndpoint_Tree2_GetFirstChild(aqh->ipcdEndpoint);
- while(ep) {
- _handleIpcEndpoint(aqh, ep);
- ep=GWEN_MsgEndpoint_Tree2_GetNext(ep);
- }
- }
-}
-
-
-
-void _handleIpcEndpoint(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep)
-{
- GWEN_MSG *msg;
-
- while( (msg=GWEN_MsgEndpoint_TakeFirstReceivedMessage(ep)) ) {
- DBG_INFO(NULL, "Got IPS message %d (msgId=%d, refMsgId=%d) [%s]",
- GWEN_IpcMsg_GetCode(msg),
- GWEN_IpcMsg_GetMsgId(msg),
- GWEN_IpcMsg_GetRefMsgId(msg),
- GWEN_MsgEndpoint_GetName(ep));
- if (AQH_Requests_HandleIpcMsg(aqh->requestTree, ep, msg)!=GWEN_MSG_REQUEST_RESULT_HANDLED)
- _handleIpcMsg(aqh, ep, msg);
- GWEN_Msg_free(msg);
- }
-}
-
-
-
-void _handleIpcMsg(AQHOME_DATA *aqh, GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg)
-{
- uint16_t code;
- uint8_t protoId;
-
- /* exec IPC message */
- code=GWEN_IpcMsg_GetCode(msg);
- protoId=GWEN_IpcMsg_GetProtoId(msg);
- if (protoId==AQH_IPC_PROTOCOL_DATA_ID) {
- DBG_DEBUG(AQH_LOGDOMAIN, "Received IPC packet %d (%x)", (int) code, code);
- switch(code) {
- case AQH_MSGTYPE_IPC_DATA_CONNECT_REQ: AqHomeData_HandleConnect(aqh, ep, msg); break;
- case AQH_MSGTYPE_IPC_DATA_UPDATEDATA: AqHomeData_HandleUpdateData(aqh, ep, msg); break;
- case AQH_MSGTYPE_IPC_DATA_GETVALUES_REQ: AqHomeData_HandleGetValues(aqh, ep, msg); break;
- case AQH_MSGTYPE_IPC_DATA_GETDATA_REQ: AqHomeData_HandleGetDataPoints(aqh, ep, msg); break;
- case AQH_MSGTYPE_IPC_DATA_SETDATA: AqHomeData_HandleSetData(aqh, ep, msg); break;
- case AQH_MSGTYPE_IPC_DATA_ADDVALUE: AqHomeData_HandleAddValue(aqh, ep, msg); break;
- case AQH_MSGTYPE_IPC_DATA_ANNOUNCEVALUE: AqHomeData_HandleAnnounceValue(aqh, ep, msg); break;
- case AQH_MSGTYPE_IPC_DATA_GETDEVICES_REQ: AqHomeData_HandleGetDevices(aqh, ep, msg); break;
- case AQH_MSGTYPE_IPC_DATA_MODDEVICE_REQ: AqHomeData_HandleModDevice(aqh, ep, msg); break;
- default: break;
- }
- }
- else {
- DBG_ERROR(NULL, "Invalid IPC protocol %d (%02x)", protoId, protoId);
- }
-}
-
-
-
diff --git a/apps/aqhome-data/loop.h b/apps/aqhome-data/loop.h
deleted file mode 100644
index 2fb1f0a..0000000
--- a/apps/aqhome-data/loop.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqHome.
- * AqHome (c) by 2023 Martin Preuss, all rights reserved.
- *
- * The license for this file can be found in the file COPYING which you
- * should have received along with this file.
- ****************************************************************************/
-
-#ifndef AQHOME_DATA_LOOP_H
-#define AQHOME_DATA_LOOP_H
-
-
-#include "./aqhome_data.h"
-
-
-void AqHomeData_Loop(AQHOME_DATA *aqh, int timeoutInMsecs);
-
-int AqHomeData_WriteStorageIfChanged(AQHOME_DATA *aqh);
-
-AQH_VALUE *AqHomeData_GetOrCreateValueForDriverWithTemplate(AQHOME_DATA *aqh,
- GWEN_MSG_ENDPOINT *epDriver,
- const AQH_VALUE *valueTemplate);
-
-
-#endif
-
-
-
-
-