【蓝牙协议栈】【BLE】精讲引用(包含)服务(Included service)

1.欢迎大家关注和订阅匠心之作【精讲蓝牙协议栈】【精讲BLE协议栈】【Android Bluetooth Stack】专栏会持续更新中.....敬请期待!

2.  精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论

此文将会继续优化完善...

目录

前言

1.服务类型定义

1.1 首要服务

1.2 次要服务

2. included service概念

3. 引用服务UUID详解

4. included service 作用和好处

5. included service 实际应用


前言

       在蓝牙技术中,`Included Service` 是指一个服务内包含的其他服务。这种结构化的服务关系使得设备可以将相关的服务进行组织和管理,从而简化复杂设备或应用程序中的服务表示。例如,在一个心率监测设备中,主要服务可能是“心率测量服务”,而它可能包括一个“电池服务”,用于报告设备的电量状态。

1.服务类型定义

       我们要明确一个概念,服务的类型只有2种,即首要服务和次要服务,引用(包含)服务只是一种方法,而不是一种服务类型,所以没有开启引用服务这个说法,这个要牢记!

1.1 首要服务

   Primary Service :拥有基本功能的服务,可被其他服务包含,可以通过Primary Service Discovery 过程来发现。


1.2 次要服务

    Secondary Service:仅用来被 Primary/0ther Secondary Service、高层协议引用的服务。

Notes:

1. 次要服务不需要被其他设备知道,只能被首要服务引用,只能被首要服务的<Include>进行包含引用。

2. 次要服务如果不被引用,那它的服务功能就是无法被使用的,其是被隐藏的,不会被公开。

2. included service概念

      在蓝牙低功耗协议规范中,`Included Service` 通过 `Include` 属性定义。它定义了一个服务中包含的其他服务的句柄和类型。这使得客户端设备能够理解和访问这些嵌套的服务结构。一个 Included Service 是一种引用已存在服务的方法,具体办法为在服务定义的开始加上 Included Service 的引用,这样整个 Included Service 定义成为新服务定义的一部分,Included Service完全继承了其引用服务的所有功能和权限,包括 读、写、通知、指示等,类比理解Python通过import 某一个模块或函数 as 新函数(也有人类比理解Included Service: 其实是一个服务的子服务,被包含在父服务内。`Included Service` 可以用来共享和重用服务之间的功能,这都是为了更好的记忆啦)。

       引用定义(Include Definitions)就相当于在写程序是要用别的文件中的函数, 可以通过#include"XXXXX.h"进行别的头文件的包含。同样当一个服务需要需要 用到别的服务里面的某些值的时候,也可以通过«Include»来完成。然而, «Include»一定是在服务声明之后的,那么服务声明有两种方式,首要服务可以引用另一个首要服务。首要服务也可以引用一个次要服务,从而使用次要服务公开的行为。次要服务可以引用一个次要服务或者首要服务。不过次要服务引用次 要服务情况很少,次要引用主要服务就更少了。那么包含服务«Include»的声明格式是怎么样的呢?如图所示:

     从图中可以知道包含服务«Include»本身的 UUID=0x2802。它的属性值共有 3 个 部分组成:需要包含的服务的句柄、组结束的句柄和需要包含的服务的 UUID。 当然最后一个参数并不是一定有的,当 UUID 为 128bits 时,服务 UUID 将不 会作为声明值的一部分。

    红色部分为一个服务必须包含的部分,蓝色为可选择的部分。

    总结

     include 是service 中可选择的部分,它只是一种用来引用已存在服务的方法,公开设备功能的服务成为首要服务。

3. 引用服务UUID详解

      后台粉丝私信我,BLE(Bluetooth Low Energy)协议中的 "Include" 属性(包含服务项)是不是使用0x2803。但实际上0x2803 是 "Characteristic Declaration" 的 UUID。BLE 中有几个特定的 UUID,用于定义不同的服务和特征声明:

Primary Service (0x2800): 定义主要服务。
Secondary Service (0x2801): 定义次要服务。
Include (0x2802): 包含另一个服务的声明,通常用于包含服务的指针。
Characteristic Declaration (0x2803): 特征声明,描述一个特征的属性。

     因此,如果你要定义一个包含服务项,应该使用 UUID 0x2802。服务和特征都是基于ATT架构的,这里给大家提供一个思维导图,便于大家理解!

例如,如果你要在 GATT(通用属性配置文件)中包含一个服务,可以这样定义: 

Service UUID: 0x180A (Device Information Service)
Include UUID: 0x2802 (Include Declaration)
Characteristic UUID: 0x2A29 (Manufacturer Name String)

示例 GATT 结构:

Primary Service: UUID = 0x180A (Device Information Service)
  Include: UUID = 0x2802 (points to another service)
  Characteristic: UUID = 0x2A29 (Manufacturer Name String)
    Properties: Read
    Value: "Manufacturer Name"

   这个结构中,包含服务的 UUID 是 0x2802,而特征声明的 UUID 是 0x2803。

4. included service 作用和好处


模块化设计: `Included Service` 允许开发者将服务分解为更小的模块,这样可以更灵活地重用和组合不同的服务。

简化设备交互: 通过包含服务,一个设备可以简化其交互结构。例如,某个主服务可以包括多个次服务,从而使得设备能够以一种更有组织的方式提供其所有功能。

提高效率: 如果多个服务有共同的特性或功能,可以通过包含服务的方式来避免重复定义,从而节省资源。

 

5. included service 实际应用


      假设你有一个蓝牙设备,它是一个多功能健康监测设备。它可以监测心率、温度和电池状态。为了简化设计,你可以这样组织:

主服: 健康监测服务

 Included Service: 心率服务
 Included Service: 温度服务
 Included Service: 电池服务

       这种结构使得设备可以高效地提供多个相关功能,而不会使服务设计变得过于复杂。

       总体而言,`Included Service` 是一种强大的工具,用于组织和优化蓝牙服务,使得设备设计更具模块化和可扩展性。 

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风云说通信

支持小编为您创造更多干货,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值