想在Z-Stack 3.0.1协议栈中使用AF_DataRequest函数,数据由router发送到coordinator,但是调试的时候发现不能进入SYS_EVENT_MSG中的AF_INCOMING_MSG_CMD事件。单步调试发现在AF.c文件中能进入afIncomingData函数,但是在该函数内不会进入afBuildMSGIncoming调用的if语句判断中,如下:
能正常建立连接,数据也能成功发送,但是就收不到数据。
自己在zcl_genericapp.c中定义的clusterID:
#define GROUP_ID21 #define CLUSTER_P2P0 #define CLUSTER_BROADCAST1 #define CLUSTER_GROUPCAST2
端点描述符:
static endPointDesc_t appTransTest = {GENERICAPP_ENDPOINT,// endpoint0,&zclGenericApp_TaskID,(SimpleDescriptionFormat_t *)NULL,//(SimpleDescriptionFormat_t *)&zclGenericApp_SimpleDesc, // No Simple description for this test endpoint(afNetworkLatencyReq_t)0// No Network Latency req };
建立连接和初始化发送事件:
void zodDeviceInit(void) { #ifdef ZDO_COORDINATOR // if this device is coordinatorbdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION |// creat networkBDB_COMMISSIONING_MODE_FINDING_BINDING);printf("this is coordinator\r\n");NLME_PermitJoiningRequest(0xff); // network will always open for router #elsebdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING |// join networkBDB_COMMISSIONING_MODE_FINDING_BINDING);// - AF -aps_Group_t group = {.ID = GROUP_ID,.name = "",};aps_AddGroup(GENERICAPP_ENDPOINT, &group);// - p2p -osal_start_timerEx(zclGenericApp_TaskID, APP_AF_P2P_EVENT,27000);printf("this is router\r\n"); #endifHalLedSet(HAL_LED_1, HAL_LED_MODE_OFF); }
router发送数据函数:
void zclApp_AF_P2P(uint16 destNwkAddr, uint16 cid, uint8 len, uint8 *data) {afAddrType_t dstAddr;static uint8 transferID = 0;// - destination -dstAddr.addrMode = afAddr16Bit;// destination device IDdstAddr.addr.shortAddr = destNwkAddr; // net serialdstAddr.endPoint = GENERICAPP_ENDPOINT; // port numbertransferID++;AF_DataRequest(&dstAddr, &appTransTest, cid, len, data, &transferID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS); }
router数据发送函数的调用方式:
if(events & APP_AF_P2P_EVENT){zclApp_AF_P2P(0x0000, CLUSTER_P2P, 3, "p2p");printf("transmit data - p2p\r\n");osal_start_timerEx(zclGenericApp_TaskID, APP_AF_P2P_EVENT,APP_AF_P2P_PERIOD);return (events ^ APP_AF_P2P_EVENT);}
求大佬们能够帮忙分析分析,谢谢!
YiKai Chen:
有沒有先抓包看看封包是不是有發出來
user6212365:
回复 YiKai Chen:
还没有买抓包的工具。。。,现在就是通过在线调试,在afIncomingData函数各个地中写printf,然后建立链接后在调试窗口观察。观察到的现象就是确实按照router的发送的时间间隔,在coordinator在线调试时能看到调用了afIncomingData,但是不会进入afBuildMSGIncoming的调用。
Kevin Qiu1:
回复 user6212365:
先看下数据是否已经发送
user6509312:
回复 user6212365:
"还没有买抓包的工具。。。,现在就是通过在线调试,在afIncomingData函数各个地中写printf,然后建立链接后在调试窗口观察",笑死我了…大家一样一样的。。。。基本靠人肉。
请问你的API文档是怎么来的?我不知道哪里有下的,帮忙给个链接呗,谢谢
YiKai Chen:
回复 user6509312:
API文档基本上裝完Z-Stack就在目録下
user6509312:
回复 YiKai Chen:
感谢,找到了。