Part Number: CC2530
Other Parts Discussed in Thread: Z-STACK
Hello everyone.
I am working several ZC and several ZEDs based on zstack 3.0.1.
My question,can I send a activation permit join to a specific ZED?
Piao
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Since you are using Z-Stack 3.0.1, you have to add "case ZDO_CB_MSG:" in your zclXXX_event_loop and refer to touchLink_RouterProcessZDOMsg( (zdoIncomingMsg_t *)pMsg ) in touchLinkInitiator_event_loop to add your own custom zcl_xxxProcessZDOMsg( (zdoIncomingMsg_t *)pMsg ) in your "case ZDO_CB_MSG:" of zclXXX_event_loop. Then you can add your "case Device_annce:" in your own zcl_xxxProcessZDOMsg to process device announcement.
Thanks for your assist.
I have put your suggestion.
void EasenLock_ProcessZDOMsgs(zdoIncomingMsg_t *pMsg);
...
In ...Init(), I put as following.
ZDO_RegisterForZDOMsg(EasenLock_TaskID, Device_annce);
ZDO_RegisterForZDOMsg(EasenLock_TaskID, Active_EP_rsp);
ZDO_RegisterForZDOMsg(EasenLock_TaskID, Simple_Desc_rsp);
...
uint16 EasenLock_event_loop( uint8 task_id, uint16 events )
{
afIncomingMSGPacket_t *MSGpkt;
afDataConfirm_t *afDataConfirm;
(void)task_id; // Intentionally unreferenced parameter
if ( events & SYS_EVENT_MSG )
{
while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( EasenLock_TaskID )) )
{
switch ( MSGpkt->hdr.event )
{
case ZDO_CB_MSG:
SendDataByUart("ZDO_CB_MSG ",11);
EasenLock_ProcessZDOMsgs((zdoIncomingMsg_t *)MSGpkt);
break;
case ZCL_INCOMING_MSG:
...
void EasenLock_ProcessZDOMsgs(zdoIncomingMsg_t *pMsg)
{
ZDO_DeviceAnnce_t devAnnce;
ZDO_ActiveEndpointRsp_t *pActiveEndpointRsp;
ZDO_SimpleDescRsp_t simpleDescRsp;
uint8 ret;
uint8 iEndDev;
uint8 passAddr[Z_EXTADDR_LEN];
uint8 fSuccess = 0;
char szMsg[96] = { 0 };
switch (pMsg->clusterID)
{
case Device_annce:
ZDO_ParseDeviceAnnce( pMsg, &devAnnce );
#if (ZDO_COORDINATOR)
for(iEndDev = 0; iEndDev < MAX_END_DEV_NUM; iEndDev ++)
{
osal_nv_item_init(NV_APP_EASEN_LOOKUP + iEndDev, Z_EXTADDR_LEN, NULL);
osal_nv_read(NV_APP_EASEN_LOOKUP + iEndDev, 0, Z_EXTADDR_LEN, passAddr);
if ( AddrMgrExtAddrEqual( passAddr, devAnnce.extAddr) == TRUE )
{
fSuccess = 1;
break;
}
}
if (fSuccess == 0)
{
zAddrType_t destAddr;
destAddr.addrMode = Addr16Bit;
destAddr.addr.shortAddr = devAnnce.nwkAddr;
ret = ZDP_MgmtLeaveReq(&destAddr,devAnnce.extAddr,1,1,0);
AssocRemove(devAnnce.extAddr);
}
else
{
AssocAddNew(devAnnce.nwkAddr, devAnnce.extAddr,CHILD_RFD);
ZDP_ActiveEPReq(devAnnce.extAddr,devAnnce.nwkAddr,0);
}
#endif
break;
case Active_EP_rsp:
pActiveEndpointRsp = ZDO_ParseEPListRsp( pMsg );
break;
case Simple_Desc_rsp:
ZDO_ParseSimpleDescRsp( pMsg, &simpleDescRsp );
break;
}
}
Please let me know my wrong.
Piao