我用ZNP 架構, 用AF_data_request () 每0.5 秒送一次, sniffer 卻抓不到我發的封包, 能幫check 一下嗎? 謝謝
這是我 AF_data_request () 的, 不知有沒有錯誤
zb_status_code jeff_af_data_request(){int ret;zb_status_code retVal = ZFailure;ZB_RWBuffer_s rwBuffer_s;
memset(&rwBuffer_s, 0, sizeof(ZB_RWBuffer_s));rwBuffer_s.wb_s.cmd0 = 0x24;rwBuffer_s.wb_s.cmd1 = 0x01;rwBuffer_s.wb_s.data[0] = 0xff;//LO_UINT16(node_cmd->DeviceAddr);rwBuffer_s .wb_s.data[1] = 0xff;//HI_UINT16(node_cmd->DeviceAddr);rwBuffer_s.wb_s.data[2] = 8;//node_cmd->EndPoint; // DestEndpointrwBuffer_s.wb_s.data[3] = 1; // SrcEndpointrwBuffer_s.wb_s.data[4] = 0x00;//LO_UINT16(node_cmd->ClusterID);rwBuffer_s.wb_s.data[5] = 0x00;//HI_UINT16(node_cmd->ClusterID);rwBuffer_s.wb_s .data[6] = 0x0a;//zcl_TransID;rwBuffer_s.wb_s.data[7] = 0; // OptionsrwBuffer_s.wb_s.data[8] = 0x1E; // AF_DEFAULT_RADIUSrwBuffer_s.wb_s.data[9] = 2 ; //data len
rwBuffer_s.wb_s.data[10] = 0xaa;rwBuffer_s.wb_s.data[11] = 0x55;
ret = send_spi_cmd(CMD_SREQ, &rwBuffer_s);if (ret == 1)return retVal;
//printf("af_data_request: len=%d, cmd0=0x%02X, cmd1=0x%02X, data=0x%02X\n",// rwBuffer_s.rb_s.len, rwBuffer_s.rb_s.cmd0, rwBuffer_s.rb_s .cmd1, rwBuffer_s.rb_s.data[0]);if ( (rwBuffer_s.rb_s.len == 1) && (rwBuffer_s.rb_s.cmd0 == 0x64) && (rwBuffer_s.rb_s.cmd1 == 0x01) ){retVal = ((zb_status_code) rwBuffer_s.rb_s.data[0]);retVal = RTEMS_SUCCESSFUL;}else{ /* Failed to send data request */printf("%s: Failed!!!\r\n", __func__) ;}/* End of if failed to send data request */
return retVal;}
Viki Shi:
请提供所使用的具体协议栈版本及测试步骤,以帮助分析
he jeff:
回复 Viki Shi:
我用的是 ZNP 3.0.2 , 在 main.c 裡 每 0.5 s 就執行一次 AF_data_request()
YiKai Chen:
回复 he jeff:
你確定你的jeff_af_data_request 下命令給ZNP是正確的嗎?
he jeff:
回复 YiKai Chen:
假如不正確 , 應該不會進去下面裡面 , return 應該是retVal = ZFailure
if ( (rwBuffer_s.rb_s.len == 1) && (rwBuffer_s.rb_s.cmd0 == 0x64) && (rwBuffer_s.rb_s.cmd1 == 0x01) ){
retVal = ((zb_status_code) rwBuffer_s.rb_s.data[0]);
retVal = RTEMS_SUCCESSFUL;根據 spec 這3個條件 ok , 應該 ZNP 的 AF_data_request() 是成功的
這裡我又產生一個疑問 ?
1 :假如進入裡面是 ok的 , 那是代表 我 host 下給 CC2530 的AF_data_request() 是成功的 但並不表TX 有 send packet 出去 ? 對嗎 ?2: sample code 的if( AF_data_request() == 1 ) , 這是代表 Tx 有把 packet 送出去
2種意義不一樣 , 對吧 ?
YiKai Chen:
回复 he jeff:
1. 是的
2. 對
he jeff:
回复 YiKai Chen:
那我用 ZNP 架構 , 用 AF_data_request () 去送 packet , 要如何確認 像 sample code 一樣能確定 Tx 真的有打出去 ?
YiKai Chen:
回复 he jeff:
不就是透過MT Command AF_DATA_REQUEST,如果AF_DATA_REQUEST命令返回0代表成功
he jeff:
回复 YiKai Chen:
我在 Z-stack Monitor and Test API裡 , 沒看到這個 MT Command AF_DATA_REQUEST , 所以不知該怎麼 check Tx 有沒有打出去
, AF_data_request() 只能確認 我 host 執行有沒有正確 , 沒辦法告訴我 Tx 有沒有打出去 .
YiKai Chen:
回复 he jeff:
Z-stack Monitor and Test API 裡3.2.1.2 AF_DATA_REQUEST
he jeff:
回复 YiKai Chen:
Z-stack Monitor and Test API裡3.2.1.2 AF_DATA_REQUEST , 裡面的 SRSP & Attributes , 就是我寫的 if 判斷 , 這不是判斷 我 host 下 AF_DATA_REQUEST 這個 cmd 有沒有成功 , 但能判斷 Tx 是否真的有打出去嗎 ?