如何使用白名单进行扫描

19个帖子/ 0新
最后一篇文章
liuluan002
离线
最后一次露面:5个月4周前
加入:2015-11-27 14:24
如何使用白名单进行扫描

嗨,对话框中,

我正在定义我的空中扫描包裹的功能,我已经查看了文件,我的功能如下我的问题是,我应该在哪里以及如何设计我的扫描白名单?

空白扫描仪(空白)
{
struct gapm_start_scan_cmd * cmd = ke_msg_alloc(gapm_start_scan_cmd,
task_gapm,task_app,
gapm_start_scan_cmd);
cmd - > op。代码= GAPM_SCAN_PASSIVE;
cmd - >间隔= 4000;/ / 10
cmd窗口- > = 4000;/ / 10
cmd - >模式= GAP_GEN_DISCOVERY;
cmd-> filt_policy = scan_allow_adv_wlst;
cmd - > filter_duplic = SCAN_FILT_DUPLIC_DIS;
ke_msg_send (cmd);
}

设备:
MT_dialog
离线
最后一次露面:2个月1个星期前
工作人员
加入:2015-06-08 11:34
嗨liuluan002,

嗨liuluan002,

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

空白manage_white_list(空白)
{
uint8_t white_addr[6] = {0x01, 0x00, 0x00, 0xCA, 0xa, 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 *)white_addr, BD_ADDR_LEN);
ke_msg_send (cmd);
}

谢谢mt_dialog.

liuluan002
离线
最后一次露面:5个月4周前
加入:2015-11-27 14:24
谢谢你!还有一个问题

谢谢你!还有一个问题。
当我试图使广播从以下功能:通过广播不同的包到空气中每10毫秒。是否有可能使不同的广播包速度超过10毫秒?如果我让广播速度很快,会不会导致广播过程失败?接收侧扫描得到它有问题吗?

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 = 20 ms;
cmd-> intv_max = 16;//
Cmd ->channel_map = 0x01

cmd - > info.host。模式= GAP_GEN_DISCOVERABLE;/ /一般发现模式

// / * -----------------------------------------------------------------------------------
// *设置发布数据和扫描响应数据
// * -------------------------------------------------------------------- * /
cmd - > info.host。adv_data_len = APP_ADV_DATA_MAX_SIZE;
cmd-> info.host.scan_rsp_data_len = 0;//没有响应扫描

if((数据!= null)&&(len> 0))
{

memcpy (cmd - > info.host。adv_data + 2、数据len);
cmd - > info.host。adv_data_len = len + 2;
cmd - > info.host。Adv_data [0] = len + 1;
}

其他的
{
#if debug_log2.
printf_string("\r\ empty input so load Data1:");
UART2_INIT(UART_BAUDRATE_115K2,3);
# endif

memcpy (cmd - > info.host。adv_data + 2、数据、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
离线
最后一次露面:5个月4周前
加入:2015-11-27 14:24
嗨对话框,

嗨对话框,

我用以下代码测试了白色列表
在app_task.c中,我写了如下内容:

void app_scan(void)
{
manage_white_list ();
struct gapm_start_scan_cmd * cmd = ke_msg_alloc(gapm_start_scan_cmd,
task_gapm,task_app,
gapm_start_scan_cmd);

cmd - > op。代码= GAPM_SCAN_PASSIVE;
cmd->间隔= 4800;
cmd->窗口= 4800;
cmd - >模式= 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
离线
最后一次露面:2个月1个星期前
工作人员
加入:2015-06-08 11:34
嗨liuluan002,

嗨liuluan002,

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

谢谢mt_dialog.

liuluan002
离线
最后一次露面:5个月4周前
加入: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:

//设备配置更新
CASE 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->操作= gapm_add_dev_in_wlist;
cmd - > nb = 1;
memcpy ((void *) cmd - >设备[0]。addr, (void *)white_addr, BD_ADDR_LEN);
ke_msg_send (cmd);
}

volatile uint8_t white_flag;
void app_scan(void)
{
if(0 == white_flag)
{
manage_white_list ();
white_flag = 5;
}
struct gapm_start_scan_cmd * cmd = ke_msg_alloc(gapm_start_scan_cmd,
task_gapm,task_app,
gapm_start_scan_cmd);
cmd - > op。代码= GAPM_SCAN_PASSIVE;
cmd->间隔= 4800;
cmd->窗口= 4800;
cmd - >模式= 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
Static struct gapm_set_dev_config_cmd* app_easy_gap_dev_config_create_msg(void)
{
//为GAP分配消息
if(set_dev_config_cmd == null)
{
struct gapm_set_dev_config_cmd * cmd;
cmd = app_gapm_configure_msg_create ();
set_dev_config_cmd = cmd;

如果(USER_CONFIG)
{
cmd->操作= gapm_set_dev_config;

If (1 == current_role){

cmd->角色= user_gapm_conf.role;
current_role = 0;

其他}{
cmd->角色= gap_central_mst;
current_role = 1;
}
cmd - >外观= user_gapm_conf.appearance;
cmd - > appearance_write_perm = user_gapm_conf.appearance_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->标志= 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
离线
最后一次露面:2个月1个星期前
工作人员
加入:2015-06-08 11:34
嗨liuluan002,

嗨liuluan002,

由于您在角色之间交替,我不确定这是由白色列表引起的东西,请删除白色列表管理并尝试扫描并返回您可以找到的任何BD地址。当您在第二次尝试时,您无法找到您的设备的任何广告,您根本可以扫描吗?我的意思是从你的代码中,您的设备配置为每秒时为外设,并且外设无法扫描(如果user_gapm_conf.role是A.GAP_PERIPHERAL_SLV)。

谢谢mt_dialog.

liuluan002
离线
最后一次露面:5个月4周前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

我没有使用GAP_PERIPHERAL_SLV,当它在扫描时,我的角色切换函数写如下:

Volatile uint8_t current_role = 1;/ / 0±iE¾OU×o¹²¥£¬1±iE¾OU×oE¨Ae
Static struct gapm_set_dev_config_cmd* app_easy_gap_dev_config_create_msg(void)
{
//为GAP分配消息
if(set_dev_config_cmd == null)
{
struct gapm_set_dev_config_cmd * cmd;
cmd = app_gapm_configure_msg_create ();
set_dev_config_cmd = cmd;

如果(USER_CONFIG)
{
cmd->操作= gapm_set_dev_config;

If (1 == current_role){
cmd->角色= user_gapm_conf.role;
current_role = 0;

}别的
{
cmd->角色= gap_central_mst;
current_role = 1;
}
cmd - >外观= user_gapm_conf.appearance;
cmd - > appearance_write_perm = user_gapm_conf.appearance_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->标志= 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);
}

现在我试图改变只运行扫描的代码,但有时它在扫描期间无法获得任何东西。然而,大多数时间都可以从扫描中获得结果。

CASE 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);
}
}
}
打破;

以下是日志

开始扫描H.

尺寸白色s
大小白色L = 00000009

ADDR:80EACA000049 A0 0201061B007F1000000003CY3F3C01003E01003E01FF3E02F3E02FF3E
T2 = 00000氯氟化碳
地址:80EACA000049 A0 0201061B00801000000001003D00013F01FE3D01003E02003E01003D01FE3C
T2 = 00000 d0d
addr: 80 eaca000049 A0 0201061 b00811000000001ff3d01013e00003e01003d02fe3e01ff3d02003e
T2 = 00000 d1d
ADDR:80EACA000049 A0 0201061B00821000000000000000000
T2 = 00000 d2e
GAPM_RESET:

开始睡觉

BCT1 = 06

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

ADDR:80ACA000049 A0 0201061B0083100000000001003CO01F3E02FF3E01003E01003D01003E01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003d01003e01003e
T2 = 00000 ce4
addr: 80 eaca000049 A0 0201061 b00841000000001003d01003e02ff3f02013e01ff3e01003d01ff3e
T2 = 00000 cf4
addr: 80 eaca000049 9 f 0201061 b00851000000001003d01003e01003f02ff3f01003d01003d02003d
T2 = 00000 d05
addr: 80 eaca000049 A0 0201061 b00861000000002ff3d01003d02ff3c01003d01003d000000000000
T2 = 00000 d16
GAPM_RESET:

开始睡觉

BCT1 = 07

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

addr: 80 eaca000049 9 f 0201061 b00871000000001003d02ff3e02ff3e01003d01ff3e01003e01ff3e
t2 = 00000ccc.
addr: 80 eaca000049 9 f 0201061 b00881000000001ff3d01ff3d01ff3e01013d02003d01ff3d01ff3e
t2 = 00000cdc.
ADDR:80EACA000049 9F 0201061B00891000000003D02003D02003D02003D02003D02003D02003D01003D
T2 = 00000清洁能源
addr: 80 eaca000049 9 f 0201061 b008a1000000001013d02003e01ff3f01003d01ff3c000000000000
T2 = 00000 cfd
GAPM_RESET:

开始睡觉

BCT1 = 08年

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

GAPM_RESET:

开始睡觉

你好消息

BCT1 = 09年

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

addr: 80 eaca000049 A0 0201061 b008f1000000001003d01003d01ff3e01ff3d02003c02ff3e01003d
t2 = 00000c98.
addr: 80 eaca000049 A0 0201061 b00901000000001003e01ff3e01ff3f01ff3d01003d01003e01003e
t2 = 00000ca9.
addr: 80 eaca000049 A0 0201061 b00911000000002003d01003e01003e02ff3d02ff3f02ff3d01013d
t2 = 00000cb9.
addr: 80 eaca000049 A0 0201061 b00921000000002003e01003d00003e02003f00013d000000000000
t2 = 00000cca.
GAPM_RESET:

开始睡觉

BCT1 = 0

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

addr: 80 eaca000049 A0 0201061 b00931000000000013d02013d02ff3e02fe3e02003e01003e00003e
T2 = 00000 c80
ADDR:80EACA000049 A0 0201061FF3E01003D02004002FF3D01FF3E02FF3F01FF3E
t2 = 00000c90.
ADDR:80EACA000049 A0 0201061B0095100000000/303CY3D01003D02003D01003D02003D02003E02FF3E
t2 = 00000ca1.
ADDR:80EACA000049 A0 0201061B00961000000001FF3F01003D01003D01003D02FE3B00000000000000
t2 = 00000cb2.
GAPM_RESET:

开始睡觉

BCT1 b = 0

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

ADDR:80EACA000049 A2 0201061B0097100000000002FE3B02003E02003D01003F01003CE
T2 = 00000 c68
ADDR:80EACA000049 A2 0201061003F01FF3E02003E02003D02003E02003D01FF3E01FF3E01FF3E01FF3E01003E
T2 = 00000 c78
ADDR:80EACA000049 A2 0201061B009910000/201003D02003D01003D02003D01003D02003D01003D02003D01003D02003D01003CE01003D
T2 = 00000 c89
addr: 80 eaca000049 A2 0201061 b009a1000000001003e01003d02003e02ff3e02003e000000000000
t2 = 00000c99.
GAPM_RESET:

开始睡觉

BCT1 c = 0

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

addr: 80 eaca000049 A2 0201061 b009c1000000002003e02003e01003e02003e02003e01003e02003d
T2 = 00000 c4f
addr: 80 eaca000049 A2 0201061 b009d1000000001003d02003e01003d01003d01003d01003d02ff3e
T2 = 00000 c60
ADDR:80ACA000049 A2 0201061FF3E01003D01FF3D01003D02FF3D02FF3E01FF3E
T2 = 00000之前
ADDR:80EACA000049 A2 0201061B009F10000000000003D0100000000000000
T2 = 00000 c81
GAPM_RESET:

开始睡觉

BCT1 d = 0

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

addr: 80 eaca000049 A2 0201061 b00a01000000001003d02ff3e02ff3e02003d02003e01003f01003e
T2 = 00000 c37
addr: 80 eaca000049 A2 0201061 b00a11000000001013d01003e01003e02ff3d02003d01003e01ff3d
T2 = 00000 c47
addr: 80 eaca000049 A2 0201061 b00a21000000001003d01ff3e02003e02013e01ff3e02003f01013e
T2 = 00000 c58
addr: 80 eaca000049 A2 0201061 b00a31000000002003e01003e01013e01003e02013d000000000000
T2 = 00000 c69
GAPM_RESET:

开始睡觉

BCT1 e = 0

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

addr: 80 eaca000049 A2 0201061 b00a41000000002013d02ff3d01003d02003e01ff3e02003d01ff3e
T2 = 00000 cie
addr: 80 eaca000049 A2 0201061 b00a51000000001003e02003e01ff3e01003e01003d01003d01013e
T2 = 00000 c2f
addr: 80 eaca000049 A2 0201061 b00a61000000001ff3e02013e01ff3f02ff3d01013e01ff3e01ff3e
T2 = 00000 c40
addr: 80 eaca000049 A2 0201061 b00a71000000002003e01003d02003f02ff3e01ff3e000000000000
T2网= 00000
GAPM_RESET:

开始睡觉

BCT1 f = 0

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

ADDR:80EACA000049 A2 0201061B00A8100000000001FF3E02FF3D01003E02003E02003E
T2 = 00000 c06
addr: 80 eaca000049 A2 0201061 b00a91000000002ff3d01003e01003d01003d02003e01013e02003d
T2 = 00000 c17
addr: 80 eaca000049 A2 0201061 b00aa1000000002003c02003d01003d01003e01ff3e01ff3e00003e
T2 = 00000 c27
addr: 80 eaca000049 A2 0201061 b00ab1000000001ff3e02003d02003d01003d01003d000000000000
T2 = 00000 c38
GAPM_RESET:

开始睡觉

BCT1 = 10

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

addr: 80 eaca000049 A2 0201061 b00ac1000000001003d00003f02003d01ff3e02003d01003e02003e
T2 = 00000Bee.
addr: 80 eaca000049 A2 0201061 b00ad1000000002ff3e02003e01ff3e02ff3e01003f02003e02003e
t2 = 00000bfe.
addr: 80 eaca000049 A2 0201061 b00ae1000000002003d01003e02003d01003e01ff3d02003d02003e
T2 = 00000 c0f
ADDR:80EACA000049 A2 0201061003F01F3E01003D01003E02FF3E0000000000000000
T2 = 00000甜
GAPM_RESET:

liuluan002
离线
最后一次露面:5个月4周前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

您有一个例子是否在白色列表中添加3个地址?
怎么做呢?

谢谢你!

MT_dialog
离线
最后一次露面:2个月1个星期前
工作人员
加入:2015-06-08 11:34
嗨liuluan002,

嗨liuluan002,

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

谢谢mt_dialog.

liuluan002
离线
最后一次露面:5个月4周前
加入:2015-11-27 14:24
也是当我尝试用来测试

此外,当我尝试使用主动扫描测试时,系统将在扫描一段时间后重新启动。它也弹出一些全部零的包。
void app_scan(void)
{
struct gapm_start_scan_cmd * cmd = ke_msg_alloc(gapm_start_scan_cmd,
task_gapm,task_app,
gapm_start_scan_cmd);
cmd - > op。代码= GAPM_SCAN_PASSIVE;
cmd-> op.code = gapm_scan_active;
cmd->间隔= 9600;
cmd->窗口= 9600;
cmd - >模式= GAP_GEN_DISCOVERY;
cmd-> filt_policy = scan_allow_adv_wlst,
cmd - > filter_duplic = SCAN_FILT_DUPLIC_DIS;
ke_msg_send (cmd);
}

以下是日志:

开始扫描H.

尺寸白色s
大小白色L = 00000009

ADDR:80EACA000049 B5 0201061B00CF100000000000FFEC300FEC2FEFEC3FFEC2FFFEC3FFEC4FFEC2
T2 = 000009 ca
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009 da
ADDR:80EACA000049 B4 0201061B00D010000000FEFEC3FFFDC4FFEC3FEFEC3FEFEC3FEFEC3FEFEC3
t2 = 000009eb.
地址:80EACA000049 B4 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009fc.
ADDR:80EACA000049 B5 0201061B00D11000000000FFC3FFEC3FFFDC3FEFEC3FEFEC3FEFFC3FEFEC3
T2 = 00000 a0e
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a1e
ADDR:80EACA000049 B5 0201061B00D210000000FEFEC3FFFDC3FFEC2FFFDC3FFFEC300000000000000
T2 = 00000 a2f
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000钠
GAPM_RESET:

开始睡觉

BCT1 = 14

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

addr: 80 eaca000049 B5 0201061 b00d410000000fefec4feffc3fffec4fefec4fffec3fefec3fffec3
T2 = 000009 d1
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009 e2
ADDR:80EACA000049 B5 0201061B00D510000000FEFEC3FFEC3FEFFC4FFFEC3FEFEC4FEFDC3FEFEC4
t2 = 000009f3.
地址:80EACA000049 B4 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a03
GAPM_RESET:

开始睡觉

BCT1 = 15

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

addr: 80 eaca000049 B5 0201061 b00d710000000fffdc3feffc3ffffc3fffdc4feffc2fffec2fffec3
T2 = 00000999
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009 aa
addr: 80 eaca000049 B4 0201061 b00d810000000fffec4fffec4fefec3fefec4fffec3fffec3feffc3
T2 = 000009 ba
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009 cb
addr: 80 eaca000049 B5 0201061 b00d910000000ffffc3feffc3fffec3fefec3fffec4fefdc4fffec3
T2 = 000009 dd
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009ee
addr: 80 eaca000049 B5 0201061 b00da10000000fffec3fefec3fffec3fffec3ffffc4000000000000
t2 = 000009FE.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a0f
GAPM_RESET:

开始睡觉

BCT1 = 16

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

ADDR:80EACA000049 B5 0201061B00DB1000000000FFFFC4FEFEC3FEFDC3FEFDC3FEFEC3FEFEC2FEFEC3
T2 = 00000981
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000991
ADDR:80EACA000049 B4 0201061B00DC10000000FEFEC4FEFDC3FFEC3FFFEC3FEFEC3FEFDC3FFEC3
T2 = 000009 a2
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009 b3
addr: 80 eaca000049 B4 0201061 b00dd10000000feffc3fefec3fffec3fffdc3fffec3fefec3fffec2
T2 = 000009 c5
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009 d5
addr: 80 eaca000049 B4 0201061 b00de10000000fefdc3fffec2fffec3feffc4fefec3000000000000
T2 = 000009 e6
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009F7.
GAPM_RESET:

开始睡觉

BCT1 = 17

GAPM_RESET:

开始扫描H.

尺寸白色s
大小白色L = 00000009

addr: 80 eaca000049 B4 0201061 b00df10000000fefec3fffec3fffec3fefec3fefec4fffec2fffec3
T2 = 00000968
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000979
addr: 80 eaca000049 B5 0201061 b00e010000000fefec3fffec3fffec4fffec3fffec3fffec3fefec2
T2 = 00000989
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 0000099
ADDR:80EACA000049 B4 0201061B00E11000000000FFFFC3FFEC3FEFDC2FEFFC300FEC3FFFDC4FFEC4
T2 = 000009交流
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009双相障碍
ADDR:80EACA000049 B4 0201061B00E210000000FFC4FEFEC4FFEC3FEFEC3FEFDC4000000000000
T2 = 000009 ce
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009
GAPM_RESET:

“device_init做

GAPM_RESET:

开始睡觉

GAPM_RESET:

MT_dialog
离线
最后一次露面:2个月1个星期前
工作人员
加入:2015-06-08 11:34
嗨liuluan002,

嗨liuluan002,

从您的初始代码中,我可以看到,每当您发出GAPM_RESET_CMD时,您正在更改user_gapm_conf之间的角色。角色(如果不是GAP_PERIPHERAL_SLV,它的值是什么?)GAP_CENTRAL_MST依赖于current_role变量,该变量在每次重置时更改为相反的角色。你提到白名单的工作在每一个奇数,得到一些数据,为了缩小问题请不要使用白名单,但试着浏览所有可用的设备,目前广告为了确保你扫描。

问题可能是您的UART打印(如果您使用ARCH_PRINTF()函数才能打印数据),则在ARCH_MAIN.c文件中的STUSTS_WHLE_BLE_ON()中尝试将代码放在片段中并删除if(app_async_trm())中断;和ARCH_PRINTF_PROCESS();

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

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

关于你得到的0,是你发送到外设的扫描请求的数据,这些是外设设备的扫描响应数据。

谢谢mt_dialog.

liuluan002
离线
最后一次露面:5个月4周前
加入:2015-11-27 14:24
我已经删除了白名单,

我删除了白色列表,开始扫描和检查没有包在扫描期内丢失,似乎它有效。问题我猜这是您提供的功能,适用于白色列表可能会导致问题。

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

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

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

请问您是否可以帮我们检查部分代码?我可以收你的邮件发给你吗?

你的意思是gap_peripheral_slv

MT_dialog
离线
最后一次露面:2个月1个星期前
工作人员
加入:2015-06-08 11:34
嗨liuluan002,

嗨liuluan002,

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

如果(USER_CONFIG)
{
cmd->操作= gapm_set_dev_config;

If (1 == current_role){
cmd->角色= user_gapm_conf.role;
current_role = 0;

}别的
{
cmd->角色= gap_central_mst;
current_role = 1;
}

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

谢谢mt_dialog.

liuluan002
离线
最后一次露面:5个月4周前
加入:2015-11-27 14:24
我认为是GAP

我认为这是GAP_PERITELAL_SLV,我在USER_CONFIG.H中找到了以下内容。
static const结构gapm_configuration user_gapm_conf = {
.role = GAP_PERIPHERAL_SLV,
.irk = {0 x00 0 x00 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00},
///设备外观(0x0000 - 未知外观)
//根据……填写https://developer.bluetooth.org/gatt/characteristics/pages/charracteristi ...
.appearance = 0,
.appearance_write_perm = GAPM_WRITE_DISABLE,
.name_write_perm = GAPM_WRITE_DISABLE,
/ / /最大MTU
.max_mtu = 23日
///仅限外围设备:*******************************************************************
在双槽中测量的最小连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换为双槽
.con_intv_min = ms_to_doubleslots(10),
在双槽中测量的最大连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换为双槽
.con_intv_max = MS_TO_DOUBLESLOTS (20),
///从属喜欢连接延迟。它是在跳过的连接事件中测量的
.con_latency = 0,
//从端优先的链路监控超时,以计时器为单位(10毫秒)
///使用宏MS_TO_TIMERUNITS将毫秒(ms)转换为计时器单位
.superv_to = ms_to_timerunits(1000),
///隐私设置位字段(0b1 =启用,0b0 =禁用)
/// - [bit 0]:隐私支持
/// - [bit 1]: Multiple Bond Support(仅外设);如果启用,隐私标志为
/// 只读。
/// - [bit 2]:重连接地址可见。
.flags = 0.
};

MT_dialog
离线
最后一次露面:2个月1个星期前
工作人员
加入:2015-06-08 11:34
嗨liuluan002,

嗨liuluan002,

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

谢谢mt_dialog.

liuluan002
离线
最后一次露面:5个月4周前
加入:2015-11-27 14:24
你好,

你好,

我正在做角色切换是因为我想制作一个用于扩展广播包的距离的中继器。当我从扫描中获取广告包时,我只需通过广播它将我重复我的下一个角色交换机。

liuluan002
离线
最后一次露面:5个月4周前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

您有一个例子是否在白色列表中添加3个地址?
怎么做呢?

谢谢你!

MT_dialog
离线
最后一次露面:2个月1个星期前
工作人员
加入:2015-06-08 11:34
嗨liuluan002,

嗨liuluan002,

使用白色列表,虚拟或实际BLE堆栈的实际白色列表的唯一项目是键盘,没有任何示例,该示例可以添加3个设备。

谢谢mt_dialog.