如何使用白名单进行扫描

19个职位/ 0个新
最后发表
liuluan002
离线
最后看到:1年3个月前
加入: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 ->interval = 4000;/ / 10
Cmd ->window = 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
离线
最后看到:1年前5天前
工作人员
加入: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
离线
最后看到:1年3个月前
加入: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。代码= GAPM_ADV_UNDIRECT;
cmd - > op。addr_src = GAPM_PUBLIC_ADDR;
Cmd ->intv_min = 16;// 32*0.625 =20ms;
Cmd ->intv_max = 16;//
//channel 37 . 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, data, len);
cmd - > info.host。Adv_data_len = len+2;
cmd - > info.host。Adv_data [0] = len + 1;

其他的

#如果DEBUG_LOG2
printf_string("\r\nEmpty 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
离线
最后看到:1年3个月前
加入: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 ->window = 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
离线
最后看到:1年前5天前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

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

由于MT_dialog

liuluan002
离线
最后看到:1年3个月前
加入: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()”一次,下一次我GAPM_RESET定时器“ke_timer_set(APP_SWITCH_ROLE_TIMER, TASK_APP, 250);”并重新加载“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);

Volatile uint8_t white_flag;
空白app_scan(空白)

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 ->window = 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
静态结构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;

If (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 ance_write_perm = user_gapm_conf.appearance ance_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
离线
最后看到:1年前5天前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

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

由于MT_dialog

liuluan002
离线
最后看到:1年3个月前
加入: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;

If (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 ance_write_perm = user_gapm_conf.appearance ance_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);



打破;

日志如下

开始扫描H

白色S码
白色尺寸L=00000009

地址:80EACA000049 A0 0201061B007F1000000001003E01003E01FF3C01003E01003E01FF3E02FF3E
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:

开始扫描H

白色S码
白色尺寸L=00000009

地址:80EACA000049 A0 0201061b00831000000001003e01ff3e02ff3e01003e01003d01003e01003e01003e
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:

开始扫描H

白色S码
白色尺寸L=00000009

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

开始

BCT1 = 08年

GAPM_RESET:

开始扫描H

白色S码
白色尺寸L=00000009

GAPM_RESET:

开始

你好消息

BCT1 = 09年

GAPM_RESET:

开始扫描H

白色S码
白色尺寸L=00000009

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

开始

BCT1 = 0

GAPM_RESET:

开始扫描H

白色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:

开始扫描H

白色S码
白色尺寸L=00000009

地址:80EACA000049 A2 0201061B00971000000002FE3B02003E02003D01003E02FF3E01003F01003E
T2 = 00000 c68
地址:80EACA000049 A2 0201061b00981000000001003f01ff3e02003e02003d01ff3e01ff3e01ff3e01ff3e01003e
T2 = 00000 c78
地址:80EACA000049 A2 0201061b00991000000002003e01003d02003e01003e02003d01003e0e02003d01003e01003d
T2 = 00000 c89
地址:80EACA000049 A2 0201061B009A1000000001003E01003D02003E02FF3E02003E000000000000
c99 T2 = 00000
GAPM_RESET:

开始

BCT1 c = 0

GAPM_RESET:

开始扫描H

白色S码
白色尺寸L=00000009

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

开始

BCT1 d = 0

GAPM_RESET:

开始扫描H

白色S码
白色尺寸L=00000009

地址:80EACA000049 A2 0201061B00A01000000001003D02FF3E02FF3E02003D02003E01003F01003E
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:

开始扫描H

白色S码
白色尺寸L=00000009

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

开始

BCT1 f = 0

GAPM_RESET:

开始扫描H

白色S码
白色尺寸L=00000009

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

开始

BCT1 = 10

GAPM_RESET:

开始扫描H

白色S码
白色尺寸L=00000009

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

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

嗨,对话框中,

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

谢谢你!

MT_dialog
离线
最后看到:1年前5天前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

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

由于MT_dialog

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

当我尝试用主动扫描进行测试时,系统将在扫描一段时间后重新启动。它还会弹出一些全为0的包。
空白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 ->window = 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

地址:80EACA000049 B5 0201061B00CF10000000FFFEC300FEC2FEFEC3FFFEC2FFFEC3FFFEC4FFFEC2
T2 = 000009 ca
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 da
地址:80EACA000049 B4 0201061b00d010000000fefec3fffdc4fffec3fefec3fefec3fefec3fefec3fefec3
T2 = 000009 eb
地址:80EACA000049 B4 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009俱乐部
地址:80EACA000049 B5 0201061B00D110000000FFFEC3FFFEC3FFFDC3FEFEC3FEFEC3FEFFC3FEFEC3
T2 = 00000 a0e
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a1e
地址:80EACA000049 B5 0201061B00D210000000FEFEC3FFFDC3FFFEC2FFFDC3FFFEC3000000000000
T2 = 00000 a2f
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000钠
GAPM_RESET:

开始

BCT1 = 14

GAPM_RESET:

开始扫描H

白色S码
白色尺寸L=00000009

地址:80EACA000049 B5 0201061B00D410000000FEFEC4FEFFC3FFFEC4FEFEC4FFFEC3FEFEC3FFFEC3
T2 = 000009 d1
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 e2
地址:80EACA000049 B5 0201061B00D510000000FEFEC3FFFEC3FEFFC4FFFEC3FEFEC4FEFDC3FEFEC4
f3 T2 = 000009
地址:80EACA000049 B4 000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a03
GAPM_RESET:

开始

BCT1 = 15

GAPM_RESET:

开始扫描H

白色S码
白色尺寸L=00000009

地址:80EACA000049 B5 0201061B00D710000000FFFDC3FEFFC3FFFFC3FFFDC4FEFFC2FFFEC2FFFEC3
T2 = 00000999
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 aa
地址:80EACA000049 B4 0201061b00d810000000fffec4fffec4fefec3fffec4fffec3fffec3feffc3
T2 = 000009 ba
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 cb
地址:80EACA000049 B5 0201061B00D910000000FFFFC3FEFFC3FFFEC3FEFEC3FFFEC4FEFDC4FFFEC3
T2 = 000009 dd
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 ee
地址:80EACA000049 B5 0201061B00DA10000000FFFEC3FEFEC3FFFEC3FFFEC3FFFFC4000000000000
T2 = 000009铁
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000 a0f
GAPM_RESET:

开始

BCT1 = 16

GAPM_RESET:

开始扫描H

白色S码
白色尺寸L=00000009

地址:80EACA000049 B5 0201061B00DB10000000FFFFC4FEFEC3FEFDC3FEFDC3FEFEC3FEFEC2FEFEC3
T2 = 00000981
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000991
地址:80EACA000049 B4 0201061B00DC10000000FEFEC4FEFDC3FFFEC3FFFEC3FEFEC3FEFDC3FFFEC3
T2 = 000009 a2
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 b3
地址:80EACA000049 B4 0201061B00DD10000000FEFFC3FEFEC3FFFEC3FFFDC3FFFEC3FEFEC3FFFEC2
T2 = 000009 c5
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 d5
地址:80EACA000049 B4 0201061B00DE10000000FEFDC3FFFEC2FFFEC3FEFFC4FEFEC3000000000000
T2 = 000009 e6
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009 f7
GAPM_RESET:

开始

BCT1 = 17

GAPM_RESET:

开始扫描H

白色S码
白色尺寸L=00000009

地址:80EACA000049 B4 0201061B00DF10000000FEFEC3FFFEC3FFFEC3FEFEC3FEFEC4FFFEC2FFFEC3
T2 = 00000968
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 00000979
地址:80EACA000049 B5 0201061b00e010000000fefec3fffec3fffec4fffec3fffec3fffec3fffec2
T2 = 00000989
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 0000099
地址:80EACA000049 B4 0201061B00E110000000FFFFC3FFFEC3FEFDC2FEFFC300FEC3FFFDC4FFFEC4
T2 = 000009交流
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009双相障碍
地址:80EACA000049 B4 0201061B00E210000000FFFEC4FEFEC4FFFEC3FEFEC3FEFDC4000000000000
T2 = 000009 ce
地址:80EACA000049 B5 000000000000000000000000000000000000000000000000000000000000000000
T2 = 000009
GAPM_RESET:

“device_init做

GAPM_RESET:

开始

GAPM_RESET:

MT_dialog
离线
最后看到:1年前5天前
工作人员
加入: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()) break;arch_printf_process();

如果(app_asynch_trm ())

继续;

其他的

arch_printf_process ();
打破;

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

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

由于MT_dialog

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

我已经删除了白名单,并开始扫描和检查,扫描期间没有丢失包裹,似乎可以工作。问题是,我猜是你提供的白名单的功能可能会导致问题。

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

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

我今天测试了下面的代码,似乎它无助于改善扫描中丢失的包。
如果(app_asynch_trm ())

继续;

其他的

arch_printf_process ();
打破;

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

GAP_PERIPHERAL_SLV是什么意思

MT_dialog
离线
最后看到:1年前5天前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

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

如果(USER_CONFIG)

cmd->operation = GAPM_SET_DEV_CONFIG;

If (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
离线
最后看到:1年3个月前
加入:2015-11-27 14:24
我认为是GAP

我认为它是GAP_PERIPHERAL_SLV,我在user_config.h中找到了它,如下所示。
静态构造gapm_configuration 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,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 preferred在ble double slot中测量的最小连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS将毫秒(ms)转换为双槽
.con_intv_min = MS_TO_DOUBLESLOTS(10),
/// Slave preferred双槽最大连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS将毫秒(ms)转换为双槽
.con_intv_max = MS_TO_DOUBLESLOTS(20),
/// Slave首选连接延迟。它是通过跳过的连接事件来衡量的
.con_latency = 0,
///链路监控超时时间(10ms)
///使用宏MS_TO_TIMERUNITS将毫秒(ms)转换为计时器单位
.superv_to = MS_TO_TIMERUNITS(1000),
///隐私设置位字段(0b1 = enabled, 0b0 = disabled)
/// - [bit 0]:隐私支持
/// - [bit 1]:多个绑定支持(仅限外围设备);如果启用,隐私标志为
///只读。
/// - [bit 2]:重连接地址可见。
.flags = 0
};

MT_dialog
离线
最后看到:1年前5天前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

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

由于MT_dialog

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

你好,

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

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

嗨,对话框中,

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

谢谢你!

MT_dialog
离线
最后看到:1年前5天前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

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

由于MT_dialog