熟悉 USB KBD驱动的请进

时间:2022-12-01 13:49:32
想请教:
在D:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\KEYBD 的键盘驱动(好象是MDD层)。不清楚是不是在非USB接口键盘情况下的驱动?
在D:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\USB\CLASS\HID\CLIENTS\KBDHID。在USB接口键盘情况下的MDD?
在D:\WINCE500\PLATFORM\SMDK2416\Src\Drivers\Keybd 这个目录下应该是PDD吧。
望知道的说下。
还有想请教个问题:
在D:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\USB\CLASS\HID\CLIENTS\KBDHID目录下的kbdhid.cpp有:
几个数组:
static const USAGE_TO_SCANCODE g_rgUsageToSc[] = {
    { 0,                                  0x00 }, // 00 - No Event
    { 0,                                  0x00 }, // 01 - Overrun
    { 0,                                  0x00 }, // 02 - POST Fail
    { 0,                                  0x00 }, // 03 - ErrorUndefined
    { 0,                                  0x1C }, // 04 - a A
//change by hlj for test
    { 0,                                  0x32 }, // 05 - b B
    //{ 0,                                  0x21 }, // 05 - b B
    //change by hlj for test
    { 0,                                  0x21 }, // 06 - c C
    { 0,                                  0x23 }, // 07 - d D
// { 0,                                  0x23 }, // 06 - c C
//    { 0,                                  0x21 }, // 07 - d D
//
    { 0,                                  0x24 }, // 08 - e E
    { 0,                                  0x2B }, // 09 - f F
    { 0,                                  0x34 }, // 0a - g G
    { 0,                                  0x33 }, // 0b - h H
    { 0,                                  0x43 }, // 0c - i I
    { 0,                                  0x3B }, // 0d - j J
    { 0,                                  0x42 }, // 0e - k K
    { 0,                                  0x4B }, // 0f - l L
    { 0,                                  0x3A }, // 10 - m M
     中间省略了一些,要不发不出来:)

    { 0,                                  0xE1}, // 6a - F15
};

// Mapping from international Usages to AT Scan Codes
#define FIRST_GLOBAL_USAGE 0x85
#define LAST_GLOBAL_USAGE (FIRST_GLOBAL_USAGE + dim(g_rgGlobalUsageToSc) - 1)
static const USAGE_TO_SCANCODE g_rgGlobalUsageToSc[] = 
{
    { 0,                                  0x51 }, // 85 - Keybad , (Brazillian)
    { 0,                                  0x00 }, // 86 - Keypad =
    { MAKE_FLAGS(0,       PT_JPN),        0x51 }, // 87 - Ro
    { MAKE_FLAGS(0,       PT_JPN),        0x13 }, // 88 - Katakana/Hiragana
    { MAKE_FLAGS(0,       PT_JPN),        0x6A }, // 89 - Yen
    { MAKE_FLAGS(0,       PT_JPN),        0x64 }, // 8a - Henkan
    { MAKE_FLAGS(0,       PT_JPN),        0x67 }, // 8b - Muhenkan
    { 0,                                  0x00 }, // 8c - Int'l 6
    { 0,                                  0x00 }, // 8d - Int'l 7
    { 0,                                  0x00 }, // 8e - Int'l 8
    { 0,                                  0x00 }, // 8f - Int'l 9
    { MAKE_FLAGS(0,       PT_NO_BREAK),   0xF2 }, // 90 - Hanguel/English
    { MAKE_FLAGS(0,       PT_NO_BREAK),   0xF1 }, // 91 - Hanja
    { 0,                                  0x63 }, // 92 - LANG Katakana
    { 0,                                  0x62 }, // 93 - LANG Hiragana
    { 0,                                  0x5F }, // 94 - LANG Zenkaku/Hankaku
};

// Mapping from modifier Usages to AT Scan Codes
#define FIRST_MODIFIER_USAGE HID_USAGE_KEYBOARD_LCTRL // 0xE0
#define LAST_MODIFIER_USAGE (FIRST_MODIFIER_USAGE + dim(g_rgModifierUsageToSc) - 1)
static const USAGE_TO_SCANCODE g_rgModifierUsageToSc[] = {
    { MAKE_FLAGS(0,       PT_MODIFIER),   0x14 }, // E0 - Left Control
    { MAKE_FLAGS(0,       PT_MODIFIER),   0x12 }, // E1 - Left Shift
    { MAKE_FLAGS(0,       PT_MODIFIER),   0x11 }, // E2 - Left Alt
    { MAKE_FLAGS(EB_E0,   PT_MODIFIER),   0x1F }, // E3 - Left GUI
    { MAKE_FLAGS(EB_E0,   PT_MODIFIER),   0x14 }, // E4 - Right Control
    { MAKE_FLAGS(0,       PT_MODIFIER),   0x59 }, // E5 - Right Shift
    { MAKE_FLAGS(EB_E0,   PT_MODIFIER),   0x11 }, // E6 - Right Alt
    { MAKE_FLAGS(EB_E0,   PT_MODIFIER),   0x27 }, // E7 - Right GUI
};

希望能帮忙解释下,还有数组的最后一项(16进制数)是根据什么来的?谢谢

4 个解决方案

#1


看是不是MDD还是PDD 就看它实现的接口就可以了!  
其他的没做过不便多言 熟悉 USB KBD驱动的请进

#2


楼主自己说的是对的!kbd就是这样分层的!

#3


usb键盘没有分析过呀!

#4


键盘的一般工作原理是键盘按键产生一个键值到键盘控制器,键盘控制器再将产生的值转换成系统上的键盘定义值
最后一项值就是系统键盘定义值

#1


看是不是MDD还是PDD 就看它实现的接口就可以了!  
其他的没做过不便多言 熟悉 USB KBD驱动的请进

#2


楼主自己说的是对的!kbd就是这样分层的!

#3


usb键盘没有分析过呀!

#4


键盘的一般工作原理是键盘按键产生一个键值到键盘控制器,键盘控制器再将产生的值转换成系统上的键盘定义值
最后一项值就是系统键盘定义值