• 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/

  • 相关阅读:
    SpringBoot项目自定义注解实现RBAC权限校验
    轩逸保养手册
    mysql简单备份和恢复
    Ultra-Fast-Lane-Detection-v2 {后处理优化}//参考
    面向不平衡数据的电子病历自动分类研究
    【Mybatis小白从0到90%精讲】07:Mybatis 传递参数方式详解
    通知可以根据切入点表达式来进行增强,也可以根据自己的注解值来进行增强
    tensorrt的安装和使用
    python的3种字符串拼接格式化输出
    进程与线程的区别
  • 原文地址:https://blog.csdn.net/gacmy/article/details/126907048