嗨,支持
我使用示例ble_barebone创建了一个BLE信标。使用以下配置 -
静态const struct advertise_configuration user_adv_conf = {
.addr_src = gapm_public_addr,// gapm_public_addr,
.renew_dur = 0,
.intv_min = 800,//值*0.625ms = MS
.intv_max = 800,//值*0.625ms = MS
.channel_map = 0x7,
.mode = gap_gen_discoverable,
.adv_filt_policy = adv_allow_scan_any_con_any,
.peer_addr = {0x1,0x2,0x3,0x4,0x5,0x6},
.peer_addr_type = 0,
};
使用上述配置,Beacon成功地扫描了每个扫描仪。
但是现在,我希望仅由我的特定扫描仪扫描它(我不想向所有人展示我的信标)。我不知道我必须在Scanner和Advertiser End上制作什么配置。请帮忙。
设备:
仍在等待DA支持团队
嗨,Abhikalitra,
在论坛上提问时,您将必须耐心等待。您将无法做到这样的事情,因为您充当信标,我想您希望在广告时发送数据。根据BLE规范,您可以通过特定设备(如果您知道扫描仪的BD地址)进行宣传并扫描,如果您使用有指示的广告,但您将无法在有导的广告PDU中拟合数据。在直接宣传PCU时,PCU仅允许设备的BD地址,并且它消耗了很多功能。
谢谢,pm_dialog
嗨,pm_dialog,
感谢您的答复。我可以获取任何定向广告的代码示例吗?
嗨,Abhikalitra,
您应该在USER_ADV_CONFIG结构的.peer_addr_type中添加中心地址。然后,在user_app_adv_start()中使用app_easy_gap_directed_directed_advertise_start()而不是app_easy_gap_undertection_advertise_get_get_active(),并在上述字段中提供适当的BD地址。如上一篇文章所述,请注意,在直接宣传PCU时,PCU仅允许设备的BD地址。
谢谢,pm_dialog
亲爱的pm_dialog,
我知道了。但是我认为这不会解决我的问题。您能告诉我如何在广告商方面设置白名单。这样它将仅接受白名单地址的连接请求。
我在做这个 -
在文件user_config.h中
静态const struct advertise_configuration user_adv_conf = {
.addr_src = gapm_public_addr,// gapm_public_addr,
///可再生地址的持续时间。
.renew_dur = 0,
///广告的最小间隔
.intv_min = 800,//(8000+((Mac_id_b0%10)*800)),// adv_max,//值*0.625ms = ms
///广告的最大间隔
.intv_max = 800,//(8000+((Mac_id_b0%10)*800)),// adv_min,//值*0.625ms = ms
///广告频道地图
.channel_map = 0x7,
.mode = gap_gen_discoverable,// gap_gen_discoverable,
.adv_filt_policy = adv_allow_scan_wlst_con_wlst,
///直接地址信息(gapm_adv_direct)
.peer_addr = {0x1,0x2,0x3,0x4,0x5,0x6}
///设备的地址类型0 =公共/1 =私有随机
.peer_addr_type = 0,
};
void user_app_adv_start(void)
{
manage_white_list();
//安排下一个广告数据更新
app_adv_data_update_timer_used = app_easy_timer(app_adv_data_update_to,adv_data_update_timer_cb);
// struct gapm_start_advertise_cmd* cmd;
cmd = app_easy_gap_undirected_advertise_get_active();
app_add_ad_struct(cmd,&mnf_data,sizeof(struct mnf_specific_data_ad_structure));
app_easy_gap_undirected_advertise_start();
}
在文件user_barebone.c中
静态void manage_white_list(void)
{
uint8_t wht_lst1 [6] = {0x20,0x33,0x32,0xca,0xCa,0xea,0x80}; //我的中央设备的bd_address
struct gapm_white_list_mgt_cmd *cmd = ke_msg_alloc_dyn(gapm_white_list_mgt_cmd,
task_gapm,
task_app,
gapm_white_list_mgt_cmd,
sizeof(struct gap_bdaddr));
cmd->操作= gapm_add_dev_in_wlist;
cmd-> nb = 1;
memcpy(((void *)&cmd->设备[0] .addr,(void *)wht_lst1,bd_addr_len);
cmd->设备[0] .ADDR_TYPE = 0;
ke_msg_send(cmd);
}
请查看并检查是否有效?
嗨,Abhikalitra,
我无法在您的代码段中找到错误。Adv_allow_scan_wlst_con_wlst是仅应用于外围的过滤策略,以接受白色列表中设备的扫描或连接请求。
谢谢,pm_dialog