【HID基础知识】
蓝牙HID基础知识
一:定义
HID是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏手柄等。
蓝牙HID 是属于蓝牙协议里面的一个profile, 不管在蓝牙2.0 2.1 3.0还是4.0,5.0的蓝牙中 ,都有HID , 而且在4.0以上协议中还多了一个HOG (HID OVER GATT)也就是低功耗HID,涉及的是蓝牙4.0以上的BLE(bluetooth low en)技术。
蓝牙HID是蓝牙的一种技术规范。
二:蓝牙HID规范
HID规范运行在蓝牙的L2CAP协议上,并基于GAP规范。 HID规范的基本要求有:
在一个微型网络中通常被推荐当作从设备(slave),但是也允许作为主设备(master)。
键盘必须支持认证和加密:只有当被HID主机要求时才激活工作模式;在认证和加密的基础上,也可以被其它HID主机选用;
作为从设备必须始终保持可连接性,例如PC在启动时寻呼键盘,或者键盘在有数据传输时寻呼PC机。
HID主机必须支持QoS。
HID主机必须支持低功耗工作模式,一般的HID终端设备(如鼠标、键盘、游戏杆)都是需求低功耗的;HID主机和HID终端设备都必须支持呼吸(sniff)工作模式和休眠(park)工作模式;保持工作模式对HID主机来说是必须的,而对HID终端设备来说是可选的。
HID终端设备只需要支持DM1格式的数据。
除了查询模式和寻呼模式,交互的寻呼扫描模式和查询扫描模式也是必需的。
对单功能设备而言并不需要支持SCO语音通道。
三 HID规范的导入模式
HID规范规定基本的键盘和指示功能使用固定格式的数据包,在HID主机端不需要HID剖析器(约占70kB)。允许用固定的PSM和辅助的设备类控制FHS数据包作为服务发现协议的定位,以及键盘与指示设备的连接。USB导入模式被保留用作最低层的终端应用。为了使得用户界面更加友好,要求系统遵从以下规定:
能够自动探测HID终端设备;
必须有硬件添加向导;
键盘必须是加密的,且安全;
在PC机导入时,HID终端设备暂时不能使用。
像鼠标、键盘等HID终端设备都是个人区域设备,它们有以下特征:
通常与HID主机都有一对一的关系;
不支持同时与一个以上的HID主机同时连接;
它们也许有一个以上的可能建立连接的HID主机。 当蓝牙HID终端设备与一个HID主机建立一对一的连接关系时,它就被称为虚拟电缆连接。这时HID终端设备与HID主机就建立了以下关系:
HID终端设备与HID主机捆绑。
如果连接断开,将会自动重新建立连接。
不会和另一HID主机相连,除非用户明确地去掉该虚拟电缆连接。
四: 蓝牙HID终端设备的解决方案,作为HID终端设备端有以下两种应用模型:
与蓝牙核心协议栈一起集成在蓝牙芯片内,以蓝牙硬件模块形式提供。 如需了解更多,可以联系飞易通团队;
作为一个软件协议栈,蓝牙HID代码也能够集成在客户指定的CPU中。 每个蓝牙HID终端设备(如键盘)都会有它自己的输入控制处理器,该控制器采集用户的输入信号,并转换成某种特定的代码传送给它的HID主机(如PC、PDA等)。由于输入处理器的资源比较少,因此通常情况下蓝牙HID软件都需要在某个特定的处理器上运行。输入控制器应按照USB格式通过串行连接发送扫描代码,当然,针对用户的特殊格式要求也是可以的。 如果输入控制器有比较大的资源空间(MIPS、RAM和闪存),蓝牙上层协议栈可以移植到输入控制器中运行,蓝牙芯片与输入控制器也可以以TTL电平串行连接。如果包含HID规范的协议栈运行在HID终端设备的输入处理器上,那么对系统硬件结构来说,只有一个带HCI接口的蓝牙芯片需要集成进客户的硬件。 由于蓝牙鼠标的应用非常简单,这时蓝牙HID代码可以和鼠标本身的应用程序一起集成在含有蓝牙核心协议栈的蓝牙芯片内。
五: 蓝牙HID主机端的解决方案:在HID主机侧,蓝牙代码有三种提供方式:
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等应用中。因此,这种应用方式的优点是可以支持多个蓝牙规范,其缺点是它们的驱动程序依赖于操作系统。 由于蓝牙HID代码能够方便地移植到不同的操作系统,因此客户也可以用HID API开发适合自己的独特应用。例如,可以做成蓝牙HID接入点设备,所有软件作为固件运行在HID接入点设备上。这时,蓝牙HID接入点设备可以是智能化的USB dongle,或者是用户定义的其它设备。在这种应用方式下,HID主机侧不再需要安装驱动程序。HID接入点设备可被HID主机的操作系统认作标准USB或PS/2设备看待。 这种方案的优点是HID接入点设备与操作系统无关, 可用于支持在PS/2或USB 上的标准 HID的任何平台,不需在HID主机上安装任何东西。该方案的缺点是不支持多个蓝牙规范,因为所有运行于HID接入点设备的软件,只是为HID应用设计的。
六:问答
支持HID的蓝牙键盘是什么意思?
蓝牙技术中的人性化接口设备(HID)应用模式可以使人们无连线烦恼地控制他们的计算机、游戏操作杆、远程监控设备等。 蓝牙技术在成功地应用在耳机、免提设备和PC外设后,逐渐得到更广泛的应用,人们开始期望能够无连线烦恼地控制他们的计算机、游戏操作杆、遥控设备等。蓝牙SIG组织公布的HID规范正好迎合了这一需求。 与传统的只能和相互匹配的设备通信的无线键盘不同,蓝牙HID键盘能够作为一个标准键盘与任何蓝牙HID系统通信。蓝牙HID解决方案使得HID终端设备能够自动地探测和连接到需要的系统,如PDA、PC、机顶盒等。例如,一个蓝牙HID鼠标能够用来控制PC机,也可用于控制PDA,而不是像传统的模式中某个外设只能控制与它匹配的某种特定的主机。因此,蓝牙HID规范使得不同平台HID主机的输入和控制外设实现真正的互用性。
HID device设备能发起连接吗
可以的。
android手机与蓝牙HID设备连接的步骤:
1.开启蓝牙功能
2.手机搜索蓝牙HID设备
3.搜到蓝牙名称,配对HID设备
4.连接HID设备。
相关文章:
【HID基础知识】
蓝牙HID基础知识 一:定义 HID是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏手柄等。 蓝牙HID 是属于蓝牙协议里面的一个profile, 不管在蓝牙2.0 2.1 3.0还是4.0,5.0的蓝牙中…...
工赋开发者社区 | 工业数字孪生:西门子工业网络与设备虚拟调试案例(TIA+MCD+SINETPLAN)
PART1案例背景及基本情况新生产系统的设计和实施通常是耗时且高成本的过程,完成设计、采购、安装后,在移交生产运行之前还需要一个阶段,即调试阶段。如果在开发过程中的任何地方出现了错误而没有被发现,那么每个开发阶段的错误成本…...
将闲置的Ipad作为Windows的副屏(Twomon SE)
目录一、前言二、方法第一步 安装软件第二步 使用步骤三、注意一、前言 在看网课的时候,总有种不得劲的感觉,来来回回的切换就很糟心~~无意间看见闲置的板砖(Ipad),计上心来-- _ – 期间也尝试过免费的软件ÿ…...
浮点数在内存中的存储——“C”
各位CSDN的uu们你们好呀,今天,小雅兰的内容是浮点数在内存中的存储,昨天我们已经写过了整型在内存中的存储,那么,浮点数在内存中是怎样存储的呢?现在,就让我们进入浮点数在内存中的存储的世界吧…...
华为OD机试 C++ 实现 - 租车骑绿岛
最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...
Spring Cloud Nacos源码讲解(三)- Nacos客户端实例注册源码分析
Nacos客户端实例注册源码分析 实例客户端注册入口 流程图: 实际上我们在真实的生产环境中,我们要让某一个服务注册到Nacos中,我们首先要引入一个依赖: <dependency><groupId>com.alibaba.cloud</groupId><…...
位运算(C/C++)
1. 基础知识 程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二…...
哈希表题目:设计哈希映射
文章目录题目标题和出处难度题目描述要求示例数据范围前言解法一思路和算法代码复杂度分析解法二思路和算法代码复杂度分析题目 标题和出处 标题:设计哈希映射 出处:706. 设计哈希映射 难度 3 级 题目描述 要求 不使用任何内建的哈希表库设计一个…...
力扣解法汇总1238. 循环码排列
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接: 力扣 描述: 给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,,...,2^n-1) 的排列 p&…...
[数据结构]时间复杂度与空间复杂度
[数据结构]时间复杂度与空间复杂度 如何衡量一个算法的好坏 long long Fib(int N) {if(N < 3)return 1;return Fib(N-1) Fib(N-2); } 这是一个求斐波那契数列的函数,使用递归的方法求得,虽然代码看起来很简洁,但是简洁真的就好吗&#…...
Codeforces Round #848 (Div. 2)(A~D)
A. Flip Flop Sum给出一个只有1和-1的数组,修改一对相邻的数,将它们变为对应的相反数,修改完后数组的和最大是多少。思路:最优的情况是修改一对-1,其次是一个1一个-1,否则修改两个1。AC Code:#i…...
第十三届蓝桥杯Java B 组国赛 C 题——左移右移(AC)
目录1.左移右移1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围6.原题链接2.解题思路3.Ac_code1.左移右移 1.题目描述 小蓝有一个长度为 NNN 的数组, 初始时从左到右依次是 1,2,3,…N1,2,3, \ldots N1,2,3,…N 。 之后小蓝对这个数组进行了 MMM 次操作, 每次…...
第14篇:系列二—Java抽象类/接口/枚举
目录 1、继承的定义(Inheritance) 2、继承的优点 2.1 易维护性 2.2 复用性 2.3 条理性...
深入浅出C++ ——哈希
文章目录前言一、unordered系列关联式容器1. unordered_map2. unordered_set二、哈希1. 哈希概念2. 哈希冲突3. 哈希函数4. 哈希冲突解决方法三、模拟实现unordered系列容器1. 哈希表的改造2. 模拟实现 unordered_set3. 模拟实现 unordered_map前言 在C11中,STL又提…...
Tina_Linux_系统裁剪_开发指南
文章目录Tina_Linux_系统裁剪_开发指南1 概述2 Tina系统裁剪简介2.1 boot0裁剪2.2 uboot裁剪2.3 内核裁剪2.3.1 删除不使用的功能2.3.2 删除不使用的驱动2.3.3 修改内核源代码2.3.3.1 size工具.2.3.3.2 ksize.py脚本2.3.3.3 nm命令2.3.3.4 kernel压缩方式.2.4 文件系统裁剪.2.4…...
算法刷题打卡第99天:至少在两个数组中出现的值
至少在两个数组中出现的值 难度:简单 给你三个整数数组 nums1、nums2 和 nums3 ,请你构造并返回一个 元素各不相同的 数组,且由 至少 在 两个 数组中出现的所有值组成。数组中的元素可以按 任意 顺序排列。 示例 1: 输入&…...
线程池面试题
1. 什么是线程池?为什么要使用线程池? 线程池是一种用于管理线程的技术,它可以在应用程序中重复使用一组线程来执行多个任务。线程池的优点包括提高应用程序的性能和可伸缩性、避免线程创建和销毁的开销、避免线程过多导致系统负担过重等。线…...
【学习笔记】NOIP爆零赛5
说实话是不想补题的。因为每一道题都贼难写,题解又通篇写着显然,然后自己天天搞竞赛又把注意力搞差了,调一道题又调半天,考试的题又难的要死 不会正解 ,部分分又写挂了 可能心态崩了就是从那场t1t1t1签到题考高精度数位…...
【数据结构】时间复杂度
🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对…...
vector的基本使用
目录 介绍: vector iterator 的使用 增删查改 增(push_back insert): 删(pop_back erase): swap: vector的容量和扩容: 排序(sort): 介绍ÿ…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
