如何使用白名单进行扫描

19个帖子/ 0个新
最后发表
liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
如何使用白名单进行扫描

嗨,对话框中,

我正在尝试定义空中扫描包裹的功能,我已经检查了文档,我的功能如下我的问题是,我应该在哪里以及如何确定我的白名单进行扫描?

空白扫描仪(空白)
{
gapm_start_scan_cmd *cmd = KE_MSG_ALLOC(gapm_start_scan_cmd,
TASK_GAPM TASK_APP,
gapm_start_scan_cmd);
cmd - > op。code = GAPM_SCAN_PASSIVE;
Cmd ->interval = 4000;/ / 10
Cmd ->窗口= 4000;/ / 10
cmd->mode = GAP_GEN_DISCOVERY;
cmd->filt_policy = SCAN_ALLOW_ADV_WLST;
cmd->filter_duplic = SCAN_FILT_DUPLIC_DIS;
ke_msg_send (cmd);
}

设备:
MT_dialog
离线
最后看到:两个月三周前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

请查看GAPM_WHITE_LIST_MGT_CMD的RW-BLE-GAP-IS,这样您就可以管理您的with列表中的设备。您可以使用下面的代码片段

空白manage_white_list(空白)
{
uint8_t white_addr[6] = {0x01, 0x00, 0x00, 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->operation = GAPM_ADD_DEV_IN_WLIST;
Cmd ->nb = 1;
Memcpy ((void *) &cmd->设备[0]。addr, (void *)white_addr, BD_ADDR_LEN);
ke_msg_send (cmd);
}

由于MT_dialog

liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
谢谢你!最后一个问题

谢谢你!最后一个问题。
当我尝试从以下功能进行广播时:通过每10ms向空中广播不同的包。是否有可能使广播不同的包快于10ms?如果我让它播放得很快,会不会有什么影响导致播放过程失败?接收侧扫描得到它有问题吗?

Void set_adv_func(struct gapm_start_advertise_cmd *cmd,uint8_t *data, uint8_t len)
{
If (len > 26)
{
Len = 26;
}

cmd - > op。code = GAPM_ADV_UNDIRECT;
cmd - > op。addr_src = GAPM_PUBLIC_ADDR;
Cmd ->intv_min = 16;// 32*0.625 =20ms;
Cmd ->intv_max = 16;//
Cmd ->channel_map = 0x01;//channel 37

cmd - > info.host。mode = GAP_GEN_DISCOVERABLE;//通用可发现模式

// /*-----------------------------------------------------------------------------------
// *设置广告数据和扫描响应数据
// *---------------------------------------------------------------------------------*/
cmd - > info.host。adv_data_len = APP_ADV_DATA_MAX_SIZE;
cmd - > info.host。Scan_rsp_data_len = 0;//扫描无响应

if ((data != NULL) && (len >0))
{

memcpy (cmd - > info.host。Adv_data +2, data, len);
cmd - > info.host。Adv_data_len = len+2;
cmd - > info.host。Adv_data [0] = len + 1;
}

其他的
{
#如果DEBUG_LOG2
printf_string("\r\空输入所以加载数据:");
uart2_init (UART_BAUDRATE_115K2 3);
# endif

memcpy (cmd - > info.host。Adv_data +2, data, 26);
cmd - > info.host。adv_data_len = len + 2;
cmd - > info.host。Adv_data [0] = len + 1;
}
//每10*1ms更新一次广播数据
ke_timer_set(APP_DYNAMIC_ADV_DATA, TASK_APP, 1);
返回;
}

liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

我用下面的代码测试了白名单
在app_task.c中,我写了如下内容:

空白app_scan(空白)
{
manage_white_list ();
gapm_start_scan_cmd *cmd = KE_MSG_ALLOC(gapm_start_scan_cmd,
TASK_GAPM TASK_APP,
gapm_start_scan_cmd);

cmd - > op。code = GAPM_SCAN_PASSIVE;
cmd - >间隔= 4800;
Cmd ->窗口= 4800;
cmd->mode = GAP_GEN_DISCOVERY;
cmd->filt_policy = SCAN_ALLOW_ADV_WLST,
cmd->filter_duplic = SCAN_FILT_DUPLIC_DIS;
//发送消息
ke_msg_send (cmd);
}

当我尝试调用app_scan时,第一次工作,第二次不工作,第三次工作....我发现它只在偶尔管用。对于偶数时代,它不起作用。你能帮帮我吗?

MT_dialog
离线
最后看到:两个月三周前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

你说“它不起作用”是什么意思,它现在会返回任何设备广告还是什么都不返回?我正在使用使用扫描配置的按钮通过外部中断发出扫描,该设备似乎在每次按压中返回白名单中的设备(请通过在广告指示user_on_adv_report_ind()函数中使用断点来检查它)。我也会建议你,不要在扫描请求功能中添加新设备。每次你发出扫描,我认为你正在添加相同的设备(我不知道这是否会给你带来任何麻烦)。请看一下app_white_list.c文件中的键盘参考设计,它使用了白名单特性,也许你会发现它很有用。

由于MT_dialog

liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

我的意思是“没有工作”是扫描没有返回任何东西。如果我将函数“manage_white_list()”放入我的“app_scan()”中,每次当它运行时,第一次扫描良好,第二次在计时器重置后“ke_timer_set(APP_SWITCH_ROLE_TIMER, TASK_APP, 250);和ke_timer_set(APP_SWITCH_ROLE_TIMER, TASK_APP, 20);"似乎扫描没有返回任何结果。此外,这保持继续返回下一次扫描工作,下一个下一次没有扫描工作(这种现象继续继续)。

如果我只使用一次函数“manage_white_list()”,下一次在我通过计时器“ke_timer_set(APP_SWITCH_ROLE_TIMER, TASK_APP, 250)”GAPM_RESET之后,并重新加载“app_scan()”函数,它将不返回任何内容。接下来,当我再次执行GAPM_RESET时,然后使用“app_scan”仍然没有返回任何结果。

这是我代码的一部分

在app_task.c中:

//设备配置更新
案例GAPM_SET_DEV_CONFIG:
{
if(param->status != GAP_ERR_NO_ERROR)
{
ASSERT_ERR (0);//不可预知的错误
}
其他的
{
If (0 == current_role)
{
/ /广告
EXECUTE_CALLBACK_VOID (app_on_set_dev_config_complete);
}

其他的
{
/ /扫描
app_scan ();
}

If (0 == current_role)
{
ke_timer_set(APP_SWITCH_ROLE_TIMER, TASK_APP, 20);
}
If (1 == current_role)
{
ke_timer_set(APP_SWITCH_ROLE_TIMER, TASK_APP, 250);
}
}
}
打破;

空白manage_white_list(空白)
{

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]。addr, (void *)white_addr, BD_ADDR_LEN);
ke_msg_send (cmd);
}

int8_t white_flag;
空白app_scan(空白)
{
If (0 == white_flag)
{
manage_white_list ();
white_flag = 5;
}
gapm_start_scan_cmd *cmd = KE_MSG_ALLOC(gapm_start_scan_cmd,
TASK_GAPM TASK_APP,
gapm_start_scan_cmd);
cmd - > op。code = GAPM_SCAN_PASSIVE;
cmd - >间隔= 4800;
Cmd ->窗口= 4800;
cmd->mode = GAP_GEN_DISCOVERY;
cmd->filt_policy = SCAN_ALLOW_ADV_WLST,
cmd->filter_duplic = SCAN_FILT_DUPLIC_DIS;
ke_msg_send (cmd);
}

在app.c中,我们有:

Volatile uint8_t current_role = 1;/ / 0±iE¾OU×o¹²¥£¬1±iE¾OU×oE¨Ae
静态结构体gapm_set_dev_config_cmd* app_easy_gap_dev_config_create_msg(void)
{
//为GAP分配一个消息
if (set_dev_config_cmd == NULL)
{
gapm_set_dev_config_cmd* cmd;
CMD = app_gapm_configure_msg_create();
Set_dev_config_cmd = cmd;

如果(USER_CONFIG)
{
cmd->operation = GAPM_SET_DEV_CONFIG;

如果(1 == current_role){

Cmd ->role = user_gapm_conf.role;
Current_role = 0;

其他}{
cmd->role = GAP_CENTRAL_MST;
Current_role = 1;
}
Cmd ->appearance = user_gapm_conf.appearance;
Cmd ->appearance - e_write_perm = user_gapm_conf.appearance - e_write_perm;
Cmd ->name_write_perm = user_gapm_conf.name_write_perm;
Cmd ->max_mtu = user_gapm_conf.max_mtu;
Cmd ->con_intv_min = user_gapm_conf.con_intv_min;
Cmd ->con_intv_max = user_gapm_conf.con_intv_max;
Cmd ->con_latency = user_gapm_conf.con_latency;
Cmd ->superv_to = user_gapm_conf.superv_to;
Cmd ->flags = user_gapm_conf.flags;
memcpy (cmd - > irk.key、user_gapm_conf.irk KEY_LEN);
}
其他的
Memcpy ((void*)cmd, (void*)&default_set_dev_config, sizeof(struct gapm_set_dev_config_cmd));
}
返回(set_dev_config_cmd);
}

MT_dialog
离线
最后看到:两个月三周前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

由于您在角色之间交替,我不确定这是由白名单引起的,请删除白名单管理并尝试扫描并找回您可以找到的任何bd地址。当你在第二次尝试时,你在你的设备上找不到任何广告,你能扫描吗?我的意思是,从你的代码中,你的设备每秒钟都被配置为外设,外设根本不能扫描(如果)user_gapm_conf。角色是GAP_PERIPHERAL_SLV)。

由于MT_dialog

liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

我没有使用GAP_PERIPHERAL_SLV,在扫描的时候,我的角色切换函数是这样写的:

Volatile uint8_t current_role = 1;/ / 0±iE¾OU×o¹²¥£¬1±iE¾OU×oE¨Ae
静态结构体gapm_set_dev_config_cmd* app_easy_gap_dev_config_create_msg(void)
{
//为GAP分配一个消息
if (set_dev_config_cmd == NULL)
{
gapm_set_dev_config_cmd* cmd;
CMD = app_gapm_configure_msg_create();
Set_dev_config_cmd = cmd;

如果(USER_CONFIG)
{
cmd->operation = GAPM_SET_DEV_CONFIG;

如果(1 == current_role){
Cmd ->role = user_gapm_conf.role;
Current_role = 0;

其他}
{
cmd->role = GAP_CENTRAL_MST;
Current_role = 1;
}
Cmd ->appearance = user_gapm_conf.appearance;
Cmd ->appearance - e_write_perm = user_gapm_conf.appearance - e_write_perm;
Cmd ->name_write_perm = user_gapm_conf.name_write_perm;
Cmd ->max_mtu = user_gapm_conf.max_mtu;
Cmd ->con_intv_min = user_gapm_conf.con_intv_min;
Cmd ->con_intv_max = user_gapm_conf.con_intv_max;
Cmd ->con_latency = user_gapm_conf.con_latency;
Cmd ->superv_to = user_gapm_conf.superv_to;
Cmd ->flags = user_gapm_conf.flags;
memcpy (cmd - > irk.key、user_gapm_conf.irk KEY_LEN);
}
其他的
Memcpy ((void*)cmd, (void*)&default_set_dev_config, sizeof(struct gapm_set_dev_config_cmd));
}
返回(set_dev_config_cmd);
}

现在我尝试改变代码只运行扫描,但有时它不能得到任何东西在扫描期间。然而,大多数情况下,它可以从扫描得到结果。

案例GAPM_SET_DEV_CONFIG:
{
if(param->status != GAP_ERR_NO_ERROR)
{
ASSERT_ERR (0);//不可预知的错误
}
其他的
{
If (0 == current_role)
{
EXECUTE_CALLBACK_VOID (app_on_set_dev_config_complete);
}
其他的
{
app_scan ();
position11 + +;
}

If (0 == current_role)
{

ke_timer_set(APP_SWITCH_ROLE_TIMER, TASK_APP, 0);
}
If (1 == current_role)
{
ke_timer_set(APP_SWITCH_ROLE_TIMER, TASK_APP, 250);
}
}
}
打破;

日志如下

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 A0 0201061b007f1000000001003e01003e01ff3c01003e01003e01ff3e002ff3e
T2 = 00000氯氟化碳
地址:80EACA000049 A0 0201061B00801000000001003D00013F01FE3D01003E02003E01003D01FE3C
T2 = 00000 d0d
地址:80EACA000049 A0 0201061B00811000000001FF3D01013E00003E01003D02FE3E01FF3D02003E
T2 = 00000 d1d
地址:80EACA000049 A0 0201061B00821000000002003D01FF3D01FF3E02003E01003E000000000000
T2 = 00000 d2e
GAPM_RESET:

开始;开始

BCT1 = 06

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 A0 0201061b00831000000001003e01ff3e002ff3e01003e01003d01003e01003e
T2 = 00000 ce4
地址:80EACA000049 A0 0201061B00841000000001003D01003E02FF3F02013E01FF3E01003D01FF3E
T2 = 00000 cf4
地址:80EACA000049 9F 0201061B00851000000001003D01003E01003F02FF3F01003D01003D02003D
T2 = 00000 d05
地址:80EACA000049 A0 0201061B00861000000002FF3D01003D02FF3C01003D01003D000000000000
T2 = 00000 d16
GAPM_RESET:

开始;开始

BCT1 = 07

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 9F 0201061B00871000000001003D02FF3E02FF3E01003D01FF3E01003E01FF3E
T2 = 00000 ccc
地址:80EACA000049 9F 0201061B00881000000001FF3D01FF3D01FF3E01013D02003D01FF3D01FF3E
T2 = 00000疾病预防控制中心
地址:80EACA000049 9F 0201061b00891000000001003e02003d01003d02003d02003e02003d01003d
T2 = 00000清洁能源
地址:80EACA000049 9F 0201061B008A1000000001013D02003E01FF3F01003D01FF3C000000000000
T2 = 00000 cfd
GAPM_RESET:

开始;开始

BCT1 = 08年

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

GAPM_RESET:

开始;开始

你好消息

BCT1 = 09年

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 A0 0201061B008F1000000001003D01003D01FF3E01FF3D02003C02FF3E01003D
T2 = 00000 c98
地址:80EACA000049 A0 0201061b00901000000001003e01ff3e01ff3f01ff3d01003d01003e01003e01003e
T2 = 00000 ca9
地址:80EACA000049 A0 0201061B00911000000002003D01003E01003E02FF3D02FF3F02FF3D01013D
T2 = 00000 cb9
地址:80EACA000049 A0 0201061B00921000000002003E01003D00003E02003F00013D000000000000
cca T2 = 00000
GAPM_RESET:

开始;开始

BCT1 = 0

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 A0 0201061B00931000000000013D02013D02FF3E02FE3E02003E01003E00003E
T2 = 00000 c80
地址:80EACA000049 A0 0201061B00941000000001FF3E01003D02004002FF3D01FF3E02FF3F01FF3E
T2 = 00000人私下偷偷收藏盒式
地址:80EACA000049 A0 0201061B00951000000002003E01003E01FF3D01003D02003D02003E02FF3E
T2 = 00000 ca1
地址:80EACA000049 A0 0201061B00961000000001FF3F01003E01003D01003D02FE3B000000000000
T2 = 00000 cb2
GAPM_RESET:

开始;开始

BCT1 b = 0

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 A2 0201061b00971000000002fe3b02003e02003d01003e002ff3e01003f01003e
T2 = 00000 c68
地址:80EACA000049 A2 0201061B00981000000001003F01FF3E02003E02003D01FF3E01FF3E01003E
T2 = 00000 c78
地址:80EACA000049 A2 0201061B00991000000002003E01003D02003E01003E02003D01003E01003D
T2 = 00000 c89
地址:80EACA000049 A2 0201061B009A1000000001003E01003D02003E02FF3E02003E000000000000
c99 T2 = 00000
GAPM_RESET:

开始;开始

BCT1 c = 0

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 A2 0201061b009c1000000002003e02003e02003e02003e02003e01003e02003d
T2 = 00000 c4f
地址:80EACA000049 A2 0201061b009d1000000001003d02003e01003d01003d01003d01003d01003d02ff3e
T2 = 00000 c60
地址:80EACA000049 A2 0201061B009E1000000001FF3E01003D01FF3E01003E02FF3D02FF3E01FF3E
T2 = 00000之前
地址:80EACA000049 A2 0201061B009F1000000001003E01FF3E01003D01003E01003D000000000000
T2 = 00000 c81
GAPM_RESET:

开始;开始

BCT1 d = 0

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 A2 0201061b00a01000000001003d02ff3e002ff3e02003d02003e01003f01003e
T2 = 00000 c37
地址:80EACA000049 A2 0201061B00A11000000001013D01003E01003E02FF3D02003D01003E01FF3D
T2 = 00000 c47
地址:80EACA000049 A2 0201061B00A21000000001003D01FF3E02003E02013E01FF3E02003F01013E
T2 = 00000 c58
地址:80EACA000049 A2 0201061B00A31000000002003E01003E01013E01003E02013D000000000000
T2 = 00000 c69
GAPM_RESET:

开始;开始

BCT1 e = 0

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 A2 0201061B00A41000000002013D02FF3D01003D02003E01FF3E02003D01FF3E
T2 = 00000 cie
地址:80EACA000049 A2 0201061B00A51000000001003E02003E01FF3E01003E01003D01003D01013E
T2 = 00000 c2f
地址:80EACA000049 A2 0201061b00a61000000001ff3e02013e01ff3f02ff3d01013e01ff3e01ff3e01ff3e
T2 = 00000 c40
地址:80EACA000049 A2 0201061B00A71000000002003E01003D02003F02FF3E01FF3E000000000000
T2网= 00000
GAPM_RESET:

开始;开始

BCT1 f = 0

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 A2 0201061B00A81000000001FF3E02FF3D01003E02003E02FF3D02003D02003E
T2 = 00000 c06
地址:80EACA000049 A2 0201061B00A91000000002FF3D01003E01003D01003D02003E01013E02003D
T2 = 00000 c17
地址:80EACA000049 A2 0201061b00aa1000000002003c02003d01003d01003e01ff3e01ff3ee00003e
T2 = 00000 c27
地址:80EACA000049 A2 0201061B00AB1000000001FF3E02003D02003D01003D01003D000000000000
T2 = 00000 c38
GAPM_RESET:

开始;开始

BCT1 = 10

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 A2 0201061B00AC1000000001003D00003F02003D01FF3E02003D01003E02003E
T2 = 00000只蜜蜂
地址:80EACA000049 A2 0201061B00AD1000000002FF3E02003E01FF3E02FF3E01003F02003E02003E
T2 = 00000 bfe
地址:80EACA000049 A2 0201061b00ae1000000002003d01003e02003d01003e01ff3d02003d020033e
T2 = 00000 c0f
地址:80EACA000049 A2 0201061B00AF1000000001003F01FF3E01003D01003E02FF3E000000000000
T2 = 00000甜
GAPM_RESET:

liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

你有在白名单中添加3个地址的例子吗?
怎么做呢?

谢谢你!

MT_dialog
离线
最后看到:两个月三周前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

根据BLE规范的最小广告间隔是20ms,堆栈不会让您在10ms内发布广告。我假设您使用计时器停止广告,并在计时器结束时发出app_adv_start。这与指定的间隔无关。如果你想传输得更快(你不在BLE规范范围内,所以我们无法知道可能会发生什么问题),你可以等待BLE广告事件结束,停止广告,更改字符串,然后重新开始。您可以通过检查app_asynch_trm()函数中的信标参考设计来检查这是如何完成的(跟踪广告事件的结束)。

由于MT_dialog

liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
当我试着用

另外,当我尝试使用主动扫描进行测试时,系统将在扫描一段时间后重新启动。也会弹出一些全是0的包。
空白app_scan(空白)
{
gapm_start_scan_cmd *cmd = KE_MSG_ALLOC(gapm_start_scan_cmd,
TASK_GAPM TASK_APP,
gapm_start_scan_cmd);
cmd - > op。code = GAPM_SCAN_PASSIVE;
cmd - > op。code = GAPM_SCAN_ACTIVE;
cmd - >间隔= 9600;
Cmd ->窗口= 9600;
cmd->mode = GAP_GEN_DISCOVERY;
cmd->filt_policy = SCAN_ALLOW_ADV_WLST,
cmd->filter_duplic = SCAN_FILT_DUPLIC_DIS;
ke_msg_send (cmd);
}

日志如下:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 B5 0201061b00cf10000000fffec300fec2fec3fffec2fffec3fffec4fffec2
T2 = 000009 ca
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 da
地址:80EACA000049 B4 0201061B00D010000000FEFEC3FFFDC4FFFEC3FEFEC3FEFEC3FEFEC3FEFEC3
T2 = 000009 eb
addr:80EACA000049 B4 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009俱乐部
地址:80EACA000049 B5 0201061b00d110000000fffec3fffec3fffdc3fefec3feffc3fefec3
T2 = 00000 a0e
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a1e
地址:80EACA000049 B5 0201061B00D210000000FEFEC3FFFDC3FFFEC2FFFDC3FFFEC3000000000000
T2 = 00000 a2f
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000钠
GAPM_RESET:

开始;开始

BCT1 = 14

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 B5 0201061b00d410000000fefec4feffc3fffec4fefec3fffec3fefec3fffec3
T2 = 000009 d1
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 e2
地址:80EACA000049 B5 0201061b00d510000000fefec3fffec3feffc4fffec3fefdc3fefec4
f3 T2 = 000009
addr:80EACA000049 B4 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a03
GAPM_RESET:

开始;开始

BCT1 = 15

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 B5 0201061b00d710000000fffdc3feffc3fffdc4feffc2fffec2fffec3
T2 = 00000999
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 aa
地址:80EACA000049 B4 0201061b00d810000000fffec4fffec4fefec3fefec4fffec3fffec3feffffc3
T2 = 000009 ba
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 cb
地址:80EACA000049 B5 0201061b00d910000000ffffc3feffc3fffec3fefdc4fffec3
T2 = 000009 dd
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 ee
地址:80EACA000049 B5 0201061b00da10000000fffec3fffec3fffec3fffec3ffffffc4000000000000
T2 = 000009铁
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a0f
GAPM_RESET:

开始;开始

BCT1 = 16

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 B5 0201061B00DB10000000FFFFC4FEFEC3FEFDC3FEFDC3FEFEC3FEFEC2FEFEC3
T2 = 00000981
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000991
地址:80EACA000049 B4 0201061b00dc10000000fefec4fefdc3fffec3fffec3fefdc3fffec3
T2 = 000009 a2
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 b3
地址:80EACA000049 B4 0201061b00dd10000000feffc3fefec3fffdc3fffec3fffec3fffec2
T2 = 000009 c5
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 d5
地址:80EACA000049 B4 0201061B00DE10000000FEFDC3FFFEC2FFFEC3FEFFC4FEFEC3000000000000
T2 = 000009 e6
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 f7
GAPM_RESET:

开始;开始

BCT1 = 17

GAPM_RESET:

开始扫描

白色S码
白色大小L=00000009

地址:80EACA000049 B4 0201061b00df10000000fefec3fffec3fffec3fefec4fffec2fffec3
T2 = 00000968
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000979
地址:80EACA000049 B5 0201061B00E010000000FEFEC3FFFEC3FFFEC4FFFEC3FFFEC3FFFEC3FEFEC2
T2 = 00000989
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 0000099
地址:80EACA000049 B4 0201061b00e110000000ffc3fffec3fefdc2feffc300fec3fffdc4fffec4
T2 = 000009交流
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009双相障碍
地址:80EACA000049 B4 0201061B00E210000000FFFEC4FEFEC4FFFEC3FEFEC3FEFDC4000000000000
T2 = 000009 ce
addr:80EACA000049 B5 0000000000000000000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009
GAPM_RESET:

“device_init做

GAPM_RESET:

开始;开始

GAPM_RESET:

MT_dialog
离线
最后看到:两个月三周前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

从你的初始代码,我可以看到,每当你发出一个GAPM_RESET_CMD你是在user_gapm_conf之间改变角色。role(如果不是GAP_PERIPHERAL_SLV,它的值是什么?)和GAP_CENTRAL_MST,这取决于每次重置时更改为相反角色的current_role变量。你提到白名单对每一个奇数都有效,你得到一些数据,为了缩小问题范围,请不要使用白名单,而是试着扫描所有可用的设备,现在正在做广告,以确保你确实在扫描。

问题也可能是您的UART打印(也就是说,如果您正在使用arch_printf()函数来打印数据),在arch_main.c文件中的schedule_while_ble_on()中尝试将代码放在代码片段中并删除if (app_async_trm())中断;arch_printf_process();

如果(app_asynch_trm ())
{
继续;
}
其他的
{
arch_printf_process ();
打破;
}

关于你的问题,有时你没有任何广告,你确定你的设备是广告吗?我还注意到你的扫描窗口和你的间隔时间一样长,这意味着你在相当长的一段时间里只听一个广告频道,尽量减少你的窗口和间隔时间,以便经常听三个广告频道,因为在你扫描的时候,那个特定频道可能会有冲突。此外,正如我已经提到的,这可能是由于UART打印而发生的,请尝试使用断点而不是UART打印来捕捉广告指示,以确保。最后,也许在你进行扫描的时候,有两个多的空气活动,没有广告可以完整地到达你的接收器,所以你没有得到任何指示。

关于你得到的零,是你发送给外围设备的扫描请求的数据,那些是你的外围设备的扫描响应数据。

由于MT_dialog

liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
我已经删除了白名单

我已经删除了白名单,并开始扫描和检查,扫描期间没有丢失包裹,看起来是有效的。问题是我想这是你提供的功能白名单可能导致的问题。

你的意思是14583可能进入模式而不是GAP_PERIPHERAL_SLV,也不是GAP_CENTRAL_MST,你的意思是可能触发它不能扫描任何来自广播包?

如果我使用白名单,似乎它适用于70%的时期,有些时期无法扫描任何东西。(现在不是奇偶问题了)

我今天测试了以下代码,似乎没有帮助改善扫描中丢失的包
如果(app_asynch_trm ())
{
继续;
}
其他的
{
arch_printf_process ();
打破;
}

你能帮我们检查一部分代码吗?我可以拿到你的邮件发给你吗?

GAP_PERIPHERAL_SLV是什么意思

MT_dialog
离线
最后看到:两个月三周前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

在您的设备中,您正在更改角色,从GAP_CENTRAL_MST到配置文件中定义的其他内容,您指示设备在重置后变成的其他角色是什么,其他角色user_gapm_conf是什么。在这个变量中扮演什么角色?

如果(USER_CONFIG)
{
cmd->operation = GAPM_SET_DEV_CONFIG;

如果(1 == current_role){
Cmd ->role = user_gapm_conf.role;
Current_role = 0;

其他}
{
cmd->role = GAP_CENTRAL_MST;
Current_role = 1;
}

同样关于白名单,在send_white_list_mgt_cmd()函数的app_white_list.c中,键盘参考设计中有一个白名单的实现,您可以查看一下。

由于MT_dialog

liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
我想是GAP

我认为是GAP_PERIPHERAL_SLV,我在user_config.h中找到了如下所示。
user_gapm_conf = {
.role = GAP_PERIPHERAL_SLV,
.irk = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
///设备外观(0x0000 -未知外观)
//根据填写https://developer.bluetooth.org/gatt/characteristics/Pages/Characteristi..。
.appearance = 0;
.appearance e_write_perm = GAPM_WRITE_DISABLE,
.name_write_perm = GAPM_WRITE_DISABLE,
///最大MTU
.max_mtu = 23
/ / /外围 : *****************************************************************
/// Slave优先级最小连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS将毫秒(ms)转换为双插槽
.con_intv_min = MS_TO_DOUBLESLOTS(10),
/// Slave优先级最大连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS将毫秒(ms)转换为双插槽
.con_intv_max = MS_TO_DOUBLESLOTS(20),
/// Slave首选连接延迟。它以跳过的连接事件来衡量
.con_latency = 0
/// Slave首选链路监控超时,以定时器为单位(10ms)
///使用宏MS_TO_TIMERUNITS将毫秒(ms)转换为计时器单位
.superv_to = MS_TO_TIMERUNITS(1000),
///隐私设置位字段(0b1 = enabled, 0b0 = disabled)
/// -[位0]:隐私支持
/// - [bit 1]: Multiple Bond Support (Peripheral only);如果启用,则隐私标志为
///只读。
/// -[位2]:重连接地址可见。
.flags = 0
};

MT_dialog
离线
最后看到:两个月三周前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

老实说,我不明白你在做什么,你在两个角色之间进行角色切换,一个是中心角色,另一个是外围角色,外围角色不能执行扫描过程。既然你只是在扫描,为什么你需要这个额外的角色转换代码。即使角色切换试图复制您的问题,我做了一个设备发出的角色切换按钮按下,扫描程序包括白名单没有显示任何类型的故障,总是返回正确的设备。请尝试基于dsp主机应用程序制作一个没有角色切换的简单扫描仪,然后您可以应用白名单并进行测试。

由于MT_dialog

liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
你好,

你好,

我正在做角色转换,因为我想做一个中继器来延长广播的距离。当我从扫描中获得广告包时,我只需在下一次角色转换中重复我的广播。

liuluan002
离线
最后看到:6个月1周前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

你有在白名单中添加3个地址的例子吗?
怎么做呢?

谢谢你!

MT_dialog
离线
最后看到:两个月三周前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

唯一使用白名单、虚拟白名单或实际白名单的项目是键盘,没有任何明确添加设备的例子。

由于MT_dialog