一个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;

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

  1. 【组合数学】递推方程 ( 递推方程解与特征根之间的关系定理 | 递推方程解的线性性质定理 | 递推方程解的形式 )

    文章目录 一.递推方程解与特征根之间的关系定理 二.递推方程解的线性性质定理 三.递推方程解的形式 一.递推方程解与特征根之间的关系定理 特征根 与 递推方程的解 之间是存在关系的 , 如果知道了这个 ...

  2. WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系

    WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系: 1.Canvas/WrapPanel控件: 其子控件的HorizontalAlign ...

  3. fastJson、JackJson以及Gson序列化对象与get、set以及对象属性之间的关系

    众所周知,平时开发过程中将对象序列化成json字符串常用的工具类一般就三种:fastJson.Gson.Jackjson,但是三种工具类在将对象进行序列化时与对象的get.set.对象属性之间的关系你 ...

  4. UIView 的 alpha、hidden 和 opaque 属性之间的关系和区别

                     UIView 的 alpha.hidden 和 opaque 属性之间的关系和区别 UIView的这几个属性让我困惑了好一阵子,通过翻看官方文档和stackoverf ...

  5. 初学SpringCloud:探讨一下为什么要使用微服务?,为什么要使用服务注册中心?怎样理解服务注册中心,服务提供者,服务调用者三者之间的关系?

    目录 1.本篇博客的背景 2.为什么要使用微服务? 3.为什么要使用服务注册中心 4.怎样理解服务注册中心,服务提供者,服务调用者三者之间的关系? 1.本篇博客的背景 我目前正在学习微服务的一些知识, ...

  6. CSS定位布局display/float/position属性之间的关系/区别和如何使用取值行为机制

    float: left|right; 可以自动排列自动折行, 但需要clear来配合清除浮动; display: inline-block; 有些时候可以替代float实现相同的效果. positio ...

  7. python中类的属性一般来说_python中实例属性和类属性之间的关系

    匿名用户 1级 2018-06-25 回答 一般来说,在Python中,类实例属性的访问规则算是比较直观的. 但是,仍然存在一些不是很直观的地方,特别是对C++和Java程序员来说,更是如此. 在这里 ...

  8. python之---子类父类属性之间的关系

    class P(object):def __init__(self):self.value = 0self.x = 1000def get(self):print(self.value)print(s ...

  9. 欠阻尼二阶系统特征参量之间的关系

最新文章

  1. 【廖雪峰Python学习笔记】字符串与编码
  2. 交叉熵损失函数数学推导
  3. 2021年就业力排名TOP10的英国大学
  4. 解析针对 HTTP/2 协议的不同步攻击
  5. ddd模型的pom版本怎么管理_DDD 中的那些模式 — CQRS
  6. w25n01g 代码_W25N01GV 驱动
  7. Spring自定义命名空间
  8. mod_python模块安装
  9. redis设置密码(redis-cli)
  10. Oracle——集合运算
  11. iOS 获取设备唯一标示符的方法[链接文章]
  12. [设计素材]你也在找CTBiaoSongSJ吗?我这里有耶!
  13. MATLAB中的pause用法,pause使用方法 C语言 pause()函数问题
  14. SqlServer配置身份验证登录教程
  15. AG7120与AG7220做HDMI信号延长放大器驱动方案讲解|AG7120与AG7220设计HDMI信号延长放大器电路参考
  16. 把list集合转换为JSON
  17. ksm页面合并的并发处理
  18. 【我的DOT语言学习之旅】 学习DOT语言并使用Graphviz软件来打开.dot文件
  19. 阿里云服务器自动备份
  20. 3400位造型师,80位大数据科学家,这家美国女装公司这么做个性化定制

热门文章

  1. 使用Docker镜像和仓库
  2. 让您变的更智慧 秘笈145条(上)
  3. Ext JS 4.1 RC1发布
  4. 新增两款Skin(clover与Valentine)
  5. php表格tr,jQuery+ajax实现动态添加表格tr td功能示例
  6. leetcode 81. 搜索旋转排序数组 II(二分查找)
  7. leetcode 567. 字符串的排列(滑动窗口)
  8. delphi5开发人员指南_非设计人员的网页设计开发人员指南
  9. seaborn线性关系数据可视化:时间线图|热图|结构化图表可视化
  10. 【炼数成金 NOSQL引航 三】 Redis使用场景与案例分析