例如:
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 意見:
張貼留言