Fixes+mod keys
This commit is contained in:
@@ -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<sizeof(scancodes))
|
||||
return scancodes[keyId];
|
||||
return defaultLayout[keyId][activeIndex];
|
||||
else
|
||||
return HID_KEYBOARD_SC_A + keyId - sizeof(scancodes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static usb_status_t UsbKeyboardAction(void)
|
||||
{
|
||||
UsbKeyboardReport.modifiers = 0;
|
||||
@@ -166,16 +182,23 @@ static usb_status_t UsbKeyboardAction(void)
|
||||
|
||||
I2cRead(I2C_MAIN_BUS_BASEADDR, I2C_ADDRESS_LEFT_KEYBOARD_HALF, leftKeyStates, KEY_STATE_COUNT);
|
||||
|
||||
modifierState = (leftKeyStates[MOD_KEYID] ? MOD_PRESSED : 0) |
|
||||
((leftKeyStates[LEFT_FN] | keyMatrix.keyStates[RIGHT_FN]) ? FN_PRESSED : 0);
|
||||
|
||||
scancodeIdx = 0;
|
||||
for (uint8_t keyId=0; keyId<KEYBOARD_MATRIX_COLS_NUM*KEYBOARD_MATRIX_ROWS_NUM; keyId++) {
|
||||
if (keyMatrix.keyStates[keyId] && scancodeIdx<USB_KEYBOARD_MAX_KEYS) {
|
||||
UsbKeyboardReport.scancodes[scancodeIdx++] = getKeycode(keyId);
|
||||
uint8_t code=getKeycode(keyId);
|
||||
if (code)
|
||||
UsbKeyboardReport.scancodes[scancodeIdx++] = code;
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t keyId=0; keyId<KEY_STATE_COUNT; keyId++) {
|
||||
if (leftKeyStates[keyId] && scancodeIdx<USB_KEYBOARD_MAX_KEYS) {
|
||||
UsbKeyboardReport.scancodes[scancodeIdx++] = getKeycode(34+keyId);
|
||||
uint8_t code=getKeycode(LEFT_OFFSET+keyId);
|
||||
if (code)
|
||||
UsbKeyboardReport.scancodes[scancodeIdx++] = code;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user