嗨,支持
我使用示例Ble_barebone创建了一个BLE信标。使用以下配置-
Static const struct advertise_configuration user_adv_conf = {
.addr_src = GAPM_PUBLIC_ADDR,//GAPM_PUBLIC_ADDR,
.renew_dur = 0,
.intv_min = 800, // value*0.625ms=ms
.intv_max = 800, // value*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,
};
通过上述配置,信标被每个扫描仪成功扫描。
但是现在我只想用我特定的扫描仪扫描它(我不想向所有人透露我的信标)。我不知道我将不得不在扫描仪和广告商端做什么配置。请帮助。
设备:
还在等地区检察官支援队
嗨abhikalitra,
在论坛上提问时,你必须有耐心。你不能做这样的事情,因为你作为一个信标,我猜你希望在广告时发送数据。根据BLE规范,如果您使用定向广告,您可以发布广告并被特定设备扫描(如果您知道扫描仪的bd地址),但您将无法在定向广告PDU中适合数据。在直接广告中,PCU只包括设备的bd地址,它消耗相当大的功率。
谢谢,PM_Dialog
嗨PM_Dialog,
谢谢您的回复。我能得到任何定向广告的代码示例吗?
嗨abhikalitra,
您应该在user_config.h文件中user_adv_config结构的.peer_addr_type中添加中心地址。然后,在user_app_adv_start()中使用app_easy_gap_directed_advertise_start()而不是app_easy_gap_undirected_advertise_get_active(),并使用上面提到的适当的bd地址字段。如前一篇文章中提到的,注意在直接广告中PCU只包括设备的bd地址。
谢谢,PM_Dialog
亲爱的PM_Dialog,
我明白了。但我认为这解决不了我的问题。你能告诉我如何在广告客户端设置白名单吗?这样它将只接受来自白名单地址的连接请求。
我是这样做的-
在user_config.h文件中
Static const struct advertise_configuration user_adv_conf = {
.addr_src = GAPM_PUBLIC_ADDR,//GAPM_PUBLIC_ADDR,
///可解析地址在重新生成之前的持续时间。
.renew_dur = 0,
///最小广告间隔
.intv_min = 800 / / (8000 + (800) (MAC_ID_B0 % 10) *), / / ADV_MAX / /值* 0.625 =女士女士
///最大广告间隔
.intv_max = 800 / / (8000 + (800) (MAC_ID_B0 % 10) *), / / ADV_MIN / /值* 0.625 =女士女士
///广告通道图
.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=public/1=private random
.peer_addr_type = 0,
};
空白user_app_adv_start(空白)
{
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
{
uint8_t wht_lst1[6]={0x20, 0x33, 0x32, 0xCA, 0xEA, 0x80};// bd_我的中心设备地址
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->operation = GAPM_ADD_DEV_IN_WLIST;
Cmd ->nb = 1;
Memcpy ((void *) &cmd->设备[0]。地址,(void *)wht_lst1, BD_ADDR_LEN);
cmd - >设备[0].addr_type = 0;
ke_msg_send (cmd);
}
请查看是否可以使用?
嗨abhikalitra,
我不能在你的代码片段中找到错误的地方。ADV_ALLOW_SCAN_WLST_CON_WLST是只应用于外设的过滤策略,用于接受来自白名单中的设备的扫描或连接请求。
谢谢,PM_Dialog