当前位置: 首页 > news >正文

esp32_hid_device 调试遇到的一些问题

nimble to windows10 22h2

esp_hid_device 的keyboardReportMap在win10 22h2 csr4.0 下好像识别不了,
Windows(和大多数 BIOS/UEFI)只认 6-byte key array 的 HID Keyboard 描述符。如果不是 6 个字节,Windows HID 驱动就会认为这不是标准键盘 → 不会加载通用键盘驱动。

可行的keyboardReportMap 如下

// HID Report Map characteristic value
static const uint8_t keyboardReportMap[] = {0x05, 0x01, // Usage Pg (Generic Desktop)0x09, 0x06, // Usage (Keyboard)0xA1, 0x01, // Collection: (Application)//0x05, 0x07, // Usage Pg (Key Codes)0x19, 0xE0, // Usage Min (224)0x29, 0xE7, // Usage Max (231)0x15, 0x00, // Log Min (0)0x25, 0x01, // Log Max (1)//// Modifier byte0x75, 0x01, // Report Size (1)0x95, 0x08, // Report Count (8)0x81, 0x02, // Input: (Data, Variable, Absolute)//// Reserved byte0x95, 0x01, // Report Count (1)0x75, 0x08, // Report Size (8)0x81, 0x01, // Input: (Constant)//// LED report0x95, 0x05, // Report Count (5)0x75, 0x01, // Report Size (1)0x05, 0x08, // Usage Pg (LEDs)0x19, 0x01, // Usage Min (1)0x29, 0x05, // Usage Max (5)0x91, 0x02, // Output: (Data, Variable, Absolute)//// LED report padding0x95, 0x01, // Report Count (1)0x75, 0x03, // Report Size (3)0x91, 0x01, // Output: (Constant)//// Key arrays (6 bytes)0x95, 0x06, // Report Count (6)0x75, 0x08, // Report Size (8)0x15, 0x00, // Log Min (0)0x25, 0x65, // Log Max (101)0x05, 0x07, // Usage Pg (Key Codes)0x19, 0x00, // Usage Min (0)0x29, 0x65, // Usage Max (101)0x81, 0x00, // Input: (Data, Array)//0xC0        // End Collection
};

//report id 使用 0
esp_hidd_dev_input_set(s_ble_hid_param.hid_dev, 0, 0, buffer, 8);

BLE HID Profile(特别是 HID over GATT)里,很多低版本蓝牙栈(尤其是老的 Android、一些老的蓝牙适配器)确实 只支持单一 Report ID = 0,也就是说:

  • 如果 HID Report Map 里定义了 0x85, <ReportID>,主机可能会解析失败,或者直接不识别。
  • 最稳妥的做法就是 不加 Report ID(即只用默认的 report_id = 0)。

nimble to ios18

nimble hid_device 配对过程不触发输入Pin,连上了也会输入无反应。
原因在于 iOS 对 BLE 安全性要求严格,尤其是 HID(键盘/鼠标)类设备。

在 NimBLE 中:
sdkconfig默认 NIMBLE_SM_LVL=0 时,ESP32 允许 低安全级别配对。
iOS 对 HID 设备要求 至少 MITM 保护,否则它不会弹出 Passkey 或 Numeric Comparison,连接后键盘输入无反应。
修改sdkconfig中nimble项的sm lvl 为2 (默认为0)
提升到 SM_LVL=2 → iOS 认为安全性满足要求 → 才会显示 Passkey/Numeric Comparison 对话框。
因为 iOS HID 要求至少 加密 + MITM,SM_LVL=2 正好满足这个条件。

nimble to android

fields.appearance 改为ESP_HID_APPEARANCE_KEYBOARD时, android 手机配对时闪退(s7edge android 8.0.0)

   // fields.appearance = ESP_HID_APPEARANCE_GENERIC;fields.appearance = ESP_HID_APPEARANCE_KEYBOARD;
http://www.dtcms.com/a/351835.html

相关文章:

  • Python爬虫实战:爬取链家/贝壳数据预测房价走势
  • 【大模型实战篇】基于开源视觉大模型封装多模态信息提取工具
  • 第1节: 微服务架构设计篇
  • WhisperLiveKit:实时语音转文本
  • 面试总结(1)
  • 2. LangChain4J 中的 Hello World
  • 未来几年哪些行业有潜力
  • ICBC_TDR_UShield2_Install.exe [ICBC UKEY]
  • ARP地址解析协议
  • 【AI算力平台】算力高效调度策略——GPU调度
  • mysql 执行sql流程概述
  • FreeRTOS学习笔记(四):任务执行与切换
  • ProfiNet 转 Ethernet/IP基于西门子 S7 - 1500 与罗克韦尔 PLC 的汽车零部件加工线协同案例
  • 基于微服务的水果分销系统-项目分享
  • LeetCode 3000.对角线最长的矩形的面积:一次遍历
  • 【golang长途旅行第32站】反射
  • 【机器学习深度学习】连续微调与权重合并的陷阱与最佳实践
  • 修改C盘缓存文件路径
  • MongoDB /redis/mysql 界面化的数据查看页面App
  • UCIE Specification详解(八)
  • 在MiniOB源码中学习使用Flex与Bison解析SQL语句-第一节
  • Rust 环境搭建与 SeekStorm 项目编译部署(支持中文)
  • Robrain V2.0正式登场:落地人形机器人,引爆智能进化革命
  • Ubuntu操作系统下使用mysql、mongodb、redis
  • [特殊字符] CentOS 7 升级 OpenSSH 10.0p2 完整教程(含 Telnet 备份)
  • 如果 我退休了
  • 汽车域控中Hypervisor方案极致安全原理与弊端
  • APP UI自动化测试的思路总结
  • 破解豆瓣Ajax动态加载:Python爬取完整长评论和短评
  • Java面试实战系列【JVM篇】- JVM内存结构与运行时数据区详解(私有区域)