观察者只能扫描一个通道

9个员额/ 0个新员额
最后发表
PDonchev
离线
最后看到:2年8个月前
加入:2015-06-21十四37
观察者只能扫描一个通道

嗨,我有两个设备。一个广播员和一个观察员。
问题是观察者似乎只扫描一个通道(37)。
如果我把广播设置在38或/和39,观察者不会收到任何报告。
与此同时,我的android表接收来自广播的报道。
扫描以以下代码开始:

空白user_scan_start(空白)

struct gapm_start_scan_cmd* cmd = KE_MSG_ALLOC(gapm_start_scan_cmd,
TASK_GAPM TASK_APP,
gapm_start_scan_cmd);

cmd - > op。代码= GAPM_SCAN_PASSIVE;
cmd - > op。addr_src = GAPM_PUBLIC_ADDR;
cmd - >间隔= MS_TO_BLESLOTS (100);
cmd - >窗口= MS_TO_BLESLOTS (100);
cmd - >模式= GAP_OBSERVER_MODE;
cmd - > filt_policy = SCAN_ALLOW_ADV_WLST,
cmd - > filter_duplic = SCAN_FILT_DUPLIC_DIS;

//发送消息
ke_msg_send (cmd);

当在37频道做广告时,收到报告。
这两种设备都是基于PAN1740模块。
有什么问题吗?

编辑:忘了提:SDK 5.0.3

Edit2:
我可以清楚地看到观察者花时间扫描其他通道,但没有检测到报告。在相同的
时间android平板电脑检测所有报告(无论哪个渠道)。

设备:
MT_dialog
离线
最后看到:2个月1个星期前
工作人员
加入:2015-06-08 34
嗨PDonchev,

嗨PDonchev,

我不看不到这样的事情,我能够扫描广告包通过扫描代码和设备设置在GAP_OBSERVER_SCA角色(在38个频道,我已经测试了安装SDK)的一个例子,使用白名单和一锅模块。您确定这是由于更换频道而引起的问题吗?如果你正在使用自定义板,你是否能够使用开发工具包来检查是否也发生了这种情况?除了在特定时间干扰38和39频道外,我看不到任何可能的原因。你试过没有使用白名单过滤器吗?

由于MT_dialog

PDonchev
离线
最后看到:2年8个月前
加入:2015-06-21十四37
嗨MT_dialog,

嗨MT_dialog,
谢谢你的回复。
没有白名单结果是一样的。不幸的是,我没有开发工具包来测试它。尝试了其他的板-同样的结果。切换到SDK 5.0.4。——相同的结果。
我现在设置观察者扫描周期为1秒,广播器在所有频道(频道掩码0x7)上发布广告,间隔100ms。我所看到的(在观察者上)是一秒钟的活动(大约10个报告),随后是两秒钟的暂停(它必须扫描通道38、39)。
我不知道这是否重要,但我有自定义的GAPM_CMP_EVT处理程序(在user_catch_rest_hndl)以下操作(GAPM_RESET, GAPM_SET_DEV_CONFIG):

................................................................
案例GAPM_RESET:
如果(msg_param - >状态! = GAP_ERR_NO_ERROR)

ASSERT_ERR (0);/ /意想不到的错误

其他的

..................................
//设置设备配置
app_gapm_configure_op (GAP_OBSERVER_SCA, (uint8_t *))user_gapm_conf.appearance惹恼,
user_gapm_conf.appearance_write_perm,
user_gapm_conf.name_write_perm,
user_gapm_conf。max_mtu user_gapm_conf。con_intv_min user_gapm_conf.con_intv_max,
user_gapm_conf。con_latency user_gapm_conf。superv_to user_gapm_conf.flags);
....................................................

打破;
案例GAPM_SET_DEV_CONFIG:
user_add_white_list ();
打破;
案例GAPM_ADD_DEV_IN_WLIST:
如果(msg_param - >状态! = GAP_ERR_NO_ERROR)

ASSERT_ERR (0);/ /意想不到的错误

其他的

user_scan_start ();

打破;

原来的处理程序在gapm_cmp_evt_handler中注释。

你能把你测试的样品发给我吗?

MT_dialog
离线
最后看到:2个月1个星期前
工作人员
加入:2015-06-08 34
嗨PDonchev,

嗨PDonchev,

对不起,我不明白您的意思。”我所看到的(在观察者上)是一秒钟的活动(大约10个报告),随后是两秒钟的暂停(它必须扫描通道38、39)。“由于观察者扫描的时间是1秒,而广播的间隔是100ms,所以你应该得到10个报告。我也不明白2秒的暂停,在这2秒内它应该扫描38和39频道。观察者将扫描所有的通道顺序根据你设定的时间间隔,例如如果你扫描1秒100毫秒间隔100毫秒的设备将扫描通道37然后将开关通道38额外100 ms,然后为另一个通道39 100 ms,然后将从头再来。测试fw通过邮件发送,Central- Observer是中心设备,ble_app_profile是广播设备,中心只打印在白名单中发现的设备。

由于MT_dialog

PDonchev
离线
最后看到:2年8个月前
加入:2015-06-21十四37
嗨MT_dialog,

嗨MT_dialog,
100ms是广播电台的广告间隔。观察者扫描设置是1秒间隔(带有1秒窗口),所以前一秒它接收到37频道的报告,但接下来的两秒(它必须侦听38和39频道)没有接收到报告。与此同时,我看到在这两秒钟内,我的android平板电脑收到了报告。
如果我设置广播器只在38和39频道(频道掩码0x6)上发布,观察者不能检测到任何报告。我将测试你发给我的,并将报告回来。

编辑:
测试了你们的例子,结果是一样的。他们只在37频道工作。也许我的空气环境太差了,只有37频道可用?
但我的安卓平板电脑接收38和39频道发来的报告。

Edit2:
你测试了两个设备是否都是PAN1740吗?

MT_dialog
离线
最后看到:2个月1个星期前
工作人员
加入:2015-06-08 34
嗨PDonchev,

嗨PDonchev,

扫描和扫描窗口的间隔取决于扫描过程开始时向堆栈发送的命令(MS_TO_BLE_SLOTS(100)(来自上面提供的扫描函数),这意味着100ms而不是1秒)。另外,由于您为窗口提供了相同的值,而窗口的间隔将略小于100ms。我能想到的唯一扫描通道37的方法是使用与扫描间隔相同的时间长度的内核计时器,开始扫描并设置计时器,所以当通道37的扫描周期结束时,计时器回调也会发生,并取消对下一个通道的扫描(我提到这个的原因是以防你正在做类似的事情)。是的我已经测试了两个锅的设备模块改变了1秒的间隔和窗口,我能够得到广告显示38和39通道通过时间戳记录广告迹象表明,我收到了所有的广告在适当的时机取决于通道我扫描每秒钟(我有一个广告indication except when scanning on channel 37) so i suppose that this has to do either with your enviroment and the receiver of the tablet you are using or with the way that you scan and print the advertising indications.

由于MT_dialog

PDonchev
离线
最后看到:2年8个月前
加入:2015-06-21十四37
嗨MT_dialog,

嗨MT_dialog,
我说的不是针对我发布的代码。我只是说,如果我设置interval/窗口MS_TO_BLE_SLOTS(1000),我看到的是一秒活动和两秒暂停。
扫描不会被取消/重新启动,而是持续运行。
所以观察者实际上扫描38和39频道,但没有收到任何东西。
无论如何,你提供的代码(用于观察者)也不能在我的环境中使用38和/或39频道,但与此同时,我的旧android平板电脑(Nexus 7, 2012)收到38和39频道的所有报告。
因此,不知何故,我的PAN1740观察员不能在我的环境中38和39频道工作,这是奇怪的,因为其他设备没有面临这个问题。
我将用一些旧的PAN1740设备再做一次测试(不幸的是我只有PAN1740设备),并将反馈给你。

MT_dialog
离线
最后看到:2个月1个星期前
工作人员
加入:2015-06-08 34
嗨PDonchev,

嗨PDonchev,

我很抱歉,但我不能复制你所经历的,即使在我得到的平底锅上,尝试与其他设备检查是一个好主意,以防在当前模块有某种故障。我附上了扫描周期为1秒的终端输出,你可以看到扫描仪只能跟踪两个通道的广告数据(每个print“Connect with”bd_address“”都是一个广告指示)。打印上的时间戳(秒)表明设备在两个子频道上获得广告,而在第三个频道上没有获得任何信息(广播器被设置为在38和39频道做广告,查看附件以获得更多信息)。应的输出源代码我已经发送,如果你有打印功能定制板上尝试运行示例通过改变UART港口和通过将你的bd地址白名单,只是改变ADDR_TARGET定义和使用一个终端可以时间戳的输出和检查如果你能得到相同的模式。

由于MT_dialog

PDonchev
离线
最后看到:2年8个月前
加入:2015-06-21十四37
嗨MT_dialog,

嗨MT_dialog,
很抱歉浪费了您的时间。问题解决了。
是原型板上的硬件错误。
其中一个数字输入通过高值电阻获得较高的电压。
由于输入端的内部保护二极管,它没有被检测到,这避免了设备的损坏,
但38 39频道无法播放。
现在董事会收到所有渠道的报告。
非常感谢您的关注和帮助。
问候,
PDonchev