gattAttribute_t 含义 中文解释
1、 gattAttribute_t 是一个结构体数据类型,里面存放了各种类型的数据。 现在 看看 TI 是怎么描述的,如下:
/**
* @brief GATT Attribute format.
*
* @note
* The list must start with a Service attribute followed by
* all attributes associated with this Service attribute.
*/
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;

表1-0
上面 解释的 第一个 成员可能 不是很详细,我们 来看下 源码:
/// @brief GATT Attribute Type format.
typedef struct
{
uint8 len; //!< Length of UUID (2 or 16) 长度是 两个字节 或者 16个字节
const uint8 *uuid; //!< Pointer to UUID 指向 2个 或者 16个字节 buff 指针
} gattAttrType_t;
gattAttrType_t: Where length can be eitherATT_BT_UUID_SIZE(2 bytes), orATT_UUID_SIZE(16 bytes). The *uuid is a pointer to a
number either reserved by Bluetooth SIG (defined in gatt_uuid.c) or a custom UUID defined in the profile. 总结: 这个成员 实际含义 是 描述 服务的 类型, 服务类型 也是 UUID , 官方蓝牙组织 SIG 规定, UUID 值 0x2800 代表 主服务,UUID 值 0x2803 代表 特征值, 详细看下表

表 1-1
2、TI 在 simple_gatt_profile.c 文件中 利用 这个gattAttribute_t 数据类型 定义了一个 数组 simpleProfileAttrTbl , 这个数组 暂且理解为 存放 我们自定义的 蓝牙服务 以及该服务 拥有 的 特征值 。
/*********************************************************************
* Profile Attributes - Table
*/ static gattAttribute_t simpleProfileAttrTbl[SERVAPP_NUM_ATTR_SUPPORTED];
那 这个 数组 放了 什么 东西 那 , 我 们 来 分析 分析 。
- 这个 数组 的 第一个 元素 如下:(按照 上面 gattAttribute_t 结构体 中文 解释 分析 ,看下面注释)
// Simple Profile Service,1 1
{
{ ATT_BT_UUID_SIZE, primaryServiceUUID }, /* type 值是0x2800,即属性类型是 主服务类型, 更多类型看 上面的 表1-1*/
GATT_PERMIT_READ, /* permissions,权限为可读权限,意思是:允许GATT客户端在设置权限的情况下读取此服务 */
, /* handle 默认为0,因为这个句柄是协议栈自动分配的,不可以自定义,因此默认初始化为0*/
(uint8 *)&simpleProfileService /* pValue: 是一个 gattAttrType_t 类型的值,即 {2,0xFFF0} */
},
总结: 该 元素是 一个 主服务类型, 服务的 UUID 的值 是 0xFFF0 ,该服务 具有 可读权限。
UUID : 具有以下几种含义
- 服务或者特征值的 唯一ID
- 用于 区分 是 服务 还是特征值 还是 …………具体 看 上面的 表 1-1
- 这个数组的 第二个 元素如下:(注:我 的是这个 ,其他的我删除了,同个类型的 没啥 差别)
// Characteristic 5 Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID }, /* type,属性类型 是特征值类型,详看 表1-1 */
GATT_PERMIT_READ, /* 可读 */
,
&simpleProfileChar5Props /* 这个 查看定义是 uint8 simpleProfileChar5Props = GATT_PROP_WRITE; 应该理解为 特征值 具有可写的属性 */
},
总结 : 这里 有 歧义, GATT_PERMIT_READ 这个描述的 是 数组 这个元素 具有的 权限 是 可读 或者 可写(详见表1-0), simpleProfileChar5Props 这个变量 描述 的 是 该数组元素 代表的特征值 具有 可写 的属性 (详见表1-2) ,一个是权限 一个 是 属性。
这个 元素 可以理解为 : 描述 特征值 uuid 为 0XFFF1 具有 写入的属性,即 手机APP 可以 往这个 特征值写入数据。

表 1-2
- 该数组 第三个 元素 是 如
// Characteristic Value 5
{
{ ATT_BT_UUID_SIZE, simpleProfilechar5UUID }, /* 该类型设置为自定义的simpleProfilechar1 UUID(0xFFF5)。 */
GATT_PERMIT_WRITE, /* 属性表中特征值的属性必须与特征值声明中的属性匹配,这里的意思是: 改特征值 具有 可以 写的权限 , 要和 第二元素 中 的uint8 simpleProfileChar5Props = GATT_PROP_WRITE 可写的 属性 必须保持一致,否则就会造成系统混乱 */
,
simpleProfileChar5 },
总结 :
/* 属性表中特征值的属性必须与特征值声明中的属性匹配,这里的意思是: 改特征值 具有 可以 写的权限 , 要和 第二元素 中 的uint8 simpleProfileChar5Props = GATT_PROP_WRITE 可写的 属性 必须保持一致,否则就会造成系统混乱 */
gattAttribute_t 含义 中文解释的更多相关文章
- SkyWalking6.2.0版本UI参数、告警参数、指标含义中文解释
一.告警规则相关参数 二.SkyWalking UI相关参数CPM:每分钟请求调用的次数SLA: 服务等级协议(简称:SLA,全称:service level agreement).是在一定开销下为保 ...
- Linux常用命令英文全称与中文解释Linux系统
Linux常用命令英文全称与中文解释Linux系统(转) Linux常用命令英文全称与中文解释Linux系统 man: Manual 意思是手册,可以用这个命令查询其他命令的用法. pwd:Pri ...
- LoadRunner函数大全之中文解释
LoadRunner函数大全之中文解释
- LoadRunner 函数大全之中文解释
LoadRunner 函数大全之中文解释 // sapgui_table_set_column_selected 模拟用户 // 单击表中的列标题. int sapgui_table_set_colu ...
- Linux常用命令英文全称与中文解释 (pwd、su、df、du等)
https://blog.csdn.net/qq_40334837/article/details/83819735 Linux常用命令英文全称与中文解释 apt: Advanced Packagin ...
- 自然语言分析工具Hanlp依存文法分析python使用总结(附带依存关系英文简写的中文解释)
最近在做一个应用依存文法分析来提取文本中各种关系的词语的任务.例如:text=‘新中国在马克思的思想和恩格斯的理论阔步向前’: 我需要提取这个text中的并列的两个关系,从文中分析可知,“马克思的思想 ...
- mongodb 学习之——mongod --help 中文解释
中文解释如下: -------------------------------------------------------------------------------- --quiet # 安 ...
- Redis命令大全&中文解释&在线测试命令工具&在线中文文档
在线测试命令地址:http://try.redis.io/ 官方文档:http://redis.io/commands http://redis.io/documentation Redis 命令参考 ...
- CC_UNUSED_PARAM 宏含义的解释
#define CC_UNUSED_PARAM(unusedparam) (void)unusedparam 这个宏完全没有执行任何命令,这样写的原因主要是历史遗留原因,ojb-c不存在纯虚函数并且传 ...
随机推荐
- ajax 异步请求返回只刷新一次页面
success:function (res) { if (res == "ok") { // $('#dg').bootstrapTable(('refresh')); if (l ...
- runloop timer
RunLoop这个东西,其实我们一直在用,但一直没有很好地理解它,或者甚至没有知道它的存在.RunLoop可以说是每个线程都有的一个对象,是用来接受事件和分配任务的loop.永远不要手动创建一个run ...
- linux_kernel_uaf漏洞利用实战
前言 好像是国赛的一道题.一个 linux 的内核题目.漏洞比较简单,可以作为入门. 题目链接: 在这里 正文 题目给了3个文件 分配是 根文件系统 , 内核镜像, 启动脚本.解压运行 boot.sh ...
- 网络 Internet 的发展
Internet源于美国军方,那时制定了TCP/IP协议. 互联网的典型应用有:www,FTP,E-mail. WWW:World Wide Web,简称Web,又称全球网.万维网等. 网页,c/s架 ...
- java 中解析json步骤
一. JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. Json建构于两种结构: 1.“名称/值”对的集合(A collection ...
- Linux安装Tomcat服务器发布项目教程
前面小Alan跟大家聊了在Linux服务器上jdk运行环境的安装以及redis非关系型数据库的安装,今天继续跟大家聊聊Tomcat的安装,以及将我们的项目发布上去并成功的访问. 第一步:将tomcat ...
- DELETE语句总结
一.基本语句 1.SQL DELETE 语法 DELETE FROM table_name WHERE condition; 请注意 删除表格中的记录时要小心!注意SQL DELETE 语句中的 WH ...
- Oracle EBS 更改物料说明后,在MTL_SYSTEM_ITEMS_B表中无变化
需要再中文和英文环境同时修改: 程序里,可以通过初始session语言环境来解决.
- C#.NET里面抽象类,接口,虚方法
1抽象类 (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明 ...
- 阿里云CentOS 7服务器挂载数据盘
本次使用的是centOS 7.4 64位操作系统 第一步:查看磁盘情况 我们发现,我总共有三个磁盘,分别为/dev/vda(100G)./dev/vdb(200G)./dev/vdc(100G),而被 ...