/**************************************************************************** * 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/msg/endpointmgr_p.h" #include "aqhome/msg/msg_node.h" #include "aqhome/msg/endpoint_node.h" #include #include GWEN_INHERIT(GWEN_MSG_ENDPOINT_MGR, AQH_MSG_ENDPOINT_MGR); static void GWENHYWFAR_CB _freeData(void *bp, void *p); GWEN_MSG_ENDPOINT_MGR *AQH_MsgEndpointMgr_new(uint8_t busAddr) { GWEN_MSG_ENDPOINT_MGR *mgr; AQH_MSG_ENDPOINT_MGR *xmgr; mgr=GWEN_MsgEndpointMgr_new(); GWEN_NEW_OBJECT(AQH_MSG_ENDPOINT_MGR, xmgr); GWEN_INHERIT_SETDATA(GWEN_MSG_ENDPOINT_MGR, AQH_MSG_ENDPOINT_MGR, mgr, xmgr, _freeData); xmgr->busAddr=busAddr; return mgr; } void _freeData(void *bp, void *p) { AQH_MSG_ENDPOINT_MGR *xmgr; xmgr=(AQH_MSG_ENDPOINT_MGR*) p; GWEN_FREE_OBJECT(xmgr); } uint8_t AQH_MsgEndpointMgr_GetBusAddr(GWEN_MSG_ENDPOINT_MGR *emgr) { AQH_MSG_ENDPOINT_MGR *xmgr; xmgr=GWEN_INHERIT_GETDATA(GWEN_MSG_ENDPOINT_MGR, AQH_MSG_ENDPOINT_MGR, emgr); if (xmgr) return xmgr->busAddr; return 0; } void AQH_MsgEndpointMgr_DistributeMsgFromNodeEndpoint(GWEN_MSG_ENDPOINT_MGR *emgr, GWEN_MSG_ENDPOINT *srcEp, const GWEN_MSG *msg, int groupId, const char *wantedTypeName) { GWEN_MSG_ENDPOINT_LIST *endpointList; endpointList=GWEN_MsgEndpointMgr_GetEndpointList(emgr); if (endpointList) { GWEN_MSG_ENDPOINT *ep; uint32_t msgGroup; msgGroup=AQH_NodeMsg_GetMsgGroup(AQH_NodeMsg_GetMsgType(msg)); ep=GWEN_MsgEndpoint_List_First(endpointList); while(ep) { if (ep!=srcEp) { const char *epTypeName; epTypeName=GWEN_MsgEndpoint_GetName(ep); if (wantedTypeName==NULL || (wantedTypeName && epTypeName && strcasecmp(epTypeName, wantedTypeName)==0)) { if (!(GWEN_MsgEndpoint_GetFlags(ep) & AQH_MSGEP_NODE_FLAGS_NOMESSAGES)) { int acceptedGroupIds; uint32_t acceptedMsgGroups; acceptedGroupIds=GWEN_MsgEndpoint_GetAcceptedGroupIds(ep); acceptedMsgGroups=AQH_NodeEndpoint_GetAcceptedMsgGroups(ep); DBG_DEBUG(AQH_LOGDOMAIN, "- checking endpoint %s (msgGroup=%08x, accept: %08x, flags: %08x)", GWEN_MsgEndpoint_GetName(ep), msgGroup, acceptedMsgGroups, GWEN_MsgEndpoint_GetFlags(ep)); if (acceptedGroupIds & groupId) { if ((msgGroup & acceptedMsgGroups)) { /* endpoint accepts this message */ DBG_DEBUG(AQH_LOGDOMAIN, " - endpoint %s accepts message", GWEN_MsgEndpoint_GetName(ep)); GWEN_MsgEndpoint_ProcessOutMessage(ep, GWEN_Msg_dup(msg)); } else { DBG_DEBUG(AQH_LOGDOMAIN, " - endpoint %s does not accept message", GWEN_MsgEndpoint_GetName(ep)); } } /* if (acceptedGroupIds & groupId) */ else { DBG_DEBUG(AQH_LOGDOMAIN, "Endpoint %s does not contain groupId %d (%d)", GWEN_MsgEndpoint_GetName(ep), groupId, acceptedGroupIds); } } /* !(GWEN_MsgEndpoint_GetFlags(ep) & AQH_MSGEP_NODE_FLAGS_NOMESSAGES) */ else { DBG_DEBUG(AQH_LOGDOMAIN, "Not checking endpoint %s (NOMSG set)", epTypeName); } } /* if wantedTypeName matches */ else { DBG_DEBUG(AQH_LOGDOMAIN, "Endpoint %s doesn't match", epTypeName); } } /* if (ep!=srcEp) */ ep=GWEN_MsgEndpoint_List_Next(ep); } /* while */ } }