是matlab BLE CSA # 2实现跳过eventCounter 0是有原因的?

13个视图(30天)
你好,
csa = bleChannelSelection (“算法”2);
csa。AccessAddress =“8 e89bed6”;
csa。UsedChannels = (0:36);
numConnectionEvents = 10;
我= 1:numConnectionEvents
频道= csa ();
流(“事件计数器:% d,所选频道:% d \ n ',csa。EventCounter、通道);
结束
这个生成以下输出
事件计数器:1、选择渠道:20
事件计数器:2,选择频道:6
事件计数器:3,选择频道:21
这是因为以下代码的matlab源代码[classdef bleChannelSelection < matlab。系统从226行开始
函数channelIndex = nextHop (obj)
%初始化
channelIndex = 0;
%增加事件计数器
obj。EventCounter = obj。EventCounter + 1;
%环绕
如果(obj。EventCounter > intmax (“uint16”))
obj。EventCounter = 1;
结束
%根据算法
开关(obj.Algorithm)
%算法# 1
情况下1
%计算地图上未标明的通道
unmappedChannel =国防部((
obj。pLastUnmappedChannel + obj.HopIncrement), 37);
%如果地图上未标明的通道是一个无法使用通道,地图
%的一个可用通道从重新映射表
如果~ obj。ChannelMap (unmappedChannel + 1)
%构造包含可用的重新映射表
%通道指数
remapTable =找到(obj.ChannelMap) - 1;
%计算重新映射索引。加1 remapTable以来
%索引从1开始。
remapIndex =国防部(unmappedChannel nnz (obj.ChannelMap)) + 1;
%地图上未标明的通道映射到一个可用的信道使用
%重新映射表
channelIndex = remapTable (remapIndex);
其他的
%如果地图上未标明的通道是一个可用的通道,
%重新映射不是必需的
channelIndex = unmappedChannel;
结束
%保留最后一个地图上未标明的通道和电流通道
%指数
obj。pLastUnmappedChannel = unmappedChannel;
obj。ChannelIndex = ChannelIndex;
%算法# 2
情况下2
%将十六进制转换成二进制
binAccessAddress = comm.internal.utilities.de2biBase2RightMSB (
hex2dec (obj.AccessAddress), 32);
%计算从给定的访问通道标识符
%的地址
channelID = xor (binAccessAddress (1:16), binAccessAddress (17:32));
%生成伪随机数的蓝牙
%核心规范v5.0 | 6卷,B部分,部分
% 4.5.8.3.3。
randomNumber = obj.generatePseudoRandomNumber (
comm.internal.utilities.de2biBase2RightMSB (
obj。EventCounter、16) channelID);
%计算地图上未标明的通道使用伪随机数。
unmappedChannel = mod (randomNumber, 37);
%如果地图上未标明的通道是一个无法使用通道,地图
%的一个可用通道从重新映射表
如果~ obj。ChannelMap (unmappedChannel + 1)
%构造包含可用的重新映射表
%通道指数
remapTable =找到(obj.ChannelMap) - 1;
%计算重新映射索引。加1 remapTable以来
%索引从1开始
remapIndex =地板(
(nnz (obj.ChannelMap) * randomNumber) / (2 ^ 16)) + 1;
%地图上未标明的通道映射到一个可用的信道使用
%重新映射表
channelIndex = remapTable (remapIndex);
其他的
%如果地图上未标明的通道是一个可用的通道,
%重新映射不是必需的
channelIndex = unmappedChannel;
结束
%保留当前频道索引
obj。ChannelIndex = ChannelIndex;
结束
结束
在这个实现事件立即计数器递增。我认为这并不完全符合蓝牙核心规范版本5.2 ( https://www.bluetooth.com/specifications/bluetooth-core-specification/ )。你可以看看蓝牙核心规范pdf和去6卷,一部分C到3.1节(3085页),你就能看到,鉴于这些确切的开始参数生成的序列是应该从事件计数器0。
事件计数器:0,选择频道:25 < =我想这应该是在第一个代码片段的输出问题
事件计数器:1、选择渠道:20
事件计数器:2,选择频道:6
事件计数器:3,选择频道:21
有直接在源代码中增量的原因吗?应该不是在事件计数器0开始?
真诚地,

答案(1)

来自Manthini
来自Manthini 2020年7月24日
事件计数器值从0到65535,而我们认为默认值为1。然而,事件计数器必须包装从65535到0,这不是发生在这种情况下。开发团队意识到它,会在将来的版本中修复它。
现在你可以修改代码 递增 柜台。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!