diff --git a/examples/device/cdc_msc_hid/src/msc_disk.c b/examples/device/cdc_msc_hid/src/msc_disk.c index f8f4f3cb..de5098f9 100644 --- a/examples/device/cdc_msc_hid/src/msc_disk.c +++ b/examples/device/cdc_msc_hid/src/msc_disk.c @@ -50,30 +50,59 @@ const #endif uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = { - //------------- Boot Sector -------------// + //------------- Block0: Boot Sector -------------// // byte_per_sector = DISK_BLOCK_SIZE; fat12_sector_num_16 = DISK_BLOCK_NUM; // sector_per_cluster = 1; reserved_sectors = 1; // fat_num = 1; fat12_root_entry_num = 16; // sector_per_fat = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; // drive_number = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; // filesystem_type = "FAT12 "; volume_serial_number = 0x1234; volume_label = "tinyusb msc"; - [0] = { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, 0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 0x74, 0x69, 0x6E, 0x79, 0x75, 0x73, 0x62, 0x20, 0x6D, 0x73, 0x63, 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, - [510] = 0x55, [511] = 0xAA // FAT magic code + + // Zero up to 2 last bytes of FAT magic code + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA, // FAT magic code at 510-511 }, - //------------- FAT12 Table -------------// - [1] = + //------------- Block1: FAT12 Table -------------// { 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file }, - //------------- Root Directory -------------// - [2] = + //------------- Block2: Root Directory -------------// { // first entry is volume label 0x54, 0x49, 0x4E, 0x59, 0x55, 0x53, 0x42, 0x20, 0x4D, 0x53, 0x43, 0x08, 0x00, 0x00, 0x00, 0x00, @@ -81,11 +110,11 @@ uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = // second entry is readme file 'R' , 'E' , 'A' , 'D' , 'M' , 'E' , ' ' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, 0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, - sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files ize (4 Bytes) + sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) }, - //------------- Readme Content -------------// - [3] = README_CONTENTS + //------------- Block3: Readme Content -------------// + README_CONTENTS }; diff --git a/examples/device/cdc_msc_hid/src/tusb_config.h b/examples/device/cdc_msc_hid/src/tusb_config.h index 7cea8b78..c2296e2c 100644 --- a/examples/device/cdc_msc_hid/src/tusb_config.h +++ b/examples/device/cdc_msc_hid/src/tusb_config.h @@ -1,4 +1,4 @@ -/* +/* * The MIT License (MIT) * * Copyright (c) 2018, hathach (tinyusb.org) @@ -108,12 +108,6 @@ // HID //-------------------------------------------------------------------- -/* Use the HID_ASCII_TO_KEYCODE lookup - * This will occupies 256 bytes of ROM. It will also enable the use of extra APIs - * - tud_hid_keyboard_send_char() - */ -#define CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP 0 - #ifdef __cplusplus } #endif diff --git a/examples/device/cdc_msc_hid_freertos/src/tusb_config.h b/examples/device/cdc_msc_hid_freertos/src/tusb_config.h index 15f09954..eaed1285 100644 --- a/examples/device/cdc_msc_hid_freertos/src/tusb_config.h +++ b/examples/device/cdc_msc_hid_freertos/src/tusb_config.h @@ -108,12 +108,6 @@ // HID //-------------------------------------------------------------------- -/* Use the HID_ASCII_TO_KEYCODE lookup - * This will occupies 256 bytes of ROM. It will also enable the use of extra APIs - * - tud_hid_keyboard_send_char() - */ -#define CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP 0 - #ifdef __cplusplus } #endif diff --git a/examples/host/cdc_msc_hid/src/tusb_config.h b/examples/host/cdc_msc_hid/src/tusb_config.h index 693ce5ac..a1b4352d 100644 --- a/examples/host/cdc_msc_hid/src/tusb_config.h +++ b/examples/host/cdc_msc_hid/src/tusb_config.h @@ -116,14 +116,6 @@ // HID //-------------------------------------------------------------------- -/* Use the HID_ASCII_TO_KEYCODE lookup if CFG_TUD_HID_KEYBOARD is enabled. - * This will occupies 256 bytes of ROM. It will also enable the use of 2 extra APIs - * - tud_hid_keyboard_send_char() - * - tud_hid_keyboard_send_string() - */ -#define CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP 1 - - #ifdef __cplusplus } #endif diff --git a/src/class/hid/hid_device.c b/src/class/hid/hid_device.c index 38ad99a3..78def53f 100644 --- a/src/class/hid/hid_device.c +++ b/src/class/hid/hid_device.c @@ -129,19 +129,6 @@ bool tud_hid_keyboard_report(uint8_t report_id, uint8_t modifier, uint8_t keycod return tud_hid_report(report_id, &report, sizeof(report)); } -#if CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP -bool tud_hid_keyboard_key_press(uint8_t report_id, char ch) -{ - uint8_t keycode[6] = { 0 }; - uint8_t modifier = 0; - - if ( HID_ASCII_TO_KEYCODE[(uint8_t)ch].shift ) modifier = KEYBOARD_MODIFIER_LEFTSHIFT; - keycode[0] = HID_ASCII_TO_KEYCODE[(uint8_t)ch].keycode; - - return tud_hid_keyboard_report(report_id, modifier, keycode); -} -#endif // CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP - //--------------------------------------------------------------------+ // MOUSE APPLICATION API //--------------------------------------------------------------------+ @@ -337,143 +324,4 @@ bool hidd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t return true; } - -//------------- Ascii to Keycode Lookup -------------// -#if CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP -const hid_ascii_to_keycode_entry_t HID_ASCII_TO_KEYCODE[128] = -{ - {0, 0 }, // 0x00 Null - {0, 0 }, // 0x01 - {0, 0 }, // 0x02 - {0, 0 }, // 0x03 - {0, 0 }, // 0x04 - {0, 0 }, // 0x05 - {0, 0 }, // 0x06 - {0, 0 }, // 0x07 - {0, HID_KEY_BACKSPACE }, // 0x08 Backspace - {0, HID_KEY_TAB }, // 0x09 Horizontal Tab - {0, HID_KEY_RETURN }, // 0x0A Line Feed - {0, 0 }, // 0x0B - {0, 0 }, // 0x0C - {0, HID_KEY_RETURN }, // 0x0D Carriage return - {0, 0 }, // 0x0E - {0, 0 }, // 0x0F - {0, 0 }, // 0x10 - {0, 0 }, // 0x11 - {0, 0 }, // 0x12 - {0, 0 }, // 0x13 - {0, 0 }, // 0x14 - {0, 0 }, // 0x15 - {0, 0 }, // 0x16 - {0, 0 }, // 0x17 - {0, 0 }, // 0x18 - {0, 0 }, // 0x19 - {0, 0 }, // 0x1A - {0, HID_KEY_ESCAPE }, // 0x1B Escape - {0, 0 }, // 0x1C - {0, 0 }, // 0x1D - {0, 0 }, // 0x1E - {0, 0 }, // 0x1F - - {0, HID_KEY_SPACE }, // 0x20 - {1, HID_KEY_1 }, // 0x21 ! - {1, HID_KEY_APOSTROPHE }, // 0x22 " - {1, HID_KEY_3 }, // 0x23 # - {1, HID_KEY_4 }, // 0x24 $ - {1, HID_KEY_5 }, // 0x25 % - {1, HID_KEY_7 }, // 0x26 & - {0, HID_KEY_APOSTROPHE }, // 0x27 ' - {1, HID_KEY_9 }, // 0x28 ( - {1, HID_KEY_0 }, // 0x29 ) - {1, HID_KEY_8 }, // 0x2A * - {1, HID_KEY_EQUAL }, // 0x2B + - {0, HID_KEY_COMMA }, // 0x2C , - {0, HID_KEY_MINUS }, // 0x2D - - {0, HID_KEY_PERIOD }, // 0x2E . - {0, HID_KEY_SLASH }, // 0x2F / - {0, HID_KEY_0 }, // 0x30 0 - {0, HID_KEY_1 }, // 0x31 1 - {0, HID_KEY_2 }, // 0x32 2 - {0, HID_KEY_3 }, // 0x33 3 - {0, HID_KEY_4 }, // 0x34 4 - {0, HID_KEY_5 }, // 0x35 5 - {0, HID_KEY_6 }, // 0x36 6 - {0, HID_KEY_7 }, // 0x37 7 - {0, HID_KEY_8 }, // 0x38 8 - {0, HID_KEY_9 }, // 0x39 9 - {1, HID_KEY_SEMICOLON }, // 0x3A : - {0, HID_KEY_SEMICOLON }, // 0x3B ; - {1, HID_KEY_COMMA }, // 0x3C < - {0, HID_KEY_EQUAL }, // 0x3D = - {1, HID_KEY_PERIOD }, // 0x3E > - {1, HID_KEY_SLASH }, // 0x3F ? - - {1, HID_KEY_2 }, // 0x40 @ - {1, HID_KEY_A }, // 0x41 A - {1, HID_KEY_B }, // 0x42 B - {1, HID_KEY_C }, // 0x43 C - {1, HID_KEY_D }, // 0x44 D - {1, HID_KEY_E }, // 0x45 E - {1, HID_KEY_F }, // 0x46 F - {1, HID_KEY_G }, // 0x47 G - {1, HID_KEY_H }, // 0x48 H - {1, HID_KEY_I }, // 0x49 I - {1, HID_KEY_J }, // 0x4A J - {1, HID_KEY_K }, // 0x4B K - {1, HID_KEY_L }, // 0x4C L - {1, HID_KEY_M }, // 0x4D M - {1, HID_KEY_N }, // 0x4E N - {1, HID_KEY_O }, // 0x4F O - {1, HID_KEY_P }, // 0x50 P - {1, HID_KEY_Q }, // 0x51 Q - {1, HID_KEY_R }, // 0x52 R - {1, HID_KEY_S }, // 0x53 S - {1, HID_KEY_T }, // 0x55 T - {1, HID_KEY_U }, // 0x55 U - {1, HID_KEY_V }, // 0x56 V - {1, HID_KEY_W }, // 0x57 W - {1, HID_KEY_X }, // 0x58 X - {1, HID_KEY_Y }, // 0x59 Y - {1, HID_KEY_Z }, // 0x5A Z - {0, HID_KEY_BRACKET_LEFT }, // 0x5B [ - {0, HID_KEY_BACKSLASH }, // 0x5C '\' - {0, HID_KEY_BRACKET_RIGHT }, // 0x5D ] - {1, HID_KEY_6 }, // 0x5E ^ - {1, HID_KEY_MINUS }, // 0x5F _ - - {0, HID_KEY_GRAVE }, // 0x60 ` - {0, HID_KEY_A }, // 0x61 a - {0, HID_KEY_B }, // 0x62 b - {0, HID_KEY_C }, // 0x63 c - {0, HID_KEY_D }, // 0x66 d - {0, HID_KEY_E }, // 0x65 e - {0, HID_KEY_F }, // 0x66 f - {0, HID_KEY_G }, // 0x67 g - {0, HID_KEY_H }, // 0x68 h - {0, HID_KEY_I }, // 0x69 i - {0, HID_KEY_J }, // 0x6A j - {0, HID_KEY_K }, // 0x6B k - {0, HID_KEY_L }, // 0x6C l - {0, HID_KEY_M }, // 0x6D m - {0, HID_KEY_N }, // 0x6E n - {0, HID_KEY_O }, // 0x6F o - {0, HID_KEY_P }, // 0x70 p - {0, HID_KEY_Q }, // 0x71 q - {0, HID_KEY_R }, // 0x72 r - {0, HID_KEY_S }, // 0x73 s - {0, HID_KEY_T }, // 0x75 t - {0, HID_KEY_U }, // 0x75 u - {0, HID_KEY_V }, // 0x76 v - {0, HID_KEY_W }, // 0x77 w - {0, HID_KEY_X }, // 0x78 x - {0, HID_KEY_Y }, // 0x79 y - {0, HID_KEY_Z }, // 0x7A z - {1, HID_KEY_BRACKET_LEFT }, // 0x7B { - {1, HID_KEY_BACKSLASH }, // 0x7C | - {1, HID_KEY_BRACKET_RIGHT }, // 0x7D } - {1, HID_KEY_GRAVE }, // 0x7E ~ - {0, HID_KEY_DELETE } // 0x7F Delete -}; -#endif // CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP - #endif diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h index f72be61e..13a21327 100644 --- a/src/class/hid/hid_device.h +++ b/src/class/hid/hid_device.h @@ -38,9 +38,7 @@ //--------------------------------------------------------------------+ // Class Driver Default Configure & Validation //--------------------------------------------------------------------+ -#ifndef CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP -#define CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP 0 -#endif + //--------------------------------------------------------------------+ // Application API @@ -81,16 +79,6 @@ static inline bool tud_hid_keyboard_key_release(uint8_t report_id) return tud_hid_keyboard_report(report_id, 0, NULL); } -#if CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP -bool tud_hid_keyboard_key_press(uint8_t report_id, char ch); - -typedef struct{ - uint8_t shift; - uint8_t keycode; -}hid_ascii_to_keycode_entry_t; -extern const hid_ascii_to_keycode_entry_t HID_ASCII_TO_KEYCODE[128]; -#endif - //--------------------------------------------------------------------+ // MOUSE API // Convenient helper to send mouse report if application use standard/boot @@ -281,8 +269,154 @@ static inline bool tud_hid_mouse_button_release(uint8_t report_id) HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \ -/** @} */ -/** @} */ +/*-------------------------------------------------------------------- + * ASCII to KEYCODE Conversion + * Expand to array of [128][2] (shift, keycode) + * + * Usage: example to convert input char into keyboard report (modifier + keycode) + * + * uint8_t const conv_table[128][2] = { HID_ASCII_TO_KEYCODE }; + * + * uint8_t keycode[6] = { 0 }; + * uint8_t modifier = 0; + * + * if ( conv_table[chr][0] ) modifier = KEYBOARD_MODIFIER_LEFTSHIFT; + * keycode[0] = conv_table[chr][1]; + * tud_hid_keyboard_report(report_id, modifier, keycode); + * + *--------------------------------------------------------------------*/ +#define HID_ASCII_TO_KEYCODE \ + {0, 0 }, /* 0x00 Null */ \ + {0, 0 }, /* 0x01 */ \ + {0, 0 }, /* 0x02 */ \ + {0, 0 }, /* 0x03 */ \ + {0, 0 }, /* 0x04 */ \ + {0, 0 }, /* 0x05 */ \ + {0, 0 }, /* 0x06 */ \ + {0, 0 }, /* 0x07 */ \ + {0, HID_KEY_BACKSPACE }, /* 0x08 Backspace */ \ + {0, HID_KEY_TAB }, /* 0x09 Tab */ \ + {0, HID_KEY_RETURN }, /* 0x0A Line Feed */ \ + {0, 0 }, /* 0x0B */ \ + {0, 0 }, /* 0x0C */ \ + {0, HID_KEY_RETURN }, /* 0x0D CR */ \ + {0, 0 }, /* 0x0E */ \ + {0, 0 }, /* 0x0F */ \ + {0, 0 }, /* 0x10 */ \ + {0, 0 }, /* 0x11 */ \ + {0, 0 }, /* 0x12 */ \ + {0, 0 }, /* 0x13 */ \ + {0, 0 }, /* 0x14 */ \ + {0, 0 }, /* 0x15 */ \ + {0, 0 }, /* 0x16 */ \ + {0, 0 }, /* 0x17 */ \ + {0, 0 }, /* 0x18 */ \ + {0, 0 }, /* 0x19 */ \ + {0, 0 }, /* 0x1A */ \ + {0, HID_KEY_ESCAPE }, /* 0x1B Escape */ \ + {0, 0 }, /* 0x1C */ \ + {0, 0 }, /* 0x1D */ \ + {0, 0 }, /* 0x1E */ \ + {0, 0 }, /* 0x1F */ \ + \ + {0, HID_KEY_SPACE }, /* 0x20 */ \ + {1, HID_KEY_1 }, /* 0x21 ! */ \ + {1, HID_KEY_APOSTROPHE }, /* 0x22 " */ \ + {1, HID_KEY_3 }, /* 0x23 # */ \ + {1, HID_KEY_4 }, /* 0x24 $ */ \ + {1, HID_KEY_5 }, /* 0x25 % */ \ + {1, HID_KEY_7 }, /* 0x26 & */ \ + {0, HID_KEY_APOSTROPHE }, /* 0x27 ' */ \ + {1, HID_KEY_9 }, /* 0x28 ( */ \ + {1, HID_KEY_0 }, /* 0x29 ) */ \ + {1, HID_KEY_8 }, /* 0x2A * */ \ + {1, HID_KEY_EQUAL }, /* 0x2B + */ \ + {0, HID_KEY_COMMA }, /* 0x2C , */ \ + {0, HID_KEY_MINUS }, /* 0x2D - */ \ + {0, HID_KEY_PERIOD }, /* 0x2E . */ \ + {0, HID_KEY_SLASH }, /* 0x2F / */ \ + {0, HID_KEY_0 }, /* 0x30 0 */ \ + {0, HID_KEY_1 }, /* 0x31 1 */ \ + {0, HID_KEY_2 }, /* 0x32 2 */ \ + {0, HID_KEY_3 }, /* 0x33 3 */ \ + {0, HID_KEY_4 }, /* 0x34 4 */ \ + {0, HID_KEY_5 }, /* 0x35 5 */ \ + {0, HID_KEY_6 }, /* 0x36 6 */ \ + {0, HID_KEY_7 }, /* 0x37 7 */ \ + {0, HID_KEY_8 }, /* 0x38 8 */ \ + {0, HID_KEY_9 }, /* 0x39 9 */ \ + {1, HID_KEY_SEMICOLON }, /* 0x3A : */ \ + {0, HID_KEY_SEMICOLON }, /* 0x3B ; */ \ + {1, HID_KEY_COMMA }, /* 0x3C < */ \ + {0, HID_KEY_EQUAL }, /* 0x3D = */ \ + {1, HID_KEY_PERIOD }, /* 0x3E > */ \ + {1, HID_KEY_SLASH }, /* 0x3F ? */ \ + \ + {1, HID_KEY_2 }, /* 0x40 @ */ \ + {1, HID_KEY_A }, /* 0x41 A */ \ + {1, HID_KEY_B }, /* 0x42 B */ \ + {1, HID_KEY_C }, /* 0x43 C */ \ + {1, HID_KEY_D }, /* 0x44 D */ \ + {1, HID_KEY_E }, /* 0x45 E */ \ + {1, HID_KEY_F }, /* 0x46 F */ \ + {1, HID_KEY_G }, /* 0x47 G */ \ + {1, HID_KEY_H }, /* 0x48 H */ \ + {1, HID_KEY_I }, /* 0x49 I */ \ + {1, HID_KEY_J }, /* 0x4A J */ \ + {1, HID_KEY_K }, /* 0x4B K */ \ + {1, HID_KEY_L }, /* 0x4C L */ \ + {1, HID_KEY_M }, /* 0x4D M */ \ + {1, HID_KEY_N }, /* 0x4E N */ \ + {1, HID_KEY_O }, /* 0x4F O */ \ + {1, HID_KEY_P }, /* 0x50 P */ \ + {1, HID_KEY_Q }, /* 0x51 Q */ \ + {1, HID_KEY_R }, /* 0x52 R */ \ + {1, HID_KEY_S }, /* 0x53 S */ \ + {1, HID_KEY_T }, /* 0x55 T */ \ + {1, HID_KEY_U }, /* 0x55 U */ \ + {1, HID_KEY_V }, /* 0x56 V */ \ + {1, HID_KEY_W }, /* 0x57 W */ \ + {1, HID_KEY_X }, /* 0x58 X */ \ + {1, HID_KEY_Y }, /* 0x59 Y */ \ + {1, HID_KEY_Z }, /* 0x5A Z */ \ + {0, HID_KEY_BRACKET_LEFT }, /* 0x5B [ */ \ + {0, HID_KEY_BACKSLASH }, /* 0x5C '\' */ \ + {0, HID_KEY_BRACKET_RIGHT }, /* 0x5D ] */ \ + {1, HID_KEY_6 }, /* 0x5E ^ */ \ + {1, HID_KEY_MINUS }, /* 0x5F _ */ \ + \ + {0, HID_KEY_GRAVE }, /* 0x60 ` */ \ + {0, HID_KEY_A }, /* 0x61 a */ \ + {0, HID_KEY_B }, /* 0x62 b */ \ + {0, HID_KEY_C }, /* 0x63 c */ \ + {0, HID_KEY_D }, /* 0x66 d */ \ + {0, HID_KEY_E }, /* 0x65 e */ \ + {0, HID_KEY_F }, /* 0x66 f */ \ + {0, HID_KEY_G }, /* 0x67 g */ \ + {0, HID_KEY_H }, /* 0x68 h */ \ + {0, HID_KEY_I }, /* 0x69 i */ \ + {0, HID_KEY_J }, /* 0x6A j */ \ + {0, HID_KEY_K }, /* 0x6B k */ \ + {0, HID_KEY_L }, /* 0x6C l */ \ + {0, HID_KEY_M }, /* 0x6D m */ \ + {0, HID_KEY_N }, /* 0x6E n */ \ + {0, HID_KEY_O }, /* 0x6F o */ \ + {0, HID_KEY_P }, /* 0x70 p */ \ + {0, HID_KEY_Q }, /* 0x71 q */ \ + {0, HID_KEY_R }, /* 0x72 r */ \ + {0, HID_KEY_S }, /* 0x73 s */ \ + {0, HID_KEY_T }, /* 0x75 t */ \ + {0, HID_KEY_U }, /* 0x75 u */ \ + {0, HID_KEY_V }, /* 0x76 v */ \ + {0, HID_KEY_W }, /* 0x77 w */ \ + {0, HID_KEY_X }, /* 0x78 x */ \ + {0, HID_KEY_Y }, /* 0x79 y */ \ + {0, HID_KEY_Z }, /* 0x7A z */ \ + {1, HID_KEY_BRACKET_LEFT }, /* 0x7B { */ \ + {1, HID_KEY_BACKSLASH }, /* 0x7C | */ \ + {1, HID_KEY_BRACKET_RIGHT }, /* 0x7D } */ \ + {1, HID_KEY_GRAVE }, /* 0x7E ~ */ \ + {0, HID_KEY_DELETE } /* 0x7F Delete */ \ //--------------------------------------------------------------------+ // Internal Class Driver API