/**************************************************************************** * 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); } void AQH_MsgEndpointMgr_DistributeMsgFromNodeEndpoint(GWEN_MSG_ENDPOINT_MGR *emgr, GWEN_MSG_ENDPOINT *srcEp, const GWEN_MSG *msg, int groupId) { GWEN_MSG_ENDPOINT_LIST *endpointList; endpointList=GWEN_MsgEndpointMgr_GetEndpointList(emgr); if (endpointList) { GWEN_MSG_ENDPOINT *ep; int acceptedGroupIds; uint32_t msgGroup; msgGroup=AQH_NodeMsg_GetMsgGroup(AQH_NodeMsg_GetMsgType(msg)); acceptedGroupIds=GWEN_MsgEndpoint_GetAcceptedGroupIds(srcEp); ep=GWEN_MsgEndpoint_List_First(endpointList); while(ep) { if (ep!=srcEp) { if (acceptedGroupIds & groupId) { uint32_t acceptedMsgGroups; 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 (!(GWEN_MsgEndpoint_GetFlags(ep) & AQH_MSGEP_NODE_FLAGS_NOMESSAGES) && (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 (srcGroupId & groupId) */ else { DBG_DEBUG(AQH_LOGDOMAIN, "Endpoint does not contain groupId %d (%02x)", groupId, groupId); } } /* if (ep!=srcEp) */ ep=GWEN_MsgEndpoint_List_Next(ep); } /* while */ } }