profile、服务、特征、属性之间的关系

一个profile有很多的服务,一个服务又有很多的特性,一个特性中又有几种属性条目组成。


profile(数据配置文件)

一个profile文件可以包含一个或者多个服务,一个profile文件包含需要的服务的信息或者为对等设备如何交互的配置文件的选项信息。设备的GAP和GATT的角色都可能在数据的交换过程中改变,因此,这个文件应该包含广播的种类、所使用的连接间隔、所需的安全等级等信息。
需要注意的是: 一个profile中的属性表不能包含另一个属性表。

服务

一个服务包含一个或多个特性,这些特性是逻辑上相关的集合体。
GATT服务一般包含几块具有相关的功能,比如特定传感器的读取和设置,人机接口的输入输出。组织具有相关的特性到服务中既实用又有效,因为它使得逻辑上和用户数据上的边界变得更加清晰,同时它也有助于不同应用程序间代码的重用。GATT基于蓝牙技术联盟(SIG)官方而设计,SIG建议根据它们的规范设计自己的profile。

Characteristic

Characteristic 特征值,BLE 主从机的通信均是通过 Characteristic 来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。


属性

对特征的定义和描述。是Characteristic通信实现的细节。
其中特性中的属性条目有两种:属性值或描述符。任何在特性中的属性条目不是定义为属性值就是为描述符。
属性值:包含 特征的声明(Characteristic Declaration)条目、特征的值(Characteristic Value)条目
一个特性至少包含2个属性条目(也即属性值必须要有,而描述符根据需要可选):一个属性条目用于声明(Characteristic Declaration),一个属性条目用于存放特性的值(Characteristic Value)。
描述符:包含 特征的客户配置(Client Characteristic Configuration)条目、特征的用户描述(Characteristic User Description)条目
描述符是一个额外的属性以提供更多特性的信息,它提供一个人类可识别的特性描述的实例。
然而,有一个特别的描述符值得特别地提起:客户端特性配置描述符(Client Characteristic Configuration Descriptor,CCCD),它的UUID是0x2902,这个描述符是给任何支持通知或指示功能的特性额外增加的。在CCCD中写入“1”使能通知功能,写入“2”使能指示功能,写入“0”同时禁止通知和指示功能。
如果属性值的许可(permissions)含有通知或通知时,特性中的属性中需要有客户端特性配置描述符(CCCD)条目用户描述(Characteristic User Description)条目可有可无的。

一个特性中的属性包含的内容(1、2必须要有,3根据1、2有无通知指示可有无,4可选):
1. 特征的声明(Characteristic Declaration)(属性值):描述器存储其性能,位置和特征值的数据类型。
2. 特征的值(Characteristic Value)(属性值):就是特征值的数据值
3. 特征的客户配置(Client Characteristic Configuration)(描述符):这个允许GATT服务端配置特征值为通知(发送给GATT服务端)或指示(发送给GATT服务端并期望一个回复)。
4. 特征的用户描述(Characteristic User Description)(描述符):这是个ASCII字符串描述的特征值。

一个特性中的属性条目之间的关系:
Characteristic Declaration 条目中只是说明property 属性, 而Characteristic Value条目则直接指明了这个值能被“允许” 干嘛。
Client Characteristic Configuration条目 才是真正说明我这个值是可以被“notify”的,配置成开启/禁止通知,Characteristic Declaration条目 只是说明属性。
总之,1(Characteristic Declaration)条目 以只是”Declare“ 一下而已,具体做事的还是后面的2、3条目。

属性值或描述符均称为属性条目的一种,所有的这些属性条目都会存在GATT服务端的一个属性表中。除了其值本身,每个属性条目都有下面的性质:
一个属性条目包含UUID(类型)、许可、句柄、值
1. 句柄(Handle)这是基本的属性条目在表中的索引。每个属性都有一个独一的句柄
2. 类型(type):这个用来说明属性条目数据代表的意思。经常是作为UUID(universal unique Ididentifier)的。这其中的一些是Bluetooth-SIG定义的一些是用户的。
3. 许可(permissions):这个会强制一个GATT客户端设备是否和怎样访问属性条目的值。
4. UUID

/**
* GATT Attribute Type format.
*/
typedef struct
{
uint8 len; //!< Length of UUID
const uint8 *uuid; //!< Pointer to UUID
} gattAttrType_t;
/**
* GATT Attribute format.
*/
typedef struct attAttribute_t
{
gattAttrType_t type; //!< Attribute type (2 or 16 octet UUIDs)
uint8 permissions; //!< Attribute permissions
uint16 handle; //!< Attribute handle - assigned internally by attribute server
uint8* const pValue; //!< Attribute value - encoding of the octet array is defined in
//!< the applicable profile. The maximum length of an attribute
//!< value shall be 512 octets.
} gattAttribute_t;


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

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

相关文章

机器学习实战 | SKLearn最全应用指南

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 作者&#xff1a;韩信子ShowMeAI 教程地址&#xff1a;http://www.showmeai.tech/tutorials/41 本文地址&#xff1a;http…

Scheme语言入门

2019独角兽企业重金招聘Python工程师标准>>> Scheme语言入门 最早听说 LISP&#xff0c;是 Stallman 的 GNU Emacs 中将 LISP 作为嵌入语言&#xff0c;定制和增强 Emacs。GNU Emacs 是一个文本编辑器&#xff0c;文本就是一种符号&#xff0c;而 Lisp 正好就是针对…

如何将docker 镜像上传到docker hub仓库

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 如何将docker 镜像上传到docker hub仓库 目录* 如何将docker 镜像上传到docker hub仓库 背景 1.注册docker hub账号 2.…

ThinkPHP框架 _ 学习3

【路由解析】 通过url地址get参数找到指定的控制器&#xff0c;并进行对应方法调用请求 http://网址/index.php?m模块名称&c控制器&a方法 以上url地址信息代码不够优雅、不安全。 tp框架url地址可以由以下四种 http://网址/index.php?mXX&cXX&aXX 基本get模…

The slave I/O thread stops(equal MySQL server ids)

在学习replication时遇到了如下问题&#xff1a;显然看到Slave_IO_Running 为NO 表示有问题&#xff1b;到日志里查看&#xff0c;错误如下&#xff1a;position 98100121 17:09:03 [ERROR] The slave I/O thread stops because master and slave have equal MySQL server ids;…

pytest配置文件pytest.ini

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 说明&#xff1a; pytest.ini是pytest的全局配置文件&#xff0c;一般放在项目的根目录下是一个固定的文件-pytest.ini可以…

基于积分墙盈利模式的APP架构思考

基于积分墙盈利模式的APP架构思考from: http://kuailiyu.cyzone.cn/article/4156.html个人感言&#xff1a;一款小游戏好不容易辛辛苦苦开发出来&#xff0c;但是在后期如何不注重推荐&#xff0c;其下场可想而知。而个人游戏开发者的产品很难实现应用内付费集成&#xff0c;技…

【死磕NIO】— 探索 SocketChannel 的核心原理

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 大家好&#xff0c;我是大明哥&#xff0c;一个专注于【死磕 Java】系列创作的程序员。 【死磕 Java 】系列为作者「chenssy…

session的存储方式

1、保存在IIS进程中 2、保存在StateServer上 3、保存在SQL Server数据库中 转载于:https://www.cnblogs.com/dashi/archive/2012/10/10/4034799.html

PixiJS - 基于 WebGL 的超快 HTML5 2D 渲染引擎

Pixi.js 是一个开源的HTML5 2D 渲染引擎&#xff0c;使用 WebGL 实现&#xff0c;不支持的浏览器会自动降低到 Canvas 实现。PixiJS 的目标是提供一个快速且轻量级的2D库&#xff0c;并能兼容所有设备。此外&#xff0c;让开发者无需了解WebGL&#xff0c;就可以感受到硬件加速…

腾讯的老照片修复算法,我把它搬到网上,随便玩

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 大家好&#xff0c;之前向大家介绍并跑通了腾讯开源的老照片修复算法&#xff08;AI 黑科技&#xff0c;老照片修复&#xf…

java的事务类型及定义

转载:什么是事务:首先,说说什么事务。我认为事务&#xff0c;就是一组操作数据库的动作集合。事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行&#xff0c;我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行&#x…

驱动开发 环境搭建(VS2008+WDK+DDKWzard)

这篇文章比较适合初学驱动&#xff0c;搭建一个自动化的环境对于开发来说是事半功倍啊&#xff1b; 开发驱动&#xff0c;首先就是搭建开发的环境。既然是开发windows下的驱动程序&#xff0c;那MS的开发工具是一定要的。现在vs都到2010了&#xff0c;所以&#xff0c;也不能总…

戏说领域驱动设计(十八)——内验

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475   验证在我们现实的生活中非常常见&#xff0c;比如您找工作得先整个面试验证你的能力是否靠谱&#xff1b;找对象得先验证…

Annotation版本的HelloWorld

hiberante 的 annotation历史&#xff1a; 在hibernate3以后&#xff0c;开始支持Annotation; 先有hiberante再有JPA&#xff0c;有了JPA标准之后&#xff0c;hibernate写了Annotation来支持JPA&#xff1b;所以 hibernate的annotation是JPA标准之下的&#xff0c;一般都直接用…

如何理解JavaScript中给变量赋值,是引用还是复制

一、JavaScript中值的类型 JavaScript中的值分为2大类&#xff1a;基本类型和引用类型。每种类型下面又分为5种类型。 基本类型&#xff1a; 数字类型&#xff1a;Number&#xff1b;字符串类型&#xff1a;String&#xff1b;布尔类型&#xff1a;Boolean(true和false)&#x…

CommonCollection1反序列化链学习

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 CommonsCollection1 1、前置知识 1.1、反射基础知识 1.1.1、 对象与类的基础知识 类&#xff08;class&#xff09;&am…

性能测试的目的与类型

1.性能测试的目的 (1)评估系统的能力&#xff1a;测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力&#xff0c;并帮助作出决策&#xff1b;(2)寻找系统瓶颈&#xff0c;进行系统调优&#xff1b;(4)检测软件中的问题&#xff1b;(5)验证稳定性、可靠性&#x…

[转]VS2010+MFC解析Excel文件中数据

本文转自&#xff1a;http://www.vcfans.com/2010/08/vs2010-mfc-excel-file-in-the-data-analysis.html 前两天折腾一个小功能&#xff0c;需求是解析Excel中的数据出来。网上一般使用的方案&#xff1a;1. ODBC当数据库来操作。2. 使用第三方的类库3. 使用COM调用Excel.exe中…

MySQL索引机制(详细+原理+解析)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 MySQL索引机制 永远年轻&#xff0c;永远热泪盈眶 一.索引的类型与常见的操作 前缀索引 MySQL 前缀索引能有效减小索引文…