在跟踪调试config过程有些不理解的地方,请教下面几个问题:
1.我在查看了generateConfigRequests();有如下部分,不是很明白其中的处理
/* Clear any timed out transactions */
for(x = 0; x < CONFIG_MAX_DEVICES; x++)
{
if((Cllc_associatedDevList[x].shortAddr != CSF_INVALID_SHORT_ADDR)
&& (Cllc_associatedDevList[x].status & CLLC_ASSOC_STATUS_ALIVE))
{
if((Cllc_associatedDevList[x].status &
(ASSOC_CONFIG_SENT | ASSOC_CONFIG_RSP))
== (ASSOC_CONFIG_SENT | ASSOC_CONFIG_RSP))
{
Cllc_associatedDevList[x].status &= ~(ASSOC_CONFIG_SENT
| ASSOC_CONFIG_RSP);
}
}
}
不知道Cllc_associatedDevList[x].status什么时候被置为CLLC_ASSOC_STATUS_ALIVE,才使得进入上面的判断?
我向前查找,在入网过程assocIndCb()中找到与Cllc_associatedDevList相关的部分,"maintainAssocTable(&devInfo, &pData->capabilityInformation, 1, 0,(false));",但该函数是将status置0并不是CLLC_ASSOC_STATUS_ALIVE。
2.
通过wireshark抓包看到的数据包的交互过程,我的理解是config过程是collector应用层发送了一个包,sensor接收该包后进行处理后回复ConfigResponse包。
config包是上面部分的generateConfigRequests函数中发送,ConfigResponse包是在dataIndCB中将收到处理,如下:
static void dataIndCB(ApiMac_mcpsDataInd_t *pDataInd)
{
if((pDataInd != NULL) && (pDataInd->msdu.p != NULL)
&& (pDataInd->msdu.len > 0))
{
Smsgs_cmdIds_t cmdId = (Smsgs_cmdIds_t)*(pDataInd->msdu.p);
.....
switch(cmdId)
{
case Smsgs_cmdIds_configRsp:
processConfigResponse(pDataInd);
break;
case Smsgs_cmdIds_trackingRsp:
processTrackingResponse(pDataInd);
break;
.....
}
但我看到collector.c文件中static void dataCnfCB(ApiMac_mcpsDataCnf_t *pDataCnf);函数有如下部分:
if(pDataCnf->msduHandle & APP_MARKER_MSDU_HANDLE)
{
/* What message type was the original request? */
if(pDataCnf->msduHandle & APP_CONFIG_MSDU_HANDLE)
{
/* Config Request */
Cllc_associated_devices_t *pDev;
pDev = findDeviceStatusBit(ASSOC_CONFIG_MASK, ASSOC_CONFIG_SENT);
if(pDev != NULL)
{
if(pDataCnf->status != ApiMac_status_success)
{
/* Try to send again */
pDev->status &= ~ASSOC_CONFIG_SENT;
Csf_setConfigClock(CONFIG_DELAY);
}
else
{
pDev->status |= ASSOC_CONFIG_SENT;
pDev->status |= ASSOC_CONFIG_RSP;
pDev->status |= CLLC_ASSOC_STATUS_ALIVE;
Csf_setConfigClock(CONFIG_RESPONSE_DELAY);
}
}
/* Update stats */
if(pDataCnf->status == ApiMac_status_success)
{
Collector_statistics.configReqRequestSent++;
}
}
....
}
猜测这部分应该与1.的问题相关,该函数dataCnfCB的作用是什么?什么情况下会回调到它?这个与dataIndCB的关系是什么,ConfigResponse在dataIndCB中处理了,这里处理config相关的代码又是在操作什么?
望不吝赐教,谢谢!