Bluez 的一些概念

news2025/2/12 23:49:43

目录

1,Linux 和蓝牙架构

2,D-Bus 相关概念

2.1 Message Buses

 2.2 Client, Server and Connections

2.3 Object, Interface, Methods, Signals and Properties

2.3.1 Object, Interface, Methods

2.3.2 Signal

2.3.3 Properties

3,Standard Interface


1,Linux 和蓝牙架构

        蓝牙低功耗堆栈分为两个主要的架构块,称为主机和控制器。主机和控制器部分的堆叠和层分布为如下图所示:

 下图描述了使用z时Linux上蓝牙的体系结构。正如我们所看到的,Bluez实现蓝牙LE栈的主机层(Host),控制器通常驻留在芯片, 是计算机的一个组成部分,就像树莓派这样的设备一样或者在外围设备(如USB蓝牙加密狗)中实现。在 Bluez 文档和代码中,蓝牙控制器被称为适配器。

主机上的bluez和底层蓝牙栈之间的通信,是通过称为主机控制器接口的标准逻辑接口进行的,简称HCI(Host Controller Interface)。支持HCI并允许将HCI命令从主机传递到控制器,并将HCI事件从控制器传递到主机,这是标准HCI传输之一,也在核心规范中定义。

2,D-Bus 相关概念

2.1 Message Buses

D-Bus进程间通信以消息总线为中心。消息由一个进程放置在总线上,并沿着总线传输,以传递到连接到同一总线的一个或多个其他进程。Bluez使用D-Bus系统总线传递的消息:

 2.2 Client, Server and Connections

D-Bus 通信需要进程连接到消息总线,连接到总线的进程称为客户端。监听并接受连接的进程称为服务器。当一个应用程序连接到总线时,它将被分配一个唯一的连接名称,该名称以冒号开头,例如 :1.16

2.3 Object, Interface, Methods, Signals and Properties

2.3.1 Object, Interface, Methods

对象实现由一系列一个或多个函数或方法组成的接口,接口具有类似于域名的点分隔名称,例如,org.freedesktop.DBus.Introspectable and org.bluez.GattManager1.

应用程序可以通过发送特殊消息来调用与D-Bus连接的另一个应用程序所拥有的对象的方法。消息沿着总线并通过连接传递到拥有目标对象的应用程序。对象必须向D-Bus守护进程注册,以允许其他应用程序调用它们的方法。每个对象都有一个唯一的标识符,该标识符采用路径的形式。例如,表示蓝牙设备的对象的路径标识符可能为/org/bluez/hci0/dev_4C_D7_64-CD_22_0A

对象及其路径的注册使D-Bus守护进程能够通过适当的连接将寻址到对象标识路径的消息路由到所属应用程序。请注意,路径具有层次结构,路径中较早的部分包含或拥有路径末尾的部分。在我们的示例路径中:

(/org/bluez/hci0/dev_4C_D7_64_CD_22_0A),设备dev_4C_D7_64_CD_22_0A由蓝牙适配器对象拥有,该蓝牙适配器对象是D-Bus守护进程通过路径标识符/org/bluez/hci0/已知的。

2.3.2 Signal

一个Object 的 Interface 可以发出 Signal。Signal 是对象可以在未经提示的情况下发出的消息,可以将其比作事件。应用程序可以订阅或注册感兴趣的Signal。一个给定的应用程序可以注册多个信号,信号的副本将被传递到每个注册的应用程序(如上图2所示)。一些信号被传送到连接到总线的所有应用程序。

2.3.3 Properties

对象可以具有 Properties。Properties是一种属性,其值可以使用get操作检索或使用set操作更改。Properties 由名称引用,并且可以通过对象实现的接口进行访问。

bluetoothd

应用程序可以注册一个可以用来寻址它们的名称,而不是使用系统分配的连接名称(如:1.16)。Bluetooth 守护进程 bluetoothd 是一个D-Bus服务器,拥有众所周知的名称 org.bluez,而蓝牙meshd守护程序拥有名称org.bluez.mesh。

3,Standard Interface

已经存在许多标准接口,并且在使用BlueZ时经常使用这些接口。例如 org.freedesktop.DBus.ObjectManager

此接口定义信号 InterfacesAdded 和 InterfaceRemoved。当BlueZ发现新设备时,会发出InterfacesAdded 信号,当设备不再被BlueZ感知到时,会发出 InterfacesRemoved 信号。它还定义了方法 GetManagedObjects,这允许应用程序发现D-Bus 总线上连接进程所拥有的所有对象。

org.freedesktop.DBus.Properties,该接口定义了允许检索或设置属性值的方法,以及当对象的属性更改时发出的信号 PropertiesChanged,例如,BlueZ设备对象(形式上是实现org.BlueZ.Device1接口的D-Bus对象)实现Properties接口,并在信号强度(RSSI)等属性发生变化时发出PropertiesChanged信号。

        

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

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

相关文章

光速上手matlab入门级学习必看matlab超长细练习matlab,福利分享Matlab全套资料

福利:末文有Matlab全套哦 实践是检验知识和技能的唯一标准。只有将所学的知识应用到实际问题中,并通过实践不断地调整和完善,才能真正掌握和理解这些知识。 在 MATLAB 中,可以通过编写代码、运行程序、调试错误等方式进行实践。…

大语言模型高质量提示词最佳实践

大语言模型高质量提示词最佳实践 一、提供更清晰的指令 使用大语言模型(类似ChatGPT、Bard等工具)的过程中,一个关键的技巧是能够给出清晰和明确的指令。大语言模型的运作方式是根据提供的输入,预测接下来应该生成什么内容。因此…

Mysql经典例题练习与总结

一、创建数据表并插入数据 -- 1、学生表 -- Student(s_id,s_name,s_birth,s_sex) :学生编号、姓名、年月、性别 CREATE TABLE IF NOT EXISTS Student (s_id VARCHAR (20),s_name VARCHAR (20) NOT NULL DEFAULT ,s_birth VARCHAR (20) NOT NULL DEFAULT ,s_sex VAR…

使用一键安装工具快速搭建 ESP-IDF 开发环境 (Windows)

我们收到用户对 ESP-IDF SDK 软件开发环境感到搭建难、门槛高的反馈。为解决用户在此方面的问题。为此,我们推出本期教程介绍在 Windows 操作系统下使用一键安装工具快速搭建 ESP-IDF 开发环境。 您可以观看下面的教程视频,也可以阅读接下来本篇的图文教…

动态规划dp —— 25.单词拆分

1.状态表示 是什么?dp表中里的值所表示的含义就是状态表示 dp[i]表示:[0,i]区间内的字符串,能否被字典中的单词拼接而成(存ture或false) 2.状态转移方程 dp[i] 等于什么 根据最后一个位置,来划分问题&a…

easyPOI导出多Sheet

easyPOI导出多Sheet 声明,本文基于JAVA操作Excel(POI、easyPOI、easyExcel_我认不到你的博客-CSDN博客讲解,需要基础的可以看这篇,特别是Excel注解 本篇最后有工具类和自定义的注解类,只需要傻瓜式复制粘贴应该就可以用…

与 NGINX 团队直接交流 | 微服务之月火热报名中

原文作者:NGINX 原文链接:与 NGINX 团队直接交流 | 微服务之月火热报名中 转载来源:NGINX 官方网站 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn 又是一个热情似火的六月,一年一度的 Microservices June 微服务之月再…

6.12 共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存)

目录 system V IPC 共享内存 共享内存使用步骤 system V IPC -key system V IPC -ftok system V IPC -ftok-示例 共享内存创建-shmget 共享内存创建-shmget-示例1 共享内存创建-shmget-示例2 共享内存映射-shmat 共享内存读写 - 示例 共享内存撤销映射 - shmdt 共享…

etcd基本使用

目录 CRUD1、基本的put/get/del2、获取当前所有的key3、获取/删除带有前缀的键 lease使用1、创建lease,续租lease,撤销lease2、将lease attach到key上 watch使用watch、watch_oncereplacedeletewatch_prefix、watch_prefix_oncecancel_watchadd_watch_ca…

抖音整治短剧类小程序内容

我是卢松松,点点上面的头像,欢迎关注我哦! 短剧CPS项目这两年不是挺火的吗,很多草根创业者都在做短剧CPS当副业。 前两天,抖音开放平台团队发布公告: 近期,在微短剧类小程序内容合规排查中&am…

【LeetCode】HOT 100(11)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

工作多年的工作焦虑症-广泛性焦虑症

我相信工作多年的人都会有自己的工作焦虑症的情况,而我们普通人最多的最容易的也就是广泛性焦虑症,广泛性焦虑障碍(GAD)是一种常见的慢性焦虑障碍,患者长时间处于一种担心、紧张、无法放松的状态。它会让一种广泛的担心…

采购协同:企业数字化转型的关键环节

企业数字化转型已成为当今市场的主流趋势,而采购协同作为企业数字化转型的关键环节,对于企业的成本控制、供应链管理等方面都有着至关重要的影响。本文将围绕采购协同的重要性、数字化转型的方法和优势、以及实现采购协同的关键环节展开讨论。 一、采购协…

Java并发容器 并发队列

并发容器概览 ConcurrentHashMap : 线程安全的HashMap CopyOnWriteArrayList: 线程安全的List BlockingQueue:这是一个接口,表示阻塞队列,非常适合用于作为数据共享的通道 ConcurrentLinkedQueue : 高效的非阻塞并发队列,使用链表实现。可…

目标检测数据集---道路破损缺陷数据集

✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的数据集会在该…

Java list安全删除元素详解

背景 前一段时间被问到了关于 List 集合的安全删除元素问题。一时间没反应过来这问题问的是什么,安全体现在什么地方,线程安全?线程安全可以保证元素粒度的数据唯一吗?删除是指什么,list.remove()? 带着这…

5外包功能测试做完,人废了一半····

先说一下自己的情况。大专生,18年通过校招进入湖南某软件公司,干了接近5年的点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的功能测试…

剑指offer35 复杂链表的复制

复杂链表的复制 文章目录 复杂链表的复制方法一 回溯哈希表第二种解释 方法二:拼接拆分算法流程 参考文献 本题要求我们对一个复杂链表进行复制。在复杂链表中,每个节点除了有一个next指针指向下一个节点,还有一个random指针指向链表中的任意…

SpringBoot+Vue 车辆充电桩系统

文章目录 1、效果演示效果图技术栈 2、 前言介绍(完整源码请私聊)3、主要技术3.4.1 数据库概念结构设计3.4.2 数据库具体设计 4 系统功能的具体实现4.1 前台功能模块4.1.1 首页功能4.1.2 用户后台管理 4.2 后台功能模块4.2.1 管理员功能4.2.2 维修员功能…

后端(三):后端实战(表白墙的设计)

上一章结束了 Servlet 的学习,ok,现在我们已经学会了 1 1 了,现在开始我们要学会 百以内的加减乘除法。 本章就做一个最简单的 小小项目:表白墙。 在开始表白墙项目开始之间,我们先提前说好,这里主要跟关…