如何使用白色列表进行扫描

19个帖子/ 0新
最后一篇
liuluan002
离线
最后一次露面:6个月2周前
加入:2015-11-27 14:24
如何使用白色列表进行扫描

嗨对话框,

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

void扫描仪(空白)
{
struct 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->间隔= 4000;// 10S
CMD->窗口= 4000;// 10S
cmd - >模式= GAP_GEN_DISCOVERY;
cmd-> filt_policy = scan_allow_adv_wlst;
cmd - > filter_duplic = SCAN_FILT_DUPLIC_DIS;
ke_msg_send(cmd);
}

设备:
MT_dialog
离线
最后一次露面:3个月4天前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

请查看RW-BLE-GAP-IS用于GAPM_WHITE_LIST_MGT_CMD以此方式,您可以管理您在带列表中的设备。您可以使用以下代码段使用的内容

void manage_white_list(void)
{
uint8_t white_addr [6] = {0×01,0x00时,0×00,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 *)white_addr,bd_addr_len);
ke_msg_send(cmd);
}

谢谢mt_dialog.

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

谢谢你!还有一个问题。
当我尝试从以下功能进行广播时:通过将不同的包广播到空中,每10ms。是否有可能使广播不同的包装快于10ms?如果我使它快速播放,则会有没有影响力使广播过程失败?接收侧扫描是否有问题?

void set_adv_func(struct gapm_start_advertise_cmd * cmd,uint8_t * data,uint8_t len)
{
如果(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

cmd-> info.host.mode = gap_gen_disoverable;//一般可发现模式

// / * ----------------------------------------------------------------------------------
// *设置发布数据和扫描响应数据
// * -------------------------------------------------------------------- * /
cmd-> info.host.adata_len = app_add_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);
#万一

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个月2周前
加入: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.code = 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
离线
最后一次露面:3个月4天前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

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

谢谢mt_dialog.

liuluan002
离线
最后一次露面:6个月2周前
加入: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()”函数一次,下次由timer“ke_timer_set(app_switch_role_timer,task_app,250);”并重新加载“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);
}
}
}
打破;

void manage_white_list(void)
{

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.code = 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 stable 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;

if(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
离线
最后一次露面:3个月4天前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

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

谢谢mt_dialog.

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

if(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 0201061B007F100000000003CF1003CO01FF3C01FF3E02FF3E
T2 = 00000氯氟化碳
地址:80EACA000049 A0 0201061B00801000000001003D00013F01FE3D01003E02003E01003D01FE3C
T2 = 00000 d0d
addr: 80 eaca000049 A0 0201061 b00811000000001ff3d01013e00003e01003d02fe3e01ff3d02003e
T2 = 00000D1D
ADDR:80EACA000049 A0 0201061B00821000000000000000000/201F00000000003D01FF3D01F0000
T2 = 00000D2E
GAPM_RESET:

开始睡觉

BCT1 = 06

GAPM_RESET:

开始扫描H.

尺寸白色s
尺寸白色l = 00000009

地址:80EACA000049 A0 0201061B00831000000001003E01FF3E02FF3E01003E01003D01003E01003E
T2 = 00000 ce4
addr: 80 eaca000049 A0 0201061 b00841000000001003d01003e02ff3f02013e01ff3e01003d01ff3e
T2 = 00000 cf4
addr: 80 eaca000049 9 f 0201061 b00851000000001003d01003e01003f02ff3f01003d01003d02003d
T2 = 00000D05
ADDR:80EACA000049 A0 0201061B0086100000000002FF3D01003D02FF3C01003D01003D00000000000000
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 0201061B008910000003D01003D02003D02003D02003D02003D02003D02003D02003D01003D
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

addr: 80 eaca000049 A0 0201061 b008f1000000001003d01003d01ff3e01ff3d02003c02ff3e01003d
t2 = 00000c98.
地址:80EACA000049 A0 0201061B00901000000001003E01FF3E01FF3F01FF3D01003D01003E01003E
t2 = 00000ca9.
addr: 80 eaca000049 A0 0201061 b00911000000002003d01003e01003e02ff3d02ff3f02ff3d01013d
t2 = 00000cb9.
地址:80EACA000049 A0 0201061B00921000000002003E01003D00003E02003F00013D000000000000
t2 = 00000cca.
GAPM_RESET:

开始睡觉

BCT1 = 0A

GAPM_RESET:

开始扫描H.

尺寸白色s
尺寸白色l = 00000009

地址:80EACA000049 A0 0201061B00931000000000013D02013D02FF3E02FE3E02003E01003E00003E
t2 = 00000c80.
ADDR:80EACA000049 A0 0201061FF3E01003D02004002FF3D01FF3E02FF3F01FF3E
t2 = 00000c90.
ADDR:80EACA000049 A0 0201061B0095100000000/303CY3D01003D02003D01003D02003D02003E0253D02003E02FF3E
t2 = 00000ca1.
ADDR:80EACA000049 A0 0201061B0096100000000001FF3F01003D01003D01003D02FE3B00000000000000
t2 = 00000cb2.
GAPM_RESET:

开始睡觉

BCT1 = 0B

GAPM_RESET:

开始扫描H.

尺寸白色s
尺寸白色l = 00000009

ADDR:80EACA000049 A2 0201061B0097100003D01003E02003D01003F01003E
t2 = 00000c68.
ADDR:80EACA000049 A2 0201061003F01FF3E02003E02003D01FF3E01FF3E01003E
t2 = 00000c78.
ADDR:80EACA000049 A2 0201061B0099100000000003D02003D01003D02003D01003D02003D01003D02003D01003D02003D01003D02003D01003D02003D01003E01003D
t2 = 00000c89.
ADDR:80EACA000049 A2 0201061B009A10000000000000000/201000000000000/201003D02003E02FF3E02003e
t2 = 00000c99.
GAPM_RESET:

开始睡觉

BCT1 = 0C

GAPM_RESET:

开始扫描H.

尺寸白色s
尺寸白色l = 00000009

地址:80EACA000049 A2 0201061B009C1000000002003E02003E01003E02003E02003E01003E02003D
t2 = 00000c4f.
addr: 80 eaca000049 A2 0201061 b009d1000000001003d02003e01003d01003d01003d01003d02ff3e
t2 = 00000c60.
ADDR:80EACA000049 A2 0201061B009E100000000001FF3E01003D01FF3D01003E02FF3D02FF3E01FF3E
t2 = 00000c70.
ADDR:80EACA000049 A2 0201061B009F10000000000000000/201F3E01003D0100000000000000
t2 = 00000c81.
GAPM_RESET:

开始睡觉

BCT1 = 0D

GAPM_RESET:

开始扫描H.

尺寸白色s
尺寸白色l = 00000009

ADDR:80EACA000049 A2 0201061B00A010000000000001003D02FF3E02FF3E02003D02003E01003F01003CE
T2 = 00000C37
addr: 80 eaca000049 A2 0201061 b00a11000000001013d01003e01003e02ff3d02003d01003e01ff3d
T2 = 00000C47
addr: 80 eaca000049 A2 0201061 b00a21000000001003d01ff3e02003e02013e01ff3e02003f01013e
t2 = 00000c58.
ADDR:80EACA000049 A2 0201061B00A31000000003CO2003D00000000000000
t2 = 00000c69.
GAPM_RESET:

开始睡觉

BCT1 = 0E

GAPM_RESET:

开始扫描H.

尺寸白色s
尺寸白色l = 00000009

addr: 80 eaca000049 A2 0201061 b00a41000000002013d02ff3d01003d02003e01ff3e02003d01ff3e
t2 = 00000c1e.
地址:80EACA000049 A2 0201061B00A51000000001003E02003E01FF3E01003E01003D01003D01013E
T2 = 00000C2F
ADDR:80EACA000049 A2 0201061B00A6100000000001FF3E02013E01FF3F02FF3D01013E01FF3E01FF3E
T2 = 00000C40
addr: 80 eaca000049 A2 0201061 b00a71000000002003e01003d02003f02ff3e01ff3e000000000000
t2 = 00000c50.
GAPM_RESET:

开始睡觉

BCT1 = 0F

GAPM_RESET:

开始扫描H.

尺寸白色s
尺寸白色l = 00000009

ADDR:80EACA000049 A2 0201061B00A8100000000001FF3E02FF3D01003E02003E02003E
T2 = 00000C06
addr: 80 eaca000049 A2 0201061 b00a91000000002ff3d01003e01003d01003d02003e01013e02003d
t2 = 00000c17.
ADDR:80EACA000049 A2 0201061B00AA100000000003D01003D01003D01FF3E01FF3E00003C
t2 = 00000c27.
ADDR:80EACA000049 A2 0201061B00AB100000000001FF3E02003D02003D01003D01003D00000000000000
T2 = 00000C38
GAPM_RESET:

开始睡觉

BCT1 = 10

GAPM_RESET:

开始扫描H.

尺寸白色s
尺寸白色l = 00000009

ADDR:80EACA000049 A2 0201061B00AC10000003F02003D01FF3E02003D01003F02003D01003F02003d01003e02003e
T2 = 00000Bee.
addr: 80 eaca000049 A2 0201061 b00ad1000000002ff3e02003e01ff3e02ff3e01003f02003e02003e
T2 = 00000 bfe
addr: 80 eaca000049 A2 0201061 b00ae1000000002003d01003e02003d01003e01ff3d02003d02003e
T2 = 00000C0F
ADDR:80EACA000049 A2 0201061003F01FF3E01003D01003E02FF3E0000000000000000
t2 = 00000c20.
GAPM_RESET:

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

嗨对话框,

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

谢谢你!

MT_dialog
离线
最后一次露面:3个月4天前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

最低广告根据BLE规范间隔为20ms,堆栈不会让你在10毫秒做广告。我假设你使用的计时器停止advertsing你发出app_adv_start计时器经过时。这已无关,与指定的时间间隔。如果你想更快trasmit(你出了BLE规范的,所以我们无法知道会发生什么问题),你可以等待BLE广告活动到结束,停止广告,更改字符串,并再次启动。您可以检查这是如何通过检查信标参考设计在app_asynch_trm()函数来完成(跟踪广告事件的结束)。

谢谢mt_dialog.

liuluan002
离线
最后一次露面:6个月2周前
加入: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.code = 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 0201061B00CF10000000FFFec300FEC2FEFEC3FFEC2FFFEC3FFEC4FFEC2
t2 = 000009ca.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009da.
ADDR:80EACA000049 B4 0201061B00D010000000FEFEC3FFFDC4FFEC3FEFEC3FEFEC3FEFEC3FEFEC3
t2 = 000009eb.
地址:80EACA000049 B4 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009fc.
ADDR:80EACA000049 B5 0201061B00D1100000000000FFEC3FFEC3FFFDC3FEFEC3FEFEC3FEFFC3FEFEC3
t2 = 00000a0e.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 00000a1e.
ADDR:80EACA000049 B5 0201061B00D210000000FEFEC3FFFDC3FFFEC2FFFDC3FFFEC300000000000000
t2 = 00000a2f.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000A40
GAPM_RESET:

开始睡觉

BCT1 = 14

GAPM_RESET:

开始扫描H.

尺寸白色s
尺寸白色l = 00000009

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

开始睡觉

BCT1 = 15

GAPM_RESET:

开始扫描H.

尺寸白色s
尺寸白色l = 00000009

addr: 80 eaca000049 B5 0201061 b00d710000000fffdc3feffc3ffffc3fffdc4feffc2fffec2fffec3
T2 = 00000999
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009AA.
ADDR:80EACA000049 B4 0201061B00D8100000000000FFC4FFEC4FEFEC3FEFEC4FFFEC3FFFEC3FEFFC3
t2 = 000009ba.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009cb.
ADDR:80EACA000049 B5 0201061B00D91000000000FFFC3FEFFC3FFEC3FEFEC3FFFEC4FEFDC4FFEC3
t2 = 000009dd.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009ee.
ADDR:80EACA000049 B5 0201061B00DA1000000000FFC3FEFEC3FFFEC3FFEC3FFFFC400000000000000
t2 = 000009FE.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000A0F.
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 = 000009A2
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009b3.
地址:80EACA000049 B4 0201061B00DD10000000FEFFC3FEFEC3FFFEC3FFFDC3FFFEC3FEFEC3FFFEC2
T2 = 000009C5
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009d5.
地址:80EACA000049 B4 0201061B00DE10000000FEFDC3FFFEC2FFFEC3FEFFC4FEFEC3000000000000
t2 = 000009e6.
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:80EACA000049 B5 0201061B00E010000000FEFEC3FFEC3FFFec4FFEC3FFEC3FFFEC3FEFEC2
T2 = 00000989
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 0000099A
ADDR:80EACA000049 B4 0201061B00E11000000000FFFCC3FFEC3FEFDC2FEFFC300FEC3FFFDC4FFEC4
t2 = 000009ac.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009BD.
ADDR:80EACA000049 B4 0201061B00E21000000000FFC4FEFEC4FFEC3FEFEC3FEFDC4000000000000
t2 = 000009ce.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009de.
GAPM_RESET:

“device_init做

GAPM_RESET:

开始睡觉

GAPM_RESET:

MT_dialog
离线
最后一次露面:3个月4天前
职员
加入:2015-06-08 11: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()中尝试将代码放在片段中并删除如果(app_async_trm())中断;和ARCH_PRINTF_PROCESS();

如果(app_asynch_trm())
{
继续;
}
别的
{
ARCH_PRINTF_PROCESS();
打破;
}

关于您的问题,有时候你并没有任何广告,你肯定你的设备是广告?而且我已经注意到,您的扫描窗口,只要你的间隔,这意味着你只听取了相当长一段时间一个广告渠道,尽量减少你的窗口和你的间隔,以便听信广告的所有三个通道经常因为有可能是在在您要扫描的时间特定的渠道冲突分析。此外,作为我媒体链接何况这可能会发生由于UART打印,请尝试使用破发点,而不是UART印刷,以确保赶上广告指示。最后,也许是当时正在执行的扫描有两个大部分空中活动,并没有广告可以达到您的接收器完好,所以你没得到任何指示。

关于你所得到的是零,从要发送到外围设备的扫描请求数据,这些都是你的外围设备的扫描响应数据。

谢谢mt_dialog.

liuluan002
离线
最后一次露面:6个月2周前
加入:2015-11-27 14:24
我删除了白色列表,

我删除了白色列表,并开始扫描和检查而无需在扫描期内丢失,似乎它有效。问题我猜这是您为White List提供的功能可能导致问题。

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

如果我使用白色列表,它似乎有效为70%的时间,一些时期无法扫描任何内容。(现在它不是偶数和奇怪的问题)

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

您是否有可能帮助我们检查一部分代码?我可以收到您的电子邮件并将其发送给您吗?

你的意思是gap_peripherwal_slv

MT_dialog
离线
最后一次露面:3个月4天前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

在您的设备中,您正在更改角色,从GAP_Central_mst到配置文件中定义的其他内容,您指示设备在获得重置后将其指示更改的其他角色是什么?此变量中的其他角色user_gapm_conf.role是什么?

if(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个月2周前
加入:2015-11-27 14:24
我认为这是差距

我认为它是Gap_peripheral_slv,我在user_config.h中找到了以下内容。
static const结构gapm_configuration user_gapm_conf = {
.role = GAP_PERIPHERAL_SLV,
.irk = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
///设备外观(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),
///从属优选BLE双时隙测量连接间隔的最大值(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 =禁用)
/// - [位0]:隐私支持
/// - [位1]:多键支持(仅限外围设备);如果已启用,隐私标志是
/// 只读。
/// - [位2]:重新连接地址可见的。
.flags = 0.
};

MT_dialog
离线
最后一次露面:3个月4天前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

说实话我一直搞不明白你正在尝试做的,正在执行到角色之间的角色切换的一个是中央,另一个是外围,外围斜面执行扫描过程。所以,既然你只扫描为什么你需要的角色切换的这种额外的代码。即使在一个学尝试的角色切换,以复制的问题,我已经提出,问题上的按钮按角色转换,扫描过程包括白名单中并没有表现出任何一种manfunctions,始终返回正确设备的设备。请尽量使基于该DSPS主机应用程序没有角色切换简单的扫描仪,然后你可以应用白名单和测试。

谢谢mt_dialog.

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

你好,

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

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

嗨对话框,

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

谢谢你!

MT_dialog
离线
最后一次露面:3个月4天前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

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

谢谢mt_dialog.