Part Number:CC1310
各位专家:
我在collector 端定义了一个新的Message IDs (Smsgs_cmdIds_SensorDataConfigReq) 并通过 sendMsg 函数发送信息到SENSOR ,SENSOR 端接收到信息后返回应答: Sensor_sendMsg(Smsgs_cmdIds_SensorDataConfigRsp,&pDataInd->srcAddr, true,4,cmdBytes); 此消息主要是通知SENSOR 修改SCS采集频率。并根据新的频率发送采集数据
collector 端 接收到Smsgs_cmdIds_SensorDataConfigRsp 消息确认处理。
Smsgs_cmdIds_SensorDataConfigReq = 16,
Smsgs_cmdIds_SensorDataConfigRsp = 17
现在的问题是:在发送一次消息后并成功接收到应答。SENSOR 会根据修改后的频率向COLLECTOR发送传感器采集数据,COLLECTOR 在一段时间内可以收到传感器数据,但运行一段时间后,发送SENSOR 发送POLL 时
返回状态 SATATUS=E9 ApiMac_status_noAck 从而使SENSOR 变成孤儿状态并进行与COLLECT 重新连接。
我查看了COLLECT SENSOR 之间的通讯源码
COLLECTOR 端应用:sendMsg 在该函数中我看到一条语句dataReq.msduHandle = getMsduHandle(type); 发现对msduHandle 根据Smsgs_cmdIds_t 类型进行相应赋值。
/* Add the App specific bit */
msduHandle |= APP_MARKER_MSDU_HANDLE;
/* Add the message type bit */
if(msgType == Smsgs_cmdIds_configReq)
{
msduHandle |= APP_CONFIG_MSDU_HANDLE;
}
else if(msgType == Smgs_cmdIds_broadcastCtrlMsg)
{
msduHandle |= APP_BROADCAST_MSDU_HANDLE;
}
我定义的Smsgs_cmdIds_SensorDataConfigReq 在这里没进行相应处理,我不清楚msduHandle 这个参数作用,请帮我分析下,是否这个因素造成了上述现象。需要怎样修改。
Shuyang Zhong:
您的分析是对的,接收端需要根据msduHandle来判断数据是否合法,因此您需要在getMsduHandle中加入对Smsgs_cmdIds_SensorDataConfigReq和Smsgs_cmdIds_SensorDataConfigRsp的判断。
msduHandle的定义请参考getMsduHandle函数上面的注释,bit 7表示app message,bit 6表示config message,bit 0-5是一个message counter:
/*!* @briefGet the next MSDU Handle*<BR>*The MSDU handle has 3 parts:<BR>*- The MSBit(7), when set means the the application sent the*message*- Bit 6, when set means that the app message is a config request*- Bits 0-5, used as a message counter that rolls over.** @parammsgType - message command id needed** @returnmsdu Handle*/Best regards,
Shuyang