BLE HID简介


http://www.usb.org/developers/hidpage/

https://www.bluetooth.com/specifications/gatt/characteristics


简述

HID设备,即人机交互设备,常见的有鼠标,键盘,游戏手柄,等等。一般有线方式都是通过USB连线连接到机器设备,作为用户输入设备。在蓝牙技术中,HID设备的接入就是无线的了。但 BLE HID 规范是以 USB HID 规范为基础的 ,不然设备驱动,兼容等问题都会有很多麻烦了。蓝牙中有HID, HOGP profile,但是只是在蓝牙数据通信上做的规范,HID具体含义相关,还是需要看USB相关的HID文档。


下面说的 host 和 device, 是 USB 中的角色概念。 
HOST 就相当于 PC 主机, 而 device就相当于鼠标,键盘这些 USB 外设。
ble hid 中,可以看做蓝牙设备就是 device,而手机就是 host。

为什么蓝牙设备发送数据却称为输入报告,这是因为在 USB 规范中,Input output 都是相对与 host 来说的,输入到 host 的数据称为 input,host 输出的数据称为 output。


一、HID Reports Bluetooth HID devices支持三种Report:Input, Output, Feature。
Input Reports,输入报告
Ble 中,表示 Bluetooth HID device 发送数据给 Bluetooth HID Host.
USB 中输入报告通常通过 中断输入端点来传输。当然也可以通过 控制端点由 HOST 使用 GET REPORT 控制传输请求来获取数据,即host 先发送 get report 命令,device 随后回复 input report,之后 host 会回复一个状态(0 字节数据表示成功)。
Output Reports,输出报告
Ble 中表示 Bluetooth HID Host.发送数据给 Bluetooth HID device.
USB 中输出报告通常通过 中断输出端点来传输。当然也可以通过 控制端点由 HOST 使用 SET REPORT 控制传输请求来发出数据,即HOST 先发送 set report 命令,随后 HOST 发送待发送的数据,最后 DEVICE 回复一个状态(0 字节表示成功)。
Feature Reports,特征报告
Ble 中双向数据通道
USB 中只能通过控制端点来传输双向数据, HOST 使用 GET REPORT 来从 DEVICE 获取数据,或者 HOST 使用 SET REPORT 发送数据给 DEVICE。


二、HID channel 
04-02
### 蓝牙低功耗人机接口设备概述 蓝牙低功耗(BLE)技术为人机接口设备(HID)提供了高效、节能的通信方式。BLE HID允许诸如键盘、鼠标和其他输入设备通过低功耗蓝牙协议连接到主机设备,从而实现无线操作[^1]。 为了支持BLE HID功能,在Android应用中需要声明`BLUETOOTH`权限以便执行任何涉及蓝牙的操作,包括请求连接、接受连接以及数据传输[^2]。此外,还需要额外配置特定于HID的服务和特性来确保兼容性和功能性。 #### 主要概念与术语 在讨论BLE HID时,有几个关键的概念和技术要点需要注意: - **角色与职责**:定义了不同类型的BLE设备如何交互并履行其各自的功能。 - **GATT服务器**:提供服务端点供客户端访问属性和服务信息。 - **读取BLE属性**:使能获取远程设备的状态或其他相关信息的能力。 - **接收GATT通知**:当某些条件改变或者事件发生时能够及时得到更新的通知机制。 #### 关键类库介绍 以下是几个重要的API组件用于构建和支持BLE HID应用程序开发过程中可能需要用到的部分: - `BluetoothGatt`: 表示一个通用属性配置文件(Generic Attribute Profile),它包含了所有的特征(characteristics)和服务(services)。 - `BluetoothGattCallback`: 提供回调方法处理来自远端设备的各种状态变化报告。 - `BluetoothGattCharacteristic`: 描述了一个具体的特性的结构及其元数据(metadata)。 - `BluetoothGattService`: 定义了一组关联在一起形成某种逻辑单元的一系列特性集合。 这些工具共同作用使得开发者可以创建复杂的应用场景下的解决方案,并充分利用现代移动平台所提供的强大能力去满足用户的多样化需求。 ```java // Java代码片段展示如何初始化BluetoothAdapter对象并与目标设备建立联系 final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter(); if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } ``` 上述代码展示了怎样获得系统的Bluetooth适配器实例并且检查当前是否已启用蓝牙模块;如果尚未开启,则提示用户激活该功能。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值