TI中文支持网
TI专业的中文技术问题搜集分享网站

关于一个节点使用多个端点的问题

#define SampleApp_EndPoint 20 //调试端口
#define AllDeviceCommand_EndPoint 21 //协调器广播使用的端口
#define CoordCommand_EndPoint 22 //协调器发数据使用的端口
#define RouterCommand_EndPoint 23 //路由器发数据使用的端口
#define EndDeviceCommand_EndPoint 24 //终端节点发数据使用的端口

// 调试使用端点注册
SampleApp_EndPoint_epDesc.endPoint = SampleApp_EndPoint;
SampleApp_EndPoint_epDesc.task_id = &zclSampleApp_TaskID;
SampleApp_EndPoint_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;
SampleApp_EndPoint_epDesc.latencyReq = noLatencyReqs;
afRegister( &SampleApp_EndPoint_epDesc );
// 终端节点端点注册
EndDeviceEndPoint_epDesc.endPoint = EndDeviceCommand_EndPoint;
EndDeviceEndPoint_epDesc.task_id = &zclSampleApp_TaskID;
EndDeviceEndPoint_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&EndDevice_SimpleDesc;
EndDeviceEndPoint_epDesc.latencyReq = noLatencyReqs;
afRegister( &EndDeviceEndPoint_epDesc );
// 路由器端点注册
RouterEndPoint_epDesc.endPoint = RouterCommand_EndPoint;
RouterEndPoint_epDesc.task_id = &zclSampleApp_TaskID;
RouterEndPoint_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&Router_SimpleDesc;
RouterEndPoint_epDesc.latencyReq = noLatencyReqs;
afRegister( &RouterEndPoint_epDesc );
// 协调器组播、单播端点注册
CoordEndPoint_epDesc.endPoint = CoordCommand_EndPoint;
CoordEndPoint_epDesc.task_id = &zclSampleApp_TaskID;
CoordEndPoint_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&Coord_SimpleDesc;
CoordEndPoint_epDesc.latencyReq = noLatencyReqs;
afRegister( &CoordEndPoint_epDesc );

如上,我在程序中定义了好几个端点。但是我使用目的端点为CoordCommand_EndPoint发出去的消息老是进入接收方的SampleApp_EndPoint的处理选项中去,请问是为何?

YiKai Chen:

可以貼一下你怎樣送訊息的

user5281211:

回复 YiKai Chen:

这是我的组播函数

void SampleApp_Send_Group_Message(uint8 *msg_ptr, endPointDesc_t *srcEP,int len,uint16 GROUP_ID,uint8 endpoint,uint16 CLUSTERID ){ SampleApp_Group_DstAddr.addrMode = (afAddrMode_t)afAddrGroup; SampleApp_Group_DstAddr.endPoint = endpoint; SampleApp_Group_DstAddr.addr.shortAddr = GROUP_ID; if(AF_DataRequest( &SampleApp_Group_DstAddr,srcEP, CLUSTERID,//目标端点镞,房间里的接收人数据宏是1,2个字节,所以在射频0x0001 (uint16)len,//发送字符串的长度 msg_ptr,//字符串内容数组的首地址 &zcl_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS )==afStatus_SUCCESS) { } else { HalUARTWrite(HAL_UART_PORT_0,"ERROR\n",6); //发送错误信息 }}

这是我的单播函数

void SampleApp_SendPTP16Message(uint8 *msg_ptr, endPointDesc_t *srcEP,int len,uint16 PointToPointAdd ,uint8 endpoint,uint16 CLUSTERID ){ SampleApp_Point_To_Point_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; SampleApp_Point_To_Point_DstAddr.addr.shortAddr = PointToPointAdd;//接收模块的网络地址 // Take the first endpoint, Can be changed to search through endpoints SampleApp_Point_To_Point_DstAddr.endPoint =endpoint ;//接收模块的端点房间号 if(AF_DataRequest( &SampleApp_Point_To_Point_DstAddr, srcEP, CLUSTERID,//目标端点镞,房间里的接收人数据宏是1,2个字节,所以在射频0x0001 (uint16)len,//发送字符串的长度 msg_ptr,//字符串内容数组的首地址 &zcl_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS )==afStatus_SUCCESS) { } else { HalUARTWrite(HAL_UART_PORT_0,"ERROR\n",6); //发送错误信息 } }

我调用单播函数SampleApp_SendPTP16Message(temp,&CoordEndPoint_epDesc,2,RouterAdress16[1],CoordCommand_EndPoint,DetectOnlineRouter_ClusterID);的时候接收方是正确的进入CoordCommand_EndPoint的处理函数当中。但是当我调用组播函数

SampleApp_Send_Group_Message(temp,&CoordEndPoint_epDesc,2,SampleApp_Router_GroupID,CoordCommand_EndPoint,DetectOnlineRouter_ClusterID);时,接收方无法进入CoordCommand_EndPoint的处理函数当中,而是转入SampleApp_EndPoint的处理函数当中

user5281211:

回复 YiKai Chen:

问题找出来了,是一开始绑定组的时候讲组帮到SampleApp_EndPoint上去了。请问一下,一个Group可以与多个端点绑定吗?

YiKai Chen:

回复 user5281211:

照理來說一个Group是可以与多个端点绑定

user5281211:

如题,在网上查到,同一个模块定义的一个组个可以关联多个可用的端点,同一个端点下也可以关联多个组。但是当我在程序中这么写时:

aps_RemoveAllGroup(SampleApp_EndPoint); SampleApp_ALLDevice_Group.ID = SampleApp_AllDevice_GroupID; osal_memcpy( SampleApp_ALLDevice_Group.name, "ALLDevice", 9 ); aps_AddGroup( SampleApp_EndPoint, &SampleApp_ALLDevice_Group ); SampleApp_Router_Group.ID = SampleApp_Router_GroupID; osal_memcpy( SampleApp_Router_Group.name, "Router", 6 ); aps_AddGroup( SampleApp_EndPoint, &SampleApp_Router_Group ); SampleApp_EndDevice_Group.ID = SampleApp_EndDevice_GroupID; osal_memcpy( SampleApp_EndDevice_Group.name, "EndDevice", 9 ); aps_AddGroup( SampleApp_EndPoint, &SampleApp_EndDevice_Group ); aps_RemoveAllGroup(AllDeviceCommand_EndPoint); aps_AddGroup( AllDeviceCommand_EndPoint, &SampleApp_ALLDevice_Group ); aps_AddGroup( AllDeviceCommand_EndPoint, &SampleApp_Router_Group ); aps_AddGroup( AllDeviceCommand_EndPoint, &SampleApp_EndDevice_Group ); aps_RemoveAllGroup(CoordCommand_EndPoint); aps_AddGroup( CoordCommand_EndPoint, &SampleApp_ALLDevice_Group ); aps_AddGroup( CoordCommand_EndPoint, &SampleApp_Router_Group ); aps_AddGroup( CoordCommand_EndPoint, &SampleApp_EndDevice_Group ); aps_RemoveAllGroup(RouterCommand_EndPoint); aps_AddGroup( RouterCommand_EndPoint, &SampleApp_ALLDevice_Group ); aps_AddGroup( RouterCommand_EndPoint, &SampleApp_Router_Group ); aps_AddGroup( RouterCommand_EndPoint, &SampleApp_EndDevice_Group ); aps_RemoveAllGroup(EndDeviceCommand_EndPoint); aps_AddGroup( EndDeviceCommand_EndPoint, &SampleApp_ALLDevice_Group ); aps_AddGroup( EndDeviceCommand_EndPoint, &SampleApp_Router_Group ); aps_AddGroup( EndDeviceCommand_EndPoint, &SampleApp_EndDevice_Group );

最终发现,所有的Group都只和SampleApp_EndPoint关联了,其他的并没有关联,请问这是为何?

YiKai Chen:

不大懂你的問題,你指的所有的Group都只和SampleApp_EndPoint关联了,其他的并没有关联,你是如何得知其他的并没有关联?

user5281211:

回复 YiKai Chen:

对,就是我把几个组和多个端点关联起来。但是在实际发送方使用其他端点组播时接收方仍然跑到SampleApp的处理函数下面去了。我猜测,虽然上面程序里头貌似是把其他端点和组关联起来了,但实际上并没有,但我不知道问题在哪儿?

YiKai Chen:

回复 user5281211:

你可以試著從IAR設個斷點在afIncomingData函式裡的grpEp = aps_FindGroupForEndpoint( aff->GroupID, APS_GROUPS_FIND_FIRST );這一行來調試看看問題在哪兒

Susan Yang:

回复 user5281211:

可以的

user5327689:

回复 user5281211:

请问您解决了吗是什么原因,急求答案,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » 关于一个节点使用多个端点的问题
分享到: 更多 (0)