如何使用白名单进行扫描

19个员额/ 0个新员额
最后发表
liuluan002
离线
最后看到:6个月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个月2周以前
工作人员
加入:2015-06-08 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
离线
最后看到:6个月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。代码= 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 ((data != 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;
}

其他的

#如果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
离线
最后看到:6个月4天前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

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

空白app_scan(空白)

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个月2周以前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

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

由于MT_dialog

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

嗨,对话框中,

我的意思是“没有工作”是扫描不返回任何东西。如果我把函数"manage_white_list()"放入我的"app_scan()"每次运行时,第一次它扫描良好,第二次在定时器重置后"和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:

如果(param - >状态! = 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);
}

挥发性uint8_t white_flag;
空白app_scan(空白)

If(0 ==白旗)

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分配消息
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个月2周以前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

因为你是角色交替,我不确定这是白名单引起的事情,请删除白名单管理,并尝试扫描和取回任何bd地址,你可以找到。当你在第二次尝试时你的设备找不到任何广告你还能扫描吗?我的意思是,从你的代码,你的设备被配置为外设每秒钟和外设不能扫描(如果user_gapm_conf。角色是一个GAP_PERIPHERAL_SLV)。

由于MT_dialog

liuluan002
离线
最后看到:6个月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分配消息
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);
}

现在我尝试改变只运行扫描的代码,但有时在扫描期间什么都得不到。但大多数情况下可以通过扫描得到结果。

案例GAPM_SET_DEV_CONFIG:

如果(param - >状态! = 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

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 A0 0201061 b007f1000000001003e01003e01ff3c01003e01003e01ff3e02ff3e
T2 = 00000氯氟化碳
addr: 80 eaca000049 A0 0201061 b00801000000001003d00013f01fe3d01003e02003e01003d01fe3c
T2 = 00000 d0d
addr: 80 eaca000049 A0 0201061 b00811000000001ff3d01013e00003e01003d02fe3e01ff3d02003e
T2 = 00000 d1d
addr: 80 eaca000049 A0 0201061 b00821000000002003d01ff3d01ff3e02003e01003e000000000000
T2 = 00000 d2e
GAPM_RESET:

开始睡觉

BCT1 = 06

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 A0 0201061 b00831000000001003e01ff3e02ff3e01003e01003d01003e01003e
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

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 9 f 0201061 b00871000000001003d02ff3e02ff3e01003d01ff3e01003e01ff3e
T2 = 00000 ccc
addr: 80 eaca000049 9 f 0201061 b00881000000001ff3d01ff3d01ff3e01013d02003d01ff3d01ff3e
T2 = 00000疾病预防控制中心
addr: 80 eaca000049 9 f 0201061 b00891000000001003e02003d01003d01003d02003e02003d01003d
T2 = 00000清洁能源
addr: 80 eaca000049 9 f 0201061 b008a1000000001013d02003e01ff3f01003d01ff3c000000000000
T2 = 00000 cfd
GAPM_RESET:

开始睡觉

BCT1 = 08年

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色L = 00000009

GAPM_RESET:

开始睡觉

你好消息

BCT1 = 09年

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色L = 00000009

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

开始睡觉

BCT1 = 0

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 A0 0201061 b00931000000000013d02013d02ff3e02fe3e02003e01003e00003e
T2 = 00000 c80
addr: 80 eaca000049 A0 0201061 b00941000000001ff3e01003d02004002ff3d01ff3e02ff3f01ff3e
T2 = 00000人私下偷偷收藏盒式
addr: 80 eaca000049 A0 0201061 b00951000000002003e01003e01ff3d01003d02003d02003e02ff3e
T2 = 00000 ca1
addr: 80 eaca000049 A0 0201061 b00961000000001ff3f01003e01003d01003d02fe3b000000000000
T2 = 00000 cb2
GAPM_RESET:

开始睡觉

BCT1 b = 0

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 A2 0201061 b00971000000002fe3b02003e02003d01003e02ff3e01003f01003e
T2 = 00000 c68
addr: 80 eaca000049 A2 0201061 b00981000000001003f01ff3e02003e02003d01ff3e01ff3e01003e
T2 = 00000 c78
addr: 80 eaca000049 A2 0201061 b00991000000002003e01003d02003e01003e02003d01003e01003d
T2 = 00000 c89
addr: 80 eaca000049 A2 0201061 b009a1000000001003e01003d02003e02ff3e02003e000000000000
c99 T2 = 00000
GAPM_RESET:

开始睡觉

BCT1 c = 0

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 A2 0201061 b009c1000000002003e02003e01003e02003e02003e01003e02003d
T2 = 00000 c4f
addr: 80 eaca000049 A2 0201061 b009d1000000001003d02003e01003d01003d01003d01003d02ff3e
T2 = 00000 c60
addr: 80 eaca000049 A2 0201061 b009e1000000001ff3e01003d01ff3e01003e02ff3d02ff3e01ff3e
T2 = 00000之前
addr: 80 eaca000049 A2 0201061 b009f1000000001003e01ff3e01003d01003e01003d000000000000
T2 = 00000 c81
GAPM_RESET:

开始睡觉

BCT1 d = 0

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色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

大小白色的年代
大小白色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

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 A2 0201061 b00a81000000001ff3e02ff3d01003e02003e02ff3d02003d02003e
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

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 A2 0201061 b00ac1000000001003d00003f02003d01ff3e02003d01003e02003e
T2 = 00000只蜜蜂
addr: 80 eaca000049 A2 0201061 b00ad1000000002ff3e02003e01ff3e02ff3e01003f02003e02003e
T2 = 00000 bfe
addr: 80 eaca000049 A2 0201061 b00ae1000000002003d01003e02003d01003e01ff3d02003d02003e
T2 = 00000 c0f
addr: 80 eaca000049 A2 0201061 b00af1000000001003f01ff3e01003d01003e02ff3e000000000000
T2 = 00000甜
GAPM_RESET:

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

嗨,对话框中,

你有将3个地址加入白名单的例子吗?
怎么做呢?

谢谢你!

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

嗨liuluan002,

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

由于MT_dialog

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

当我尝试用主动扫描进行测试时,系统将在扫描一段时间后重新启动。它还会弹出一些全是零的包。
空白app_scan(空白)

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。代码= 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

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 B5 0201061 b00cf10000000fffec300fec2fefec3fffec2fffec3fffec4fffec2
T2 = 000009 ca
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009 da
addr: 80 eaca000049 B4 0201061 b00d010000000fefec3fffdc4fffec3fefec3fefec3fefec3fefec3
T2 = 000009 eb
addr: 80 eaca000049 B4 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009俱乐部
addr: 80 eaca000049 B5 0201061 b00d110000000fffec3fffec3fffdc3fefec3fefec3feffc3fefec3
T2 = 00000 a0e
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a1e
addr: 80 eaca000049 B5 0201061 b00d210000000fefec3fffdc3fffec2fffdc3fffec3000000000000
T2 = 00000 a2f
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000钠
GAPM_RESET:

开始睡觉

BCT1 = 14

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 B5 0201061 b00d410000000fefec4feffc3fffec4fefec4fffec3fefec3fffec3
T2 = 000009 d1
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009 e2
addr: 80 eaca000049 B5 0201061 b00d510000000fefec3fffec3feffc4fffec3fefec4fefdc3fefec4
f3 T2 = 000009
addr: 80 eaca000049 B4 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a03
GAPM_RESET:

开始睡觉

BCT1 = 15

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色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 = 000009 ee
addr: 80 eaca000049 B5 0201061 b00da10000000fffec3fefec3fffec3fffec3ffffc4000000000000
T2 = 000009铁
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a0f
GAPM_RESET:

开始睡觉

BCT1 = 16

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色L = 00000009

addr: 80 eaca000049 B5 0201061 b00db10000000ffffc4fefec3fefdc3fefdc3fefec3fefec2fefec3
T2 = 00000981
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000991
addr: 80 eaca000049 B4 0201061 b00dc10000000fefec4fefdc3fffec3fffec3fefec3fefdc3fffec3
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 = 000009 f7
GAPM_RESET:

开始睡觉

BCT1 = 17

GAPM_RESET:

开始扫描H

大小白色的年代
大小白色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: 80 eaca000049 B4 0201061 b00e110000000ffffc3fffec3fefdc2feffc300fec3fffdc4fffec4
T2 = 000009交流
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009双相障碍
addr: 80 eaca000049 B4 0201061 b00e210000000fffec4fefec4fffec3fefec3fefdc4000000000000
T2 = 000009 ce
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009
GAPM_RESET:

“device_init做

GAPM_RESET:

开始睡觉

GAPM_RESET:

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

嗨liuluan002,

从您的初始代码中,我可以看到,每当您发出GAPM_RESET_CMD时,您正在更改user_gapm_conf之间的角色。角色(如果不是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打印来捕捉广告指示,以确保。最后,也许在你进行扫描的时候,有两个太多的空中活动,没有广告可以完好无损地到达你的接收器,所以你不会得到任何迹象。

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

由于MT_dialog

liuluan002
离线
最后看到:6个月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个月2周以前
工作人员
加入:2015-06-08 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
离线
最后看到:6个月4天前
加入:2015-11-27 14:24
我认为是GAP

我认为是GAP_PERIPHERAL_SLV,我在user_config.h中找到了它,如下所示。
Static const struct 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/Characteristi..。
.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),
/// Slave首选连接延迟。它是通过跳过连接事件来度量的
.con_latency = 0,
//从端优先的链路监控超时,以计时器为单位(10毫秒)
///使用宏MS_TO_TIMERUNITS将毫秒(ms)转换为计时器单位
.superv_to = MS_TO_TIMERUNITS (1000),
///隐私设置位域(0b1 = enabled, 0b0 = disabled)
/// - [bit 0]:隐私支持
/// - [bit 1]: Multiple Bond Support(仅外设);如果启用,隐私标志为
/ / /只读。
/// - [bit 2]:重连接地址可见。
.flags = 0
};

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

嗨liuluan002,

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

由于MT_dialog

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

你好,

我之所以转换角色,是因为我想做一个转发器,以延长广播包的距离。当我通过扫描得到广告包时,我只是在接下来的角色转换中通过广播重复我的内容。

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

嗨,对话框中,

你有将3个地址加入白名单的例子吗?
怎么做呢?

谢谢你!

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

嗨liuluan002,

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

由于MT_dialog