From 07abc76a7aeda068be55ed8110a8f8139e9852ba Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Tue, 12 Sep 2023 21:32:51 +0200 Subject: [PATCH] Use INHERIT mechanism for AQH_Tag16IpcMsg. --- aqhome/ipc/data/msg_data_connect.c | 3 +- aqhome/ipc/msg_ipc_tag16.c | 45 +++++++++++++++++++++++++++++- aqhome/ipc/msg_ipc_tag16.h | 4 ++- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/aqhome/ipc/data/msg_data_connect.c b/aqhome/ipc/data/msg_data_connect.c index 4703f91..b9b49dc 100644 --- a/aqhome/ipc/data/msg_data_connect.c +++ b/aqhome/ipc/data/msg_data_connect.c @@ -58,7 +58,8 @@ void AQH_ConnectDataIpcMsg_DumpToBuffer(const GWEN_MSG *msg, GWEN_BUFFER *dbuf, char *userId=NULL; uint32_t flags=0; - tagList=AQH_Tag16IpcMsg_ParseTags(msg, 0); + AQH_Tag16IpcMsg_ParseTags(msg, 0); + tagList=AQH_Tag16IpcMsg_GetTags(msg); if (tagList) { const GWEN_TAG16 *tag; diff --git a/aqhome/ipc/msg_ipc_tag16.c b/aqhome/ipc/msg_ipc_tag16.c index 2aa9f5e..5f31d3a 100644 --- a/aqhome/ipc/msg_ipc_tag16.c +++ b/aqhome/ipc/msg_ipc_tag16.c @@ -18,14 +18,47 @@ +GWEN_INHERIT(GWEN_MSG, GWEN_TAG16_LIST); + + + +GWEN_TAG16_LIST *_parseTags(const GWEN_MSG *msg, int doCopy); +void GWENHYWFAR_CB _freeTagList(void *bp, void *p); + + + + GWEN_MSG *AQH_Tag16IpcMsg_new(uint8_t protoId, uint8_t protoVer, uint16_t code, uint32_t payloadLen, const uint8_t *payload) { return GWEN_IpcMsg_new(protoId, protoVer, code, payloadLen, payload); } +void AQH_Tag16IpcMsg_ParseTags(GWEN_MSG *msg, int doCopy) +{ + if (msg && !GWEN_INHERIT_ISOFTYPE(GWEN_MSG, GWEN_TAG16_LIST, msg)) { + GWEN_TAG16_LIST *tagList; -GWEN_TAG16_LIST *AQH_Tag16IpcMsg_ParseTags(const GWEN_MSG *msg, int doCopy) + tagList=_parseTags(msg, doCopy); + if (tagList) { + GWEN_INHERIT_SETDATA(GWEN_MSG, GWEN_TAG16_LIST, msg, tagList, _freeTagList); + } + } +} + + + +const GWEN_TAG16_LIST *AQH_Tag16IpcMsg_GetTags(const GWEN_MSG *msg) +{ + GWEN_TAG16_LIST *tagList; + + tagList=GWEN_INHERIT_GETDATA(GWEN_MSG, GWEN_TAG16_LIST, msg); + return tagList; +} + + + +GWEN_TAG16_LIST *_parseTags(const GWEN_MSG *msg, int doCopy) { uint32_t msgSize; @@ -54,6 +87,16 @@ GWEN_TAG16_LIST *AQH_Tag16IpcMsg_ParseTags(const GWEN_MSG *msg, int doCopy) +void _freeTagList(void *bp, void *p) +{ + GWEN_TAG16_LIST *tagList; + + tagList=(GWEN_TAG16_LIST*) p; + GWEN_Tag16_List_free(tagList); +} + + + void AQH_Tag16IpcMsg_DumpToBuffer(const GWEN_MSG *msg, GWEN_BUFFER *dbuf, const char *sText) { if (GWEN_Msg_GetBytesInBuffer(msg)>=GWEN_MSGIPC_OFFS_PAYLOAD) { diff --git a/aqhome/ipc/msg_ipc_tag16.h b/aqhome/ipc/msg_ipc_tag16.h index 510a262..dd9afd2 100644 --- a/aqhome/ipc/msg_ipc_tag16.h +++ b/aqhome/ipc/msg_ipc_tag16.h @@ -18,7 +18,9 @@ AQHOME_API GWEN_MSG *AQH_Tag16IpcMsg_new(uint8_t protoId, uint8_t protoVer, uint16_t code, uint32_t payloadLen, const uint8_t *payload); -AQHOME_API GWEN_TAG16_LIST *AQH_Tag16IpcMsg_ParseTags(const GWEN_MSG *msg, int doCopy); + +AQHOME_API void AQH_Tag16IpcMsg_ParseTags(GWEN_MSG *msg, int doCopy); +AQHOME_API const GWEN_TAG16_LIST *AQH_Tag16IpcMsg_GetTags(const GWEN_MSG *msg); AQHOME_API void AQH_Tag16IpcMsg_DumpToBuffer(const GWEN_MSG *msg, GWEN_BUFFER *dbuf, const char *sText);