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/

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要:基于对Linux蓝牙协议栈BlueZ 源代码的分析,给出BlueZ的组织结构和特点。分析蓝牙USB 传输驱动机制和数据处理过程, 给出实现蓝牙设备驱动的重要数据结构和流程,并总结Linux 下开发蓝牙USB 设备驱动的一般方法和关键技术。 关键词:Linux 系统蓝牙协议栈;设备驱动 USB Device Driver for Linux Bluetooth Stack LIANG Jun-xue, YU Bin (Institute of Electronic Technology, PLA Information Engineering University, Zhengzhou 450004) 【Abstract】This paper depicts the structure and characteristics of BlueZ based on analyzing the source code of Linux bluetooth stack BlueZ. It analyzes the implementation of bluetooth USB transport driver scheme and data processing procedure in detail, and gives the key data structure and implementation of bluetooth device driver. It summarizes the approach of developing Linux bluetooth USB device driver and the key technology. 【Key words】Linux system; bluetooth stack; device driver 计 算 机 工 程 Computer Engineering 第 34 卷 第 9 期 Vol.34 No.9 2008 年 5 月 May 2008 ·开发研究与设计技术· 文章编号:1000—3428(2008)09—0273—03 文献标识码:A 中图分类号:TP391 1 概述 蓝牙技术是开放式通信规范,而 Linux 是开放源码的操 作系统。廉价设备与免费软件的结合,促进了蓝牙技术和 Linux 的发展与融合。 Linux最早的蓝牙协议栈是由Axis Communication Inc在 1999 年发布的 OpenBT 协议栈。 随后, IBM 发布了 BlueDrekar 协议栈,但没有公开其源码。Qualcomm Incorporated 在 2001 年发布的 BlueZ 协议栈被接纳为 2.4.6 内核的一部分。此外, Rappore Technology 及 Nokia 的 Affix Bluetooth Stack 都是 Linux 系统下的蓝牙协议栈,应用在不同的设备和领域中。 BlueZ 是 Linux 的官方蓝牙协议栈,也是目前应用最广 泛的协议栈,几乎支持所有已通过认证的蓝牙设备。对于基 于主机的蓝牙应用,目前常见的硬件接口有 UART, USB 和 PC 卡等,USB 作为 PC 的标准外设接口,具有连接方便、兼 容性好和支持高速设备等特点,已广泛应用于蓝牙设备。 目前对 Linux 下 USB 设备驱动的研究已较为广泛而深 入[1-4] ,但对 Linux 下的蓝牙设备驱动还没有专门的研究。本 文在分析 USB 设备驱动和蓝牙协议栈的基础上,总结了 Linux 下开发蓝牙 USB 驱动程序的一般方法,并深入剖析了 其关键技术。 2 Linux 蓝牙协议栈 BlueZ 简介 BlueZ 目前已成为一个开放性的源码工程。它可以很好 地在 Linux 支持的各种体系的硬件平台下运行,包括各种单 处理器平台、多处理器平台及超线程系统。 BlueZ 由多个独立的模块组成,内核空间主要包括设备 驱动层、蓝牙核心及 HCI 层、L2CAP 与 SCO 音频层、 RFCOMM, BNEP, CMTP 与 HIDP 层、通用蓝牙 SDP 库和后 台服务及面向所有层的标准套接字接口;在用户空间提供了 蓝牙配置、测试及协议分析等工具。其组织结构如图 1 所示, BlueZ 没有实现专门的 SDP 层,而是将其实现为运行在后台 的蓝牙服务库例程(图 1 没有描述该后台服务)。 RFOMM 层支 持标准的套接口,并提供了串行仿真 TTY 接口,这使串行端 口应用程序和协议可以不加更改地运行在蓝牙设备上,例如 通过点对点协议 PPP 可实现基于 TCP/IP 协议簇的所有网络 应用。BNEP 层实现了蓝牙的以太网仿真,TCP/IP 可以直接 运行于其上。 USB设备驱动 (hci_usb.o) L2CAP层(l2cap.o) RFCOMM层 (rfcomm.o) BNEP层 (bnep.o) CMTP层 (cmtp.o) 串口设备驱动 (hci_uart.o) 虚拟串口设备驱动 (hci_vhci.o) 音频 socket RFCOMM socket BNEP socket CMTP socket L2CAP socket HCI socket 内核 空间 用户 空间 串口设备 CAPI设备 输入设备 网络设备 HDIP socket 音频设备 AF_BLUETOOTH socket 音频层(sco.o) PPP TCP/IP AF_INET socket BNEP层 (bnep.o) 其他设备驱动 (bluecard_cs.o等) BlueZ工具和实用程序 HDIP层 (hdip.o) BlueZ核心 及HCI层(bluez.o/bluetooth.o) 图 1 BlueZ 组织结构 3 蓝牙 USB 设备驱动 设备驱动程序在 Linux 内核中起着重要作用,它使某个 硬件能响应一个定义良好的内部编程接口。这些接口隐藏了 设备的工作细节,用户通过一组独立于特定驱动程序的标准 调用来操作设备。而将这些调用映射到作用于实际硬件设备 的特有操作上,则是驱动程序的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值