![]() |
Forum Index : Microcontroller and PC projects : Foreign language keyboards for the CMM2
Page 1 of 2 ![]() ![]() |
|||||
Author | Message | ||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10035 |
If you have a foreign language USB keyboard and a CMM2 then I'm prepared to try and implement the key mapping and code changes needed to get a system that works for you. I can't do this in a vacuum as I need code to be tested. So, if you are interested in helping, post on this thread when you have: 1: a working CMM2 2: the CMM2 connected to your keyboard with the keyboard enumerating and responding 3: keys being interpreted wrongly 4: time and energy to properly test The code will be included in beta releases for V5.05.03 which I will make available as I work with you. I will not and cannot attempt to implement different keyboards without help. USB keyboards are very much different to PS2! |
||||
SWA-Guy Newbie ![]() Joined: 01/02/2019 Location: GermanyPosts: 24 |
Hello Peter, I'm ready for testing a german keyboard layout. I've a running CMM2 and a lot of usb keyboards with a german layout. I'll start if you publish the beta release. |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10035 |
Not so quick. I need some work from you first. ![]() Below is the keyboard map for a standard UK keyboard. The numbers on the left are the ASCII code generated when the key with the description given is pressed first without the shift key and then with. e.g the key labelled USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT generates 49 without the shift key (ascii for 1) and 33 with the shift key (ascii for the exclamation symbol). I've also attached a picture of the UK keyboard as reference. I need you to produce an equivalent list for the German keyboard. You can assume that keys in the same physical location will produce the same internal USB code - in my example hex 1E. This is the first thing we need to prove. For keys that have no ascii representation (i.e. an ascii code below 128), for example ü, please set the code to 0 In addition I need a separate list of standard ASCII keys like [ { ] and } which on a German keyboard need some special additional keypress - e.g. Alt Gr or Alt GR + SHIFT Please produce this in roughly the same format e.g. (example deliberately incorrect) 44,55 //German open square bracket, German open curly bracket = 0x33 + Alt GR Note where my table has codes above 128 (hex 80) these are special codes used internally by the CMM2 firmware and shouldn't be changed I can then set this up as an additional table for the German keyboard. When you have something please PM me with your direct email address and then I can send you the firmware direct without having to post multiple tries. ![]() 0,0,// USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED = 0x00, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_ROLL_OVER = 0x01, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POST_FAIL = 0x02, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03, 97,65,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04, 98,66,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05, 99,67,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_C = 0x06, 100,68,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_D = 0x07, 101,69,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_E = 0x08, 102,70,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F = 0x09, 103,71,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_G = 0x0A, 104,72,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_H = 0x0B, 105,73,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_I = 0x0C, 106,74,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_J = 0x0D, 107,75,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_K = 0x0E, 108,76,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_L = 0x0F, 109,77,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_M = 0x10, 110,78,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_N = 0x11, 111,79,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_O = 0x12, 112,80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_P = 0x13, 113,81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14, 114,82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_R = 0x15, 115,83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_S = 0x16, 116,84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_T = 0x17, 117,85,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_U = 0x18, 118,86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_V = 0x19, 119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A, 120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B, 121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C, 122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D, 49,33,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT = 0x1E, 50,34,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_2_AND_AT = 0x1F, QUOTE UK!!!! 51,35,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_3_AND_HASH = 0x20, 52,36,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_4_AND_DOLLAR = 0x21, 53,37,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_5_AND_PERCENT = 0x22, 54,94,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_6_AND_CARROT = 0x23, 55,38,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_7_AND_AMPERSAND = 0x24, 56,42,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_8_AND_ASTERISK = 0x25, 57,40,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_9_AND_OPEN_PARENTHESIS = 0x26, 48,41,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_0_AND_CLOSE_PARENTHESIS = 0x27, 10,10,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN_ENTER = 0x28, 27,27,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ESCAPE = 0x29, 8,8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE = 0x2A, 9,9,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_TAB = 0x2B, 32,32,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SPACEBAR = 0x2C, 45,95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MINUS_AND_UNDERSCORE = 0x2D, 61,43,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_AND_PLUS = 0x2E, 91,123,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPEN_BRACKET_AND_OPEN_CURLY_BRACE = 0x2F, 93,125,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLOSE_BRACKET_AND_CLOSE_CURLY_BRACE = 0x30, 92,124,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_BACK_SLASH_AND_PIPE = 0x31, 35,126,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_HASH_AND_TILDE = 0x32, 59,58,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEMICOLON_AND_COLON = 0x33, 39,64,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APOSTROPHE_AND_QUOTE = 0x34, @ UK/// 96,126,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_GRAVE_ACCENT_AND_TILDE = 0x35, 44,60,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COMMA_AND_LESS_THAN = 0x36, 46,62,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PERIOD_AND_GREATER_THAN = 0x37, 47,63,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FORWARD_SLASH_AND_QUESTION_MARK = 0x38, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK = 0x39, 0x91,0x91,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F1 = 0x3A, 0x92,0x92,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F2 = 0x3B, 0x93,0x93,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F3 = 0x3C, 0x94,0x94,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F4 = 0x3D, 0x95,0x95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F5 = 0x3E, 0x96,0x96,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F6 = 0x3F, 0x97,0x97,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F7 = 0x40, 0x98,0x98,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F8 = 0x41, 0x99,0x99,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F9 = 0x42, 0x9a,0x9a,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F10 = 0x43, 0x9b,0x9b,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F11 = 0x44, 0x9c,0x9c,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F12 = 0x45, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRINT_SCREEN = 0x46, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK = 0x47, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAUSE = 0x48, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INSERT = 0x49, 0x86,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HOME = 0x4A, 0x88,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_UP = 0x4B, 0x7f,0x7f,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE_FORWARD = 0x4C, 0x87,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_END = 0x4D, 0x89,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_DOWN = 0x4E, 0x83,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ARROW = 0x4F, 0x82,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ARROW = 0x50, 0x81,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DOWN_ARROW = 0x51, 0x80,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UP_ARROW = 0x52, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR = 0x53, 47,47,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH = 0x54, 42,42,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ASTERISK = 0x55, 45,45,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_MINUS = 0x56, 43,43,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS = 0x57, 10,10,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ENTER = 0x58, 49,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_1_AND_END = 0x59, 50,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_2_AND_DOWN_ARROW = 0x5A, 51,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_3_AND_PAGE_DOWN = 0x5B, 52,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_4_AND_LEFT_ARROW = 0x5C, 53,53,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_5 = 0x5D, 54,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_6_AND_RIGHT_ARROW = 0x5E, 55,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_7_AND_HOME = 0x5F, 56,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_8_AND_UP_ARROW = 0x60, 57,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_9_AND_PAGE_UP = 0x61, 48,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_0_AND_INSERT = 0x62, 46,0x7f, //USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE = 0x63, 92,124 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64, Edited 2020-06-08 03:32 by matherp |
||||
SWA-Guy Newbie ![]() Joined: 01/02/2019 Location: GermanyPosts: 24 |
OK, tomorrow I try to understand exactly your description. I hope I do it. |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10035 |
Perhaps a better example will help: For UK 119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A, 120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B, 121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C, 122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D, For Germany Z and Y are transposed so: 119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A, 120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B, 122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1C, 121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1D, That is the easy one, the various punctuation character will require some careful slog work. Don't worry if it isn't perfect first time. As long as the table structure is intact we can iterate to get it perfect. AFAIK the relevant Alt Gr character are just {[}]@. I've coded for that already and tested implementing select OPTION USBKEYBOARD DE and that is all working. Edited 2020-06-08 04:45 by matherp |
||||
goc30![]() Guru ![]() Joined: 12/04/2017 Location: FrancePosts: 435 |
Hi Peter no pb for me. I wait for receive my Stm card but I can begin to make an converter file. I have an old qwerty keyboard, so I could compare on PC, the codes sent according to the type of keyboard what do you want?, an external file?, or same list as you give here?, or a list of data (like define fonts) to put in prog? |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10035 |
That would be perfect + a list of ALT codes. I think you have a bit more work to do as that SWA-Guy all your numbers are upper case |
||||
SWA-Guy Newbie ![]() Joined: 01/02/2019 Location: GermanyPosts: 24 |
Hello Peter, here the geman keyboard layout. I hope I find all with the correct code. For information I added the special german characters on the rigt side with the ascii code above 128. 0,0,// USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED = 0x00, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_ROLL_OVER = 0x01, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POST_FAIL = 0x02, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03, 97,65,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04, 98,66,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05, 99,67,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_C = 0x06, 100,68,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_D = 0x07, 101,69,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_E = 0x08, 102,70,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F = 0x09, 103,71,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_G = 0x0A, 104,72,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_H = 0x0B, 105,73,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_I = 0x0C, 106,74,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_J = 0x0D, 107,75,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_K = 0x0E, 108,76,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_L = 0x0F, 109,77,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_M = 0x10, 110,78,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_N = 0x11, 111,79,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_O = 0x12, 112,80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_P = 0x13, 113,81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14, 114,82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_R = 0x15, 115,83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_S = 0x16, 116,84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_T = 0x17, 117,85,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_U = 0x18, 118,86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_V = 0x19, 119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A, 120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B, 122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C, 121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D, 49,33,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT = 0x1E, 50,34,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_2_AND_AT = 0x1F, 51,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_3_AND_HASH = 0x20, DE: §=245 52,36,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_4_AND_DOLLAR = 0x21, 53,37,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_5_AND_PERCENT = 0x22, 54,38,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_6_AND_CARROT = 0x23, 55,47,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_7_AND_AMPERSAND = 0x24, 56,40,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_8_AND_ASTERISK = 0x25, 57,41,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_9_AND_OPEN_PARENTHESIS = 0x26, 48,61,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_0_AND_CLOSE_PARENTHESIS = 0x27, 10,10,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN_ENTER = 0x28, 27,27,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ESCAPE = 0x29, 8,8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE = 0x2A, 9,9,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_TAB = 0x2B, 32,32,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SPACEBAR = 0x2C, 0,63,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MINUS_AND_UNDERSCORE = 0x2D, DE: ß=225 0,96,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_AND_PLUS = 0x2E, DE: ´=239 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPEN_BRACKET_AND_OPEN_CURLY_BRACE = 0x2F, DE: ü=129,Ü=154 43,42,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLOSE_BRACKET_AND_CLOSE_CURLY_BRACE = 0x30, 60,62,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_BACK_SLASH_AND_PIPE = 0x31, 35,39,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_HASH_AND_TILDE = 0x32, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEMICOLON_AND_COLON = 0x33, DE: ö=228,Ö=229 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APOSTROPHE_AND_QUOTE = 0x34, DE: ä=132,Ä=142 94,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_GRAVE_ACCENT_AND_TILDE = 0x35, DE: °=167 44,59,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COMMA_AND_LESS_THAN = 0x36, 46,58,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PERIOD_AND_GREATER_THAN = 0x37, 45,95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FORWARD_SLASH_AND_QUESTION_MARK = 0x38, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK = 0x39, 0x91,0x91,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F1 = 0x3A, 0x92,0x92,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F2 = 0x3B, 0x93,0x93,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F3 = 0x3C, 0x94,0x94,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F4 = 0x3D, 0x95,0x95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F5 = 0x3E, 0x96,0x96,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F6 = 0x3F, 0x97,0x97,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F7 = 0x40, 0x98,0x98,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F8 = 0x41, 0x99,0x99,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F9 = 0x42, 0x9a,0x9a,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F10 = 0x43, 0x9b,0x9b,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F11 = 0x44, 0x9c,0x9c,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F12 = 0x45, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRINT_SCREEN = 0x46, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK = 0x47, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAUSE = 0x48, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INSERT = 0x49, 0x86,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HOME = 0x4A, 0x88,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_UP = 0x4B, 0x7f,0x7f,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE_FORWARD = 0x4C, 0x87,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_END = 0x4D, 0x89,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_DOWN = 0x4E, 0x83,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ARROW = 0x4F, 0x82,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ARROW = 0x50, 0x81,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DOWN_ARROW = 0x51, 0x80,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UP_ARROW = 0x52, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR = 0x53, 47,47,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH = 0x54, 42,42,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ASTERISK = 0x55, 45,45,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_MINUS = 0x56, 43,43,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS = 0x57, 10,10,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ENTER = 0x58, 49,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_1_AND_END = 0x59, 50,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_2_AND_DOWN_ARROW = 0x5A, 51,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_3_AND_PAGE_DOWN = 0x5B, 52,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_4_AND_LEFT_ARROW = 0x5C, 53,53,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_5 = 0x5D, 54,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_6_AND_RIGHT_ARROW = 0x5E, 55,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_7_AND_HOME = 0x5F, 56,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_8_AND_UP_ARROW = 0x60, 57,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_9_AND_PAGE_UP = 0x61, 48,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_0_AND_INSERT = 0x62, 46,0x7f, //USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE = 0x63, 92,124 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64, Thank you for your special effort ![]() |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10035 |
Please download Version 5.05.03b1a from http://geoffg.net/Downloads/Maximite/CMM2_Beta.zip and try it. OPTION USBKEYBOARD DE Mapping as per your list + Alt GR chars [ { ] } @ Let me know how it goes and any changes needed NB: I suspect the key to the left of Y is wrong - this is the last entry in the list. It also needs another Alt GR character for | 92,124 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64, should be ? 60,62 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64, Edited 2020-06-09 01:41 by matherp |
||||
SWA-Guy Newbie ![]() Joined: 01/02/2019 Location: GermanyPosts: 24 |
Hello Peter, the first test looks very good. I found only three point to change: 1. You are right with the key left to "Y". It should be as you describes above: I overlook this line, but what is with I thought this was the correct key, but apparently not. 2. The ALT GR "9" = "]" and ALT GR "0" = "}" have to be swapped. 3. The key next to the Delete-Key in the upper line of the keyboard (UK-KEY "=/+") does not shows "´" but "°". |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10035 |
1: Non US keyboards have an extra key in order to allow characters like £ on the top row. Hence the description NON_US_FORWARD_SLASH_AND_PIPE do you need to change anything on the other key? 2: have changed 3: manual page 28 Please download V5.05.02B1b from the same address and try again |
||||
SWA-Guy Newbie ![]() Joined: 01/02/2019 Location: GermanyPosts: 24 |
Hello Peter, with the new CMM2 release all keys for the german layout work correctly. Thank you very much for the fast support. To point 1. : At the moment I don't found anything on the other keys. Greetings from Germany. |
||||
goc30![]() Guru ![]() Joined: 12/04/2017 Location: FrancePosts: 435 |
hi peter I return to the subject. I haven't received all the components for CMM2 yet, so I'm still on a virtual job. I don't quite understand your table ... 0,0, // USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03, 97.65, // USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04, 98.66, // USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05, ... what MMBASIC receives when you press a key on the keyboard (example: "B" key). Is it just the "position" code (0x05) of the key, or the ASCII code (66), and for the "SHIFT" or "CTRL" or "ALT" keys, you receive another code in addition to that of the "B" key, or is it integrated into the "B" key code? |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10035 |
Thanks to SWA-Guy we now understand more so it should be easy for you - just some slog work. The way to think about it is as follows: The table is a map of the physical location of the keys against a code number. In the case of a UK/US keyboard the key that is second in on the third row will generate the letter "a" without the shift key pressed and "A" with shift pressed so the row in the US and UK maps is 97,65,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04, as 97 and 65 are the ascii codes for "a" and "A" respectively In your case you will need to modify that row to reflect the ascii codes that that physical key should generate on a French keyboard. You don't need to bother changing the description but you may want to append a note to yourself showing the remapping e.g. 113 81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04, q,Q One special case is the key next to left shift. This key doesn't exist on a US keyboard but does on a UK and German This is the relevant line for that key 92,124 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64, In addition any keys that generate characters which don't exist in ASCII 32-128 should be set to 0 Also, Any ASCII characters that need an ALTGR code should be listed separately as these need hard coding This is my code for the German AltGr characters if(info->ralt && Option.USBKeyboard==CONFIG_DE){ if(keyCode==0x24)return 0x7B; else if(keyCode==0x25)return 0x5B; else if(keyCode==0x26)return 0x5D; else if(keyCode==0x27)return 0x7D; else if(keyCode==0x2D)return 0x5C; else if(keyCode==0x14)return 0x40; else if(keyCode==0x64)return 124; } keycode is the number after the = in the table |
||||
goc30![]() Guru ![]() Joined: 12/04/2017 Location: FrancePosts: 435 |
ok thank I think that better is to wait for my CMM2 (few days) and testing with my 2 keyboards |
||||
laki Newbie ![]() Joined: 23/11/2020 Location: HungaryPosts: 1 |
Hi Peter, I'm ready for testing a hungarian keyboard layout (HU). I've a running CMM2 and usb keyboards with hungarian layout - fyi: german layout, too. Thanks, Peter Lakatos |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10035 |
Hi Peter To implement this for you I need the two tables as shown above First a list of any ALT keys that generate normal ascii characters e.g. if(info->ralt && Option.USBKeyboard==CONFIG_DE){ if(keyCode==0x24)return 0x7B; else if(keyCode==0x25)return 0x5B; else if(keyCode==0x26)return 0x5D; else if(keyCode==0x27)return 0x7D; else if(keyCode==0x2D)return 0x5C; else if(keyCode==0x14)return 0x40; else if(keyCode==0x64)return 124; } second the big mapping table that gives the ascii codes for the key on the Hungarian keyboard in the position that is represented by the description in the table. For example on a French keyboard the line 113,81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14, is changed to give the ascii codes for A because the keyboard is AZERTY and not QWERTY. Don't bother to change the descriptions, the ascci codes are all that matter One particular key to watch is the one next to the left shift key 2,124 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64, which doesn't appear at all on most US keyboards but seems to be on most others and has important "computer" characters assigned Note that non-ascii keys are not supported for any keyboards Edited 2020-11-23 20:22 by matherp |
||||
Friet Newbie ![]() Joined: 16/12/2020 Location: BelgiumPosts: 13 |
Hi Peter, I am working on a Belgian version for the keyboard driver, this is also an AZERTY variant, but with a twist vs the french layout. Enough differences to make a french driver unusable on a Belgian keyboard i'm afraid. First part : the text file with an as close as possible approximation is done. (knowing ASCII characters >128 cannot be used) The following characters requiring ALT GR : HID Code ASCII $64 , 92 $20 , 35 $2F, 91 $30, 93 $31 , 96 $34, 39 $38 , 126 0,0,// USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED = 0x00, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_ROLL_OVER = 0x01, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POST_FAIL = 0x02, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03, 113,81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04, 98,66,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05, 99,67,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_C = 0x06, 100,68,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_D = 0x07, 101,69,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_E = 0x08, 102,70,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F = 0x09, 103,71,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_G = 0x0A, 104,72,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_H = 0x0B, 105,73,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_I = 0x0C, 106,74,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_J = 0x0D, 107,75,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_K = 0x0E, 108,76,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_L = 0x0F, 44,63,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_M = 0x10, 110,78,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_N = 0x11, 111,79,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_O = 0x12, 112,80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_P = 0x13, 97,65,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14, 114,82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_R = 0x15, 115,83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_S = 0x16, 116,84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_T = 0x17, 117,85,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_U = 0x18, 118,86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_V = 0x19, 121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A, 120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B, 122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C, 119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D, 38,49,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT = 0x1E, 64,50,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_2_AND_AT = 0x1F, 34,51,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_3_AND_HASH = 0x20, 39,52,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_4_AND_DOLLAR = 0x21, 40,53,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_5_AND_PERCENT = 0x22, 36,54,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_6_AND_CARROT = 0x23, 96,55,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_7_AND_AMPERSAND = 0x24, 33,56,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_8_AND_ASTERISK = 0x25, 123,57,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_9_AND_OPEN_PARENTHESIS = 0x26, 125,48,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_0_AND_CLOSE_PARENTHESIS = 0x27, 10,10,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN_ENTER = 0x28, 27,27,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ESCAPE = 0x29, 8,8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE = 0x2A, 9,9,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_TAB = 0x2B, 32,32,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SPACEBAR = 0x2C, 41,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MINUS_AND_UNDERSCORE = 0x2D, 45,95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_AND_PLUS = 0x2E, 91,94,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPEN_BRACKET_AND_OPEN_CURLY_BRACE = 0x2F, 36,42,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLOSE_BRACKET_AND_CLOSE_CURLY_BRACE = 0x30, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_BACK_SLASH_AND_PIPE = 0x31, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_HASH_AND_TILDE = 0x32, 109,77,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEMICOLON_AND_COLON = 0x33, 0,37,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APOSTROPHE_AND_QUOTE = 0x34, 35,124,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_GRAVE_ACCENT_AND_TILDE = 0x35, 59,46,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COMMA_AND_LESS_THAN = 0x36, 58,47,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PERIOD_AND_GREATER_THAN = 0x37, 61,43,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FORWARD_SLASH_AND_QUESTION_MARK = 0x38, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK = 0x39, 0x91,0x91,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F1 = 0x3A, 0x92,0x92,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F2 = 0x3B, 0x93,0x93,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F3 = 0x3C, 0x94,0x94,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F4 = 0x3D, 0x95,0x95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F5 = 0x3E, 0x96,0x96,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F6 = 0x3F, 0x97,0x97,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F7 = 0x40, 0x98,0x98,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F8 = 0x41, 0x99,0x99,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F9 = 0x42, 0x9a,0x9a,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F10 = 0x43, 0x9b,0x9b,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F11 = 0x44, 0x9c,0x9c,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F12 = 0x45, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRINT_SCREEN = 0x46, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK = 0x47, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAUSE = 0x48, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INSERT = 0x49, 0x86,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HOME = 0x4A, 0x88,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_UP = 0x4B, 0x7f,0x7f,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE_FORWARD = 0x4C, 0x87,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_END = 0x4D, 0x89,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_DOWN = 0x4E, 0x83,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ARROW = 0x4F, 0x82,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ARROW = 0x50, 0x81,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DOWN_ARROW = 0x51, 0x80,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UP_ARROW = 0x52, 0,0,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR = 0x53, 47,47,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH = 0x54, 42,42,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ASTERISK = 0x55, 45,45,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_MINUS = 0x56, 43,43,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS = 0x57, 10,10,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ENTER = 0x58, 49,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_1_AND_END = 0x59, 50,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_2_AND_DOWN_ARROW = 0x5A, 51,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_3_AND_PAGE_DOWN = 0x5B, 52,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_4_AND_LEFT_ARROW = 0x5C, 53,53,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_5 = 0x5D, 54,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_6_AND_RIGHT_ARROW = 0x5E, 55,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_7_AND_HOME = 0x5F, 56,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_8_AND_UP_ARROW = 0x60, 57,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_9_AND_PAGE_UP = 0x61, 48,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_0_AND_INSERT = 0x62, 46,0x7f, //USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE = 0x63, 60,62 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64, I wil not be able to test until minimum next week, hence no rush. I understand yo may have other priorities. Regards, Frank Edited 2021-05-11 06:22 by Friet |
||||
epsilon![]() Senior Member ![]() Joined: 30/07/2020 Location: BelgiumPosts: 255 |
This is the route I took with my Belgian keyboard :-) ![]() It needs a new paint job. It gets used a lot :-) Epsilon CMM2 projects |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10035 |
Frank I've implemented your code set for testing but it seems incorrect - I get "AYERTZ" Please check and post any corrections Edited 2021-05-11 18:07 by matherp |
||||
Page 1 of 2 ![]() ![]() |
![]() |
![]() |
The Back Shed's forum code is written, and hosted, in Australia. | © JAQ Software 2025 |