当前位置: 首页 > wzjs >正文

wordpress 自定义类型北京网站营销seo方案

wordpress 自定义类型,北京网站营销seo方案,自己做传奇sf网站,网页设计100个目录 概述 1 GATT 基本概念 1.1 GATT 的介绍 1.2 GATT 的角色 1.3 核心组件 1.4 客户端操作 2 bt_gatt_discover函数的功能和应用 2.1 函数介绍 2.1 发现类型(Discover Type) 3 典型使用流程 3.1 服务发现示例 3.2 级联发现模式 3.3 按UUID过…

目录

概述

1 GATT 基本概念

1.1 GATT 的介绍

1.2 GATT 的角色

 1.3 核心组件

1.4 客户端操作

2  bt_gatt_discover函数的功能和应用

2.1 函数介绍

 2.1 发现类型(Discover Type)

3 典型使用流程

3.1 服务发现示例

3.2 级联发现模式

 3.3 按UUID过滤发现

 3.4 发现描述符

4 错误处理 

4.1 常见错误码

4.2 错误处理示例

5 性能优化建议

6 资源管理注意事项

6.1 参数生命周期

6.2 取消发现


概述

本文介绍了蓝牙低功耗(BLE)中的GATT协议及其核心功能。GATT定义了BLE设备通过服务和特征交换数据的标准框架,包含服务器和客户端两种角色。文章详细解析了GATT的核心组件(服务、特性、描述符)及其层级结构,并以Zephyr协议栈中的bt_gatt_discover函数为例,说明其参数配置、发现类型和使用流程,包括服务发现、级联发现、UUID过滤等典型应用场景。最后还列举了常见错误码及处理方法,为BLE应用的开发提供了实用指导。

1 GATT 基本概念

1.1 GATT 的介绍

GATT (Generic Attribute Profile) 是 Bluetooth Low Energy (BLE) 的核心协议,定义了 数据通信的标准框架,使BLE设备能够通过 服务(Services) 和 特征(Characteristics) 交换数据。

1.2 GATT 的角色

角色说明典型设备
GATT 服务器(Server)存储并提供数据(如传感器数据)心率带、温度计
GATT 客户端(Client)读取或写入服务器数据手机、中央设备

 1.3 核心组件

 1)层级结构

GATT Profile
├── Services (服务)
│   ├── Characteristics (特性)
│   │   ├── Value (值)
│   │   ├── Descriptors (描述符)
│   │   │   └── Client Characteristic Configuration (CCC)
│   │   └── Properties (属性)
│   └── Includes (包含服务)
└── Attributes (属性)

2) 关键组件说明

组件说明示例UUID
服务(Service)功能逻辑集合0x180A (设备信息服务)
特性(Characteristic)服务中的数据项0x2A29 (厂商名称)
描述符(Descriptor)特性的元数据0x2902 (CCC描述符)
属性(Attribute)数据库基本单元由协议栈管理

1.4 客户端操作

操作函数(Zephyr示例)说明
发现服务bt_gatt_discover()扫描远程设备的GATT表
读取特征值bt_gatt_read()读取数据(如电池电量)
写入特征值bt_gatt_write()发送命令或配置
启用通知bt_gatt_subscribe()订阅实时数据(如心率)

2  bt_gatt_discover函数的功能和应用

2.1 函数介绍

bt_gatt_discover 是 Zephyr BLE 协议栈中用于发现远程设备 GATT 服务的核心函数,下面我将从多个维度进行详细说明:

1) 函数原型与参数

int bt_gatt_discover(struct bt_conn *conn,struct bt_gatt_discover_params *params
);

2)参数说明:

  • conn:已建立的BLE连接句柄

  • params:发现参数结构体,包含以下关键字段:

struct bt_gatt_discover_params {const struct bt_uuid *uuid;      // 目标UUID(可选过滤条件)uint16_t start_handle;           // 起始属性句柄(通常0x0001)uint16_t end_handle;             // 结束属性句柄(通常0xFFFF)enum bt_gatt_discover_type type; // 发现类型void (*func)(struct bt_conn *conn,const struct bt_gatt_attr *attr,struct bt_gatt_discover_params *params);
};

 2.1 发现类型(Discover Type)

类型枚举值说明对应ATT操作
BT_GATT_DISCOVER_PRIMARY发现主服务ATT Read By Group Type Req
BT_GATT_DISCOVER_SECONDARY发现次要服务ATT Read By Group Type Req
BT_GATT_DISCOVER_INCLUDE发现包含的服务ATT Read By Type Req
BT_GATT_DISCOVER_CHARACTERISTIC发现特性ATT Read By Type Req
BT_GATT_DISCOVER_DESCRIPTOR发现描述符ATT Find Information Req
BT_GATT_DISCOVER_STD_CHAR_DESC发现标准特性描述符ATT Read By Type Req

3 典型使用流程

3.1 服务发现示例

static struct bt_gatt_discover_params discover_params;static void discover_cb(struct bt_conn *conn,const struct bt_gatt_attr *attr,struct bt_gatt_discover_params *params)
{if (!attr) {printk("Discovery complete\n");return;}switch (params->type) {case BT_GATT_DISCOVER_PRIMARY: {struct bt_gatt_service_val *svc = attr->user_data;printk("Service found: start_handle=0x%04X, end_handle=0x%04X\n",attr->handle, svc->end_handle);break;}case BT_GATT_DISCOVER_CHARACTERISTIC: {struct bt_gatt_chrc *chrc = attr->user_data;printk("Characteristic: handle=0x%04X, properties=0x%02X\n",chrc->value_handle, chrc->properties);break;}}
}void start_discovery(struct bt_conn *conn)
{discover_params.uuid = NULL;  // 发现所有主服务discover_params.start_handle = 0x0001;discover_params.end_handle = 0xFFFF;discover_params.type = BT_GATT_DISCOVER_PRIMARY;discover_params.func = discover_cb;int err = bt_gatt_discover(conn, &discover_params);if (err) {printk("Discovery failed to start (err %d)\n", err);}
}

3.2 级联发现模式

static void discover_chars(struct bt_conn *conn, uint16_t start, uint16_t end)
{static struct bt_gatt_discover_params params;params.start_handle = start;params.end_handle = end;params.type = BT_GATT_DISCOVER_CHARACTERISTIC;params.func = discover_cb;bt_gatt_discover(conn, &params);
}static void discover_cb(...)
{if (params->type == BT_GATT_DISCOVER_PRIMARY) {// 发现主服务后继续发现特性struct bt_gatt_service_val *svc = attr->user_data;discover_chars(conn, attr->handle + 1, svc->end_handle);}
}

 3.3 按UUID过滤发现

static struct bt_uuid_16 find_uuid = BT_UUID_INIT_16(0x180F); // 电池服务void find_battery_service(struct bt_conn *conn)
{discover_params.uuid = &find_uuid.uuid;discover_params.type = BT_GATT_DISCOVER_PRIMARY;bt_gatt_discover(conn, &discover_params);
}

 3.4 发现描述符

void discover_descriptors(struct bt_conn *conn, uint16_t start, uint16_t end)
{discover_params.start_handle = start;discover_params.end_handle = end;discover_params.type = BT_GATT_DISCOVER_DESCRIPTOR;bt_gatt_discover(conn, &discover_params);
}

4 错误处理 

4.1 常见错误码

错误码说明
0成功
-ENOTCONN未建立连接
-EINVAL无效参数
-ENOMEM内存不足
-EOPNOTSUPP操作不支持

4.2 错误处理示例

int err = bt_gatt_discover(conn, &params);
if (err) {printk("Error %d during discovery\n", err);switch (err) {case -ENOTCONN:// 处理连接问题break;case -EINVAL:// 检查参数有效性break;}
}

5 性能优化建议

  1. 分阶段发现:先发现服务,再根据需要发现特性和描述符

  2. 缓存发现结果:避免重复发现

  3. 合理设置句柄范围:缩小start_handle/end_handle范围

  4. 使用UUID过滤:减少不必要的发现操作

6 资源管理注意事项

6.1 参数生命周期

// 错误:使用栈变量(函数返回后失效)
void start_temp_discovery(struct bt_conn *conn) {struct bt_gatt_discover_params temp_params = {...};bt_gatt_discover(conn, &temp_params); // 危险!
}// 正确:使用静态或动态分配
static struct bt_gatt_discover_params persistent_params;

6.2 取消发现

void cancel_discovery(struct bt_conn *conn) {bt_gatt_discover_cancel(conn, &discover_params);
}

http://www.dtcms.com/wzjs/291080.html

相关文章:

  • 做b2b网站赚钱百度首页排名优化价格
  • 白银市住房和城乡建设局网站自动app优化最新版
  • 建设电影网站代码2021年新闻摘抄
  • 莆田高端模板建站枫树seo
  • 网站sitemap怎么做北大青鸟
  • 凯里网站设计公司网络营销推广价格
  • 目前做网站框架万能软文范例800字
  • 买了虚拟主机怎么做网站优化关键词技巧
  • 营销网站案例广州seo关键词优化外包
  • 江苏省建设厅新疆办网站地推拉新app推广平台有哪些
  • 网站怎样和首页做链接地址夸克搜索
  • 网站开发选题申请理由黄山seo排名优化技术
  • 手机怎样做网站图解买外链网站
  • 免费个人网站建设制作代码qq刷赞网站推广全网
  • 成都手机号码网站建设国外免费网站服务器
  • 做网站不切片可以吗网站搭建教程
  • 网站开启gzip压缩推广赚钱平台
  • 网站建设手稿温州seo推广外包
  • 邢台网站百度关键词搜索怎么弄
  • 网站建设栏目层级百度怎么推广广告
  • 网站更换空间教程中国站长之家官网
  • 石家庄网络营销余姚seo智能优化
  • 网站排名优化首页如何制作网页广告
  • 沧州市住房和城乡建设局网站百度精准引流推广
  • 小程序导航网站开发百度推广客服工作怎么样
  • 汽车网站大全汽车网怎么建网站赚钱
  • 我们为什么选择做电子商务网站百度在线问答
  • 万维网官方网站百度公司招聘官网
  • 域名代理商网站网络销售工作靠谱吗
  • 网站怎么做的防采集网络查询网站