1.Linux蓝牙基础

蓝牙分类

原文地址
https://note.youdao.com/s/WzgVsHTx


通常我们所说的蓝牙分为两种:

  • 经典蓝牙模式(代码里经常看见br/edr)
  • 低功耗模式(代码里le表示)

Bluetooth Profile

  • Profile(翻译轮廓)这个是蓝牙的核心规范
  • 描述了远程设备的接口,设备数据的状态,其它一些能力。
  • Profile主要分为两种GATT(Genric Attribute Profile)和GAP(Generic Access Profile)
  • GATT定义数据属性特征的规范
  • GAP定义数据访问的规范

GATT

  • GATT定义数据的规范,例如一个物体的形状 颜色,具有哪些操作等
  • 这种规范通过(Service Characteristics and Descriptors)服务,特征值和描述符

服务特征值和描述符的关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcFUevFE-1663402674358)(https://note.youdao.com/yws/res/19073/WEBRESOURCE8649d31b1b8a6868a5bf2ec30b8bd71f)]

  • 服务包含特征值,描述符修饰特征值

  • 特征值个人理解是一个管道,管道拥有权限,可读可写,通知权限。

  • 两个蓝牙设备可以通过这个管道根据他们的权限进行传输数据。

  • 特征值既然是两个设备之间传输的管道,那么两个蓝牙设备直接就有了关系客户端和服务端的关系

  • 拥有服务和特征值的就是gatt server

  • 查询访问特征值的就是gatt client

设备数据传输通道有了如何建立连接呢?tcp是通过ip和端口连接,蓝牙呢?

GAP

  • Generic Access Profile,这个东西规定了蓝牙如何查找对方,如何连接对方。
  • 他规定了你的蓝牙耳机不停的发送广播,告诉别人,我是谁
  • 他还规定了你的手机不停的扫描设备,扫描到蓝牙耳机,去连接他
  • 上面只是列举了通用的功能
    根据GAP的规定,一个蓝牙设备可能扮演四种角色
  1. A peripheral Advertises:(周边广播设备)
    他会不停的广播自己,并且接受中心设备的连接,我们所说的从机,蓝牙耳机就是扮演这个角色
  2. A Central Device,中心设备
    他可以扫描周边的广播信息,并且由用户决定是否去连接这个设备,手机经常担任这个角色
  3. A Broadcaster 广播设备
    他只广播,不接收任何的连接,他从在的目的就是为了广播信息(Bluetooth Beacon(iBecon EddyStone)就是广播设备)
  4. A Observer 观察者设备
    仅仅扫描处理广播包,不会去主动连接任何设备

一个设备既可以同时成为中心设备和从机设备,只要蓝牙协议栈支持两个模块

一个GAP Periphereal在被连接后,就扮演GATT Server的角色,GAP Central设备正在连接一个GAP Periphereal设备那么他就成为了一个GATT Client的角色。

需要理解一个点是,GAP Periphereal或者Central和GATT Client和Server,是两个独立的个体。一个GAP Central设备在连接了一个设备之后,他还可以承担GATT Server的角色

ATT

* The Atribute Protocol,是蓝牙协议栈的一个分层,允许GATT Client和GATT Server之间互相通信。发现远程服务的特征值,关闭打开notify

Linux蓝牙架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MNFcyjqd-1663402674359)(https://note.youdao.com/yws/res/19336/WEBRESOURCEd1dc17d29a174a386e16f681fc23724a)]

  • GAP负责扫描广播和连接
  • GATT负责提供访问接口,和访问接口的入口
  • ATT提供GATT client和server通信的协议层
  • BlueZ Linux蓝牙协议栈实现的仅仅是Host层,Controller控制器集成在芯片内部(蓝牙控制器又被称为适配器)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-joyGcm31-1663402674360)(https://note.youdao.com/yws/res/19348/WEBRESOURCEdaf38973aeed63f13404ea7710df27f9)]

  • Linux蓝牙操作一般需要应用层通过D-Bus和Bluetoothd 守护进程进行通信
  • Host层的Bluez和控制层的蓝牙协议栈进行通信,通常需要标准的接口
  • 这个标准的接口就是Host Controller Interface,简称HCI
  • HCI接口定义在蓝牙核心规范里。

参考:
(蓝牙参考资料,核心规范下载地址) https://www.bluetooth.com/develop-with-bluetooth/build/

你可能感兴趣的:(linux,网络,服务器)