请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC2652P 工具与软件:
我的坐标向路由器发送一个82字节的 APS 有效负载帧、它可以成功发送。 但是、当坐标多次向该路由器发送字段时、坐标将更改为源路由模式、该模式不能向该路由器发送82字节的数据。
我想在 afDataReqMTU 中添加一些处理来 处理 源路由
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
我的坐标向路由器发送一个82字节的 APS 有效负载帧、它可以成功发送。 但是、当坐标多次向该路由器发送字段时、坐标将更改为源路由模式、该模式不能向该路由器发送82字节的数据。
我想在 afDataReqMTU 中添加一些处理来 处理 源路由
您好!
如果使用源路由、则由于整个数据包中添加了中间地址、您将无法容纳82字节的最大有效负载大小。
通常、如果负载对于单个 APS 数据包来说太大、则 碎片 应解决它。
请注意、 ZStack_afDataREQ_t 具有不指定源路由的方法、这将使单个数据包中的应用数据有效负载大小最大化。
请参见 ZStack_afDataREQ_t --> n_RELAYLIST (/** RELAYLIST 中的条目数(0用于 非源路由 )*/)
谢谢!
Toby
我修复了类似这样的"afDataReqMTU"、但它将触发 Fragment、 尽管没有触发源路由。
uint8_t afDataReqMTU( afDataReqMTU_t* fields )
{
uint8_t len;
uint8_t hdr;
if ( fields->kvp == TRUE )
{
hdr = AF_HDR_KVP_MAX_LEN;
}
else
{
hdr = AF_HDR_V1_1_MAX_LEN;
}
len = (uint8_t)(APSDE_DataReqMTU(&fields->aps) - hdr);
//match rtg table to recalculate MTU, fixed by luoyiming 2025-01-04
if(afRtgDstAddress != 0xFFFE)
{
rtgSrcEntry_t* rtgSrcEntry = afGetRtgSrcEntry(afRtgDstAddress);
if(rtgSrcEntry)
{
if(rtgSrcEntry->relayCount)
{
len -= (2 + rtgSrcEntry->relayCount * sizeof(uint16_t));
}
}
afRtgDstAddress = 0xFFFE;
}
return len;
}