使用z-stack內部function且return處理

使用z-stack內部function
例如:
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 意見:

張貼留言