BLE协议—HID

HID设备

HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,比如键盘、鼠标、游戏手柄等。为了无线与有线设备相同类型设备的兼容,BLE HID设备与USB HID设备使用的都是同一种规范。

HOGP(HID Over GATT Profile)

HOGP(HID Over GATT Profile)是在BLE GATT协议的基础上实现的HID协议。
在这里插入图片描述

HID服务

以普通鼠标HID服务为例子
在这里插入图片描述
服务UUID:0x1812
HID服务包含了多个特征。
--------------------------------------------------------------------------------------

HID info特征

在这里插入图片描述
UUID:0x2A4A
用来放置一些 HID 信息:分别为版本号,设备目的国家的识别码,特性标志。
--------------------------------------------------------------------------------------

HID MAP特征

在这里插入图片描述

UUID:0x2A4B
在这里插入图片描述
HID MAP也称为Report Description,用于描述上报事件的格式以及功能。HID MAP主要由一个个项目组成,项目的结构可近似于json数据格式,项目的结构如上图所示。
Collection:集合,相当于json中的{}。
Application Collection:应用集合,用于区分功能。
Physical Collection:子集合,细化区分。
Report ID:报告ID,用于区分Report,一个HID MAP里可能有多个Report。
Report Size:报告大小,描述报告的大小,单位为bit(位)。
Report Count: 报告数量,描述报告总共有多少项。
Logical Minimum:逻辑最小值,每个项的取值范围中的最小值。
Logical Maximum:逻辑最大值,每个项的取值范围中的最大值。
Usage:使用方式,对设备类型、功能进行说明。

在这里插入图片描述

以普通鼠标的HID MAP为例

    0x05, 0x01,  // Usage Page (Generic Desktop) 
    0x09, 0x02,  // Usage (Mouse)
    0xA1, 0x01,  // Collection (Application)
    0x85, 0x01,  // Report Id (1)
    0x09, 0x01,  //   Usage (Pointer)
    0xA1, 0x00,  //   Collection (Physical)
    0x05, 0x09,  //     Usage Page (Buttons)
    0x19, 0x01,  //     Usage Minimum (01) - Button 1
    0x29, 0x03,  //     Usage Maximum (03) - Button 3
    0x15, 0x00,  //     Logical Minimum (0)
    0x25, 0x01,  //     Logical Maximum (1)
    0x75, 0x01,  //     Report Size (1)
    0x95, 0x03,  //     Report Count (3)
    0x81, 0x02,  //     Input (Data, Variable, Absolute) - Button states
    0x75, 0x05,  //     Report Size (5)
    0x95, 0x01,  //     Report Count (1)
    0x81, 0x01,  //     Input (Constant) - Padding or Reserved bits
    0x05, 0x01,  //     Usage Page (Generic Desktop)
    0x09, 0x30,  //     Usage (X)
    0x09, 0x31,  //     Usage (Y)
    0x09, 0x38,  //     Usage (Wheel)
    0x15, 0x81,  //     Logical Minimum (-127)
    0x25, 0x7F,  //     Logical Maximum (127)
    0x75, 0x08,  //     Report Size (8)
    0x95, 0x03,  //     Report Count (3)
    0x81, 0x06,  //     Input (Data, Variable, Relative) - X & Y coordinate
    0xC0,        //   End Collection
    0xC0,        // End Collection

0x05, 0x01, // Usage Page (Generic Desktop)
二进制为0000 0101,对应上图可得类型为0000 01xx = Usage Page,数据为0x01,通过查找官方文档可得Generic Desktop(0x01)在这里插入图片描述
所以从上面鼠标的HID MAP我们可以得到鼠标的HID结构为

{
	Usage Page (Generic Desktop) - 通用桌面设备
	Usage (Mouse) - 具体设备是鼠标
	
	{  Collection (Application)
	
		Report Id (1) - 报告ID为1
		Usage (Pointer) - Pointer,用于指向或指示用户意图的值
		
		{  Collection (Physical)
		
			Usage Page (Buttons) - 按键功能
			Usage Minimum (01) - 最小按键使用数量为1,意思是最小是1个按键
			Usage Maximum (03) - 最大按键使用数量为3,意思是最大是3个按键
			Logical Minimum (0) - 按键值最小为0
			Logical Maximum (1) - 按键值最大为1
			Report Size (1) - 按键值大小为1bit
			Report Count (3) - 按键值数据为3个
			Input (Data, Variable, Absolute) - 按键值为可读数据、变量、绝对值
			Report Size (5) - 添加5bit数据
			Report Count (1) - 添加1个5bit数据
			Input (Constant) - 5bit数据为常量,为了筹够1byte
			Usage Page (Generic Desktop) - 通用桌面设备
			Usage (X) - x方向坐标
			Usage (Y) - y方向坐标
			Usage (Wheel) - 滚轮
			Logical Minimum (-127) - x、y、滚轮最小值为-127
			Logical Maximum (127) - x、y、滚轮最大值为127
			Report Size (8) - x、y、滚轮数据都为8bit
			Report Count (3) - 添加x、y、滚轮数据
			Input (Data, Variable, Relative) - x、y坐标数据为可读数据、变量、相对值
			
		} Collection (Physical)
		
	} Collection (Application) 
}

所得到的具体数据格式可以参考下图
在这里插入图片描述

具体Usage数据可以查看官方文档
官方HID Usage列表

--------------------------------------------------------------------------------------

HID Control Point 特征

在这里插入图片描述UUID:0x2A4C
用于通知 HID HOST 的状态。比如当电脑休眠时,通知HID device进入挂起状态,电脑唤醒后通知HID device退出挂起状态。

--------------------------------------------------------------------------------------

HID Report 特征

在这里插入图片描述
UUID:0x2A4D
HID Report分为三种:Input Reports、Output Reports和Feature Reports
Input Reports:输入报告,表示BLE HID设备可读数据,BLE主机可以读取数据,例如键盘鼠标滚轮。
Output Reports:输出报告,表示BLE HID设备可写数据,BLE主机可以写入数据,例如控制键盘上的灯亮灭。
Feature Reports:特征报告,表示BLE HID设备可读可写数据,BLE主机可以读取和写入数据,例如耳机音量大小可以手机控制也可以耳机控制同时同步到手机上。
三种Report根据特征描述的值进行区分(UUID 0x2908)

--------------------------------------------------------------------------------------

HID Mode 特征

在这里插入图片描述
UUID:0x2A4E
HID Mode分为两种,boot mode和report mode。
boot mode:启动模式,也称为boot protocol,数据格式固定,一般用于鼠标键盘在PC BIOS运行时识别工作。
report mode:报告模式,也称为report protocol,数据格式不固定,需要PC正常启动后识别才能正常工作。比如电竞鼠标会比普通鼠标多几个按键。
--------------------------------------------------------------------------------------

HID Boot Report 特征

在这里插入图片描述

HID在Boot模式下使用的特征,根据不同的设备有一个或多个(input或output)不同的UUID。
--------------------------------------------------------------------------------------

电池服务

BLE HID设备因为是无线设备,所以BLE服务中一般还会包含电池服务,用于提醒用户设备电量。
在这里插入图片描述
UUID:0x180F

特征

UUID:0x2A19
支持NOTIFY和READ,不支持WRITE。

学习笔记,有问题欢迎指出
参考链接:
https://www.bilibili.com/video/BV1rv4y197HW?p=19&vd_source=d886d6911e91d9cfab17458b99639624

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值