【PHY6222】绑定详解

news2024/11/20 11:14:36

1.函数详解

bStatus_t GAPBondMgr_SetParameter( uint16 param, uint8 len, void* pValue )

设置绑定参数。

bStatus_t GAPBondMgr_GetParameter( uint16 param, void* pValue )

获取绑定参数。

param:

GAPBOND_PAIRING_MODE,配对模式,可以选择:

GAPBOND_PAIRING_MODE_NO_PAIRING,不允许配对

GAPBOND_PAIRING_MODE_WAIT_FOR_REQ,等待配对请求(被动)

GAPBOND_PAIRING_MODE_INITIATE,直接发起配对请求(主动)

GAPBOND_INITIATE_WAIT,等待配对的时间,单位ms,默认是1000ms

GAPBOND_MITM_PROTECTION,是否启用中间人保护

GAPBOND_IO_CAPABILITIES,IO能力设置,可以选择:

GAPBOND_IO_CAP_DISPLAY_ONLY,仅仅可以显示

GAPBOND_IO_CAP_DISPLAY_YES_NO,仅仅可以显示YES和NO

GAPBOND_IO_CAP_KEYBOARD_ONLY,仅仅具有键盘输入

GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT,既没输入也没输出

GAPBOND_IO_CAP_KEYBOARD_DISPLAY,既有显示也有键盘输入

GAPBOND_OOB_ENABLED,使能OOB配对方式

GAPBOND_OOB_DATA,OOB数据,即密钥,详细参考蓝牙传统OOB配对方式。

GAPBOND_BONDING_ENABLED,使能绑定,将会在配对之后发起绑定请求

GAPBOND_KEY_DIST_LIST,绑定过程中分发的密钥种类,多选。支持以下参数:

GAPBOND_KEYDIST_SENCKEY,从机加密密钥(LTK)

GAPBOND_KEYDIST_SIDKEY,从机IRK和ID信息(EDIV和Rand)

GAPBOND_KEYDIST_SSIGN,从机CSRK

GAPBOND_KEYDIST_MENCKEY,主机加密密钥

GAPBOND_KEYDIST_MIDKEY,主机IRK和ID信息

GAPBOND_KEYDIST_MSIGN,主机CSRK

GAPBOND_DEFAULT_PASSCODE,PIN码

GAPBOND_ERASE_ALLBONDS,擦除所有绑定信息

GAPBOND_AUTO_FAIL_PAIRING,测试用,在收到配对请求时直接回复配对失败

GAPBOND_AUTO_FAIL_REASON,测试用,回复配对失败的原因,可以选择:

SMP_PAIRING_FAILED_PASSKEY_ENTRY_FAILED,密钥输入失败,例如用户取消了输入

SMP_PAIRING_FAILED_OOB_NOT_AVAIL,OOB数据不可用

SMP_PAIRING_FAILED_AUTH_REQ,IO能力不满足身份认证需求,配对失败

SMP_PAIRING_FAILED_CONFIRM_VALUE,确认值和计算得到的不同

SMP_PAIRING_FAILED_NOT_SUPPORTED,设备不支持配对

SMP_PAIRING_FAILED_ENC_KEY_SIZE,协商密钥长度不能满足安全需求

SMP_PAIRING_FAILED_CMD_NOT_SUPPORTED,收到的SMP命令当前设备不支持

SMP_PAIRING_FAILED_UNSPECIFIED,未说明配对失败原因

SMP_PAIRING_FAILED_REPEATED_ATTEMPTS,配对和身份认证过程不能执行,因为距离上次时间太短

GAPBOND_KEYSIZE,配对密钥长度

GAPBOND_AUTO_SYNC_WL,清除当前白名单,并重新从Flash中读取绑定设备添加到白名单

GAPBOND_BOND_COUNT,获取当前绑定设备数量

GAPBOND_BOND_FAIL_ACTION,中心设备在绑定失败的时候采取的措施,可以选择:

GAPBOND_FAIL_NO_ACTION,不进行任何操作

GAPBOND_FAIL_INITIATE_PAIRING,启动配对

GAPBOND_FAIL_TERMINATE_LINK,终止连接

GAPBOND_FAIL_TERMINATE_ERASE_BONDS,终止连接并擦除设备上所有绑定信息

void GAPBondMgr_Init( uint8 task_id )

绑定相关初始化,里面只读取了绑定信息。详细见:gapBondMgrReadBonds

uint16 GAPBondMgr_ProcessEvent( uint8 task_id, uint16 events )

处理绑定相关事件。可以看到只处理了SYS_EVENT_MSG类型的信息,详细见gapBondMgr_ProcessOSALMsg

static void gapBondMgrReadBonds( void )

static void gapBondMgr_SyncWhiteList( void )

 

static void gapBondSetupPrivFlag( void )

static uint8 gapBondMgrBondTotal( void )

static uint8 gapBondMgr_ProcessOSALMsg( osal_event_hdr_t* pMsg )

uint8 GAPBondMgr_ProcessGAPMsg( gapEventHdr_t* pMsg ) 

 

void GAPBondMgr_Register( gapBondCBs_t* pCB )

注册配对/绑定状态改变通知的回调函数(pGapBondCB->pairStateCB)和请求PIN码的回调函数(pGapBondCB->passcodeCB),被注册的两个函数会在上面的函数GAPBondMgr_ProcessGAPMsg中调用。

bStatus_t GAPBondMgr_PasscodeRsp( uint16 connectionHandle, uint8 status, uint32 passcode )

更新pin码函数,可以在请求pin码的回调函数(pGapBondCB->passcodeCB)中调用。 

static uint8 gapBondMgrAddBond( gapBondRec_t* pBondRec, gapAuthCompleteEvent_t* pPkt )

添加绑定信息函数。

经过上面的操作,假如是一个新的绑定,已经获得了一个空的可以保存绑定信息的index,后续绑定信息会保存于此。

static void gapBondRecvEvt(uint16 connHandle, gapBondRec_t* pBondRec, gapAuthCompleteEvent_t* pPkt )

在gapBondRecvEvt中也调用了gapBondMgrAddBond,但是在GAPBondMgr_ProcessGAPMsg中gapBondMgrAddBond和gapBondRecvEvt是同时调用的,通过对gapBondMgrAddBond函数的分析可以知道,第一次进入gapBondMgrAddBond函数时,pAuthEvt[pPkt->connectionHandle]应该为空,此时保存了mainRecord、gattCfg以及pAuthEvt[pPkt->connectionHandle]设置为当前信息,在gapBondRecvEvt中的gapBondMgrAddBond中进入时pAuthEvt[pPkt->connectionHandle]已经不为空了,然后才保存TLK、IRK等余下的信息。

static uint8 gapBondMgr_SyncCharCfg( uint16 connHandle )

 static uint8 gapBondMgrUpdateCharCfg( uint8 idx, uint16 attrHandle, uint16 value )

static gapBondCharCfg_t* gapBondMgrFindCharCfgItem( uint16 attrHandle,
                                                    gapBondCharCfg_t* charCfgTbl )

static void gapBondMgrInvertCharCfgItem( gapBondCharCfg_t* charCfgTbl )

翻转charCfgTbl的attrHandle和value。 

static bStatus_t gapBondMgrEraseBonding( uint8 idx )

static bStatus_t gapBondMgrEraseAllBondings( void )

擦除所有绑定信息,只是用了一个for循环把所有单条的擦除。

uint8 GAPBondMgr_CheckNVLen( uint8 id, uint8 len )

返回flash中保存的信息的大小。详细见后续关于内存占用分析。 

static void gapBondFreeAuthEvt( uint16 connHandle )

 bStatus_t GAPBondMgr_LinkEst( uint8 addrType, uint8* pDevAddr, uint16 connHandle, uint8 role )

 

static void gapBondMgrBondReq( uint16 connHandle, uint8 idx, uint8 stateFlags,
                               uint8 role, uint8 startEncryption )

static void gapBondMgrSlaveSecurityReq( uint16 connHandle )

发送安全请求。

static void gapBondMgrAuthenticate( uint16 connHandle, uint8 addrType,
                                    gapPairingReq_t* pPairReq )

2.保存的信息

其中:

GAP_BOND_REC_ID_OFFSET保存的数据类型为:

B_ADDR_LEN为6,所以一共占用14个字节。

GAP_BOND_LOCAL_LTK_OFFSET和GAP_BOND_DEV_LTK_OFFSET保存的数据类型为:

KEYLEN为16,B_RANDOM_NUM_SIZE为8,所以一共需要28字节。

GAP_BOND_DEV_IRK_OFFSET和GAP_BOND_DEV_CSRK_OFFSET都是16字节。

GAP_BOND_DEV_SIGN_COUNTER_OFFSET为4字节。

所以一共需要10*(14+28+28+16+16+4) = 1060字节。

另外10个连接,每个最多保存4个属性项,单个属性项结构如下:

一共需要10*4*4=160字节,一共需要160+1060 = 1220字节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1332002.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第4章 | 安徽某高校《统计建模与R软件》期末复习

第4章 参数估计 参数估计是统计建模的关键步骤之一,它涉及根据样本数据推断总体参数的过程。在统计学中,参数通常用于描述总体的特征,如均值、方差等。通过参数估计,我们可以利用样本信息对这些未知参数进行推断,从而…

LDO频率补偿

频率补偿 为了维持系统稳定的条件,一般的做法是建立一个低频几点,并把第二个极点放在单位增益频率 f0db 附近。在线性稳压器中,这两个极点是输出极点Po和误差放大器极点Pe。在确定了哪一个极点应该是主极点后,补偿的目的就是理解系…

【FPGA】Verilog 实践:优先级编码器 | Priority encoder

0x00 优先级编码器(Priority encoder) "能将多个二进制输入压缩成更少数目输出的电路或算法的编码器" 优先级编码器是一种编码器,它考虑了两个或更多输入位同时变为 1 但没有收到输入的情况。当输入进来时,优先级编码…

Flink实时电商数仓(五)

FlinkSQL的join Regular join普通join,两条流的数据都时存放在内存的状态中,如果两条流数据都很大,对内存压力很大。Interval Join: 适合两条流到达时间有先后关系的;一条流的存活时间短,一条流的存活时间长。Lookup …

使用office打开word文档时候提示错误:0x426-0x0的解决方案

在使用office打开word文档时候提示错误:0x426-0x0。如下图: 昨天还用的好好的,怎么今天就不行了?为什么呢? 更多工作中遇到问题见:凯哥BK 这个错误导致office无法启动通常是由于office软件所依赖的服务无…

[工具]java_sublime的快速使用

目录 使用 : 怎么运行: 调整字体: 使用 : 新建--->写好代码后-->另存为尾缀是.java的文件 怎么运行: 在你另存为的目录下cmd调用控制台输入dos指令--->执行javac 文件名.java(有.java尾缀)(编译为.class文件)--->java 文件名(没有.class尾缀设计者认为执行的是…

【Spring实战】04 Lombok集成及常用注解

文章目录 0. 集成1. Data2. Getter 和 Setter3. NoArgsConstructor,AllArgsConstructor和RequiredArgsConstructor4. ToString5. EqualsAndHashCode6. NonNull7. Builder总结 Lombok 是一款 Java 开发的工具,它通过注解的方式简化了 Java 代码的编写&…

INFINI Gateway 如何防止大跨度查询

背景 业务每天生成一个日期后缀的索引,写入当日数据。 业务查询有时会查询好多天的数据,导致负载告警。 现在想对查询进行限制–只允许查询一天的数据(不限定是哪天),如果想查询多天的数据就走申请。 技术分析 在每…

面试题:JVM 对锁都进行了哪些优化?

文章目录 锁优化自旋锁和自适应自旋锁消除锁粗化逃逸分析方法逃逸线程逃逸通过逃逸分析,编译器对代码的优化 锁优化 jvm 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 自旋锁和自适应自旋 现在大多的处理器都是…

OpenSource - SCM服务管理平台

文章目录 官方网址文档下载版本功能解决了哪些问题使用对象优势Linxu版本scm-dev deb服务列表 Windows版本scm-dev 服务列表scm-all 服务列表scm-jdk 服务列表scm-springboot 精简版本服务列表scm-springboot 服务列表scm-tomcat 服务列表 SCM 截图 官方网址 https://scm.chus…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及风电不确定性的多场景多时段安全约束机组组合解耦求解方法》

这个标题涉及到一种解决在能源系统中考虑风电不确定性的方法。让我们逐步分解这个标题,以便更好地理解其含义: 计及风电不确定性: 这指的是在能源系统中,风力发电的产出具有不确定性。因为风速是难以预测的,风力发电的…

SpringBoot 3 集成Hive 3

前提条件: 运行环境&#xff1a;Hadoop 3.* Hive 3.* MySQL 8 &#xff0c;如果还未安装相关环境&#xff0c;请参考&#xff1a;Hive 一文读懂 Centos7 安装Hadoop3 单机版本&#xff08;伪分布式版本&#xff09; SpringBoot 2 集成Hive 3 pom.xml <?xml ver…

Yestar成都艺星舒适热玛吉星品沙龙会在蓉成功发布

12月21日&#xff0c;由Yestar成都艺星联合索塔医疗联合举办的“舒适无痛热玛吉星品沙龙会”在院内圆满举行&#xff0c;索塔医疗西区大客户经理肖峰、中国临床事业部刘颖&#xff0c;成都艺星运营部长程燕佳&#xff0c;皮肤科院长朱紫婷、技术院长杨海皎、主任王小琴&#xf…

小程序radio单选框回显

话不多说&#xff0c;效果图如下&#xff1a; 具体代码如下&#xff1a; <radio-group name"radio" bindchange"getSex"><label><radio value"1" checked"{{xingbie1}}" />男</label><label><radio…

3D数字化系统建设

以3D可视化、数字化技术为基础&#xff0c;其实&#xff0c;很多传统的系统软件都可以重新做一下。 比如&#xff1a;以下这个使用场景&#xff1a;零售门店陈列&#xff1b; 还有&#xff0c;数字化仓储系统&#xff0c;3D数字化供应链系统&#xff0c;3D数字化的生产系统&a…

网络首发:MTF-CNN-Attention故障识别: 基于马尔可夫场(MTF)和卷积网络(CNN)融合注意力机制的故障识别程序

适用平台&#xff1a;Matlab2023版本及以上 本程序参考中文EI期刊《电网技术》网络首发文献&#xff1a;《基于马尔可夫转换场与多头注意力机制的电能质量扰动分类方法》&#xff0c;程序注释清晰&#xff0c;干货满满&#xff0c;下面对文章和程序做简要介绍&#xff01; 文献…

实验三:路由器的管理与配置

实验目的&#xff1a; 了解路由器的作用熟悉路由器的基本配置方法熟悉Packet Tracer 路由模拟软件的使用 实验环境&#xff1a; Windows 10 下的 Cisco Packet Tracer 实验内容&#xff1a; 熟悉Packet Tracer组件搭建实验拓扑 实验步骤&#xff1a; 1.连接设备 2.配置IP地…

柯桥外语学习-俄语零基础入门教学之与衣服有关的词汇

本期为大家带来的是与衣物有关的相关词汇&#xff01; 最近全国大范围降温&#xff0c;大家一定要关注天气预告及时增减衣物&#xff0c;小心不要感冒啦~ 一、服装组成部分 领子 воротник 方领 квадрадный воротник 圆领 закругленн…

数据孤岛:一场数据的独立战争

在当今数字化的时代&#xff0c;数据已成为企业和组织最宝贵的资产之一。然而&#xff0c;尽管数据的价值被广泛认可&#xff0c;但数据的分散和孤立问题却仍然存在&#xff0c;这就是所谓的数据孤岛。本文将重点分析什么是数据孤岛、数据孤岛的危害以及解决数据孤岛的传统和创…

前端工程注入版本号

文章目录 一、前言二、webpack三、vite四、最后 一、前言 容器化时代&#xff0c;当页面出现问题时&#xff0c;如果你的新版本有可能已经修复了&#xff0c;那样你再排查它就没有意义了。为什么不一定是最新版本呢&#xff1f;一是可能是缓存作祟&#xff0c;二是可能运维成员…