嗨,支持
我使用Ble_barebone创建了一个BLE信标。使用以下配置-
Static const struct advertise_configuration user_adv_conf = {
/ / GAPM_PUBLIC_ADDR .addr_src = GAPM_PUBLIC_ADDR,
.renew_dur = 0,
.intv_min = 800, //值*0.625毫秒=毫秒
.intv_max = 800, //值*0.625毫秒=毫秒
.channel_map = 0 x7,
.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 = {
/ / GAPM_PUBLIC_ADDR .addr_src = 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 = 0 x7,
/ / GAP_GEN_DISCOVERABLE .mode = 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
静态孔隙manage_white_list(空白)
{
uint8_t wht_lst1[6]={0x20, 0x33, 0x32, 0xCA, 0xEA, 0x80}
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