为什么我的 HID 键盘不能很好地工作?

Why my HID keyboard doesn't work very well?

我刚刚开始使用 V-USB 对我的 AtMega8 进行编程 link:https://www.obdev.at/products/vusb/index.html. I'm trying to make a keyboard witch will be pushing CTRL+ALT. To do this I modified one of the project "HID Keys" link: https://www.obdev.at/products/vusb/hidkeys.html。我添加修改:

//line 150, added definitions
#define KEY_DELETE 42
#define ALT_RIG    230 
#define ALT_LEF 226
#define CTRL_LEF    224

(我有这边的定义值:https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf(来自第 53 页))

//line 204, modified code
static const uchar  keyReport[NUM_KEYS + 1][2] PROGMEM = {
/* none */  {0, 0},                     /* no key pressed */
/*  1 */    {0, KEY_A},
/*  2 */    {0, KEY_B},
/*  3 */    {0, KEY_C},
/*  4 */    {0, KEY_D},
/*  5 */    {0, KEY_E},
/*  6 */    {0, KEY_F},
/*  7 */    {0, KEY_G},
/*  8 */    {0, KEY_H},
/*  9 */    {0, KEY_I},
/* 10 */    {0, 0},
/* 11 */    {0, 0},
/* 12 */    {MOD_CONTROL_LEFT, ALT_RIG}, //CTRL+ALT
/* 13 */    {0, KEY_J},
/* 14 */    {0, KEY_K},
/* 15 */    {0, KEY_L},
/* 16 */    {0, KEY_M},
/* 17 */    {0, KEY_N},
};

由于某种原因,uC (AtMega8) 的“单击”按键 (CTRL+ALT) 不起作用。 (我通过同时按下(当(应该)按下来自 uC 的键时)我的“真实”键盘上的 DEL 键来检查这一点 - 然后是“特征”系统管理 window (Windows 7) 应该出现。)我不知道为什么这不起作用。我该怎么做,我的 uC 将按 CTRL+ALT?

示例程序中的报告描述符定义了一个 2 字节的报告来表示一次击键。第一个字节包含 8 位,每个位代表一个键修饰符(左 ctrl、右 alt、左移等),下一个字节是一个索引,代表一个键的用法(键 A、键 B、键删除等)。

您需要在第一个字节中对所需的键修饰符进行逻辑或操作。最简单的方法是简单地将它们加在一起。例如,要发送 Ctrl+Alt+Delete,您可以编码:

{MOD_CONTROL_LEFT+MOD_ALT_LEFT, KEY_DELETE}

不要忘记在之后发送 {0, 0} 以指示当前没有按下任何键。