replaced long special key switch case with types and targets thingy
This commit is contained in:
parent
908543ebd1
commit
76cbc6888f
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue