蓝牙技术中的人性化接口设备(HID)应用模式可以使人们无连线烦恼地控制他们的计算机、游戏操作杆、远程监控设备等。本文参照SIG最新公布的0.95c版本HID规范,详细介绍了蓝牙HID规范及其应用场景,以及蓝牙HID终端设备端与HID主机端的解决方案。


蓝牙技术在成功地应用在耳机、免提设备和PC外设后,逐渐得到更广泛的应用,人们开始期望能够无连线烦恼地控制他们的计算机、游戏操作杆、遥控设备等。蓝牙SIG组织公布的HID规范正好迎合了这一需求。


与传统的只能和相互匹配的设备通信的无线键盘不同,蓝牙HID键盘能够作为一个标准键盘与任何蓝牙HID系统通信。蓝牙HID解决方案使得HID终端设备能够自动地探测和连接到需要的系统,如PDA、PC、机顶盒等。例如,一个蓝牙HID鼠标能够用来控制PC机,也可用于控制PDA,而不是像传统的模式中某个外设只能控制与它匹配的某种特定的主机。因此,蓝牙HID规范使得不同平台HID主机的输入和控制外设实现真正的互用性。


蓝牙HID规范


a. 蓝牙HID规范的软件结构


蓝牙HID规范的软件结构框图如图1所示。HID规范运行在蓝牙的L2CAP协议上,并基于GAP规范。图1. 蓝牙HID规范的软件结构图。


b. HID规范的基本要求有:


1. 在一个微型网络中通常被推荐当作从设备(slave),但是也允许作为主设备(master)。


2. 键盘必须支持认证和加密:只有当被HID主机要求时才激活工作模式;在认证和加密的基础上,也可以被其它HID主机选用;通过单键创建联合键的方式可以实现使用加密技术的低成本HID方案;强烈推荐蓝牙HID键盘和辅助键盘支持联合键的应用。


3. 推荐使用有限的服务发现模式:

对一台HID主机而言,HID终端设备通常都是一对一的关系;通过击键或者电源接通来激活HID终端设备。


4. 作为从设备必须始终保持可连接性,例如PC在启动时寻呼键盘,或者键盘在有数据传输时寻呼PC机。


5. HID主机必须支持QoS。


6. HID主机必须支持低功耗工作模式,一般的HID终端设备(如鼠标、键盘、游戏杆)的设计目标通常为:在3节标准AAA电池或者2节标准碱性AA电池下,至少工作三个月;HID主机和HID终端设备都必须支持呼吸(sniff)工作模式和休眠(park)工作模式;保持工作模式对HID主机来说是必须的,而对HID终端设备来说是可选的。


7. HID终端设备只需要支持DM1格式的数据。


8. 除了查询模式和寻呼模式,交互的寻呼扫描模式和查询扫描模式也是必需的。


9. 对单功能设备而言并不需要支持SCO语音通道。


10. 支持绑定的设备必须有某种形式的固定内存来存放128位的认证码,使用联合键的HID设备比只使用单键的设备需要更多的内存来支持。


11. 为了使设备支持联合键认证,推荐最少为四个主机键(host key)留有适当的存储空间。


c. HID规范的导入模式


HID规范规定基本的键盘和指示功能使用固定格式的数据包,在HID主机端不需要HID剖析器(约占70kB)。允许用固定的PSM和辅助的设备类控制FHS数据包作为服务发现协议的定位,以及键盘与指示设备的连接。USB导入模式被保留用作最低层的终端应用。为了使得用户界面更加友好,要求系统遵从以下规定:


1. 能够自动探测HID终端设备;


2. 必须有硬件添加向导;


3. 键盘必须是加密的,且安全;


4. 在PC机导入时,HID终端设备暂时不能使用。


d. HID规范的虚电缆连线概念


像鼠标、键盘等HID终端设备都是个人区域设备,它们有以下特征:


1. 通常与HID主机都有一对一的关系;


2. 不支持同时与一个以上的HID主机同时连接;


3. 它们也许有一个以上的可能建立连接的HID主机。


当蓝牙HID终端设备与一个HID主机建立一对一的连接关系时,它就被称为虚拟电缆连接。这时HID终端设备与HID主机就建立了以下关系:


1. HID终端设备与HID主机捆绑。


2. 如果连接断开,将会自动重新建立连接。


3. 不会和另一HID主机相连,除非用户明确地去掉该虚拟电缆连接。


蓝牙HID终端设备的解决方案


如图2所示,作为HID终端设备端的BlueCode+可以有以下两种应用模型:


1. 与蓝牙核心协议栈一起集成在蓝牙芯片内,以蓝牙硬件模块形式提供。


2. 作为一个软件协议栈,BlueCode+也能够集成在客户指定的CPU中。图2. 以蓝牙键盘为例的BlueCode+的两种应用模型。


每个蓝牙HID终端设备(如键盘)都会有它自己的输入控制处理器,该控制器采集用户的输入信号,并转换成某种特定的代码传送给它的HID主机(如PC、PDA等)。由于输入处理器的资源比较少,因此通常情况下蓝牙软件都需要在某个特定的处理器上运行。在我们的方案中将BlueCode+移植到蓝牙芯片中运行,最大程度地实现了资源共享,也使得硬件集成更加简单,集成度更高。而蓝牙芯片与输入控制器的接口可以是更便于系统集成的TTL电平的串行接口。


例如键盘、鼠标和游戏操纵杆等嵌入式设备,可以通过PS/2、UART、GPIO等标准接口将客户已有的HID终端设备硬件与内置HID规范的蓝牙模块结合起来。由于BlueCode+HID软件已经集成进蓝牙芯片,因此,用户只需要将BlueRS+I或蓝牙芯片放进他们的硬件中。输入控制器应按照USB格式通过串行连接发送扫描代码,当然,针对用户的特殊格式要求也是可以的。


如果输入控制器有比较大的资源空间(MIPS、RAM和闪存),蓝牙上层协议栈可以移植到输入控制器中运行,蓝牙芯片与输入控制器也可以以TTL电平串行连接。如果包含HID规范的BlueCode+上层协议栈运行在HID终端设备的输入处理器上,那么对系统硬件结构来说,只有一个带HCI接口的蓝牙芯片需要集成进客户的硬件。


由于蓝牙鼠标的应用非常简单,这时提供HID的BlueCode+可以和鼠标本身的应用程序一起集成在含有蓝牙核心协议栈的蓝牙芯片内。


蓝牙HID主机端的解决方案


在HID主机侧,BlueCode+有三种提供方式:


1. 提供完全的蓝牙HID主机驱动程序,使之成为一个标准的OEM产品;


2. 以软件协议栈的形式帮助客户整合进他们的蓝牙PS/2接入点设备;


3. 提供独立于操作系统的API,客户可以将它们整合进自己的驱动程序中。


对标准操作系统(如Windows、Linux)来说,已经有包括HID规范的完整的驱动程序可以提供。这时,除了用户用于表示包括公司及产品的名字、标志、图形和其它类似的图形界面,HID主机端不需要对HID主机的标准驱动作任何改动。这里的HID主机可以用蓝牙USB dongle或PC卡实现,HID主机侧的软件将包括上层堆栈和用户端应用程序。与HID的应用类似,USB dongle也还可用在类似DUN、FAX、FTP、LAN等应用中。因此,这种应用方式的优点是可以支持多个蓝牙规范,其缺点是它们的驱动程序依赖于操作系统。


由于BlueCode+能够方便地移植到不同的操作系统,因此客户也可以用HID API开发适合自己的独特应用。例如,可以做成蓝牙HID接入点设备,所有软件作为固件运行在HID接入点设备上。这时,蓝牙HID接入点设备可以是智能化的USB dongle,或者是用户定义的其它设备。在这种应用方式下,HID主机侧不再需要安装驱动程序。HID接入点设备可被HID主机的操作系统认作标准USB或PS/2设备看待。


这种方案的优点是HID接入点设备与操作系统无关, 可用于支持在PS/2或USB 上的标准 HID的任何平台,不需在HID主机上安装任何东西。该方案的缺点是不支持多个蓝牙规范,因为所有运行于HID接入点设备的软件,只是为HID应用设计的。