你好,
我正在使用DSP的项目工作,我正在尝试在中央模式下扫描,但我只能看到BL设备(DA14580)。我无法看到其他制造商的设备,如Microchip RN4020。
扫描配置如下:
void app_scanning(无效)
{
ke_state_set(task_app,app_connectable);
//创建一个核心消息以开始扫描
struct gapm_start_scan_cmd * msg =(struct gapm_start_scan_cmd *)ke_msg_alloc(gapm_start_scan_cmd,task_gapm,task_app,gapm_start_scan_cmd);
//最大对等连接
msg-> mode = gap_observer_mode;
msg-> op.code = gapm_scan_passive;
msg-> op.addr_src = gapm_public_addr;
msg-> filt_policy = scan_allow_adv_all;
msg-> filter_duplic = scan_filt_duplic_dis;
msg-> interval = app_scan_interval;
msg-> window = app_scan_window;
//发送消息
KE_MSG_SEND(MSG);
}
msgid,lapm_adv_report_ind_handler(ke_msg_id_t const,
const struct gapm_adv_report_ind * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
char temp [150];
INT8_T RSSI;
if(!memcmp(&param-> report.data [3],app_dflt_addata,app_dflt_add_data_len)))
{
//将找到的bd_addr保存到全局变量
RSSI =(int)(((float)param->报告.rssi * 0.474)-122);
memcpy(&connect_bdaddr,param-> eport.addr.addr,sizeof(struct bd_addr));
Sprintf(Temp,“Mac:%0.2x:%0.2x:%0.2x:%0.2x:%0.2x:%0.2x || RSSI:%d \ r \ n”,param-> eport.addr.addr[5],param-> eport.addr.addr [4],param-> eport.addr.addr [3],param-> report.addr.addr [2],param-> report.addr.addr [1],param-> eport.addr.addr [0],RSSI);
sps_uart_sps_write((uint8_t *)temp,strlen(temp));
// app_cancel_scanning();
}
return(ke_msg_consumed);
}
谢谢,
任何建议,对于你可能会发生的事情?
嗨Jonas Fleitas,
您是否能够在if()的休息点来捕捉广告指示?你确定另一个设备是广告吗?
我可以看到您正在检查用于特定广告数据模式的广告字符串的设备,您确定其他设备是否广告与对话框芯片相同的广告字符串?
谢谢mt_dialog.
默认情况下,DSPS应用程序只会报告与DSP应用程序使用的UUID匹配的设备。
如果要查看其他设备,则需要注释出解除其他非DPSP设备的代码。
查看user_on_adv_report_ind()
if(!memcmp(&param-> report.data [3],user_advertise_data,user_advertise_data_len)))
上面的IF语句只能寻找DSP uuid。如果您愿意,您可以修改此区域以查看所有UUID。
谢谢,马丁