diff --git a/Controllers/DebugController/DebugControllerDetect.cpp b/Controllers/DebugController/DebugControllerDetect.cpp index f38abf69..cb944518 100644 --- a/Controllers/DebugController/DebugControllerDetect.cpp +++ b/Controllers/DebugController/DebugControllerDetect.cpp @@ -308,10 +308,10 @@ void DetectDebugControllers() /*---------------------------------------------------------*\ | Check for custom key inserts and swaps | \*---------------------------------------------------------*/ + std::vector change; if(json_kbd.contains("insert")) { - std::vector insert; for(size_t i = 0; i < json_kbd["insert"].size(); i++) { @@ -322,17 +322,14 @@ void DetectDebugControllers() key->col = json_kbd["insert"][i]["Col"]; key->value = json_kbd["insert"][i]["Val"]; key->name = json_kbd["insert"][i]["Name"].get_ref().c_str(); + key->opcode = KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT; - insert.push_back(*key); + change.push_back(*key); } - new_kb.InsertKeys(insert); - new_kb.UpdateDimensions(); } if(json_kbd.contains("swap")) { - std::vector swap; - for(size_t i = 0; i < json_kbd["swap"].size(); i++) { keyboard_led* key = new keyboard_led; @@ -342,13 +339,14 @@ void DetectDebugControllers() key->col = json_kbd["swap"][i]["Col"]; key->value = json_kbd["swap"][i]["Val"]; key->name = json_kbd["swap"][i]["Name"].get_ref().c_str(); + key->opcode = KEYBOARD_OPCODE_SWAP_ONLY; - swap.push_back(*key); + change.push_back(*key); } - new_kb.SwapKeys(swap); - new_kb.UpdateDimensions(); } + new_kb.ChangeKeys(change); + dummy_keyboard->name = new_kb.GetName(); dummy_keyboard->type = DEVICE_TYPE_KEYBOARD; dummy_keyboard->description = dummy_keyboard->name; diff --git a/Controllers/RazerController/RazerDevices.cpp b/Controllers/RazerController/RazerDevices.cpp index 506f5340..eee913ba 100644 --- a/Controllers/RazerController/RazerDevices.cpp +++ b/Controllers/RazerController/RazerDevices.cpp @@ -20,44 +20,32 @@ keyboard_keymap_overlay_values razer_blackwidow_layout { KEYBOARD_LAYOUT_ANSI_QWERTY, { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 4, 1, 0, KEY_EN_UNUSED, }, // Move 'Z' 1 right (Account for ISO key) + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 4, 1, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Move 'Z' 1 right (Account for ISO key) } }, /* Add more regional layout fixes here */ } }, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 0, 0, 0, KEY_EN_UNUSED, }, // Move 'Esc' 1 right - { 0, 0, 2, 0, KEY_EN_UNUSED, }, // Move 'F1' 1 right (Shifts row) - { 0, 1, 0, 0, KEY_EN_UNUSED, }, // Move Backtick 1 right (Shifts row) - { 0, 1, 14, 0, KEY_EN_EQUALS, }, - { 0, 2, 0, 0, KEY_EN_UNUSED, }, // Move Tab 1 right (Shifts row) - { 0, 3, 0, 0, KEY_EN_UNUSED, }, // Move Caps 1 right (Shifts most of row) - { 0, 3, 13, 0, KEY_EN_UNUSED, }, // Move Enter 1 right - { 0, 4, 0, 0, KEY_EN_UNUSED, }, // Move LFT_SHFT 1 right (Shifts most of row) - { 0, 5, 0, 0, KEY_EN_UNUSED, }, // Move LFT_CTRL 1 right - { 0, 5, 10, 0, KEY_EN_RIGHT_ALT, }, // Insert (Another) RGT_ALT (Shifts remainder of row) - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 5, 11, 0, "Logo", }, // Swap RGT_ALT for 'Logo' - }, - { - /*---------------------------------------------------------------------*\ - | Remove Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move 'Esc' 1 right + { 0, 0, 2, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move 'F1' 1 right (Shifts row) + { 0, 1, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Backtick 1 right (Shifts row) + { 0, 1, 14, 0, KEY_EN_EQUALS, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Tab 1 right (Shifts row) + { 0, 3, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Caps 1 right (Shifts most of row) + { 0, 3, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Enter 1 right + { 0, 4, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move LFT_SHFT 1 right (Shifts most of row) + { 0, 5, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move LFT_CTRL 1 right + { 0, 5, 10, 0, KEY_EN_RIGHT_ALT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert (Another) RGT_ALT (Shifts remainder of row) + { 0, 5, 11, 0, "Logo", KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap RGT_ALT for 'Logo' } }; @@ -71,29 +59,17 @@ keyboard_keymap_overlay_values razer_blackwidow_x_chroma_te_layout } }, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 0, 0, 0, KEY_EN_UNUSED, }, // Move 'Esc' 1 right (Shifts row) - { 0, 1, 0, 0, KEY_EN_UNUSED, }, // Move Backtick 1 right (Shifts row) - { 0, 2, 0, 0, KEY_EN_UNUSED, }, // Move Tab 1 right (Shifts row) - { 0, 3, 0, 0, KEY_EN_UNUSED, }, // Move Caps 1 right (Shifts row) - { 0, 4, 0, 0, KEY_EN_UNUSED, }, // Move LFT_SHFT 1 right (Shifts row) - { 0, 5, 0, 0, KEY_EN_UNUSED, }, // Move LFT_CTRL 1 right (Shifts row) - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 0, 20, 0, "Logo", }, // Insert 'Logo' key - }, - { - /*---------------------------------------------------------------------*\ - | Remove Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move 'Esc' 1 right (Shifts row) + { 0, 1, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Backtick 1 right (Shifts row) + { 0, 2, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Tab 1 right (Shifts row) + { 0, 3, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Caps 1 right (Shifts row) + { 0, 4, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move LFT_SHFT 1 right (Shifts row) + { 0, 5, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move LFT_CTRL 1 right (Shifts row) + { 0, 0, 20, 0, "Logo", KEYBOARD_OPCODE_SWAP_ONLY, }, // Insert 'Logo' key } }; @@ -106,65 +82,53 @@ keyboard_keymap_overlay_values razer_blade_15_2021_advanced_layout { KEYBOARD_LAYOUT_ISO_QWERTY, { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 2, 13, 0, KEY_EN_ISO_ENTER, }, // Remove ANSI_BACKSLASH - { 0, 3, 13, 0, KEY_EN_UNUSED, }, // Remove ANSI_ENTER + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 2, 13, 0, KEY_EN_ISO_ENTER, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove ANSI_BACKSLASH + { 0, 3, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove ANSI_ENTER } }, /* Add more regional layout fixes here */ } }, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 0, 1, 0, KEY_EN_ESCAPE, }, - { 0, 1, 0, 0, KEY_EN_UNUSED, }, - { 0, 1, 14, 0, KEY_EN_UNUSED, }, // Move Backspace 1 right - { 0, 2, 0, 0, KEY_EN_UNUSED, }, - { 0, 3, 0, 0, KEY_EN_UNUSED, }, - { 0, 4, 0, 0, KEY_EN_UNUSED, }, - { 0, 5, 0, 0, KEY_EN_UNUSED, }, - { 0, 5, 5, 0, KEY_EN_LEFT_ALT, }, - { 0, 5, 9, 0, KEY_EN_RIGHT_ALT, }, - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 0, 0, 0, KEY_EN_UNUSED, }, // Remove ESC - { 0, 0, 14, 0, KEY_EN_INSERT, }, // Swap PRTSCN for INS - { 0, 0, 15, 0, KEY_EN_DELETE, }, // Swap SCRLCK for DEL - { 0, 0, 16, 0, KEY_EN_UNUSED, }, // Remove PSE_BRK - { 0, 1, 16, 0, KEY_EN_UNUSED, }, // Remove INSERT - { 0, 1, 17, 0, KEY_EN_UNUSED, }, // Remove HOME - { 0, 1, 18, 0, KEY_EN_UNUSED, }, // Remove PGUP - { 0, 2, 15, 0, KEY_EN_UNUSED, }, // Remove DEL - { 0, 2, 16, 0, KEY_EN_UNUSED, }, // Remove END - { 0, 2, 17, 0, KEY_EN_UNUSED, }, // Remove PGDN - { 0, 4, 13, 0, KEY_EN_UNUSED, }, // Remove RGT_SHFT - { 0, 4, 15, 0, KEY_EN_RIGHT_SHIFT, }, // Swap ARWUP for RGT_SHFT - { 0, 5, 2, 0, KEY_EN_LEFT_FUNCTION, }, // Swap LFT_WIN for LFT_FNC - { 0, 5, 3, 0, KEY_EN_LEFT_WINDOWS, }, // Swap LFT_ALT for LFT_WIN - { 0, 5, 6, 0, KEY_EN_UNUSED, }, // Remove SPACE - { 0, 5, 10, 0, KEY_EN_RIGHT_FUNCTION, }, // Swap RGT_ALT for RGT_FNC - { 0, 5, 11, 0, KEY_EN_RIGHT_CONTROL, }, // Swap RGT_FNC for RGT_CTL - { 0, 5, 12, 0, KEY_EN_LEFT_ARROW, }, // Swap ARWLFT for RGT_MNU - { 0, 5, 13, 0, KEY_EN_UP_ARROW, }, // Swap ARWUP for RGT_CTL - { 0, 5, 14, 0, KEY_EN_RIGHT_ARROW, }, // Swap ARWRGT for ARWLFT - { 0, 5, 15, 0, KEY_EN_DOWN_ARROW, }, // Swap ARWDWN for ARWDWN - { 0, 5, 16, 0, KEY_EN_UNUSED, }, // Remove ARWRGT - }, - { - /*---------------------------------------------------------------------*\ - | Remove Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 0, 1, 0, KEY_EN_ESCAPE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 14, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Backspace 1 right + { 0, 2, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 5, 0, KEY_EN_LEFT_ALT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 9, 0, KEY_EN_RIGHT_ALT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove ESC + { 0, 0, 14, 0, KEY_EN_INSERT, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap PRTSCN for INS + { 0, 0, 15, 0, KEY_EN_DELETE, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap SCRLCK for DEL + { 0, 0, 16, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove PSE_BRK + { 0, 1, 16, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove INSERT + { 0, 1, 17, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove HOME + { 0, 1, 18, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove PGUP + { 0, 2, 15, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove DEL + { 0, 2, 16, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove END + { 0, 2, 17, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove PGDN + { 0, 4, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove RGT_SHFT + { 0, 4, 15, 0, KEY_EN_RIGHT_SHIFT, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap ARWUP for RGT_SHFT + { 0, 5, 2, 0, KEY_EN_LEFT_FUNCTION, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap LFT_WIN for LFT_FNC + { 0, 5, 3, 0, KEY_EN_LEFT_WINDOWS, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap LFT_ALT for LFT_WIN + { 0, 5, 6, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove SPACE + { 0, 5, 10, 0, KEY_EN_RIGHT_FUNCTION, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap RGT_ALT for RGT_FNC + { 0, 5, 11, 0, KEY_EN_RIGHT_CONTROL, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap RGT_FNC for RGT_CTL + { 0, 5, 12, 0, KEY_EN_LEFT_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap ARWLFT for RGT_MNU + { 0, 5, 13, 0, KEY_EN_UP_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap ARWUP for RGT_CTL + { 0, 5, 14, 0, KEY_EN_RIGHT_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap ARWRGT for ARWLFT + { 0, 5, 15, 0, KEY_EN_DOWN_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap ARWDWN for ARWDWN + { 0, 5, 16, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove ARWRGT } }; @@ -177,77 +141,65 @@ keyboard_keymap_overlay_values razer_blade_15_2022_layout { KEYBOARD_LAYOUT_ANSI_QWERTY, { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 4, 1, 0, KEY_EN_UNUSED, }, // Move 'Z' 1 right (Account for ISO key) + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 4, 1, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Move 'Z' 1 right (Account for ISO key) } }, { KEYBOARD_LAYOUT_ISO_QWERTY, { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 2, 13, 0, KEY_EN_ISO_ENTER, }, // Remove ANSI_BACKSLASH - { 0, 3, 13, 0, KEY_EN_UNUSED, }, // Remove ANSI_ENTER + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 2, 13, 0, KEY_EN_ISO_ENTER, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove ANSI_BACKSLASH + { 0, 3, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove ANSI_ENTER } }, /* Add more regional layout fixes here */ } }, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 0, 0, 0, KEY_EN_UNUSED, }, // Move Escape 1 right - { 0, 1, 0, 0, KEY_EN_UNUSED, }, - { 0, 1, 14, 0, KEY_EN_UNUSED, }, // Move Backspace 1 right - { 0, 2, 0, 0, KEY_EN_UNUSED, }, - { 0, 2, 14, 0, KEY_EN_UNUSED, }, // Move Back slash 1 right - { 0, 3, 0, 0, KEY_EN_UNUSED, }, - { 0, 3, 13, 0, KEY_EN_UNUSED, }, // Move ANSI Enter 1 right - { 0, 3, 14, 0, KEY_EN_UNUSED, }, // Move ANSI Enter 1 right - { 0, 4, 0, 0, KEY_EN_UNUSED, }, - { 0, 5, 0, 0, KEY_EN_UNUSED, }, - { 0, 5, 5, 0, KEY_EN_LEFT_ALT, }, - { 0, 5, 6, 0, KEY_EN_UNUSED, }, // Move Space 1 right - { 0, 5, 9, 0, KEY_EN_RIGHT_ALT, }, - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 0, 14, 0, KEY_EN_DELETE, }, // Swap PRTSCN for DEL - { 0, 0, 15, 0, KEY_EN_POWER, }, // Swap SCRLCK for POWER - { 0, 0, 16, 0, KEY_EN_UNUSED, }, // Remove PSE_BRK - { 0, 1, 16, 0, KEY_EN_UNUSED, }, // Remove INSERT - { 0, 1, 17, 0, KEY_EN_UNUSED, }, // Remove HOME - { 0, 1, 18, 0, KEY_EN_UNUSED, }, // Remove PGUP - { 0, 2, 16, 0, KEY_EN_UNUSED, }, // Remove DEL - { 0, 2, 17, 0, KEY_EN_UNUSED, }, // Remove END - { 0, 2, 18, 0, KEY_EN_UNUSED, }, // Remove PGDN - { 0, 4, 13, 0, KEY_EN_UNUSED, }, // Remove RGT_SHFT - { 0, 4, 15, 0, KEY_EN_RIGHT_SHIFT, }, // Swap ARWUP for RGT_SHFT - { 0, 5, 2, 0, KEY_EN_LEFT_FUNCTION, }, // Swap LFT_WIN for LFT_FNC - { 0, 5, 3, 0, KEY_EN_LEFT_WINDOWS, }, // Swap LFT_ALT for LFT_WIN - { 0, 5, 10, 0, KEY_EN_RIGHT_FUNCTION, }, // Swap RGT_ALT for RGT_FNC - { 0, 5, 11, 0, KEY_EN_RIGHT_CONTROL, }, // Swap RGT_FNC for RGT_CTL - { 0, 5, 12, 0, KEY_EN_LEFT_ARROW, }, // Swap ARWLFT for RGT_MNU - { 0, 5, 13, 0, KEY_EN_UP_ARROW, }, // Swap ARWUP for RGT_CTL - { 0, 5, 14, 0, KEY_EN_RIGHT_ARROW, }, // Swap ARWRGT for ARWLFT - { 0, 5, 15, 0, KEY_EN_DOWN_ARROW, }, // Swap ARWDWN for ARWDWN - { 0, 5, 16, 0, KEY_EN_UNUSED, }, // Remove ARWRGT - }, - { - /*---------------------------------------------------------------------*\ - | Remove Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Escape 1 right + { 0, 1, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 14, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Backspace 1 right + { 0, 2, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 14, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Back slash 1 right + { 0, 3, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move ANSI Enter 1 right + { 0, 3, 14, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move ANSI Enter 1 right + { 0, 4, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 5, 0, KEY_EN_LEFT_ALT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 6, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Space 1 right + { 0, 5, 9, 0, KEY_EN_RIGHT_ALT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 14, 0, KEY_EN_DELETE, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap PRTSCN for DEL + { 0, 0, 15, 0, KEY_EN_POWER, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap SCRLCK for POWER + { 0, 0, 16, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove PSE_BRK + { 0, 1, 16, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove INSERT + { 0, 1, 17, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove HOME + { 0, 1, 18, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove PGUP + { 0, 2, 16, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove DEL + { 0, 2, 17, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove END + { 0, 2, 18, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove PGDN + { 0, 4, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove RGT_SHFT + { 0, 4, 15, 0, KEY_EN_RIGHT_SHIFT, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap ARWUP for RGT_SHFT + { 0, 5, 2, 0, KEY_EN_LEFT_FUNCTION, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap LFT_WIN for LFT_FNC + { 0, 5, 3, 0, KEY_EN_LEFT_WINDOWS, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap LFT_ALT for LFT_WIN + { 0, 5, 10, 0, KEY_EN_RIGHT_FUNCTION, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap RGT_ALT for RGT_FNC + { 0, 5, 11, 0, KEY_EN_RIGHT_CONTROL, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap RGT_FNC for RGT_CTL + { 0, 5, 12, 0, KEY_EN_LEFT_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap ARWLFT for RGT_MNU + { 0, 5, 13, 0, KEY_EN_UP_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap ARWUP for RGT_CTL + { 0, 5, 14, 0, KEY_EN_RIGHT_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap ARWRGT for ARWLFT + { 0, 5, 15, 0, KEY_EN_DOWN_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap ARWDWN for ARWDWN + { 0, 5, 16, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove ARWRGT } }; @@ -260,45 +212,33 @@ keyboard_keymap_overlay_values razer_deathstalker_v2_layout { KEYBOARD_LAYOUT_ANSI_QWERTY, { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 4, 1, 0, KEY_EN_UNUSED, }, // Move 'Z' 1 right (Account for ISO key) + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 4, 1, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Move 'Z' 1 right (Account for ISO key) } }, { KEYBOARD_LAYOUT_ISO_QWERTY, { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 2, 13, 0, KEY_EN_UNUSED, }, // Remove ANSI_BACKSLASH - { 0, 4, 1, 0, KEY_EN_ISO_BACK_SLASH, }, // Add ISO_BACK_SLASH + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 2, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove ANSI_BACKSLASH + { 0, 4, 1, 0, KEY_EN_ISO_BACK_SLASH, KEYBOARD_OPCODE_SWAP_ONLY, }, // Add ISO_BACK_SLASH } }, /* Add more regional layout fixes here */ } }, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 1, 13, 0, KEY_EN_UNUSED, }, // Move Backspace 1 right - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - }, - { - /*---------------------------------------------------------------------*\ - | Remove Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 1, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Move Backspace 1 right } }; @@ -311,44 +251,32 @@ keyboard_keymap_overlay_values razer_deathstalker_v2_pro_layout { KEYBOARD_LAYOUT_ANSI_QWERTY, { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 4, 1, 0, KEY_EN_UNUSED, }, // Move 'Z' 1 right (Account for ISO key) + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 4, 1, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Move 'Z' 1 right (Account for ISO key) } }, { KEYBOARD_LAYOUT_ISO_QWERTY, { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 2, 13, 0, KEY_EN_UNUSED, }, // Remove ANSI_BACKSLASH - { 0, 4, 1, 0, KEY_EN_ISO_BACK_SLASH, }, // Add ISO_BACK_SLASH + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 2, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Remove ANSI_BACKSLASH + { 0, 4, 1, 0, KEY_EN_ISO_BACK_SLASH, KEYBOARD_OPCODE_SWAP_ONLY, }, // Add ISO_BACK_SLASH } }, /* Add more regional layout fixes here */ } }, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - }, - { - /*---------------------------------------------------------------------*\ - | Remove Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ } }; @@ -362,32 +290,20 @@ keyboard_keymap_overlay_values razer_huntsman_elite_layout } }, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - { 0, 0, 0, 0, KEY_EN_UNUSED, }, - { 0, 0, 18, 0, KEY_EN_MEDIA_PREVIOUS, }, - { 0, 0, 19, 0, KEY_EN_MEDIA_PLAY_PAUSE, }, - { 0, 0, 20, 0, KEY_EN_MEDIA_NEXT, }, - { 0, 0, 21, 0, KEY_EN_MEDIA_MUTE, }, - { 0, 1, 0, 0, KEY_EN_UNUSED, }, - { 0, 2, 0, 0, KEY_EN_UNUSED, }, - { 0, 3, 0, 0, KEY_EN_UNUSED, }, - { 0, 4, 0, 0, KEY_EN_UNUSED, }, - { 0, 5, 0, 0, KEY_EN_UNUSED, }, - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ - }, - { - /*---------------------------------------------------------------------*\ - | Remove Keys | - | Zone, Row, Column, Index, Key | - \*---------------------------------------------------------------------*/ + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 18, 0, KEY_EN_MEDIA_PREVIOUS, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 19, 0, KEY_EN_MEDIA_PLAY_PAUSE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 20, 0, KEY_EN_MEDIA_NEXT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 21, 0, KEY_EN_MEDIA_MUTE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, } }; diff --git a/KeyboardLayoutManager/KeyboardLayoutManager.cpp b/KeyboardLayoutManager/KeyboardLayoutManager.cpp index 3deebbae..23573408 100644 --- a/KeyboardLayoutManager/KeyboardLayoutManager.cpp +++ b/KeyboardLayoutManager/KeyboardLayoutManager.cpp @@ -10,23 +10,25 @@ #include "LogManager.h" #include "KeyboardLayoutManager.h" -const char* KLM_CLASS_NAME = "KLM"; -const char* KEYBOARD_NAME_ISO = "ISO "; -const char* KEYBOARD_NAME_ANSI = "ANSI "; -const char* KEYBOARD_NAME_JIS = "JIS"; -const char* KEYBOARD_NAME_AZERTY = "AZERTY"; -const char* KEYBOARD_NAME_QWERTY = "QWERTY"; -const char* KEYBOARD_NAME_QWERTZ = "QWERTZ"; +const char* KLM_CLASS_NAME = "KLM"; +const char* KEYBOARD_NAME_ISO = "ISO "; +const char* KEYBOARD_NAME_ANSI = "ANSI "; +const char* KEYBOARD_NAME_JIS = "JIS"; +const char* KEYBOARD_NAME_AZERTY = "AZERTY"; +const char* KEYBOARD_NAME_QWERTY = "QWERTY"; +const char* KEYBOARD_NAME_QWERTZ = "QWERTZ"; -const char* KEYBOARD_NAME_FULL = "Full 104 key "; -const char* KEYBOARD_NAME_TKL = "Tenkeyless "; -const char* KEYBOARD_NAME_SIXTY = "Sixty percent "; +const char* KEYBOARD_NAME_FULL = "Full 104 key "; +const char* KEYBOARD_NAME_TKL = "Tenkeyless "; +const char* KEYBOARD_NAME_SIXTY = "Sixty percent "; +const char* KEYBOARD_NAME_SEVENTY_FIVE = "Seventy Five percent "; -const char* LOG_MSG_EMPTY = "empty "; -const char* LOG_MSG_UNUSED_KEY = "'unused' key"; -const char* LOG_MSG_SHIFTING_RIGHT = ", shifting keys right"; -const char* LOG_MSG_CREATED_NEW = "[%s] Created new %s%s with %d rows and %d columns containing %d keys"; -const char* LOG_MSG_INSERT_BEFORE = "[%s] Inserting %s before %s @ %02d, %02d%s"; +const char* LOG_MSG_EMPTY = "empty "; +const char* LOG_MSG_UNUSED_KEY = "'unused' key"; +const char* LOG_MSG_SHIFTING_RIGHT = ", shifting keys right"; +const char* LOG_MSG_CREATED_NEW = "[%s] Created new %s%s with %d rows and %d columns containing %d keys"; +const char* LOG_MSG_INSERT_BEFORE = "[%s] Inserting %s before %s @ %02d, %02d%s"; +const char* LOG_MSG_MISSING_OPCODE = "[%s] Error: Opcode %d not found for %s @ %02d, %02d"; /*-------------------------------------------------------------------------*\ | Keyboard Base Maps | @@ -51,175 +53,170 @@ const char* LOG_MSG_INSERT_BEFORE = "[%s] Inserting %s before %s @ %02d, %02d% static const std::vector keyboard_zone_main = { - /*---------------------------------------------------------------------*\ - | Zone, Row, Column, Value, Key | - \*---------------------------------------------------------------------*/ - { 0, 1, 0, 0, KEY_EN_BACK_TICK, }, - { 0, 1, 1, 0, KEY_EN_1, }, - { 0, 1, 2, 0, KEY_EN_2, }, - { 0, 1, 3, 0, KEY_EN_3, }, - { 0, 1, 4, 0, KEY_EN_4, }, - { 0, 1, 5, 0, KEY_EN_5, }, - { 0, 1, 6, 0, KEY_EN_6, }, - { 0, 1, 7, 0, KEY_EN_7, }, - { 0, 1, 8, 0, KEY_EN_8, }, - { 0, 1, 9, 0, KEY_EN_9, }, - { 0, 1, 10, 0, KEY_EN_0, }, - { 0, 1, 11, 0, KEY_EN_MINUS, }, - { 0, 1, 12, 0, KEY_EN_EQUALS, }, - { 0, 1, 13, 0, KEY_EN_BACKSPACE, }, - { 0, 2, 0, 0, KEY_EN_TAB, }, - { 0, 2, 1, 0, KEY_EN_Q, }, - { 0, 2, 2, 0, KEY_EN_W, }, - { 0, 2, 3, 0, KEY_EN_E, }, - { 0, 2, 4, 0, KEY_EN_R, }, - { 0, 2, 5, 0, KEY_EN_T, }, - { 0, 2, 6, 0, KEY_EN_Y, }, - { 0, 2, 7, 0, KEY_EN_U, }, - { 0, 2, 8, 0, KEY_EN_I, }, - { 0, 2, 9, 0, KEY_EN_O, }, - { 0, 2, 10, 0, KEY_EN_P, }, - { 0, 2, 11, 0, KEY_EN_LEFT_BRACKET, }, - { 0, 2, 12, 0, KEY_EN_RIGHT_BRACKET, }, - { 0, 2, 13, 0, KEY_EN_ANSI_BACK_SLASH, }, - { 0, 3, 0, 0, KEY_EN_CAPS_LOCK, }, - { 0, 3, 1, 0, KEY_EN_A, }, - { 0, 3, 2, 0, KEY_EN_S, }, - { 0, 3, 3, 0, KEY_EN_D, }, - { 0, 3, 4, 0, KEY_EN_F, }, - { 0, 3, 5, 0, KEY_EN_G, }, - { 0, 3, 6, 0, KEY_EN_H, }, - { 0, 3, 7, 0, KEY_EN_J, }, - { 0, 3, 8, 0, KEY_EN_K, }, - { 0, 3, 9, 0, KEY_EN_L, }, - { 0, 3, 10, 0, KEY_EN_SEMICOLON, }, - { 0, 3, 11, 0, KEY_EN_QUOTE, }, - { 0, 3, 13, 0, KEY_EN_ANSI_ENTER, }, - { 0, 4, 0, 0, KEY_EN_LEFT_SHIFT, }, - { 0, 4, 2, 0, KEY_EN_Z, }, - { 0, 4, 3, 0, KEY_EN_X, }, - { 0, 4, 4, 0, KEY_EN_C, }, - { 0, 4, 5, 0, KEY_EN_V, }, - { 0, 4, 6, 0, KEY_EN_B, }, - { 0, 4, 7, 0, KEY_EN_N, }, - { 0, 4, 8, 0, KEY_EN_M, }, - { 0, 4, 9, 0, KEY_EN_COMMA, }, - { 0, 4, 10, 0, KEY_EN_PERIOD, }, - { 0, 4, 11, 0, KEY_EN_FORWARD_SLASH, }, - { 0, 4, 13, 0, KEY_EN_RIGHT_SHIFT, }, - { 0, 5, 0, 0, KEY_EN_LEFT_CONTROL, }, - { 0, 5, 1, 0, KEY_EN_LEFT_WINDOWS, }, - { 0, 5, 2, 0, KEY_EN_LEFT_ALT, }, - { 0, 5, 6, 0, KEY_EN_SPACE, }, - { 0, 5, 10, 0, KEY_EN_RIGHT_ALT, }, - { 0, 5, 11, 0, KEY_EN_RIGHT_FUNCTION, }, - { 0, 5, 12, 0, KEY_EN_MENU, }, - { 0, 5, 13, 0, KEY_EN_RIGHT_CONTROL, }, + /*---------------------------------------------------------------------------------------------------------*\ + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 1, 0, 0, KEY_EN_BACK_TICK, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 1, 0, KEY_EN_1, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 2, 0, KEY_EN_2, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 3, 0, KEY_EN_3, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 4, 0, KEY_EN_4, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 5, 0, KEY_EN_5, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 6, 0, KEY_EN_6, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 7, 0, KEY_EN_7, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 8, 0, KEY_EN_8, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 9, 0, KEY_EN_9, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 10, 0, KEY_EN_0, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 11, 0, KEY_EN_MINUS, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 12, 0, KEY_EN_EQUALS, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 13, 0, KEY_EN_BACKSPACE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 0, 0, KEY_EN_TAB, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 1, 0, KEY_EN_Q, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 2, 0, KEY_EN_W, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 3, 0, KEY_EN_E, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 4, 0, KEY_EN_R, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 5, 0, KEY_EN_T, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 6, 0, KEY_EN_Y, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 7, 0, KEY_EN_U, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 8, 0, KEY_EN_I, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 9, 0, KEY_EN_O, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 10, 0, KEY_EN_P, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 11, 0, KEY_EN_LEFT_BRACKET, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 12, 0, KEY_EN_RIGHT_BRACKET, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 13, 0, KEY_EN_ANSI_BACK_SLASH, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 0, 0, KEY_EN_CAPS_LOCK, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 1, 0, KEY_EN_A, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 2, 0, KEY_EN_S, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 3, 0, KEY_EN_D, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 4, 0, KEY_EN_F, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 5, 0, KEY_EN_G, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 6, 0, KEY_EN_H, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 7, 0, KEY_EN_J, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 8, 0, KEY_EN_K, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 9, 0, KEY_EN_L, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 10, 0, KEY_EN_SEMICOLON, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 11, 0, KEY_EN_QUOTE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 13, 0, KEY_EN_ANSI_ENTER, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 0, 0, KEY_EN_LEFT_SHIFT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 2, 0, KEY_EN_Z, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 3, 0, KEY_EN_X, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 4, 0, KEY_EN_C, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 5, 0, KEY_EN_V, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 6, 0, KEY_EN_B, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 7, 0, KEY_EN_N, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 8, 0, KEY_EN_M, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 9, 0, KEY_EN_COMMA, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 10, 0, KEY_EN_PERIOD, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 11, 0, KEY_EN_FORWARD_SLASH, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 13, 0, KEY_EN_RIGHT_SHIFT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 0, 0, KEY_EN_LEFT_CONTROL, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 1, 0, KEY_EN_LEFT_WINDOWS, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 2, 0, KEY_EN_LEFT_ALT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 6, 0, KEY_EN_SPACE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 10, 0, KEY_EN_RIGHT_ALT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 11, 0, KEY_EN_RIGHT_FUNCTION, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 12, 0, KEY_EN_MENU, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 13, 0, KEY_EN_RIGHT_CONTROL, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, }; static const std::vector keyboard_zone_fn_row = { - /*---------------------------------------------------------------------*\ - | Zone, Row, Column, Value, Key | - \*---------------------------------------------------------------------*/ - { 0, 0, 0, 0, KEY_EN_ESCAPE, }, - { 0, 0, 2, 0, KEY_EN_F1, }, - { 0, 0, 3, 0, KEY_EN_F2, }, - { 0, 0, 4, 0, KEY_EN_F3, }, - { 0, 0, 5, 0, KEY_EN_F4, }, - { 0, 0, 6, 0, KEY_EN_F5, }, - { 0, 0, 7, 0, KEY_EN_F6, }, - { 0, 0, 8, 0, KEY_EN_F7, }, - { 0, 0, 9, 0, KEY_EN_F8, }, - { 0, 0, 10, 0, KEY_EN_F9, }, - { 0, 0, 11, 0, KEY_EN_F10, }, - { 0, 0, 12, 0, KEY_EN_F11, }, - { 0, 0, 13, 0, KEY_EN_F12, }, + /*---------------------------------------------------------------------------------------------------------*\ + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 0, 0, 0, KEY_EN_ESCAPE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 2, 0, KEY_EN_F1, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 3, 0, KEY_EN_F2, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 4, 0, KEY_EN_F3, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 5, 0, KEY_EN_F4, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 6, 0, KEY_EN_F5, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 7, 0, KEY_EN_F6, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 8, 0, KEY_EN_F7, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 9, 0, KEY_EN_F8, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 10, 0, KEY_EN_F9, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 11, 0, KEY_EN_F10, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 12, 0, KEY_EN_F11, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 13, 0, KEY_EN_F12, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, }; static const std::vector keyboard_zone_extras = { - /*---------------------------------------------------------------------*\ - | Zone, Row, Column, Value, Key | - \*---------------------------------------------------------------------*/ - { 0, 0, 14, 0, KEY_EN_PRINT_SCREEN, }, - { 0, 0, 15, 0, KEY_EN_SCROLL_LOCK, }, - { 0, 0, 16, 0, KEY_EN_PAUSE_BREAK, }, - { 0, 1, 14, 0, KEY_EN_INSERT, }, - { 0, 1, 15, 0, KEY_EN_HOME, }, - { 0, 1, 16, 0, KEY_EN_PAGE_UP, }, - { 0, 2, 14, 0, KEY_EN_DELETE, }, - { 0, 2, 15, 0, KEY_EN_END, }, - { 0, 2, 16, 0, KEY_EN_PAGE_DOWN, }, - { 0, 4, 15, 0, KEY_EN_UP_ARROW, }, - { 0, 5, 14, 0, KEY_EN_LEFT_ARROW, }, - { 0, 5, 15, 0, KEY_EN_DOWN_ARROW, }, - { 0, 5, 16, 0, KEY_EN_RIGHT_ARROW, }, + /*---------------------------------------------------------------------------------------------------------*\ + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 0, 14, 0, KEY_EN_PRINT_SCREEN, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 15, 0, KEY_EN_SCROLL_LOCK, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 0, 16, 0, KEY_EN_PAUSE_BREAK, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 14, 0, KEY_EN_INSERT, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 15, 0, KEY_EN_HOME, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 16, 0, KEY_EN_PAGE_UP, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 14, 0, KEY_EN_DELETE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 15, 0, KEY_EN_END, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 16, 0, KEY_EN_PAGE_DOWN, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 15, 0, KEY_EN_UP_ARROW, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 14, 0, KEY_EN_LEFT_ARROW, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 15, 0, KEY_EN_DOWN_ARROW, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 16, 0, KEY_EN_RIGHT_ARROW, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, }; static const std::vector keyboard_zone_numpad = { - /*---------------------------------------------------------------------*\ - | Zone, Row, Column, Value, Key | - \*---------------------------------------------------------------------*/ - { 0, 1, 17, 0, KEY_EN_NUMPAD_LOCK, }, - { 0, 1, 18, 0, KEY_EN_NUMPAD_DIVIDE, }, - { 0, 1, 19, 0, KEY_EN_NUMPAD_TIMES, }, - { 0, 1, 20, 0, KEY_EN_NUMPAD_MINUS, }, - { 0, 2, 17, 0, KEY_EN_NUMPAD_7, }, - { 0, 2, 18, 0, KEY_EN_NUMPAD_8, }, - { 0, 2, 19, 0, KEY_EN_NUMPAD_9, }, - { 0, 2, 20, 0, KEY_EN_NUMPAD_PLUS, }, - { 0, 3, 17, 0, KEY_EN_NUMPAD_4, }, - { 0, 3, 18, 0, KEY_EN_NUMPAD_5, }, - { 0, 3, 19, 0, KEY_EN_NUMPAD_6, }, - { 0, 4, 17, 0, KEY_EN_NUMPAD_1, }, - { 0, 4, 18, 0, KEY_EN_NUMPAD_2, }, - { 0, 4, 19, 0, KEY_EN_NUMPAD_3, }, - { 0, 4, 20, 0, KEY_EN_NUMPAD_ENTER, }, - { 0, 5, 18, 0, KEY_EN_NUMPAD_0, }, - { 0, 5, 19, 0, KEY_EN_NUMPAD_PERIOD, }, + /*---------------------------------------------------------------------------------------------------------*\ + | Zone, Row, Column, Value, Key, OpCode, | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 1, 17, 0, KEY_EN_NUMPAD_LOCK, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 18, 0, KEY_EN_NUMPAD_DIVIDE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 19, 0, KEY_EN_NUMPAD_TIMES, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 20, 0, KEY_EN_NUMPAD_MINUS, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 17, 0, KEY_EN_NUMPAD_7, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 18, 0, KEY_EN_NUMPAD_8, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 19, 0, KEY_EN_NUMPAD_9, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 20, 0, KEY_EN_NUMPAD_PLUS, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 17, 0, KEY_EN_NUMPAD_4, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 18, 0, KEY_EN_NUMPAD_5, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 19, 0, KEY_EN_NUMPAD_6, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 17, 0, KEY_EN_NUMPAD_1, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 18, 0, KEY_EN_NUMPAD_2, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 19, 0, KEY_EN_NUMPAD_3, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 20, 0, KEY_EN_NUMPAD_ENTER, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 18, 0, KEY_EN_NUMPAD_0, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 19, 0, KEY_EN_NUMPAD_PERIOD, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, }; keyboard_keymap_overlay iso_azerty { KEYBOARD_SIZE_FULL, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - \*---------------------------------------------------------------------*/ - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - \*---------------------------------------------------------------------*/ - { 0, 3, 12, 0, KEY_FR_ASTERIX, }, - { 0, 4, 1, 0, KEY_NORD_ANGLE_BRACKET, }, - { 0, 1, 0, 0, KEY_FR_SUPER_2, }, - { 0, 1, 1, 0, KEY_FR_AMPERSAND, }, - { 0, 1, 2, 0, KEY_FR_ACUTE_E, }, - { 0, 1, 3, 0, KEY_FR_DOUBLEQUOTE, }, - { 0, 1, 4, 0, KEY_EN_QUOTE, }, - { 0, 1, 5, 0, KEY_FR_LEFT_PARENTHESIS, }, - { 0, 1, 6, 0, KEY_EN_MINUS, }, - { 0, 1, 7, 0, KEY_FR_GRAVE_E, }, - { 0, 1, 8, 0, KEY_FR_UNDERSCORE, }, - { 0, 1, 9, 0, KEY_FR_CEDILLA_C, }, - { 0, 1, 10, 0, KEY_FR_GRAVE_A, }, - { 0, 1, 11, 0, KEY_FR_RIGHT_PARENTHESIS, }, - { 0, 2, 1, 0, KEY_EN_A, }, - { 0, 2, 2, 0, KEY_EN_Z, }, - { 0, 2, 11, 0, KEY_JP_CHEVRON, }, - { 0, 2, 12, 0, KEY_FR_DOLLAR, }, - { 0, 2, 13, 0, KEY_EN_UNUSED, }, - { 0, 3, 1, 0, KEY_EN_Q, }, - { 0, 3, 10, 0, KEY_EN_M, }, - { 0, 3, 11, 0, KEY_FR_GRAVE_U, }, - { 0, 4, 2, 0, KEY_EN_W, }, - { 0, 4, 8, 0, KEY_EN_COMMA, }, - { 0, 4, 9, 0, KEY_EN_SEMICOLON, }, - { 0, 4, 10, 0, KEY_JP_COLON, }, - { 0, 4, 11, 0, KEY_FR_EXCLAIMATION, }, + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 3, 12, 0, KEY_FR_ASTERIX, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 1, 0, KEY_NORD_ANGLE_BRACKET, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 0, 0, KEY_FR_SUPER_2, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 1, 0, KEY_FR_AMPERSAND, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 2, 0, KEY_FR_ACUTE_E, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 3, 0, KEY_FR_DOUBLEQUOTE, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 4, 0, KEY_EN_QUOTE, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 5, 0, KEY_FR_LEFT_PARENTHESIS, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 6, 0, KEY_EN_MINUS, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 7, 0, KEY_FR_GRAVE_E, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 8, 0, KEY_FR_UNDERSCORE, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 9, 0, KEY_FR_CEDILLA_C, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 10, 0, KEY_FR_GRAVE_A, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 11, 0, KEY_FR_RIGHT_PARENTHESIS, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 1, 0, KEY_EN_A, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 2, 0, KEY_EN_Z, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 11, 0, KEY_JP_CHEVRON, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 12, 0, KEY_FR_DOLLAR, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 3, 1, 0, KEY_EN_Q, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 3, 10, 0, KEY_EN_M, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 3, 11, 0, KEY_FR_GRAVE_U, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 2, 0, KEY_EN_W, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 8, 0, KEY_EN_COMMA, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 9, 0, KEY_EN_SEMICOLON, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 10, 0, KEY_JP_COLON, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 11, 0, KEY_FR_EXCLAIMATION, KEYBOARD_OPCODE_SWAP_ONLY, }, } }; @@ -227,17 +224,12 @@ keyboard_keymap_overlay iso_qwerty { KEYBOARD_SIZE_FULL, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - \*---------------------------------------------------------------------*/ - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - \*---------------------------------------------------------------------*/ - { 0, 3, 12, 0, KEY_EN_POUND, }, - { 0, 4, 1, 0, KEY_EN_ISO_BACK_SLASH, }, - { 0, 2, 13, 0, KEY_EN_UNUSED, }, + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 3, 12, 0, KEY_EN_POUND, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 1, 0, KEY_EN_ISO_BACK_SLASH, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, } }; @@ -245,27 +237,22 @@ keyboard_keymap_overlay iso_qwertz { KEYBOARD_SIZE_FULL, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - \*---------------------------------------------------------------------*/ - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - \*---------------------------------------------------------------------*/ - { 0, 3, 12, 0, KEY_EN_POUND, }, - { 0, 4, 1, 0, KEY_NORD_ANGLE_BRACKET, }, - { 0, 1, 0, 0, KEY_JP_CHEVRON, }, - { 0, 1, 11, 0, KEY_DE_ESZETT, }, - { 0, 1, 12, 0, KEY_EN_BACK_TICK, }, - { 0, 2, 6, 0, KEY_EN_Z, }, - { 0, 2, 11, 0, KEY_DE_DIAERESIS_U, }, - { 0, 2, 12, 0, KEY_EN_PLUS, }, - { 0, 2, 13, 0, KEY_EN_UNUSED, }, - { 0, 3, 10, 0, KEY_DE_DIAERESIS_O, }, - { 0, 3, 11, 0, KEY_DE_DIAERESIS_A, }, - { 0, 4, 2, 0, KEY_EN_Y, }, - { 0, 4, 11, 0, KEY_EN_MINUS, }, + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 3, 12, 0, KEY_EN_POUND, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 1, 0, KEY_NORD_ANGLE_BRACKET, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 0, 0, KEY_JP_CHEVRON, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 11, 0, KEY_DE_ESZETT, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 12, 0, KEY_EN_BACK_TICK, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 6, 0, KEY_EN_Z, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 11, 0, KEY_DE_DIAERESIS_U, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 12, 0, KEY_EN_PLUS, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 3, 10, 0, KEY_DE_DIAERESIS_O, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 3, 11, 0, KEY_DE_DIAERESIS_A, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 2, 0, KEY_EN_Y, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 11, 0, KEY_EN_MINUS, KEYBOARD_OPCODE_SWAP_ONLY, }, } }; @@ -273,21 +260,16 @@ keyboard_keymap_overlay jis { KEYBOARD_SIZE_FULL, { - /*---------------------------------------------------------------------*\ - | Insert Keys | - \*---------------------------------------------------------------------*/ - }, - { - /*---------------------------------------------------------------------*\ - | Swap Keys | - \*---------------------------------------------------------------------*/ - { 0, 3, 12, 0, KEY_EN_RIGHT_BRACKET, }, - { 0, 4, 12, 0, KEY_EN_BACK_SLASH, }, - { 0, 1, 12, 0, KEY_JP_CHEVRON, }, - { 0, 2, 11, 0, KEY_JP_AT, }, - { 0, 2, 12, 0, KEY_EN_LEFT_BRACKET, }, - { 0, 3, 11, 0, KEY_JP_COLON, }, - { 0, 2, 13, 0, KEY_EN_UNUSED, }, + /*---------------------------------------------------------------------------------------------------------*\ + | Edit Keys | + \*---------------------------------------------------------------------------------------------------------*/ + { 0, 3, 12, 0, KEY_EN_RIGHT_BRACKET, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 4, 12, 0, KEY_EN_BACK_SLASH, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 1, 12, 0, KEY_JP_CHEVRON, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 11, 0, KEY_JP_AT, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 12, 0, KEY_EN_LEFT_BRACKET, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 3, 11, 0, KEY_JP_COLON, KEYBOARD_OPCODE_SWAP_ONLY, }, + { 0, 2, 13, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, } }; @@ -396,6 +378,10 @@ KeyboardLayoutManager::KeyboardLayoutManager(KEYBOARD_LAYOUT layout, KEYBOARD_SI name = KEYBOARD_NAME_SIXTY; break; + case KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE: + name = KEYBOARD_NAME_SEVENTY_FIVE; + break; + case KEYBOARD_SIZE::KEYBOARD_SIZE_TKL: name = KEYBOARD_NAME_TKL; break; @@ -404,6 +390,11 @@ KeyboardLayoutManager::KeyboardLayoutManager(KEYBOARD_LAYOUT layout, KEYBOARD_SI name = KEYBOARD_NAME_FULL; } + /*---------------------------------------------------------------------*\ + | Ensure rows and cols are accurate by updating dimensions | + \*---------------------------------------------------------------------*/ + UpdateDimensions(); + LOG_INFO(LOG_MSG_CREATED_NEW, KLM_CLASS_NAME, name.c_str(), tmp_name.c_str(), rows, cols, keymap.size()); } @@ -412,108 +403,141 @@ KeyboardLayoutManager::~KeyboardLayoutManager() } +void KeyboardLayoutManager::ChangeKeys(key_set edit_keys) +{ + OpCodeSwitch(edit_keys); +} + void KeyboardLayoutManager::ChangeKeys(keyboard_keymap_overlay new_layout) { - InsertKeys(new_layout.insert); - SwapKeys(new_layout.swap); - RemoveKeys(new_layout.remove); - UpdateDimensions(); + OpCodeSwitch(new_layout.edit_keys); } void KeyboardLayoutManager::ChangeKeys(keyboard_keymap_overlay_values new_layout) { - InsertKeys(new_layout.insert); - SwapKeys(new_layout.swap); - RemoveKeys(new_layout.remove); + OpCodeSwitch(new_layout.edit_keys); +} + +void KeyboardLayoutManager::OpCodeSwitch(key_set change_keys) +{ + LOG_DEBUG("[%s] %d keys to edit", KLM_CLASS_NAME, change_keys.size()); + + for(size_t chg_key_idx = 0; chg_key_idx < change_keys.size(); chg_key_idx++) + { + switch(change_keys[chg_key_idx].opcode) + { + case KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT: + InsertKey(change_keys[chg_key_idx]); + break; + + case KEYBOARD_OPCODE_SWAP_ONLY: + SwapKey(change_keys[chg_key_idx]); + break; + + case KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT: + RemoveKey(change_keys[chg_key_idx]); + break; + + case KEYBOARD_OPCODE_INS_SHFT_ADJACENT: + //TODO: Insert, then find next unused and remove shift left + //SwapKey(change_keys[chg_key_idx]); + break; + + default: + LOG_DEBUG(LOG_MSG_MISSING_OPCODE, KLM_CLASS_NAME, change_keys[chg_key_idx].opcode, + change_keys[chg_key_idx].name, change_keys[chg_key_idx].row, change_keys[chg_key_idx].col); + } + } + UpdateDimensions(); } +void KeyboardLayoutManager::InsertKey(keyboard_led ins_key) +{ + /*---------------------------------------------------------------------*\ + | Get the insertion point | + \*---------------------------------------------------------------------*/ + unsigned int ins_row = ins_key.row; + unsigned int ins_col = ins_key.col; + const char* ins_name = ins_key.name; + + unsigned int key_idx = 0; + + for(key_idx; key_idx < keymap.size(); key_idx++) + { + /*---------------------------------------------------------------------*\ + | Search through all existing keys and determine where in the list to | + | insert the new key. Order is row first, then column. | + \*---------------------------------------------------------------------*/ + if((ins_row < keymap[key_idx].row) || ((ins_row == keymap[key_idx].row) && (ins_col <= keymap[key_idx].col))) + { + break; + } + } + + /*---------------------------------------------------------------------*\ + | Determine whether to update row shift or not | + \*---------------------------------------------------------------------*/ + bool update_row = true; + + /*---------------------------------------------------------------------*\ + | If the search reached the end, put the new key at the end of the list | + \*---------------------------------------------------------------------*/ + if(key_idx == keymap.size()) + { + LOG_DEBUG(LOG_MSG_INSERT_BEFORE, KLM_CLASS_NAME, ins_name, "the end", ins_row, ins_col, KEY_EN_UNUSED); + keymap.push_back(ins_key); + update_row = false; + } + + /*---------------------------------------------------------------------*\ + | If inserting an empty key in the middle of the list, the key entry is | + | not actually added. Instead, increment the col field of all keys on | + | the same row after the inserted key. | + \*---------------------------------------------------------------------*/ + else if(strlen(ins_name) == 0) + { + LOG_DEBUG(LOG_MSG_INSERT_BEFORE, KLM_CLASS_NAME, LOG_MSG_UNUSED_KEY, keymap[key_idx].name, keymap[key_idx].row, keymap[key_idx].col, LOG_MSG_SHIFTING_RIGHT); + } + else + { + LOG_DEBUG(LOG_MSG_INSERT_BEFORE, KLM_CLASS_NAME, ins_name, keymap[key_idx].name, ins_row, ins_col, KEY_EN_UNUSED); + keymap.insert(keymap.begin() + key_idx, ins_key); + key_idx++; + } + + /*---------------------------------------------------------------------*\ + | If update_row is true, key at key_idx is not the end of the vector. | + | For the remaining keys, if the row is equal to the inserted key row, | + | shift 1 column right | + \*---------------------------------------------------------------------*/ + if(update_row) + { + for(key_idx; key_idx < keymap.size(); key_idx++) + { + if((keymap[key_idx].row == ins_row) && (keymap[key_idx].col >= ins_col)) + { + keymap[key_idx].col++; + } + + if(keymap[key_idx].row > ins_row) + { + break; + } + } + } +} + void KeyboardLayoutManager::InsertKeys(std::vector ins_keys) { LOG_DEBUG("[%s] %d keys to insert", KLM_CLASS_NAME, ins_keys.size()); - /*---------------------------------------------------------------------*\ - | Ensure rows and cols are accurate by updating dimensions before insert| - \*---------------------------------------------------------------------*/ - UpdateDimensions(); - /*---------------------------------------------------------------------*\ | Insert new keys one by one | \*---------------------------------------------------------------------*/ for(unsigned int ins_key_idx = 0; ins_key_idx < ins_keys.size(); ins_key_idx++) { - /*---------------------------------------------------------------------*\ - | Get the insertion point | - \*---------------------------------------------------------------------*/ - unsigned int ins_row = ins_keys[ins_key_idx].row; - unsigned int ins_col = ins_keys[ins_key_idx].col; - const char* ins_name = ins_keys[ins_key_idx].name; - - unsigned int key_idx = 0; - - for(key_idx; key_idx < keymap.size(); key_idx++) - { - /*---------------------------------------------------------------------*\ - | Search through all existing keys and determine where in the list to | - | insert the new key. Order is row first, then column. | - \*---------------------------------------------------------------------*/ - if((ins_row < keymap[key_idx].row) || ((ins_row == keymap[key_idx].row) && (ins_col <= keymap[key_idx].col))) - { - break; - } - } - - /*---------------------------------------------------------------------*\ - | Determine whether to update row shift or not | - \*---------------------------------------------------------------------*/ - bool update_row = true; - - /*---------------------------------------------------------------------*\ - | If the search reached the end, put the new key at the end of the list | - \*---------------------------------------------------------------------*/ - if(key_idx == keymap.size()) - { - LOG_DEBUG(LOG_MSG_INSERT_BEFORE, KLM_CLASS_NAME, ins_name, "the end", ins_row, ins_col, KEY_EN_UNUSED); - keymap.push_back(ins_keys[ins_key_idx]); - update_row = false; - } - - /*---------------------------------------------------------------------*\ - | If inserting an empty key in the middle of the list, the key entry is | - | not actually added. Instead, increment the col field of all keys on | - | the same row after the inserted key. | - \*---------------------------------------------------------------------*/ - else if(strlen(ins_name) == 0) - { - LOG_DEBUG(LOG_MSG_INSERT_BEFORE, KLM_CLASS_NAME, LOG_MSG_UNUSED_KEY, keymap[key_idx].name, keymap[key_idx].row, keymap[key_idx].col, LOG_MSG_SHIFTING_RIGHT); - } - else - { - LOG_DEBUG(LOG_MSG_INSERT_BEFORE, KLM_CLASS_NAME, ins_name, keymap[key_idx].name, ins_row, ins_col, KEY_EN_UNUSED); - keymap.insert(keymap.begin() + key_idx, ins_keys[ins_key_idx]); - key_idx++; - } - - /*---------------------------------------------------------------------*\ - | If update_row is true, key at key_idx is not the end of the vector. | - | For the remaining keys, if the row is equal to the inserted key row, | - | shift 1 column right | - \*---------------------------------------------------------------------*/ - if(update_row) - { - for(key_idx; key_idx < keymap.size(); key_idx++) - { - if((keymap[key_idx].row == ins_row) && (keymap[key_idx].col >= ins_col)) - { - keymap[key_idx].col++; - } - - if(keymap[key_idx].row > ins_row) - { - break; - } - } - } + InsertKey(ins_keys[ins_key_idx]); } /*---------------------------------------------------------------------*\ @@ -522,6 +546,81 @@ void KeyboardLayoutManager::InsertKeys(std::vector ins_keys) UpdateDimensions(); } +void KeyboardLayoutManager::SwapKey(keyboard_led swp_key) +{ + /*---------------------------------------------------------------------*\ + | Get the swap point | + \*---------------------------------------------------------------------*/ + unsigned int swp_row = swp_key.row; + unsigned int swp_col = swp_key.col; + const char* swp_name = swp_key.name; + unsigned int swp_value = swp_key.value; + + /*---------------------------------------------------------------------*\ + | If the keymap is empty, insert the key | + \*---------------------------------------------------------------------*/ + if(keymap.size() == 0) + { + keymap.push_back(swp_key); + return; + } + + /*---------------------------------------------------------------------*\ + | Otherwise, loop through and either swap an existing entry or insert | + | a new entry if the given location does not already have a key present | + \*---------------------------------------------------------------------*/ + for(unsigned int key_idx = 0; key_idx < keymap.size(); key_idx++) + { + /*---------------------------------------------------------------------*\ + | If the row and column are identical, we've found the swap location | + \*---------------------------------------------------------------------*/ + if((swp_row == keymap[key_idx].row) && (swp_col == keymap[key_idx].col)) + { + /*---------------------------------------------------------------------*\ + | If the key to be swapped in is an unused key, we want to remove the | + | entry from the keymap rather than perform a swap | + \*---------------------------------------------------------------------*/ + if(strlen(swp_name) == 0) + { + keymap.erase(keymap.begin() + key_idx); + } + /*---------------------------------------------------------------------*\ + | Otherwise, update the entry at this position with the new name and | + | value | + \*---------------------------------------------------------------------*/ + else + { + std::string swap_name = (strlen(swp_name) == 0) ? LOG_MSG_UNUSED_KEY : swp_name; + LOG_DEBUG("[%s] Swapping in %s and %s out @ %02d, %02d", KLM_CLASS_NAME, swap_name.c_str(), keymap[key_idx].name, swp_row, swp_col); + keymap[key_idx].name = swp_name; + keymap[key_idx].value = swp_value; + } + break; + } + + /*---------------------------------------------------------------------*\ + | If the key row is greater than the swap key row OR the key row is | + | equal to the swap key row and the key column is greater than the swap | + | key column, we've gone past the swap location without a match. In | + | this situation, we need to insert the swap key into the empty location| + | without performing a shift right. | + \*---------------------------------------------------------------------*/ + if((keymap[key_idx].row > swp_row) + ||((keymap[key_idx].row == swp_row) && (keymap[key_idx].col > swp_col))) + { + /*---------------------------------------------------------------------*\ + | Only insert the new key if the new key is not unused | + \*---------------------------------------------------------------------*/ + if(strlen(swp_name) != 0) + { + LOG_DEBUG(LOG_MSG_INSERT_BEFORE, KLM_CLASS_NAME, swp_name, keymap[key_idx].name, swp_row, swp_col, KEY_EN_UNUSED); + keymap.insert(keymap.begin() + (key_idx - 1), swp_key); + } + break; + } + } +} + void KeyboardLayoutManager::SwapKeys(std::vector swp_keys) { LOG_DEBUG("[%s] %d keys to swap", KLM_CLASS_NAME, swp_keys.size()); @@ -531,141 +630,63 @@ void KeyboardLayoutManager::SwapKeys(std::vector swp_keys) \*---------------------------------------------------------------------*/ for(unsigned int swp_key_idx = 0; swp_key_idx < swp_keys.size(); swp_key_idx++) { - /*---------------------------------------------------------------------*\ - | Get the swap point | - \*---------------------------------------------------------------------*/ - unsigned int swp_row = swp_keys[swp_key_idx].row; - unsigned int swp_col = swp_keys[swp_key_idx].col; - const char* swp_name = swp_keys[swp_key_idx].name; - unsigned int swp_value = swp_keys[swp_key_idx].value; - - /*---------------------------------------------------------------------*\ - | If the keymap is empty, insert the key | - \*---------------------------------------------------------------------*/ - if(keymap.size() == 0) - { - keymap.push_back(swp_keys[swp_key_idx]); - break; - } - - /*---------------------------------------------------------------------*\ - | Otherwise, loop through and either swap an existing entry or insert | - | a new entry if the given location does not already have a key present | - \*---------------------------------------------------------------------*/ - for(unsigned int key_idx = 0; key_idx < keymap.size(); key_idx++) - { - /*---------------------------------------------------------------------*\ - | If the row and column are identical, we've found the swap location | - \*---------------------------------------------------------------------*/ - if((swp_row == keymap[key_idx].row) && (swp_col == keymap[key_idx].col)) - { - /*---------------------------------------------------------------------*\ - | If the key to be swapped in is an unused key, we want to remove the | - | entry from the keymap rather than perform a swap | - \*---------------------------------------------------------------------*/ - if(strlen(swp_name) == 0) - { - keymap.erase(keymap.begin() + key_idx); - } - /*---------------------------------------------------------------------*\ - | Otherwise, update the entry at this position with the new name and | - | value | - \*---------------------------------------------------------------------*/ - else - { - std::string swap_name = (strlen(swp_name) == 0) ? LOG_MSG_UNUSED_KEY : swp_name; - LOG_DEBUG("[%s] Swapping in %s and %s out @ %02d, %02d", KLM_CLASS_NAME, swap_name.c_str(), keymap[key_idx].name, swp_row, swp_col); - keymap[key_idx].name = swp_name; - keymap[key_idx].value = swp_value; - } - break; - } - - /*---------------------------------------------------------------------*\ - | If the key row is greater than the swap key row OR the key row is | - | equal to the swap key row and the key column is greater than the swap | - | key column, we've gone past the swap location without a match. In | - | this situation, we need to insert the swap key into the empty location| - | without performing a shift right. | - \*---------------------------------------------------------------------*/ - if((keymap[key_idx].row > swp_row) - ||((keymap[key_idx].row == swp_row) && (keymap[key_idx].col > swp_col))) - { - /*---------------------------------------------------------------------*\ - | Only insert the new key if the new key is not unused | - \*---------------------------------------------------------------------*/ - if(strlen(swp_name) != 0) - { - LOG_DEBUG(LOG_MSG_INSERT_BEFORE, KLM_CLASS_NAME, swp_name, keymap[key_idx].name, swp_row, swp_col, KEY_EN_UNUSED); - keymap.insert(keymap.begin() + (key_idx - 1), swp_keys[swp_key_idx]); - } - break; - } - } + SwapKey(swp_keys[swp_key_idx]); } } -void KeyboardLayoutManager::RemoveKeys(std::vector rmv_keys) +void KeyboardLayoutManager::RemoveKey(keyboard_led rmv_key) { /*---------------------------------------------------------------------*\ - | Remove keys one by one | + | Get the remove point | \*---------------------------------------------------------------------*/ - for(unsigned int rmv_key_idx = 0; rmv_key_idx < rmv_keys.size(); rmv_key_idx++) + unsigned int rmv_row = rmv_key.row; + unsigned int rmv_col = rmv_key.col; + + /*---------------------------------------------------------------------*\ + | Loop through and find the entry to remove | + \*---------------------------------------------------------------------*/ + for(unsigned int key_idx = 0; key_idx < keymap.size(); key_idx++) { /*---------------------------------------------------------------------*\ - | Get the remove point | + | If the row and column are identical, we've found the swap location | \*---------------------------------------------------------------------*/ - unsigned int rmv_row = rmv_keys[rmv_key_idx].row; - unsigned int rmv_col = rmv_keys[rmv_key_idx].col; - const char* rmv_name = rmv_keys[rmv_key_idx].name; - unsigned int rmv_value = rmv_keys[rmv_key_idx].value; - - /*---------------------------------------------------------------------*\ - | Loop through and find the entry to remove | - \*---------------------------------------------------------------------*/ - for(unsigned int key_idx = 0; key_idx < keymap.size(); key_idx++) + if((rmv_row == keymap[key_idx].row) && (rmv_col == keymap[key_idx].col)) { - /*---------------------------------------------------------------------*\ - | If the row and column are identical, we've found the swap location | - \*---------------------------------------------------------------------*/ - if((rmv_row == keymap[key_idx].row) && (rmv_col == keymap[key_idx].col)) + LOG_DEBUG("[%s] Removing %s @ %02d, %02d and shifting keys left", KLM_CLASS_NAME, keymap[key_idx].name, rmv_row, rmv_col); + keymap.erase(keymap.begin() + key_idx); + + for(key_idx; key_idx < keymap.size(); key_idx++) { - LOG_DEBUG("[%s] Removing %s @ %02d, %02d and shifting keys left", KLM_CLASS_NAME, keymap[key_idx].name, rmv_row, rmv_col); - keymap.erase(keymap.begin() + key_idx); - - for(key_idx; key_idx < keymap.size(); key_idx++) + if(rmv_row == keymap[key_idx].row) { - if(rmv_row == keymap[key_idx].row) - { - keymap[key_idx].col--; - } - else - { - break; - } + keymap[key_idx].col--; + } + else + { + break; } - - break; } - if((rmv_row == keymap[key_idx].row) && (rmv_col < keymap[key_idx].col)) + break; + } + + if((rmv_row == keymap[key_idx].row) && (rmv_col < keymap[key_idx].col)) + { + LOG_DEBUG("[%s] Removing unused key @ %02d, %02d and shifting keys left", KLM_CLASS_NAME, rmv_row, rmv_col); + + for(key_idx; key_idx < keymap.size(); key_idx++) { - LOG_DEBUG("[%s] Removing unused key @ %02d, %02d and shifting keys left", KLM_CLASS_NAME, rmv_row, rmv_col); - - for(key_idx; key_idx < keymap.size(); key_idx++) + if(rmv_row == keymap[key_idx].row) { - if(rmv_row == keymap[key_idx].row) - { - keymap[key_idx].col--; - } - else - { - break; - } + keymap[key_idx].col--; + } + else + { + break; } - - break; } + + break; } } } diff --git a/KeyboardLayoutManager/KeyboardLayoutManager.h b/KeyboardLayoutManager/KeyboardLayoutManager.h index 3b003d58..1c69b2c8 100644 --- a/KeyboardLayoutManager/KeyboardLayoutManager.h +++ b/KeyboardLayoutManager/KeyboardLayoutManager.h @@ -17,27 +17,30 @@ extern const char* KLM_CLASS_NAME; extern const char* KEYBOARD_NAME_FULL; extern const char* KEYBOARD_NAME_TKL; extern const char* KEYBOARD_NAME_SIXTY; +extern const char* KEYBOARD_NAME_SEVENTY_FIVE; extern const char* LOG_MSG_UNUSED_KEY; enum KEYBOARD_ZONE_BITS { - KEYBOARD_ZONE_MAIN = ( 1 << 0 ), - KEYBOARD_ZONE_FN_ROW = ( 1 << 1 ), - KEYBOARD_ZONE_EXTRA = ( 1 << 2 ), - KEYBOARD_ZONE_NUMPAD = ( 1 << 3 ), + KEYBOARD_ZONE_MAIN = ( 1 << 0 ), + KEYBOARD_ZONE_FN_ROW = ( 1 << 1 ), + KEYBOARD_ZONE_EXTRA = ( 1 << 2 ), + KEYBOARD_ZONE_NUMPAD = ( 1 << 3 ), }; enum KEYBOARD_SIZE { - KEYBOARD_SIZE_EMPTY = 0, - KEYBOARD_SIZE_FULL = ( KEYBOARD_ZONE_MAIN | KEYBOARD_ZONE_FN_ROW | KEYBOARD_ZONE_EXTRA | KEYBOARD_ZONE_NUMPAD ), - KEYBOARD_SIZE_TKL = ( KEYBOARD_ZONE_MAIN | KEYBOARD_ZONE_FN_ROW | KEYBOARD_ZONE_EXTRA ), - KEYBOARD_SIZE_SIXTY = ( KEYBOARD_ZONE_MAIN ), + KEYBOARD_SIZE_EMPTY = 0, + KEYBOARD_SIZE_FULL = ( KEYBOARD_ZONE_MAIN | KEYBOARD_ZONE_FN_ROW | + KEYBOARD_ZONE_EXTRA | KEYBOARD_ZONE_NUMPAD ), + KEYBOARD_SIZE_TKL = ( KEYBOARD_ZONE_MAIN | KEYBOARD_ZONE_FN_ROW | KEYBOARD_ZONE_EXTRA ), + KEYBOARD_SIZE_SEVENTY_FIVE = ( KEYBOARD_ZONE_MAIN | KEYBOARD_ZONE_FN_ROW ), + KEYBOARD_SIZE_SIXTY = ( KEYBOARD_ZONE_MAIN ), }; enum KEYBOARD_LAYOUT { - KEYBOARD_LAYOUT_ANSI_QWERTY = 0, + KEYBOARD_LAYOUT_ANSI_QWERTY = 0, KEYBOARD_LAYOUT_ISO_QWERTY, KEYBOARD_LAYOUT_ISO_QWERTZ, KEYBOARD_LAYOUT_ISO_AZERTY, @@ -51,6 +54,14 @@ enum KEYBOARD_MAP_FILL_TYPE KEYBOARD_MAP_FILL_TYPE_VALUE, }; +enum KEYBOARD_OPCODE +{ + KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT = 0, + KEYBOARD_OPCODE_SWAP_ONLY = 1, + KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT = 2, + KEYBOARD_OPCODE_INS_SHFT_ADJACENT = 3, +}; + typedef struct { uint8_t zone; @@ -58,6 +69,7 @@ typedef struct uint8_t col; unsigned int value; const char* name; + KEYBOARD_OPCODE opcode; } keyboard_led; typedef @@ -72,18 +84,14 @@ typedef struct typedef struct { KEYBOARD_SIZE base_size; - key_set insert; - key_set swap; - key_set remove; + key_set edit_keys; } keyboard_keymap_overlay; typedef struct { KEYBOARD_SIZE base_size; layout_values key_values; - key_set insert; - key_set swap; - key_set remove; + key_set edit_keys; } keyboard_keymap_overlay_values; class KeyboardLayoutManager @@ -93,10 +101,9 @@ public: KeyboardLayoutManager(KEYBOARD_LAYOUT, KEYBOARD_SIZE, layout_values values); ~KeyboardLayoutManager(); + void ChangeKeys(key_set edit_keys); void ChangeKeys(keyboard_keymap_overlay new_layout); void ChangeKeys(keyboard_keymap_overlay_values new_layout); - void InsertKeys(std::vector keys); - void SwapKeys(std::vector keys); void UpdateDimensions(); std::string GetName(); @@ -119,7 +126,12 @@ public: uint8_t height, uint8_t width); private: - void RemoveKeys(std::vector keys); + void OpCodeSwitch(key_set change_keys); + void InsertKey(keyboard_led key); + void InsertKeys(std::vector keys); + void SwapKey(keyboard_led keys); + void SwapKeys(std::vector keys); + void RemoveKey(keyboard_led keys); KEYBOARD_LAYOUT layout; KEYBOARD_SIZE physical_size;