你好。
我正在测试BLE扫描仪。
我在一个新项目中实施了扫描仪。
扫描仪命令中发生错误。请参阅下面的代码
void app_start_scanning(void)
{
ke_state_set(task_app,app_connectable);
Arch_printf(“ app_start_scanning \ r \ n”);
struct gapm_start_scan_cmd *msg = ke_msg_alloc(gapm_start_scan_cmd,task_gapm,task_app,gapm_start_scan_cmd);
msg-> mode = gap_observer_mode;// gap_gen_discovery;
msg-> op.code = gapm_scan_active;// gapm_scan_passive;
msg-> op.addr_src = gapm_public_addr;
// msg-> filt_policy = scan_allow_adv_all;// scan_allow_adv_wlst;// scan_allow_adv_all;
msg-> filter_duplic = scan_filt_duplic_en;
msg->间隔= 10;
msg-> window = 5;
ke_msg_send(msg);
返回;
}
在以下代码中,返回错误代码。
GAPM_CMP_EVT_HANDLER-操作:16,状态:0x42
不支持GAPM_SCAN_PASSIVE。
int gapm_cmp_evt_handler(ke_msg_id_t_t const msgid,struct gapm_cmp_evt const *param,ke_task_id_t const dest_id,ke_task_id_id_t const src_id)
{
Arch_printf(“ gapm_cmp_evt_handler-操作:%d,状态:0x%x \ r \ n”,param->操作,param-> status);
........
}
这是一个完整的日志。
GAPM_CMP_EVT_HANDLER-操作:1,状态:0x0
gapm_cmp_evt_handler-操作:3,状态:0x0
app_set_dev_config_complete_func
app_start_scanning
GAPM_CMP_EVT_HANDLER-操作:16,状态:0x42
app_scanning_completed_func
我需要一个预定义的扫描仪吗?
租赁帮助我。
看起来下面的代码经过修改和扫描。
void app_configuration_func(ke_task_id_id_t const tast_id,struct gapm_set_set_dev_config_cmd *cmd)
{
//操作选择
cmd->操作= gapm_set_dev_config;
//设备角色
cmd->角色= gap_central_mst;
//定义的最大传输单元
cmd-> max_mtu = app_cfg_max_mtu;
}
看来正在扫描的设备只是电视。
其他BLE设备似乎无法检测到它。
我无法检测到我的da14580 ble。
是什么原因?
如果更改App_start_scanning中的选项,则不会搜索它。
嗨,Craftwizard,
首先要扫描该设备,需要将设备配置为中央或观察者,将设备配置为外围设备或您无法扫描的广播公司,因为这些操作不受那些角色。
关于您只能跟踪电视的事实,发送扫描命令确定可以扫描的设备时填充的选项,您将能够通过检查RW-BLE-GAP检查这些配置的操作-is.pdf(您可以在“配置文件&API文档”部分的“文档”选项卡下的“支持门户”上找到该文档 - GAP接口规范)。还要注意,一般发现和有限发现中的扫描命令仅持续10秒,此后该设备将停止扫描,您将不得不重新发出扫描命令。另外,请确保您拥有的设备实际上是广告,并且您应该在.app_on_adv_report_ind回调中捕获广告设备。
谢谢mt_dialog
嗨,mt_dialog
感谢你的回复。
我必须更改哪些选项才能扫描所有设备?
更改选项并未搜索所有设备。
如您在下面的代码中看到的那样,未完成搜索。
msg-> mode = gap_gen_discovery;
即使您查看文档,也没有扫描的特别指南。
我再次测试了下面的代码。
电视扫描后立即扫描电视,但其余的设备在很长一段时间后进行了扫描。
如果您在智能手机上搜索BLE,将立即搜索。
是什么原因?
void app_start_scanning(void)
{
ke_state_set(task_app,app_connectable);
Arch_printf(“ app_start_scanning \ r \ n”);
struct gapm_start_scan_cmd *msg = ke_msg_alloc(gapm_start_scan_cmd,task_gapm,task_app,gapm_start_scan_cmd);
msg-> mode = gap_observer_mode;// gap_observer_mode;// gap_gen_discovery;
msg-> op.code = gapm_scan_passive;// gapm_scan_active;// gapm_scan_passive;
msg-> op.addr_src = gapm_public_addr;
msg-> filt_policy = scan_allow_adv_all;// scan_allow_adv_wlst;// scan_allow_adv_all;
msg-> filter_duplic = scan_filt_duplic_en;// scan_filt_duplic_dis;// scan_filt_duplic_en;
msg->间隔= 500;
msg-> window = 100;
ke_msg_send(msg);
返回;
}
请帮我。
嗨,Craftwizard,
为了扫描所有类型的广告字符串,您将必须将扫描模式设置为gap_observer_mode,如文档所示,这种扫描将返回当时正在广告和扫描过程的BLE设备的任何类型的广告字符串永远不会超时,您只能通过使用GAPM_CANCEL_CMD来停止它。GAP_GEN_MODE将返回仅在有限或一般模式下广告的设备。正如我所提到的,请确保该设备确实是广告。没有特殊指南来操作扫描过程,只有每种配置在扫描命令中执行的规范,请查看主机侧的DSP示例并检查user_scan_start()函数,您可以使用作为参考。
现在,如果扫描设备需要时间,则可以尝试不过滤重复的广告消息(如果您打印太多数据,尽管这可能最终可以重置设备),还可以尝试降低您的值扫描间隔和扫描窗口,您当前拥有的值是每312.5ms扫描每个频道62.5ms,也许是您使用的设备不经常宣传。同样,您在其他电话扫描仪上看到广告设备(我认为Android)的事实也许是因为这些设备被缓存,并且Android不会向您显示该扫描实例中发现的设备。
谢谢mt_dialog
嗨,mt_dialog
感谢你的回复。
我再次尝试了测试。
似乎无法搜索,因为发送和接收设备的敏感性不好。
是否有RSSI值,意思是“ 100” IS'-100dBm'?
嗨,Craftwizard,
价值为-100dBm的RSSI在BLE中没有含义(这是一个星期的接待),但我不确定是否会得到您的问题。您得到的100是什么?您是否检查了常见问题解答如何正确翻译DBM中的值https://support.dialog-spoomendonductor.com/guide/faq-da1458x-software-peri ...检查“如何读取和将RSSI值转换为DBM”。
谢谢mt_dialog