为什么我的 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} 以指示当前没有按下任何键。
我刚刚开始使用 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} 以指示当前没有按下任何键。