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

news2024/9/21 4:22:10

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` 是一种强大的工具,用于组织和优化蓝牙服务,使得设备设计更具模块化和可扩展性。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2054847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【安全靶场】-DC-8

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 目标&#xff1a;192.168.216.150 一、收集信息 1.端口扫描 nmap -T4 -A 192.168.216.150 -p- 看到80端…

【comfyui 】comfyui mac配置教程

comfyui mac配置教程 1. 安装工程依赖与环境配置2. 安装Comfyui3. Comfyui模型下载与运行 1. 安装工程依赖与环境配置 首先&#xff0c;我们找到Mac电脑的终端并打开&#xff0c;我们复制下列代码并粘贴到终端&#xff0c;然后回车&#xff0c;即可开始安装Xcode工具。 xcode…

C++(week17): C++提高:(七)workflow

文章目录 一、Http协议二、Nginx1.概念2.nginx的安装和部署(1)安装nginx(2)使用nginx服务器部署静态资源 3.HTTP服务器架构(1)基于进程、基于线程&#xff1a;APache(2)事件驱动模型&#xff1a;Nginx(3)反向代理(4)负载均衡 三、workflow异步事件引擎 (异步回调模型)1.服务器底…

day26-测试之接口测试postma的请求前置脚本、关联、测试报告

目录 一、请求前置脚本 1.1.概念 1.2.步骤 1.3.代码 1.4.工作原理 二、关联 2.1.应用场景 2.2.实现步骤 2.3.代码 三、测试报告 3.1.安装newman 3.2.命令说明 一、请求前置脚本 1.1.概念 1).书写在”pre-request”标签中 2).postman在http请求发送之前&#xff0c;会自动执行…

easyexcel--多sheet页导入导出

多sheet页导出 核心代码就是下图里面的&#xff0c;使用EasyExcel.writeSheet创建一个sheet,然后用excelWriter写入就行了&#xff0c;很简单 GetMapping("downloadMultiSheet")public void downloadMultiSheet(HttpServletResponse response) throws IOException {…

Linux shell编程学习笔记73:sed命令——沧海横流任我行(上)

0 前言 在大数据时代&#xff0c;我们要面对大量数据&#xff0c;有时需要对数据进行替换、删除、新增、选取等特定工作。 在Linux中提供很多数据处理命令&#xff0c;如果我们要以行为单位进行数据处理&#xff0c;可以使用sed。 1 sed 的帮助信息&#xff0c;功能&#xff…

Golang | Leetcode Golang题解之第352题将数据流变为多个不相交区间

题目&#xff1a; 题解&#xff1a; type SummaryRanges struct {*redblacktree.Tree }func Constructor() SummaryRanges {return SummaryRanges{redblacktree.NewWithIntComparator()} }func (ranges *SummaryRanges) AddNum(val int) {// 找到 l0 最大的且满足 l0 < val…

opencv-python图像增强十一:文档阴影去除

文章目录 一&#xff0c;简介二&#xff0c;方案简述三&#xff0c;算法实现流程&#xff1a;3.1 闭运算提取背景&#xff1a;3.2 背景减除获取文字 四&#xff0c;整体代码&#xff1a;五&#xff0c;效果: 一&#xff0c;简介 图像阴影是光学现象的一种&#xff0c;当物体遮…

从文本到向量:Weaviate在RAG中的应用案例

探索向量数据库在RAG中的应用 在自然语言处理&#xff08;NLP&#xff09;的领域中&#xff0c;向量数据库如Weaviate正变得越来越流行&#xff0c;因为它们为文本数据的管理和检索提供了强大的支持。特别是&#xff0c;它们在实现Retrieval-Augmented Generation&#xff08;R…

无人机适航证取证技术详解

随着无人机技术的飞速发展和广泛应用&#xff0c;无人机的安全性与适航性成为了全球航空领域关注的焦点。无人机适航证作为衡量无人机是否符合安全飞行标准的重要凭证&#xff0c;其取证过程涉及技术、法规、测试等多个方面。本文旨在深入解析无人机适航证取证技术&#xff0c;…

算法的学习笔记—顺时针打印矩阵(牛客JZ29)

&#x1f600;前言 在算法的学习过程中&#xff0c;二维数组的操作是一个非常重要的内容&#xff0c;其中顺时针打印矩阵是一个经典的问题。这个问题不仅考察我们对矩阵的理解&#xff0c;还要求我们具备较强的逻辑思维能力。本文将详细解析如何通过Java代码来实现这一功能。 &…

SpringBoot响应式编程(3)R2DBC

一、概述 1.1简介 R2DBC基于Reactive Streams反应流规范&#xff0c;它是一个开放的规范&#xff0c;为驱动程序供应商和使用方提供接口&#xff08;r2dbc-spi&#xff09;&#xff0c;与JDBC的阻塞特性不同&#xff0c;它提供了完全反应式的非阻塞API与关系型数据库交互。 …

c++进阶——继承的定义,复杂的菱形继承及菱形虚拟继承

目录 前言&#xff1a; 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6. 继承与静态成员 7.复杂的菱形继承及菱…

AIoT智能物联网平台定义

随着科技的飞速发展&#xff0c;我们正步入一个由智能设备和互联网络构成的新时代。AIoT&#xff0c;即人工智能物联网&#xff08;Artificial Intelligence of Things&#xff09;&#xff0c;是这个时代的标志性产物。本文旨在探讨AIoT智能物联网平台的定义、核心组件、应用场…

wordpress站群搭建6外部库的引入和测试

wordpress站群搭建6wordpress外部库的引入和测试 本次目标我们主要讲解引入wordpress外部库并测试。 我们将一些外部库和工具包放入到pkg项目&#xff0c;方便其他项目引用。 1.安装go-wordpress库 进入到pkg项目 go get github.com/robbiet480/go-wordpress2.编写工具类 …

22 交换机双工模式

交换机双工模式 一、双工模式 &#xff08;一&#xff09;单工、半双工、全双 ​ 单工&#xff1a; ​ 只有一个信道&#xff0c;传输方向只能是单向的 ​ 半双工&#xff1a; ​ 只有一个信道&#xff0c;在同一时刻&#xff0c;只能是单向传输 ​ 全双工&#xff1a; …

【JavaEE】深入MyBatis:动态SQL操作与实战项目实现指南

目录 MyBatis的进阶操作动态SQL<if>标签<trim>标签<where>标签<set>标签<foreach>标签<include>标签 练习表白墙数据准备引⼊MyBatis 和 MySQL驱动依赖配置MySQL账号密码编写后端代码测试 图书管理系统数据库表设计引⼊MyBatis 和MySQL 驱…

阿里QuickBI实战

目录 引言数据采集、数据治理、数据分析举例资金在经济社会的流通性 概述数据分析的常见问题数据分析的痛点 QuickBI 产品架构图主功能链路数据建模与数据分析的关系使用场景1、搭建报表看板&#xff1a;仪表盘2、中国式报表工具&#xff1a;电子表格3、企业CXO驾驶舱&#xff…

网络工程3(子网通信,为什么要使用mac和ip)

文章目录 一. 子网如何通讯1. 子网内部通信2. 子网外部通信 二. 交换机和路由器的连接三. 为什么不只使用mac地址或ip地址进行网络通信1. 首先要明确的是&#xff0c;不管是只用mac或只用ip通信 四. 子网设备如何获得ip五. 不同网段的主机无法直接通信的原因 一. 子网如何通讯 …

GAMES101——作业7 路径追踪 (含提高:多线程,微平面理论)

任务 castRay(const Ray ray, int depth)in Scene.cpp: 在其中实现 Path Tracing 算法 可能用到的函数有&#xff1a; intersect(const Ray ray)in Scene.cpp: 求一条光线与场景的交点 sampleLight(Intersection pos, float pdf) in Scene.cpp: 在场景的所有光源上按面积…