replaced long special key switch case with types and targets thingy

This commit is contained in:
mintey 2021-02-28 17:34:38 +02:00
parent 908543ebd1
commit 76cbc6888f
1 changed files with 19 additions and 75 deletions

View File

@ -41,6 +41,7 @@ const int button_pins[10] = {
const int debounce_time = 400;
int button_timers[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
// TODO: differentiate between GKOS modifiers and keyboard modifiers somehow
/*
backspace, space (keep those two first since they overlap with the rest )
g, k, o, s, w, native
@ -56,6 +57,17 @@ const byte specials[22] = {
17, 51, 30, 10, 20, 12, 33, 34, 9, 36, 27,
54, 18, 45, 63, 31, 47, 55, 62, 43, 61, 59
};
enum SpecialType { PrintCharacter, PressKey, ToggleModifier };
const byte special_action_types[22] = {
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1
};
enum Modifier { Shift, SymbolShift, Keyset, Control, Alt };
const int special_action_targets[22] = {
'-', '\\', '/', '\'', ',', '!', '?', '/', KEY_UP, KEY_DOWN, KEY_PAGE_UP,
KEY_PAGE_DOWN, Modifier::Shift, Modifier::SymbolShift, Modifier::Keyset,
KEY_ESC, Modifier::Control, Modifier::Alt, KEY_DELETE, KEY_INSERT,
KEY_TAB, KEY_ENTER
};
byte key_pressed = 0;
byte key_pressed_total = 0;
@ -134,89 +146,21 @@ void key_released(byte key) {
}
if (is_special && !modifier_used) {
Serial.print("special ");
Serial.println(specials[special]);
// only register a special keypress when all keys have been released
if (key_pressed != 0)
return;
switch (special) {
case 0: // dash
Keyboard.print('-');
switch (special_action_types[special]) {
case SpecialType::PrintCharacter:
Keyboard.print((char)special_action_targets[special]);
return;
case 1: // backslash
Keyboard.print('\\');
case SpecialType::PressKey:
Keyboard.press(special_action_targets[special]);
Keyboard.release(special_action_targets[special]);
return;
case 2: // slash
Keyboard.print('/');
return;
case 3: // apostrophe
Keyboard.print('\'');
return;
case 4: // comma
Keyboard.print(',');
return;
case 5: // exclamation point
Keyboard.print('!');
return;
case 6: // question mark
Keyboard.print('?');
return;
case 7: // period
Keyboard.print('.');
return;
case 8: // up
Keyboard.press(KEY_UP);
Keyboard.release(KEY_UP);
return;
case 9: // down
Keyboard.press(KEY_DOWN);
Keyboard.release(KEY_DOWN);
return;
case 10: // page up
Keyboard.press(KEY_PAGE_UP);
Keyboard.release(KEY_PAGE_UP);
return;
case 11: // page down
Keyboard.press(KEY_PAGE_DOWN);
Keyboard.release(KEY_PAGE_DOWN);
return;
case 12: // shift
case SpecialType::ToggleModifier:
// TODO
return;
case 13: // symbol shift
// TODO
return;
case 14: // switch keyset
// TODO
return;
case 15: // escape
Keyboard.press(KEY_ESC);
Keyboard.release(KEY_ESC);
return;
case 16: // control
// TODO
return;
case 17: // alt
// TODO
return;
case 18: // delete
Keyboard.press(KEY_DELETE);
Keyboard.release(KEY_DELETE);
return;
case 19: // insert
Keyboard.press(KEY_INSERT);
Keyboard.release(KEY_INSERT);
return;
case 20: // tab
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
return;
case 21: // enter
Keyboard.press(KEY_ENTER);
Keyboard.release(KEY_ENTER);
return;
}
}