嗨,我有两个设备。一个广播员和一个观察员。
问题是观察者似乎只扫描一个通道(37)。
如果我将广播公司设置为38或/和39,Observer不会收到任何报告。
同时,我的Android表从广播公司接收报告。
扫描以以下代码开始:
void user_scan_start(void)
{
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-> window = 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平板电脑检测所有报告(无论哪个渠道)。
设备:
嗨pdonchev,
我没有看到这样的东西,我能够通过使用扫描代码和Gap_observer_sca角色中设置的设备扫描广告数据包(在通道38中,在我的设置上使用SDK的示例测试了我的安装程序)和使用白色列表和平移模块。您确定这是通过更改频道发生的问题吗?如果您使用的是定制板,您是否能够使用DEV套件来检查是否发生了?除了在GIVEM时间的38和39频道上,除了在38和39频道的反馈外,我不会看到这种情况发生的任何可能性。你有没有尝试过不使用白名单过滤器?
由于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:
if(msg_param-> status!= 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);
....................................................
}
休息;
CASE GAPM_SET_DEV_CONFIG:
user_add_white_list();
休息;
案例GAPM_ADD_DEV_IN_WLIST:
if(msg_param-> status!= gap_err_no_error)
{
ASSERT_ERR (0);/ /意想不到的错误
}
其他的
{
user_scan_start();
}
休息;
原来的处理程序在gapm_cmp_evt_handler中注释。
你能把你测试的样品发给我吗?
嗨pdonchev,
对不起,我不明白你的意思是什么“我所看到的(在观察者上)是一秒钟的活动(大约10个报告),随后是两秒钟的暂停(它必须扫描通道38、39)。“由于观察者扫描一秒钟,而广播员的间隔是100ms 10报告是你应该得到的。我也不明白2秒暂停,在这两秒,它应该扫描38和39频道。观察者会根据您设置的间隔顺序扫描所有通道,如果例如,使用100ms间隔扫描1秒,设备将扫描100ms通道37,然后将切换到通道38另外100ms,然后将另一个100ms切换到通道38然后将重新开始。测试FW通过邮件发送,中央观察者是中央设备,BLE_APP_PROFILE是广播公司,中央只打印白色列表中找到的设备。
由于MT_dialog
嗨mt_dialog,
100ms是广播电台的广告间隔。观察者扫描设置是1秒间隔(带有1秒窗口),所以前一秒它接收到37频道的报告,但接下来的两秒(它必须侦听38和39频道)没有接收到报告。与此同时,我看到在这两秒钟内,我的android平板电脑收到了报告。
如果我设置广播器只在38和39频道(频道掩码0x6)上发布,观察者不能检测到任何报告。我将测试你发给我的,并将报告回来。
编辑:
测试了你们的例子,结果是一样的。他们只在37频道工作。也许我的空气环境太差了,只有37频道可用?
但我的安卓平板电脑接收38和39频道发来的报告。
Edit2:
你测试了两个设备是否都是PAN1740吗?
嗨pdonchev,
扫描和扫描窗口的间隔取决于当扫描过程开始时向堆栈发送的命令(MS_TO_BLE_SLOTS(100)(从您提供的扫描功能)意味着100ms,而不是1秒)。此外,由于您为窗口提供了相同的值,并且窗口将略小于100ms的间隔。我可以考虑扫描信道37的唯一方法是通过使用具有与扫描的间隔相同的时间长度的内核定时器,开始扫描并设置计时器,因此当通道37的扫描周期结束定时器时还将发生回调并取消扫描到下一个通道(如果您正在进行类似的东西,我提到的原因)。是的,我测试了PAN模块的两个设备都改变了1秒内的间隔和窗口,我能够通过时间戳将广告指令的38和39通道记录广告指示指示我在适当的时间内获得所有广告取决于我扫描的频道(除了在频道37上扫描时,每秒我有一个广告指示)所以我想这必须用你的环境和你正在使用的平板电脑的接收者或你扫描的方式打印广告迹象。
由于MT_dialog
嗨mt_dialog,
我不是专门用于我发布的代码。我只是说,如果我将间隔/窗口设置为ms_to_ble_slots(1000),我看到的是一个第二个活动,两秒钟暂停。
扫描不会被取消/重新启动,而是持续运行。
所以观察者实际上扫描38和39频道,但没有收到任何东西。
无论如何,你提供的代码(用于观察者)也不能在我的环境中使用38和/或39频道,但与此同时,我的旧android平板电脑(Nexus 7, 2012)收到38和39频道的所有报告。
因此,不知何故,我的Pan1740观察者无法在我的环境中在频道38和39上工作,因为其他设备不面对这个问题。
我将使用一些较旧的PAN1740设备进行一次测试(不幸的是,我只有Pan1740设备),并将返回给您。
嗨pdonchev,
我很抱歉,但我不能复制你所经历的,即使在我得到的平底锅上,尝试与其他设备检查是一个好主意,以防在当前模块有某种故障。我附上了扫描周期为1秒的终端输出,你可以看到扫描仪只能跟踪两个通道的广告数据(每个print“Connect with”bd_address“”都是一个广告指示)。打印上的时间戳(秒)表明设备在两个子频道上获得广告,而在第三个频道上没有获得任何信息(广播器被设置为在38和39频道做广告,查看附件以获得更多信息)。应的输出源代码我已经发送,如果你有打印功能定制板上尝试运行示例通过改变UART港口和通过将你的bd地址白名单,只是改变ADDR_TARGET定义和使用一个终端可以时间戳的输出和检查如果你能得到相同的模式。
由于MT_dialog
嗨mt_dialog,
我很遗憾浪费你的时间。问题已经解决了。
是原型板上的硬件错误。
在其中一个数字输入上通过高值电阻赋予更高的电压。
由于输入端的内部保护二极管,它没有被检测到,这避免了设备的损坏,
但它无法在渠道38,39上运作。
现在董事会收到所有渠道的报告。
非常感谢您的关注和帮助。
问候,
PDonchev