嗨。
我在测试一个ble扫描仪。
我在一个新项目中实现了这个扫描仪。
扫描命令出错。请参见下面的代码
空白app_start_scanning(空白)
{
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);
味精- >模式= GAP_OBSERVER_MODE;/ / GAP_GEN_DISCOVERY;
味精- > op。代码= GAPM_SCAN_ACTIVE;/ / GAPM_SCAN_PASSIVE;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
// msg->filt_policy = SCAN_ALLOW_ADV_ALL;/ / SCAN_ALLOW_ADV_WLST;/ / SCAN_ALLOW_ADV_ALL;
味精- > filter_duplic = SCAN_FILT_DUPLIC_EN;
味精- >间隔= 10;
味精- >窗口= 5;
ke_msg_send(味精);
返回;
}
在下面的代码中,将返回错误代码。
Gapm_cmp_evt_handler -操作:16,状态:0x42
不支持GAPM_SCAN_PASSIVE。
Int gapm_cmp_evt_handler(ke_msg_id_t const msgid, struct gapm_cmp_evt const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
arch_printf("gapm_cmp_evt_handler -操作:%d,状态:0x%X \r\n", param->操作,param->状态);
.......
}
这是一个完整的日志。
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_t const task_id, struct gapm_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
谢谢你的回复。
要扫描所有设备,我需要更改哪些选项?
更改选项不会搜索所有设备。
正如您在下面的代码中所看到的,没有完成搜索。
味精- >模式= GAP_GEN_DISCOVERY;
即使你看了文件,也没有特别的扫描指南。
我再次测试如下代码。
电视被扫描后立即被扫描,但其他设备需要很长时间才能被扫描。
如果你在你的智能手机上搜索BLE,它会立即搜索。
原因是什么?
空白app_start_scanning(空白)
{
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);
味精- >模式= GAP_OBSERVER_MODE;/ / GAP_OBSERVER_MODE;/ / GAP_GEN_DISCOVERY;
味精- > op。代码= GAPM_SCAN_PASSIVE;/ / GAPM_SCAN_ACTIVE;/ / GAPM_SCAN_PASSIVE;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
味精- > filt_policy = SCAN_ALLOW_ADV_ALL;/ / SCAN_ALLOW_ADV_WLST;/ / SCAN_ALLOW_ADV_ALL;
味精- > filter_duplic = SCAN_FILT_DUPLIC_EN;/ / SCAN_FILT_DUPLIC_DIS;/ / SCAN_FILT_DUPLIC_EN;
味精- >间隔= 500;
味精- >窗口= 100;
ke_msg_send(味精);
返回;
}
请帮助我。
嗨craftwizard,
为了扫描所有类型的广告字符串你需要设置你的扫描模式GAP_OBSERVER_MODE,显示文档的扫描将返回任何类型的广告字符串的BLE设备广告目前和扫描过程永远不会超时,你只能通过GAPM_CANCEL_CMD停止它。GAP_GEN_MODE将返回仅在有限或通用模式下发布的设备。正如我提到的,确保设备确实是广告。没有特殊的指导如何操作扫描过程,只是什么每个配置的规范扫描命令,请看看dsp在主机端和检查user_scan_start()函数,你可以作为参考。
如果需要时间需要扫描的设备你可以尽量不要过滤重复的广告信息(如果你是打印数据太多,尽管这可能最终设备重置),你也可以试着减少扫描时间间隔的值和扫描窗口,你目前拥有的值是每312.5毫秒扫描每个频道62.5毫秒,也许你正在使用的设备不经常做广告。同样的事实,你看到的广告设备在其他手机扫描仪(android我假设)可能是因为那些设备是缓存和android不显示你在扫描实例发现的设备。
由于MT_dialog
嗨MT_dialog
谢谢你的回复。
我又试了一次。
由于发送和接收设备的灵敏度不高,似乎无法进行搜索。
是否有一个rssi值,意思是'100'是'-100dBm'?
嗨craftwizard,
一个值为-100dBm的RSSI在BLE中没有意义(它是每周的接收),但我不确定我是否得到了你的问题。得到的100是多少?你是否检查了FAQ中如何正确地转换dbm中的值https://support.dialog-semiconductor.com/guide/faq-da1458x-software-peri..。检查“如何读取RSSI值并将其转换为dBm”。
由于MT_dialog