【PHY6222】绑定详解

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.mzph.cn/news/241191.shtml

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

相关文章

【postgres】8、Range 类型

文章目录 8.17 Range 类型8.17.1 内置类型8.17.2 示例8.17.3 开闭区间8.17.4 无穷区间 https://www.postgresql.org/docs/current/rangetypes.html 8.17 Range 类型 Range 类型,可以描述一个数据区间,有明确的子类型,而且子类型应该能被排序…

计算机网络——数据链路层(三)

前言: 前面我们已经对计算机网络的物理层有了一个大概的了解,今天我们学习的是物理层服务的上一层数据链路层,位于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传…

Mac使用Vmware Fusion虚拟机配置静态ip地址

一、设置虚拟机的网络为NAT 二、修改虚拟机的网络适配器网络 1、查看虚拟机的网卡 cd /etc/sysconfig/network-scripts#有些系统显示的是ens33,ens160等等 #不同的系统和版本,都会有所不同 #Centos8中默认是ens160,在RedHat/Centos7则为ens33 2、查看网…

Java语法---使用sort进行排序

目录 一、升序 二、降序 (1)类实现接口 (2)匿名内部类 三、自定义排序规则 四、集合中的sort排序 (1)升序 (2)降序 (3)自定义排序 一、升序 升序排…

C++内存管理和模板初阶

C/C内存分布 请看代码: int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)mallo…

OpenHarmony之内核层解析~

OpenHarmony简介 技术架构 OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件…

一周工作问题总结(2023.12.18-2023.12.22)

一周工作问题总结 1. 接口调用频率2. 汉字在数据库中占用字节问题3. Map在循环中修改自己的key与value4. Group BY5.递归同步数据6.代码移动Idea飘红 1. 接口调用频率 供应商给的接口可以每秒调用5-10次,那么我为了保险每秒调用5次,为了防止过度调用接口…

BUG记录——drawio出现“非绘图文件 (error on line 7355 at column 83: AttValue: ‘ expected)”

BUG现象 drawio出现“非绘图文件 (error on line 7355 at column 83: AttValue: ’ expected)”,如下图: 解决办法 这只是我自己摸索到的解决办法并不一定适用于所以人,对我是适用的。 首先用记事本打开损坏的drawio文件,如下 …

mathtype公式章节编号

1. word每章标题后插入章节符 如果插入后显示章节符,需要进行隐藏 开始->样式->MTEquationSection->修改样式->字体,勾选隐藏 2. 设置mathtype公式编号格式 插入编号->格式化->设置格式

什么是动态代理?

目录 一、为什么需要代理? 二、代理长什么样? 三、Java通过什么来保证代理的样子? 四、动态代理实现案例 五、动态代理在SpringBoot中的应用 导入依赖 数据库表设计 OperateLogEntity实体类 OperateLog枚举 RecordLog注解 上下文相…

SpringMVC基础知识(持续更新中~)

笔记: https://gitee.com/zhengguangqq/ssm-md/blob/master/ssm%20md%E6%A0%BC%E5%BC%8F%E7%AC%94%E8%AE%B0/%E4%B8%89%E3%80%81SpringMVC.md 细节补充:

深度学习 | 梯度下降算法及其变体

一、最优化与深度学习 1.1、训练误差与泛化误差 1.2、经验风险 1.3、优化中的挑战 1.3.1、局部最小值 1.3.2、 鞍点 经常是由于模型复杂度过高或者训练样本数据过少造成的 —— Overfitting 1.3.3、悬崖 1.3.4、长期依赖问题 二、损失函数 2.1、损失函数的起源 损失函数(loss…

041_小驰私房菜_MTK平台添加支持通过原生Camera API接口调用UsbCamera

平台:MTK 问题:通过调用Android Camera API去调用UsbCamera,需要做哪些修改? Google官方文档,关于usbcamera的支持: 外接 USB 摄像头 | Android 开源项目 | Android Open Source Project 相关修改内容如下: 一、MTK平台支持通过标准接口打开USB Camera 1)device相…

每日一题——轮转数组

1. 题目描述 给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。 示例1: 输入:nums [1,2,3,4,5,6,7],k 3 输出:[5,6,7,1,2,3,4] 解释: 向右轮转 1步:[7,1,2,3,4,5,6] 向右…

Unity自带的NavMesh寻路组件

最近看了一下Unity自带的NavMesh寻路组件,先说一下基本的使用: 首先先把AI Navgation的package包给安装上。 给场景地图添加上NavMeshSurface组件,然后进行烘焙,烘焙出对应的场景地图文件。 给移动物体添加对应的Nav MeshAgent组…

【XML】TinyXML 详解(二):接口详解

【C】郭老二博文之&#xff1a;C目录 1、XML测试文件&#xff08;laoer.xml&#xff09; <?xml version"1.0" standalone"no" ?> <!-- Hello World !--> <root><child name"childName" id"1"><c_child…

可视化开发

可视化开发 数据可视化 交互式可视化 文章目录 可视化开发前言一、可视化开发二、Python数据可视化大屏GIS图像智能识别处理软件开发三、可视化开发必备总结前言 可视化开发可以帮助开发者通过图形化界面和拖放操作来创建、编辑和测试应用程序。使用这些工具,开发者可以提高开…

解决用Fiddler抓包,网页显示你的连接不是专用/私密连接

关键&#xff1a;重置fiddler的证书 在Fiddler重置证书 1、Actions --> Reset All Certificates --> 弹窗一路yes 2、关掉Fiddler&#xff0c;重新打开 3、手机删掉证书&#xff0c;重新下载安装。 &#xff08;如果还不行&#xff0c;重新试一遍&#xff0c;先把浏览器…

1223西站坐标更新

1223 西站坐标更新 1.Update for the station’s location def initial_out_map_indoor_points(self):Load the indoor data and update both the wall_matrix and the ditch_matrix.# Initialize the wall_matrix# List of coordinatescoordinates [(417, 287, 417, 290),(4…

CSS3新增特性

CSS3 CSS3私有前缀 W3C 标准所提出的某个CSS 特性&#xff0c;在被浏览器正式支持之前&#xff0c;浏览器厂商会根据浏览器的内核&#xff0c;使用私有前缀来测试该 CSS 特性&#xff0c;在浏览器正式支持该 CSS 特性后&#xff0c;就不需要私有前缀了。 查询 CSS3 兼容性的网…