@ -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 * KEYBOARD_NAME_FULL = " Full 104 key " ;
const char * KEYBOARD_NAME_TKL = " Tenkeyless " ;
const char * KEYBOARD_NAME_SIXTY = " Sixty 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 * 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_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_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_led > 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_led > 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_led > 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_led > 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,109 +403,142 @@ 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 ) ;
UpdateDimensions ( ) ;
OpCodeSwitch ( new_layout . edit_keys ) ;
}
void KeyboardLayoutManager : : InsertKeys( std : : vector < keyboard_led > ins _keys)
void KeyboardLayoutManager : : OpCodeSwitch ( key_set change_keys )
{
LOG_DEBUG ( " [%s] %d keys to insert" , KLM_CLASS_NAME , ins _keys. size ( ) ) ;
LOG_DEBUG ( " [%s] %d keys to edit" , KLM_CLASS_NAME , change _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 + + )
for ( size_t chg_key_idx = 0 ; chg_key_idx < change_keys . size ( ) ; chg_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 ;
switch ( change_keys [ chg_key_idx ] . opcode )
{
case KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT :
InsertKey ( change_keys [ chg_key_idx ] ) ;
break ;
unsigned int key_idx = 0 ;
case KEYBOARD_OPCODE_SWAP_ONLY :
SwapKey ( change_keys [ chg_key_idx ] ) ;
break ;
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 ) ) )
{
case KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT :
RemoveKey ( change_keys [ chg_key_idx ] ) ;
break ;
}
}
/*---------------------------------------------------------------------*\
| Determine whether to update row shift or not |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
bool update_row = true ;
case KEYBOARD_OPCODE_INS_SHFT_ADJACENT :
//TODO: Insert, then find next unused and remove shift left
//SwapKey(change_keys[chg_key_idx]);
break ;
/*---------------------------------------------------------------------*\
| 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 ;
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 + + )
{
/*---------------------------------------------------------------------*\
| 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 . |
| Search through all existing keys and determine where in the list to |
| insert the new key . Order is row first , then column . |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
else if ( strlen ( ins_name ) = = 0 )
if( ( ins_row < keymap [ key_idx ] . row ) | | ( ( ins_row = = keymap [ key_idx ] . row ) & & ( ins_col < = keymap [ key_idx ] . col ) ) )
{
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 + + ;
break ;
}
}
/*---------------------------------------------------------------------*\
| 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 )
/*---------------------------------------------------------------------*\
| 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 + + )
{
for ( key_idx ; key_idx < keymap . size ( ) ; key_idx + + )
if( ( keymap [ key_idx ] . row = = ins_row ) & & ( keymap [ key_idx ] . col > = ins_col ) )
{
if ( ( keymap [ key_idx ] . row = = ins_row ) & & ( keymap [ key_idx ] . col > = ins_col ) )
{
keymap [ key_idx ] . col + + ;
}
keymap [ key_idx ] . col + + ;
}
if ( keymap [ key_idx ] . row > ins_row )
{
break ;
}
if ( keymap [ key_idx ] . row > ins_row )
{
break ;
}
}
}
}
void KeyboardLayoutManager : : InsertKeys ( std : : vector < keyboard_led > ins_keys )
{
LOG_DEBUG ( " [%s] %d keys to insert " , KLM_CLASS_NAME , ins_keys . size ( ) ) ;
/*---------------------------------------------------------------------*\
| Insert new keys one by one |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
for ( unsigned int ins_key_idx = 0 ; ins_key_idx < ins_keys . size ( ) ; ins_key_idx + + )
{
InsertKey ( ins_keys [ ins_key_idx ] ) ;
}
/*---------------------------------------------------------------------*\
| Ensure rows and cols are accurate by updating dimensions after insert |
@ -522,150 +546,147 @@ void KeyboardLayoutManager::InsertKeys(std::vector<keyboard_led> ins_keys)
UpdateDimensions ( ) ;
}
void KeyboardLayoutManager : : SwapKey s ( std: : vector < keyboard_led> swp_key s )
void KeyboardLayoutManager : : SwapKey ( keyboard_led swp_key )
{
LOG_DEBUG ( " [%s] %d keys to swap " , KLM_CLASS_NAME , swp_keys . size ( ) ) ;
/*---------------------------------------------------------------------*\
| 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 ;
/*---------------------------------------------------------------------*\
| Swap keys one by one |
| If the keymap is empty , insert the key |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
for ( unsigned int swp_key_idx = 0 ; swp_key_idx < swp_keys . size ( ) ; swp_key_idx + + )
if( keymap . size ( ) = = 0 )
{
/*---------------------------------------------------------------------*\
| 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 ;
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 keymap is empty , insert the key |
| If the row and column are identical , we ' ve found the swap location |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
if ( keymap . size ( ) = = 0 )
if ( ( swp_row = = keymap [ key_idx ] . row ) & & ( swp_col = = keymap [ key_idx ] . col ) )
{
keymap . push_back ( swp_keys [ swp_key_idx ] ) ;
/*---------------------------------------------------------------------*\
| 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 ;
}
/*---------------------------------------------------------------------*\
| 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 |
| 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 . |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
for ( unsigned int key_idx = 0 ; key_idx < keymap . size ( ) ; key_idx + + )
if ( ( keymap [ key_idx ] . row > swp_row )
| | ( ( keymap [ key_idx ] . row = = swp_row ) & & ( keymap [ key_idx ] . col > swp_col ) ) )
{
/*---------------------------------------------------------------------*\
| If the row and column are identical , we ' ve found the swap location |
| Only insert the new key if the new key is not unused |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
if ( ( swp_row = = keymap [ key_idx ] . row ) & & ( swp_col = = keymap [ key_idx ] . col ) )
if ( strlen ( swp_name ) ! = 0 )
{
/*---------------------------------------------------------------------*\
| 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 ;
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 : : Remove Keys( std : : vector < keyboard_led > rmv _keys)
void KeyboardLayoutManager : : SwapKeys ( std : : vector < keyboard_led > swp_keys )
{
LOG_DEBUG ( " [%s] %d keys to swap " , KLM_CLASS_NAME , swp_keys . size ( ) ) ;
/*---------------------------------------------------------------------*\
| Remove keys one by one |
| Swap keys one by one |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
for ( unsigned int rmv_key_idx = 0 ; rmv_key_idx < rmv_keys . size ( ) ; rmv _key_idx+ + )
for ( unsigned int swp_key_idx = 0 ; swp_key_idx < swp_keys . size ( ) ; swp_key_idx + + )
{
/*---------------------------------------------------------------------*\
| Get the remove point |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
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 ;
SwapKey ( swp_keys [ swp_key_idx ] ) ;
}
}
void KeyboardLayoutManager : : RemoveKey ( keyboard_led rmv_key )
{
/*---------------------------------------------------------------------*\
| Get the remove point |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
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 + + )
{
/*---------------------------------------------------------------------*\
| Loop through and find the entry to remove |
| If the row and column are identical , we ' ve found the swap location |
\ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
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 ) ;
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 + + )
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 ) )
{
LOG_DEBUG ( " [%s] Removing unused key @ %02d, %02d and shifting keys left " , KLM_CLASS_NAME , rmv_row , rmv_col ) ;
break ;
}
for ( key_idx ; key_idx < keymap . size ( ) ; key_idx + + )
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 + + )
{
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 ;
}
}
}