diff --git a/right/src/usb_interface_keyboard.c b/right/src/usb_interface_keyboard.c index 2f76711..6ee1163 100644 --- a/right/src/usb_interface_keyboard.c +++ b/right/src/usb_interface_keyboard.c @@ -68,86 +68,102 @@ key_matrix_t keyMatrix = { #define KEY_STATE_COUNT (5*7) uint8_t leftKeyStates[KEY_STATE_COUNT] = {0}; -uint8_t scancodes[]={ - HID_KEYBOARD_SC_7_AND_AMPERSAND, - HID_KEYBOARD_SC_8_AND_ASTERISK, - HID_KEYBOARD_SC_9_AND_OPENING_PARENTHESIS, - HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS, - HID_KEYBOARD_SC_MINUS_AND_UNDERSCORE, - HID_KEYBOARD_SC_EQUAL_AND_PLUS, - HID_KEYBOARD_SC_BACKSPACE, - HID_KEYBOARD_SC_U, - HID_KEYBOARD_SC_I, - HID_KEYBOARD_SC_O, - HID_KEYBOARD_SC_P, - HID_KEYBOARD_SC_OPENING_BRACKET_AND_OPENING_BRACE, - HID_KEYBOARD_SC_CLOSING_BRACKET_AND_CLOSING_BRACE, - HID_KEYBOARD_SC_BACKSLASH_AND_PIPE, - HID_KEYBOARD_SC_Y, - HID_KEYBOARD_SC_J, - HID_KEYBOARD_SC_K, - HID_KEYBOARD_SC_L, - HID_KEYBOARD_SC_SEMICOLON_AND_COLON, - HID_KEYBOARD_SC_APOSTROPHE_AND_QUOTE, - HID_KEYBOARD_SC_ENTER, - HID_KEYBOARD_SC_H, - HID_KEYBOARD_SC_N, - HID_KEYBOARD_SC_M, - HID_KEYBOARD_SC_COMMA_AND_LESS_THAN_SIGN, - HID_KEYBOARD_SC_DOT_AND_GREATER_THAN_SIGN, - HID_KEYBOARD_SC_SLASH_AND_QUESTION_MARK, - HID_KEYBOARD_SC_RIGHT_SHIFT, - HID_KEYBOARD_SC_A, //?? - HID_KEYBOARD_SC_SPACE, - HID_KEYBOARD_SC_A, //?? - HID_KEYBOARD_SC_SPACE, //Fn - HID_KEYBOARD_SC_RIGHT_ALT, - HID_KEYBOARD_SC_RIGHT_GUI, - HID_KEYBOARD_SC_RIGHT_CONTROL, +uint8_t defaultLayout[][2]={ + {HID_KEYBOARD_SC_7_AND_AMPERSAND, HID_KEYBOARD_SC_F7}, + {HID_KEYBOARD_SC_8_AND_ASTERISK, HID_KEYBOARD_SC_F8}, + {HID_KEYBOARD_SC_9_AND_OPENING_PARENTHESIS, HID_KEYBOARD_SC_F9}, + {HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS, HID_KEYBOARD_SC_F10}, + {HID_KEYBOARD_SC_MINUS_AND_UNDERSCORE, HID_KEYBOARD_SC_F11}, + {HID_KEYBOARD_SC_EQUAL_AND_PLUS, HID_KEYBOARD_SC_F12}, + {HID_KEYBOARD_SC_BACKSPACE, HID_KEYBOARD_SC_DELETE}, + {HID_KEYBOARD_SC_U}, + {HID_KEYBOARD_SC_I, HID_KEYBOARD_SC_UP_ARROW}, + {HID_KEYBOARD_SC_O}, + {HID_KEYBOARD_SC_P, HID_KEYBOARD_SC_PRINT_SCREEN}, + {HID_KEYBOARD_SC_OPENING_BRACKET_AND_OPENING_BRACE, HID_KEYBOARD_SC_SCROLL_LOCK}, + {HID_KEYBOARD_SC_CLOSING_BRACKET_AND_CLOSING_BRACE, HID_KEYBOARD_SC_PAUSE}, + {HID_KEYBOARD_SC_BACKSLASH_AND_PIPE}, + {HID_KEYBOARD_SC_Y, HID_KEYBOARD_SC_PAGE_UP}, + {HID_KEYBOARD_SC_J, HID_KEYBOARD_SC_LEFT_ARROW}, + {HID_KEYBOARD_SC_K, HID_KEYBOARD_SC_DOWN_ARROW}, + {HID_KEYBOARD_SC_L, HID_KEYBOARD_SC_RIGHT_ARROW}, + {HID_KEYBOARD_SC_SEMICOLON_AND_COLON}, + {HID_KEYBOARD_SC_APOSTROPHE_AND_QUOTE}, + {HID_KEYBOARD_SC_ENTER}, + {HID_KEYBOARD_SC_H, HID_KEYBOARD_SC_PAGE_DOWN}, + {HID_KEYBOARD_SC_N, HID_KEYBOARD_SC_MEDIA_MUTE}, + {HID_KEYBOARD_SC_M}, + {HID_KEYBOARD_SC_COMMA_AND_LESS_THAN_SIGN}, + {HID_KEYBOARD_SC_DOT_AND_GREATER_THAN_SIGN}, + {HID_KEYBOARD_SC_SLASH_AND_QUESTION_MARK}, + {HID_KEYBOARD_SC_RIGHT_SHIFT}, + {0}, //?? + {HID_KEYBOARD_SC_SPACE}, + {0}, //?? + {0}, //Fn + {HID_KEYBOARD_SC_RIGHT_ALT}, + {HID_KEYBOARD_SC_RIGHT_GUI}, + {HID_KEYBOARD_SC_RIGHT_CONTROL}, //Left half - HID_KEYBOARD_SC_KEYPAD_1_AND_END, - HID_KEYBOARD_SC_KEYPAD_2_AND_DOWN_ARROW, - HID_KEYBOARD_SC_KEYPAD_3_AND_PAGE_DOWN, - HID_KEYBOARD_SC_KEYPAD_4_AND_LEFT_ARROW, - HID_KEYBOARD_SC_KEYPAD_5, - HID_KEYBOARD_SC_KEYPAD_6_AND_RIGHT_ARROW, - HID_KEYBOARD_SC_TAB, - HID_KEYBOARD_SC_Q, - HID_KEYBOARD_SC_W, - HID_KEYBOARD_SC_E, - HID_KEYBOARD_SC_R, - HID_KEYBOARD_SC_A, //?? - HID_KEYBOARD_SC_T, - HID_KEYBOARD_SC_CAPS_LOCK, - HID_KEYBOARD_SC_A, - HID_KEYBOARD_SC_S, - HID_KEYBOARD_SC_D, - HID_KEYBOARD_SC_F, - HID_KEYBOARD_SC_A, //?? - HID_KEYBOARD_SC_G, - HID_KEYBOARD_SC_LEFT_SHIFT, - HID_KEYBOARD_SC_NON_US_HASHMARK_AND_TILDE, //no idea if this is the right one, - HID_KEYBOARD_SC_Z, - HID_KEYBOARD_SC_X, - HID_KEYBOARD_SC_C, - HID_KEYBOARD_SC_V, - HID_KEYBOARD_SC_B, - HID_KEYBOARD_SC_LEFT_CONTROL, - HID_KEYBOARD_SC_LEFT_GUI, - HID_KEYBOARD_SC_LEFT_ALT, - HID_KEYBOARD_SC_SPACE, //Fn - HID_KEYBOARD_SC_A, //?? - HID_KEYBOARD_SC_SPACE, //Mod + {HID_KEYBOARD_SC_GRAVE_ACCENT_AND_TILDE, HID_KEYBOARD_SC_ESCAPE}, + {HID_KEYBOARD_SC_1_AND_EXCLAMATION, HID_KEYBOARD_SC_F1}, + {HID_KEYBOARD_SC_2_AND_AT, HID_KEYBOARD_SC_F2}, + {HID_KEYBOARD_SC_3_AND_HASHMARK, HID_KEYBOARD_SC_F3}, + {HID_KEYBOARD_SC_4_AND_DOLLAR, HID_KEYBOARD_SC_F4}, + {HID_KEYBOARD_SC_5_AND_PERCENTAGE, HID_KEYBOARD_SC_F5}, + {HID_KEYBOARD_SC_6_AND_CARET, HID_KEYBOARD_SC_F6}, + {HID_KEYBOARD_SC_TAB}, + {HID_KEYBOARD_SC_Q}, + {HID_KEYBOARD_SC_W, HID_KEYBOARD_SC_UP_ARROW}, + {HID_KEYBOARD_SC_E}, + {HID_KEYBOARD_SC_R}, + {0}, //?? + {HID_KEYBOARD_SC_T, HID_KEYBOARD_SC_HOME}, + {HID_KEYBOARD_SC_CAPS_LOCK}, + {HID_KEYBOARD_SC_A, HID_KEYBOARD_SC_LEFT_ARROW}, + {HID_KEYBOARD_SC_S, HID_KEYBOARD_SC_DOWN_ARROW}, + {HID_KEYBOARD_SC_D, HID_KEYBOARD_SC_RIGHT_ARROW}, + {HID_KEYBOARD_SC_F, HID_KEYBOARD_SC_DELETE}, + {0}, //?? + {HID_KEYBOARD_SC_G, HID_KEYBOARD_SC_END}, + {HID_KEYBOARD_SC_LEFT_SHIFT}, + {HID_KEYBOARD_SC_NON_US_BACKSLASH_AND_PIPE}, //no idea if this is the right one}, + {HID_KEYBOARD_SC_Z, HID_KEYBOARD_SC_MEDIA_BACKWARD}, + {HID_KEYBOARD_SC_X, HID_KEYBOARD_SC_MEDIA_PLAY}, + {HID_KEYBOARD_SC_C, HID_KEYBOARD_SC_MEDIA_FORWARD}, + {HID_KEYBOARD_SC_V, HID_KEYBOARD_SC_MEDIA_VOLUME_DOWN}, + {HID_KEYBOARD_SC_B, HID_KEYBOARD_SC_MEDIA_VOLUME_UP}, + {HID_KEYBOARD_SC_LEFT_CONTROL}, + {HID_KEYBOARD_SC_LEFT_GUI}, + {HID_KEYBOARD_SC_LEFT_ALT}, + {0}, //Fn + {0}, //?? + {0}, //Mod }; + +#define MOD_PRESSED 1 +#define FN_PRESSED 2 + +#define MOD_KEYID 33 +#define LEFT_FN 30 +#define RIGHT_FN 33 + +#define LEFT_OFFSET 35 + +static uint8_t modifierState=0; + static uint8_t getKeycode(uint8_t keyId) { + int activeIndex = (modifierState & MOD_PRESSED) ? 1 : 0; + if (keyId