嗨对话框,
我正在尝试定义我的功能通过空气扫描包,我检查了文件,我的功能如下我的问题是,我应该在哪里以及如何定义我的白名单进行扫描?
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);
}
设备:

嗨Liuluan002,
请查看RW-BLE-GAP-IS用于GAPM_WHITE_LIST_MGT_CMD以此方式,您可以管理您在带列表中的设备。您可以使用以下代码段使用的内容
void manage_white_list(void)
{
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 - >操作= 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
谢谢你!还有一个问题。
当我尝试从以下功能进行广播时:通过将不同的包广播到空中,每10ms。是否有可能使广播不同的包装快于10ms?如果我使它快速播放,则会有没有影响力使广播过程失败?接收侧扫描是否有问题?
void set_adv_func(struct gapm_start_advertise_cmd * cmd,uint8_t * data,uint8_t len)
{
如果(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;//
Cmd ->channel_map = 0x01;//通道37
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 ((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\nEmpty 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);
返回;
}
嗨,对话框中,
我已经用下面的代码测试了白名单
在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.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时,第一次它工作,第二次它不工作,第三次工作....我发现它只在偶尔的时候起作用。即使在偶数的时候,它也不起作用。你能帮忙吗?
嗨Liuluan002,
当你说“它不工作”是什么意思,它会返回当前任何设备广告或它不会返回任何东西?我使用您的扫描配置通过外部中断使用按钮发出扫描,该设备似乎在每次按下白名单返回设备(请使用广告指示user_on_adv_report_ind()函数中使用断点检查它)。另外我还会建议你,不要在新增的设备上添加扫描请求功能。每次你发出扫描,我想你是添加相同的设备(我不知道这是否会给你带来任何麻烦)。请看一下app_white_list.c文件中的键盘参考设计,它使用了白名单特性,也许你会发现它很有用。
由于MT_dialog
嗨对话框,
我的意思是“没有工作”是扫描不返回任何东西。如果我把函数“manage_white_list()”放入我的“app_scan()”每次运行时,第一次是扫描fine,第二次计时器重置后”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:
//设备配置更新
案例GAPM_SET_DEV_CONFIG:
{
如果(param - >状态! = GAP_ERR_NO_ERROR)
{
ASSERT_ERR (0);/ /意想不到的错误
}
别的
{
如果(0 == current_role)
{
/ /广告
EXECUTE_CALLBACK_VOID (app_on_set_dev_config_complete);
}
别的
{
/ /扫描
app_scan ();
}
如果(0 == current_role)
{
ke_timer_set(app_switch_role_timer,task_app,20);
}
如果(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);
}
挥发性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.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)
{
struct 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-> sepent_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-> supmen_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);
}
嗨Liuluan002,
由于您是交替角色,我不确定这是由白名单造成的,请删除白名单管理,并尝试扫描并取回您能找到的任何bd地址。当你在你的第二次尝试,你不能找到任何广告的设备,你能扫描所有?我的意思是从你的代码,你的设备被配置为一个外设每秒钟和外设不能扫描(如果user_gapm_conf。角色是一个gap_peripheral_slv)。
由于MT_dialog
嗨对话框,
我没有使用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)
{
struct 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-> sepent_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-> supmen_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);/ /意想不到的错误
}
别的
{
如果(0 == current_role)
{
EXECUTE_CALLBACK_VOID (app_on_set_dev_config_complete);
}
别的
{
app_scan ();
position11 ++;
}
如果(0 == current_role)
{
ke_timer_set (APP_SWITCH_ROLE_TIMER TASK_APP 0);
}
如果(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 = 00000d2e.
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 = 00000d05.
ADDR:80EACA000049 A0 0201061B0086100000000002FF3D01003D02FF3C01003D01003D00000000000000
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:80EACA000049 9F 0201061B008A1000000000013D02003E01FF3F01003D01FF3C00000000000000
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:80EACA000049 A0 0201061003E01FF3E01FF3F01FF3D01003D01003E01003C
T2 = 00000 ca9
addr: 80 eaca000049 A0 0201061 b00911000000002003d01003e01003e02ff3d02ff3f02ff3d01013d
T2 = 00000 cb9
ADDR:80EACA000049 A0 0201061B00921000000003D00003E02003F00013D00000000000000
cca T2 = 00000
GAPM_RESET:
开始睡觉
BCT1 = 0A
GAPM_RESET:
开始扫描H
大小白色的年代
尺寸白色l = 00000009
ADDR:80EACA000049 A0 020101000013D02013D02F3E02FE3E02003E01003E00003E
t2 = 00000c80.
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 = 0B.
GAPM_RESET:
开始扫描H
大小白色的年代
尺寸白色l = 00000009
addr: 80 eaca000049 A2 0201061 b00971000000002fe3b02003e02003d01003e02ff3e01003f01003e
t2 = 00000c68.
addr: 80 eaca000049 A2 0201061 b00981000000001003f01ff3e02003e02003d01ff3e01ff3e01003e
t2 = 00000c78.
addr: 80 eaca000049 A2 0201061 b00991000000002003e01003d02003e01003e02003d01003e01003d
t2 = 00000c89.
ADDR:80EACA000049 A2 0201061B009A10000000000000000/201000000000000/201003D02003E02FF3E02003e
c99 T2 = 00000
GAPM_RESET:
开始睡觉
BCT1 = 0C.
GAPM_RESET:
开始扫描H
大小白色的年代
尺寸白色l = 00000009
ADDR:80EACA000049 A2 0201061B009C10000003C2003CY02003E02003D
t2 = 00000c4f.
addr: 80 eaca000049 A2 0201061 b009d1000000001003d02003e01003d01003d01003d01003d02ff3e
t2 = 00000c60.
addr: 80 eaca000049 A2 0201061 b009e1000000001ff3e01003d01ff3e01003e02ff3d02ff3e01ff3e
t2 = 00000c70.
addr: 80 eaca000049 A2 0201061 b009f1000000001003e01ff3e01003d01003e01003d000000000000
t2 = 00000c81.
GAPM_RESET:
开始睡觉
BCT1 = 0d.
GAPM_RESET:
开始扫描H
大小白色的年代
尺寸白色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
大小白色的年代
尺寸白色l = 00000009
addr: 80 eaca000049 A2 0201061 b00a41000000002013d02ff3d01003d02003e01ff3e02003d01ff3e
t2 = 00000c1e.
ADDR:80EACA000049 A2 0201061B00A5100000000001003E02003E0190301003CE01003D01003D01003D01003D01003C
t2 = 00000c2f.
ADDR:80EACA000049 A2 0201061B00A6100000000001FF3E02013E01FF3F02FF3D01013E01FF3E01FF3E
T2 = 00000C40
addr: 80 eaca000049 A2 0201061 b00a71000000002003e01003d02003f02ff3e01ff3e000000000000
t2 = 00000c50.
GAPM_RESET:
开始睡觉
BCT1 = 0f.
GAPM_RESET:
开始扫描H
大小白色的年代
尺寸白色l = 00000009
addr: 80 eaca000049 A2 0201061 b00a81000000001ff3e02ff3d01003e02003e02ff3d02003d02003e
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
大小白色的年代
尺寸白色l = 00000009
ADDR:80EACA000049 A2 0201061B00AC10000003F02003D01FF3E02003D01003F02003D01003F02003d01003e02003e
T2 = 00000只蜜蜂
addr: 80 eaca000049 A2 0201061 b00ad1000000002ff3e02003e01ff3e02ff3e01003f02003e02003e
T2 = 00000 bfe
addr: 80 eaca000049 A2 0201061 b00ae1000000002003d01003e02003d01003e01ff3d02003d02003e
t2 = 00000c.
addr: 80 eaca000049 A2 0201061 b00af1000000001003f01ff3e01003d01003e02ff3e000000000000
t2 = 00000c20.
GAPM_RESET:
嗨对话框,
你有添加3个地址到白名单的例子吗?
怎么做?
谢谢你!
嗨Liuluan002,
根据BLE规格的最小广告间隔为20ms,堆栈不会让您在10ms中进行宣传。我假设您使用计时器停止广告,并在计时器经过时发出app_adv_start。与指定的间隔无关。如果你想要更快地进行Trasmit(你是出于BLE规范,我们无法知道可能发生的问题)您可以等待BLE广告活动完成,停止广告,更改字符串,并再次启动。您可以通过检查App_Asynch_trm()函数中的信标参考设计来检查这是如何完成的(跟踪广告事件的末尾)。
由于MT_dialog
此外,当我尝试测试与活动扫描,系统将重新启动后,一段时间的扫描。它还会弹出一些全为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.code = 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 = 000009ca.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009da.
addr: 80 eaca000049 B4 0201061 b00d010000000fefec3fffdc4fffec3fefec3fefec3fefec3fefec3
T2 = 000009 eb
addr: 80 eaca000049 B4 00000000000000000000000000000000000000000000000000000000000000
T2 = 000009俱乐部
addr: 80 eaca000049 B5 0201061 b00d110000000fffec3fffec3fffdc3fefec3fefec3feffc3fefec3
t2 = 00000a0e.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 00000a1e.
addr: 80 eaca000049 B5 0201061 b00d210000000fefec3fffdc3fffec2fffdc3fffec3000000000000
t2 = 00000a2f.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000A40
GAPM_RESET:
开始睡觉
BCT1 = 14.
GAPM_RESET:
开始扫描H
大小白色的年代
尺寸白色l = 00000009
addr: 80 eaca000049 B5 0201061 b00d410000000fefec4feffc3fffec4fefec4fffec3fefec3fffec3
t2 = 000009d1.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009e2.
addr: 80 eaca000049 B5 0201061 b00d510000000fefec3fffec3feffc4fffec3fefec4fefdc3fefec4
f3 T2 = 000009
addr: 80 eaca000049 B4 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000A03.
GAPM_RESET:
开始睡觉
BCT1 = 15.
GAPM_RESET:
开始扫描H
大小白色的年代
尺寸白色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 = 000009 ee
ADDR:80EACA000049 B5 0201061B00DA1000000000FFC3FEFEC3FFFEC3FFEC3FFFFC400000000000000
T2 = 000009铁
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 00000A0F.
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 = 000009a2.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009b3.
ADDR:80EACA000049 B4 0201061B00DD10000000FEFFC3FEFEC3FFEC3FFFDC3FFFEC3FEFEC3FFEC2
T2 = 000009C5.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009d5.
ADDR:80EACA000049 B4 0201061B00DE10000000FEFDC3FFEC2FFEC3FEFFC4FEFEC300000000000000
t2 = 000009e6.
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:80EACA000049 B5 0201061B00E010000000FEFEC3FFEC3FFFec4FFEC3FFEC3FFFEC3FEFEC2
T2 = 00000989
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
T2 = 0000099A.
addr: 80 eaca000049 B4 0201061 b00e110000000ffffc3fffec3fefdc2feffc300fec3fffdc4fffec4
t2 = 000009ac.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009bd.
addr: 80 eaca000049 B4 0201061 b00e210000000fffec4fefec4fffec3fefec3fefdc4000000000000
t2 = 000009ce.
addr: 80 eaca000049 B5 00000000000000000000000000000000000000000000000000000000000000
t2 = 000009de.
GAPM_RESET:
“device_init做
GAPM_RESET:
开始睡觉
GAPM_RESET:
嗨Liuluan002,
从您的初始代码中,我可以看到,每当您发出GAPM_RESET_CMD时,您正在更改user_gapm_conf.role之间的角色(如果不是gap_peripheral_slv的值是什么?重置。您提到的是,白色名单在每个奇数中都有工作,您可以获得一些数据,以缩小问题请不要使用白色列表,但尝试扫描目前广告的所有可用设备才能确保你确实扫描了。
问题可能是您的UART打印(即如果您使用arch_printf()函数来打印数据),在arch_main.c文件的schedule_while_ble_on()中尝试将代码片段中删除if (app_async_trm()) break;和arch_printf_process ();
if(app_asynch_trm()))
{
继续;
}
别的
{
ARCH_PRINTF_PROCESS();
打破;
}
关于你的问题,有时你没有得到任何广告,你是否确定你的设备是广告的吗?而且我也注意到你的扫描窗口只要你的间隔长,这意味着你只听一个很长一段时间的广告频道,尝试减少你的窗口和你的间隔,以收听所有三个广告渠道经常在扫描时可能会在那个特定频道上进行混淆。此外,由于UART打印可能会发生这种情况,请尝试使用断点而不是UART打印来捕获广告迹象,以确保。最后或许在执行扫描时可能有两个空中活动,没有广告可以完整地联系您的接收器,因此您不会得到任何指示。
关于您获得的零,是从您发送到外围设备的扫描请求的数据,那些是外围设备的扫描响应数据。
由于MT_dialog
我已经删除了白名单,并开始扫描检查,扫描期间没有丢包,似乎可以。问题我猜是你提供的功能白名单可能会导致问题。
你的意思是14583可能进入模式不是GAP_PERIPHERAL_SLV,或者不是GAP_CENTRAL_MST,这是你的意思是可能触发它不能扫描任何从广播包?
如果我使用白色列表,它似乎有效为70%的时间,一些时期无法扫描任何内容。(现在它不是偶数和奇怪的问题)
我今天测试了以下代码,似乎对改善扫描丢失的包没有帮助。
if(app_asynch_trm()))
{
继续;
}
别的
{
ARCH_PRINTF_PROCESS();
打破;
}
您是否有可能帮助我们检查一部分代码?我可以收到您的电子邮件并将其发送给您吗?
GAP_PERIPHERAL_SLV是什么意思
嗨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
我认为是GAP_PERIPHERAL_SLV,我在user_config.h中找到了它,如下所示。
静态const struct gapm_configuration
.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/Characteristi..。
.appearance = 0,
.appearance_write_perm = gapm_write_disable,
.name_write_perm = gapm_write_disable,
/// maximal mtu.
.max_mtu = 23,
/ / /外围 : *****************************************************************
///在ble double插槽中测量的最小连接间隔(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),
/// Slave首选连接延迟。它是通过跳过连接事件来度量的
.con_latency = 0,
/// Slave首选链路监控超时,以计时器单位(10ms)为单位
///使用宏MS_TO_TIMERUNITS从毫秒(ms)转换为定时器单位
.superv_to = MS_TO_TIMERUNITS (1000),
///隐私设置位字段(0b1 =启用,0b0 =禁用)
/// - [位0]:隐私支持
/// - [位1]:多键支持(仅限外围设备);如果已启用,隐私标志是
/ / /只读。
/// - [位2]:重新连接地址可见。
.flags = 0
};
嗨Liuluan002,
老实说,我不明白你想做什么,你在角色之间切换,一个是中心的,另一个是外围设备,外围设备不能执行扫描程序。既然你只是在浏览为什么你需要这个角色转换的额外代码。即使是角色切换试图复制你的问题,我已经做了一个设备,发出一个按钮按下角色切换,扫描程序包括白名单没有显示任何类型的功能,总是返回适当的设备。请尝试做一个简单的扫描仪,没有角色转换基于DSPS主机应用程序,然后您可以应用白名单和测试它。
由于MT_dialog
你好,
我正在做角色转换,因为我想做一个中继器,以延长广播包裹的距离。当我从扫描中得到广告包时,我只是通过广播重复我在下一个角色的转换。
嗨对话框,
你有添加3个地址到白名单的例子吗?
怎么做?
谢谢你!
嗨Liuluan002,
唯一使用白名单的项目,虚拟或实际的BLE堆栈白名单是键盘,没有任何例子添加明确的3设备。
由于MT_dialog