GATT ServiceGATT 中按功能上下文组织 GATT Characteristic 和 included service 的分组结构,通常对应设备的一项能力或一个业务功能区域。

核心问题

一个设备可能同时暴露电池、设备信息、传感器读数和控制命令。如果所有 characteristic 平铺在一个表里,客户端很难知道哪些数据属于同一功能。GATT Service 提供上下文:在 Battery Service 里,Battery Level 的含义就是电池电量;在另一个 service 里,同一数据类型可能有不同使用规则。

核心机制

Service 本身也是 attribute table 中的一段连续 handle range。服务声明 attribute 常见形式是:

handle:      0x0001
type:        0x2800        # Primary Service
value:       0x180F        # Battery Service UUID
permissions: read-only

0x2800 表示 Primary Service declaration,0x2801 表示 Secondary Service declaration。该 service 的定义从 service declaration 开始,到下一个 service declaration 前结束;其中可以包含 included services、mandatory characteristics 和 optional characteristics。

工程用途

  • 按功能组织 GATT 数据模型。
  • 让客户端先按 service UUID 筛选设备能力。
  • 支撑标准 Bluetooth profile 和自定义 vendor profile。
  • 给 characteristic 的使用规则提供上下文。

边界与常见坑

  • Service 是上下文,不是连接会话:一个 BLE 连接可以访问多个 service。
  • 同一 service UUID 可以有多个实例:客户端不能只假设一个 handle range。
  • 广播中的 service UUID 不是完整数据库:广播可能只放部分 UUID,连接后仍要做 discovery。
  • Primary/Secondary 不是重要/不重要:primary 表示独立暴露的主要服务,secondary 常用于被其他服务引用。

相关术语

外部参考