例如:
ZDP_NwkAddrReq() ZDP_IEEEAddrReq()等等....
使用方法請查看Z-Stack API.pdf
發送端送出指令給各個device
假設有device回應會在以下函數做處理並且return (並非所有函數都會預設啟動)
ZDP_NWKAddrRsp() ZDP_IEEEAddrRsp()等等....
這時候發送端會接收到return的值
這時候就要做register
在你的
void SampleApp_Init( uint8 task_id )裡面加上
ZDO_RegisterForZDOMsg(SampleApp_TaskID, NWK_addr_rsp);NWK_addr_rsp在Z-Stack API.pdf裡面的文件有寫到對應的function
例如:
ZDP_NWKAddrRsp()→NWK_addr_rsp ZDP_IEEEAddrRsp()→IEEE_addr_rsp接下來就要處理接收後的值
也就是在
uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )加上而外的判斷事件
在
switch ( MSGpkt->hdr.event )裡面額外加上
case ZDO_CB_MSG:例如:
if ( events & SYS_EVENT_MSG ) {
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
while ( MSGpkt ) {
switch ( MSGpkt->hdr.event ) {
case AF_INCOMING_MSG_CMD:
SampleApp_MessageMSGCB( MSGpkt );
break;
case ZDO_CB_MSG:
zdoapp_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );
break;
default:
break;
}
osal_msg_deallocate( (uint8 *)MSGpkt );
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
}
return (events ^ SYS_EVENT_MSG);
}
接下來就在副程式
zdoapp_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt )去解析收到的值
例如:解析NWK_addr_rsp
void zdoapp_ProcessZDOMsgs(zdoIncomingMsg_t *inMsg )
{
ZDO_NwkIEEEAddrResp_t *pAddrRsp;
switch ( inMsg->clusterID ) {
case NWK_addr_rsp:
pAddrRsp = ZDO_ParseAddrRsp( inMsg );
if ( pAddrRsp ) {
if ( pAddrRsp->status == ZSuccess ) {
pAddrRsp->nwkAddr;//short address
pAddrRsp->extAddr;//MAC address
}
osal_mem_free( pAddrRsp );
}
break;
}
}
要看如何解析的話請到ZDProfile.c
因為要看他如何編譯就可以解析
0 意見:
張貼留言