针对 Bluetooth USB 设备而言,HCI 命令使用 Control 管道传输,HCI 事件使用 Interrupt 管道,Asynchronous (ACL) 数据使用 Bulk 管道,而 Synchronous (SCO) 音频数据使用 Isochronous 管道。Bluetooth 规范为 Bluetooth USB 设备定义了 class/subclass/protocol 代码 0xE/0x01/0x01。BlueZ USB 传输驱动程序(drivers/bluetooth/hci_usb.c)将该 class/subclass/protocol 信息注册到 Linux USB 核心。Belkin USB 适配器插入时,主机控制器设备驱动程序会枚举它。因为在枚举期间从适配器读取的设备描述符与 hci_usb 驱动程序注册到 USB 核心的信息相匹配,所以这个驱动程序可附加到 Belkin USB 设备。由 hci_usb 驱动程序从以上描述的各个端点读取的 HCI、ACL 和 SCO 数据被透明传送到 BlueZ 协议栈。一旦做完这些,通过使用以上描述的 BlueZ 服务和工具,Linux TCP/IP 应用程序就可以运行在 BlueZ BNEP 上,而串行应用程序则可以运行在 BlueZ RFCOMM 上。
具有内置 CSR Bluetooth 芯片组的母板
现在,关注一下具有内置 Bluetooth 芯片组的设备上的 Bluetooth 网络数据流。考虑一种拥有内置 CSR Bluetooth 芯片组的手持设备与使用 UART 接口的系统的连接。针对 UART 接口而言,在 Bluetooth 设备和系统之间传输 HCI 数据分组的可用协议有 BlueCore Serial Protocol (BCSP)、H4/UART 和 H3/RS232。而 H4 充当通过 UART 传输 Bluetooth 数据的标准方法。UART 是在规范中定义的来自 CSR 的专有 BCSP 协议,支持错误校验和重传。BCSP 用在基于 CSR BlueCore 芯片的非 USB 设备上,包括 PCMCIA 和 CF 卡。BlueZ 支持 BCSP 和 H4。
这个母板的 UART 通道使用的传统串行驱动程序可以从 BlueZ UART 传输驱动程序上收发数据。如果使用 BSCP 协议将 CSR 芯片设计为封装 HCI 数据分组,您必须使用 hciattach (hciattach ttySx bcsp) 通知 BlueZ 链接驱动程序,在这里 x 是连接到 CSR 芯片组的 UART 通道号。现在 hci_uart 与 CSR 芯片交互并且传送 Bluetooth 数据往返于 BlueZ 栈。
Sony HBH-30 Bluetooth 耳机
前面的 Bluetooth 设备示例展示了网络数据流。现在,通过查看 Sony Ericsson Bluetooth 耳机来考虑 Bluetooth 音频 (SCO) 数据的传输。在耳机可以开始与 Linux 设备通信以前,它必须被 Linux 设备上的 Bluetooth 链路层检测出来。因此,您必须将耳机置于发现模式(通过按下耳机上的一个按钮)。另外,您需要通过 Linux 设备上的 BlueZ 配置耳机的 PIN。Linux Bluetooth 设备上使用 BlueZ SCO API 的应用程序现在可以发送音频数据到耳机上。音频数据应当是耳机 可以理解的格式(例如,Sony 耳机的 A-law PCM [Pulse Code Modulation] 格式)。有些公共主域实用程序可以将音频(甚至文本文件)转换为各种 PCM 格式。
Bluetooth 芯片组除拥有 HCI 传输接口以外还有 PCM 接口 PIN。例如,如果设备同时支持 GSM 和 Bluetooth,GSM 芯片组的 PCM 线路可以直接与 Bluetooth 芯片的 PCM 音频线路连接。然后,您可能不得不在 Linux 设备上配置 Bluetooth 芯片组,以通过 HCI 传输接口而不是 PCM 接口收发 SCO 音频数据分组。
--
原文链接: http://linux.ccidnet.com/art/302/20041230/197337_1.html
共3页: 上一页 [1] [2] 3 下一页
|