Added Remove Row Opcode to the KLM

* Removed blank row from Sixty percent (Mini) keyboards
* Resolves #3404
This commit is contained in:
Chris M 2023-06-07 19:12:46 +10:00
parent 70ba6a2133
commit 3d0582d7be
3 changed files with 54 additions and 2 deletions

View file

@ -778,8 +778,7 @@ keyboard_keymap_overlay_values razer_huntsman_mini_layout
| Edit Keys | | Edit Keys |
| Zone, Row, Column, Value, Key, OpCode, | | Zone, Row, Column, Value, Key, OpCode, |
\*---------------------------------------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------------------------------------*/
{ 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap out Backtick { 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 0
{ 0, 0, 1, 0, KEY_EN_ESCAPE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Escape and shift row 0
{ 0, 1, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 1 { 0, 1, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 1
{ 0, 2, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 2 { 0, 2, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 2
{ 0, 3, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 3 { 0, 3, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 3

View file

@ -372,10 +372,18 @@ KeyboardLayoutManager::KeyboardLayoutManager(KEYBOARD_LAYOUT layout, KEYBOARD_SI
SwapKeys(values.regional_overlay.find(layout)->second); SwapKeys(values.regional_overlay.find(layout)->second);
} }
/*---------------------------------------------------------------------*\
| Size specific fixes |
\*---------------------------------------------------------------------*/
switch(size) switch(size)
{ {
case KEYBOARD_SIZE::KEYBOARD_SIZE_SIXTY: case KEYBOARD_SIZE::KEYBOARD_SIZE_SIXTY:
/*-------------------------------------------------------------*\
| Remove the empty Function row and swap in the Escape key |
\*-------------------------------------------------------------*/
name = KEYBOARD_NAME_SIXTY; name = KEYBOARD_NAME_SIXTY;
RemoveRow(0);
SwapKey(keyboard_zone_fn_row[0]);
break; break;
case KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE: case KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE:
@ -443,6 +451,10 @@ void KeyboardLayoutManager::OpCodeSwitch(key_set change_keys)
//SwapKey(change_keys[chg_key_idx]); //SwapKey(change_keys[chg_key_idx]);
break; break;
case KEYBOARD_OPCODE_REMOVE_ROW:
RemoveRow(change_keys[chg_key_idx].row);
break;
default: default:
LOG_DEBUG(LOG_MSG_MISSING_OPCODE, KLM_CLASS_NAME, change_keys[chg_key_idx].opcode, 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); change_keys[chg_key_idx].name, change_keys[chg_key_idx].row, change_keys[chg_key_idx].col);
@ -698,6 +710,45 @@ void KeyboardLayoutManager::RemoveKey(keyboard_led rmv_key)
} }
} }
void KeyboardLayoutManager::RemoveRow(uint8_t rmv_row)
{
/*---------------------------------------------------------------------*\
| Check row is valid to remove |
\*---------------------------------------------------------------------*/
if(rmv_row >= rows)
{
LOG_DEBUG("[%s] Removing row %d failed as rows currently = %d", KLM_CLASS_NAME, rmv_row, rows);
return;
}
/*---------------------------------------------------------------------*\
| Loop through and remove any keys in the row |
\*---------------------------------------------------------------------*/
unsigned int key_idx = 0;
for(/*key_idx*/; key_idx < keymap.size() && rmv_row > keymap[key_idx].row; key_idx++)
{
if(rmv_row == keymap[key_idx].row)
{
LOG_DEBUG("[%s] Removing %s @ %02d, %02d from row %d", KLM_CLASS_NAME, keymap[key_idx].name, keymap[key_idx].row, keymap[key_idx].col, rmv_row);
keymap.erase(keymap.begin() + key_idx);
}
}
/*---------------------------------------------------------------------*\
| Loop through the remaining rows and adjust row number |
\*---------------------------------------------------------------------*/
if(rmv_row < keymap[key_idx].row)
{
for(/*key_idx*/; key_idx < keymap.size(); key_idx++)
{
keymap[key_idx].row--;
}
LOG_DEBUG("[%s] Remove row %d successful", KLM_CLASS_NAME, rmv_row);
}
}
std::string KeyboardLayoutManager::GetName() std::string KeyboardLayoutManager::GetName()
{ {

View file

@ -60,6 +60,7 @@ enum KEYBOARD_OPCODE
KEYBOARD_OPCODE_SWAP_ONLY = 1, KEYBOARD_OPCODE_SWAP_ONLY = 1,
KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT = 2, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT = 2,
KEYBOARD_OPCODE_INS_SHFT_ADJACENT = 3, KEYBOARD_OPCODE_INS_SHFT_ADJACENT = 3,
KEYBOARD_OPCODE_REMOVE_ROW = 4,
}; };
typedef struct typedef struct
@ -132,6 +133,7 @@ private:
void SwapKey(keyboard_led keys); void SwapKey(keyboard_led keys);
void SwapKeys(std::vector<keyboard_led> keys); void SwapKeys(std::vector<keyboard_led> keys);
void RemoveKey(keyboard_led keys); void RemoveKey(keyboard_led keys);
void RemoveRow(uint8_t row);
KEYBOARD_LAYOUT layout; KEYBOARD_LAYOUT layout;
KEYBOARD_SIZE physical_size; KEYBOARD_SIZE physical_size;