【问题标题】:Arduino: need assistance in understanding <keyboard.h> libraryArduino:在理解 <keyboard.h> 库方面需要帮助
【发布时间】:2015-12-07 01:19:19
【问题描述】:

我有应该模拟键盘的 Leonardo/Micro 设备。 我想修改库。原因是我希望能够发送原始扫描码,而图书馆做了一些准备。 我查看了 HID 库的源代码,但很难理解以下几点:

  1. Keyboard_::begin() 和 Keyboard_::end() 应该是 startstop keboard 仿真,但它们的主体是空的; https://www.arduino.cc/en/Reference/KeyboardBegin
  2. KeyReport 尤其神秘:
  3. keyreport 到底发生了什么?我在 HID.cpp 的 USB_Send 函数中丢失了轨道。找不到它的来源
  4. 什么是修饰符,它们在做什么?
  5. 发送的密钥数量是否限制为 6 个,或者理论上可以是任意数量?

【问题讨论】:

标签: keyboard arduino usb hid


【解决方案1】:

我会尽力回答您的问题。如果您仍有疑问,请告诉我:

  1. Keyboard_::begin() 和 Keyboard_::end() 应该启动和停止 keboard 仿真,但它们的主体是空的

我相信这些只是占位符,以防需要进行任何初始化或清理。其他库具有相同的功能(例如 Mouse 库)。我怀疑它们的存在是为了保持一致性,以防万一。

  1. KeyReport 尤其神秘。
typedef struct
{
    uint8_t modifiers;
    uint8_t reserved;
    uint8_t keys[6];
} KeyReport;

KeyReport是代表发送到主机的USB消息的数据结构。

  • 修饰符成员是一个 8 位无符号整数,包含各种标志(例如,左 Shift、左 Ctrl、左 Alt 等)
  • 保留成员是一个未使用但必须存在的 8 位无符号整数。
  • keys 成员是一个由六个 8 位无符号整数组成的数组,表示当前按下的键。
  1. keyreport 到底发生了什么?我在 HID.cpp 中的 USB_Send 函数中丢失了轨道。

它被发送到主机。

  1. 什么是修饰符,它们在做什么?

有些键是“常规”键(例如 A、B、1、2、# 等)。其他键是修饰符(例如 Shift、Ctrl、Alt)。修饰键在 KeyReport.modifiers 中设置标志。例如,左 Shift 键为 0x02。

  1. 发送的密钥数量是否限制为 1,或者理论上可以是任意数量?

可以同时按下的“常规”键数量为 6,但您也可以按下修饰键(Shift、Alt、Ctrl 等)。

仅供参考:我已经能够通过向 USBAPI.h 文件添加新的键定义来添加其他键(例如数字键盘键):

#define KEY_NUMPAD_DIVIDE   0xDC
#define KEY_NUMPAD_MULTIPLY 0xDD
#define KEY_NUMPAD_MINUS    0xDE
#define KEY_NUMPAD_PLUS     0xDF
#define KEY_NUMPAD_ENTER    0xE0
#define KEY_NUMPAD_1        0xE1
#define KEY_NUMPAD_2        0xE2
#define KEY_NUMPAD_3        0xE3
#define KEY_NUMPAD_4        0xE4
#define KEY_NUMPAD_5        0xE5
#define KEY_NUMPAD_6        0xE6
#define KEY_NUMPAD_7        0xE7
#define KEY_NUMPAD_8        0xE8
#define KEY_NUMPAD_9        0xE9
#define KEY_NUMPAD_0        0xEA
#define KEY_NUMPAD_DEL      0xEB

【讨论】:

  • 非常感谢!我确实需要进一步澄清。我将它们发布在下面的 cmets 中
  • 1.首先你是对的:我测试了 begin() 和 end() 不出所料地没有效果,尽管 Arduino 指南强烈暗示其他情况。但也许这就是他们在我的键盘版本中应该做的:获取和交还对键盘的控制权?怎么可能?
  • 2.我是否正确理解 CTRL、ALT 不能作为键发送,而是用作修饰符?
  • 3 在哪里可以找到修饰符的位掩码?
  • 4.我意识到我犯了一个错误,导致了一些误解。我的意思是问我可以用 20 个键创建自己的 KeyReport 结构吗?
猜你喜欢
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 2011-02-17
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多