Arduino:需要帮助理解<keyboard.h>库

时间:2015-12-07 01:19:19

标签: keyboard arduino usb hid

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

  1. 键盘_ :: begin()和键盘_ :: end()应该是startstop键盘模拟,但它们有空体; https://www.arduino.cc/en/Reference/KeyboardBegin
  2. KeyReport特别神秘:
  3. 密钥报告究竟发生了什么?我在HID.cpp中的USB_Send函数中丢失了轨道。无法找到它的来源
  4. 什么是修饰语,他们在做什么?
  5. 发送的密钥数量是否限制为6或理论上可以是任意的?

1 个答案:

答案 0 :(得分:1)

我会尽力回答你的问题。如果您仍有疑问,请与我联系:

  
      
  1. 键盘_ :: begin()和键盘_ :: end()应该启动和停止键盘模拟,但它们有空体
  2.   

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

  
      
  1. KeyReport特别神秘。
  2.   
typedef struct
{
    uint8_t modifiers;
    uint8_t reserved;
    uint8_t keys[6];
} KeyReport;

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

  • 修饰符成员是一个8位无符号整数,包含各种标志(例如左移,左Ctrl,左Alt等)。
  • 保留成员是一个未使用的8位无符号整数,但必须在那里。
  • keys成员是一个由6个8位无符号整数组成的数组,表示当前按下的键。
  
      
  1. 密钥报告究竟发生了什么?我在HID.cpp中的USB_Send函数中丢失了跟踪。
  2.   

它被发送到主机。

  
      
  1. 什么是修饰语,他们在做什么?
  2.   

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

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

可同时按下的“常规”键的数量为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