CN / EN
CN / EN

提问

获得支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

GR551x_V1_6_12_cdd8938e 绑定配对 GR551x

已解决

152***582

2022-03-15 09:08

条件:

1、IOS ANCS 功能需要绑定配对。

2、配对的时候区分安卓和IOS,调用的 error_code = ble_gattc_services_browse(conn_idx, NULL);

static void app_gattc_srvc_browse_cb(uint8_t conn_idx, uint8_t status, const ble_gattc_browse_srvc_t *p_browse_srvc){ uint8_t ancs_service_uuid[] ={ANCS_SRVC_UUID}; if(!(memcmp(ancs_service_uuid,p_browse_srvc->uuid,16))) { sdk_err_t error_code; error_code = ble_sec_enc_start(conn_idx); APP_ERROR_CHECK(error_code); APP_LOG_INFO("rrrrrrrrrrrrrrrrrr"); }}

这里发起配对。

问题:

1、设备连接iOS弹出配对框,iOS 点配对。

2、关闭iOS,或者远离设备,使蓝牙断开。

3、打开蓝牙,重新连接蓝牙,这个时候去点iOS蓝牙里面的设备,就会再次弹出配对。

已经配对过了就不应该再次弹出配对,请问是哪里配置的不对还是?


0收藏

0赞成

10个回答

hua****com

汇顶员工
2022-03-17 09:42

你好,请再检查一下你配置的参数和我上一个回复里面框出来的代码是否一致,我这边对比了你的最新回复,看起来是不一样的。

0条评论

0赞成

0收藏

您的评论
最佳答案

hua****com

汇顶员工
2022-03-16 15:10

你好,我们使用你的代码复现到了这个问题,怀疑为IOS系统安全策略导致的问题,可以对安全参数做以下修改来处理:


0条评论

0赞成

0收藏

您的评论

152***582

2022-03-16 11:27

1、安卓不需要绑定。

2、我用的ancs demo 修了

A:广播周期为1s

B:error_code = ble_gattc_services_browse(conn_idx, NULL);

C:
static void app_gattc_srvc_browse_cb(uint8_t conn_idx, uint8_t status, const ble_gattc_browse_srvc_t *p_browse_srvc)
{
uint8_t ancs_service_uuid[] ={ANCS_SRVC_UUID};

if(!(memcmp(ancs_service_uuid,p_browse_srvc->uuid,16)))
{
sdk_err_t error_code;
error_code = ble_sec_enc_start(conn_idx);
APP_ERROR_CHECK(error_code);
APP_LOG_INFO("rrrrrrrrrrrrrrrrrr");
}
}

这两个地方其他没有改

我用SK-113的板子 sdk 如题

0条评论

0赞成

0收藏

您的评论

hua****com

汇顶员工
2022-03-16 10:39

你好

1.我的理解,Android也是需要绑定的吧?所以先绑定再找服务应该没问题?

2.修改当然是可以的,只是现在是在找问题,可以先使用确认无误的代码,来帮助排查问题,所以可以先参考ancs demo的逻辑和流程,看看能不能正常运行。

0条评论

0赞成

0收藏

您的评论

152***582

2022-03-16 10:29

1、需要判断是IOS和安卓,所以就先去找是否有ANCS服务了

2、这个ancs是整个手表得一点功能 怎么可能不去修改呢

0条评论

0赞成

0收藏

您的评论

hua****com

汇顶员工
2022-03-16 10:19

你好,可能之前我没表达清楚,我这边是希望请你尝试以下两种方法:

1.交换代码中配对和服务发现的顺序,先配对,再发现服务。

2.直接使用ble_app_ancs_c demo,尽可能不做更改,这个demo已经实现了ancs服务的所有功能。看效果如何,如果无误的话,再对比你的代码看看有何差异。

0条评论

0赞成

0收藏

您的评论

152***582

2022-03-16 09:44

1、用ancs的demo测试。

2、添加

error_code = ble_gattc_services_browse(conn_idx, NULL);

static void app_gattc_srvc_browse_cb(uint8_t conn_idx, uint8_t status, const ble_gattc_browse_srvc_t *p_browse_srvc)
{
uint8_t ancs_service_uuid[] ={ANCS_SRVC_UUID};

if(!(memcmp(ancs_service_uuid,p_browse_srvc->uuid,16)))
{
sdk_err_t error_code;
error_code = ble_sec_enc_start(conn_idx);
APP_ERROR_CHECK(error_code);
APP_LOG_INFO("rrrrrrrrrrrrrrrrrr");
}
}

3、把广播参数修改成1s广播一次。

4、连接设备,配对,绑定,允许通知.

5、关闭iOS蓝牙。

6、打开iOS蓝牙,在蓝牙设备里这个时候显示未连接,点设备名连接设备,就会出现再次弹出配对对话框的,

0条评论

0赞成

0收藏

您的评论

hua****com

汇顶员工
2022-03-15 20:18

从安全参数配置来看没有问题,我们也没有复现到你所说的现象。建议你尝试一下更改发起配对和服务发现的顺序,先进行配对,再进行服务发现,或者参考一下SDK中的ble_app_ancs_c工程,看看和你的代码有哪些差异。

0条评论

0赞成

0收藏

您的评论

152***582

2022-03-15 16:07

你好!

代码的安全参数配置是:


0条评论

0赞成

0收藏

您的评论

hua****com

汇顶员工
2022-03-15 13:42

你好!

根据你的描述,可能是安全参数相关的配置有问题,没有使能绑定,请检查ble_sec_params_set()的配置是否如下图所示呢



0条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注