Code cleanup

This commit is contained in:
Christoffer Martinsson 2023-06-05 11:34:56 +02:00
parent ad6359a2ad
commit 69fd50b6b7

View File

@ -10,13 +10,11 @@
#include <Arduino.h> #include <Arduino.h>
#include <Keypad.h> #include <Keypad.h>
const uint8_t USB_LED_NUM_LOCK = 0; const uint8_t USB_LED_CAPS_LOCK = 1; // Caps lock LED definition from HID spec
const uint8_t USB_LED_CAPS_LOCK = 1;
const uint8_t USB_LED_SCROLL_LOCK = 2;
const uint16_t KEY_OFFSET = 0xAA00; // Offset to apply for not interfere with already defined keyboard keys const uint16_t KEY_OFFSET = 0xAA00; // Offset to apply for not interfere with already defined keyboard keys
const uint16_t KEY_FN = 1 + KEY_OFFSET; // Function layer 1 button const uint16_t KEY_FN = 1 + KEY_OFFSET; // Function layer button reference
const uint16_t KEY_WIN_LATCH = 2 + KEY_OFFSET; // Function layer 2 button const uint16_t KEY_GUI_LATCH = 2 + KEY_OFFSET; // GUI latching (ex: Win) button reference
const uint8_t NBR_OF_BUTTONS = 42; // Number of buttons used (42 in this case) const uint8_t NBR_OF_BUTTONS = 42; // Number of buttons used (42 in this case)
@ -87,7 +85,7 @@ Button buttons[NBR_OF_BUTTONS] =
/* 5 */ {KEY_R, KEY_F4, KEY_F15, IDLE, NO_KEY, false}, /* 5 */ {KEY_R, KEY_F4, KEY_F15, IDLE, NO_KEY, false},
/* 6 */ {KEY_T, KEY_F5, KEY_F16, IDLE, NO_KEY, false}, /* 6 */ {KEY_T, KEY_F5, KEY_F16, IDLE, NO_KEY, false},
/* 7 */ {KEY_Y, KEY_F6, KEY_TILDE, IDLE, NO_KEY, false}, /* 7 */ {KEY_Y, KEY_F6, KEY_TILDE, IDLE, NO_KEY, false},
/* 8 */ {KEY_U, KEY_F7, KEY_WIN_LATCH, IDLE, NO_KEY, false}, /* 8 */ {KEY_U, KEY_F7, KEY_GUI_LATCH, IDLE, NO_KEY, false},
/* 9 */ {KEY_I, KEY_F8, KEY_LEFT_GUI, IDLE, NO_KEY, false}, /* 9 */ {KEY_I, KEY_F8, KEY_LEFT_GUI, IDLE, NO_KEY, false},
/* 10 */ {KEY_O, KEY_F9, NO_KEY, IDLE, NO_KEY, false}, /* 10 */ {KEY_O, KEY_F9, NO_KEY, IDLE, NO_KEY, false},
/* 11 */ {KEY_P, KEY_F10, KEY_CAPS_LOCK, IDLE, NO_KEY, false}, /* 11 */ {KEY_P, KEY_F10, KEY_CAPS_LOCK, IDLE, NO_KEY, false},
@ -146,7 +144,7 @@ uint8_t set_key(uint16_t keycode, uint8_t kstate)
{ {
if (keycode == NO_KEY || keycode == KEY_FN) return 0; if (keycode == NO_KEY || keycode == KEY_FN) return 0;
if (keycode == KEY_WIN_LATCH) if (keycode == KEY_GUI_LATCH)
{ {
win_latched = true; win_latched = true;
return 1; return 1;
@ -183,7 +181,7 @@ uint8_t set_key(uint16_t keycode, uint8_t kstate)
/** /**
* process_keypad * process_keypad
* *
* @return uint8_t 1 if key(s) processed, 0 if not. * @return uint8_t 1 if key(s) processed, 0 if not.
*/ */
uint8_t process_keys() uint8_t process_keys()
{ {
@ -195,13 +193,14 @@ uint8_t process_keys()
for (int i = 0; i < MAX_SIMULTANIOUS_KEYS; i++) for (int i = 0; i < MAX_SIMULTANIOUS_KEYS; i++)
{ {
/* Process key press/release */ /* Update button table if key pressed/releaseed */
if ((kp_keypad.key[i].kstate == PRESSED || kp_keypad.key[i].kstate == RELEASED) && (kp_keypad.key[i].stateChanged == true)) if ((kp_keypad.key[i].kstate == PRESSED || kp_keypad.key[i].kstate == RELEASED) && (kp_keypad.key[i].stateChanged == true))
{ {
buttons[kp_keypad.key[i].kchar - 1].run_keycode = true; buttons[kp_keypad.key[i].kchar - 1].run_keycode = true;
buttons[kp_keypad.key[i].kchar - 1].kstate = kp_keypad.key[i].kstate; buttons[kp_keypad.key[i].kchar - 1].kstate = kp_keypad.key[i].kstate;
} }
/* Skip if key is not pressed */
if (kp_keypad.key[i].kstate == IDLE || kp_keypad.key[i].kstate == RELEASED) continue; if (kp_keypad.key[i].kstate == IDLE || kp_keypad.key[i].kstate == RELEASED) continue;
/* Count number of corner keys pressed */ /* Count number of corner keys pressed */
@ -214,27 +213,21 @@ uint8_t process_keys()
if (buttons[kp_keypad.key[i].kchar - 1].keycode == KEY_FN) fn_mode++; if (buttons[kp_keypad.key[i].kchar - 1].keycode == KEY_FN) fn_mode++;
} }
/* Enter bootloader if all four corner-buttons is pressed together */
if (corner_pressed == 4) if (corner_pressed == 4)
{ {
/* Release all keys and reboot to bootloader */
Keyboard.releaseAll(); Keyboard.releaseAll();
status_led.on(); status_led.on();
status_led.update(); status_led.update();
delay(200); // Wait for usb to settle before rebooting delay(200); // Wait for usb to settle before rebooting
_reboot_Teensyduino_(); _reboot_Teensyduino_();
} }
/* Execute key commands */
for (int i = 0; i < NBR_OF_BUTTONS; i++) for (int i = 0; i < NBR_OF_BUTTONS; i++)
{ {
/* Check if key should be processed */ /* Check if key is ready to be set. Else skip to next button */
if (buttons[i].run_keycode == false) continue; if (buttons[i].run_keycode == false) continue;
/* Reset run_keycode flag */
buttons[i].run_keycode = false; buttons[i].run_keycode = false;
/* Check if key pressed or released */
if (buttons[i].kstate == RELEASED) if (buttons[i].kstate == RELEASED)
{ {
set_key(buttons[i].last_keycode, RELEASED); set_key(buttons[i].last_keycode, RELEASED);
@ -282,7 +275,7 @@ void loop()
if (current_timestamp >= indicator_timestamp) if (current_timestamp >= indicator_timestamp)
{ {
indicator_timestamp = current_timestamp + 200; indicator_timestamp = current_timestamp + 200;
/* Set status indication */ /* Set status indication */
if (keyboard_leds & (1 << USB_LED_CAPS_LOCK)) if (keyboard_leds & (1 << USB_LED_CAPS_LOCK))
{ {
@ -296,7 +289,7 @@ void loop()
{ {
status_led.off(); status_led.off();
} }
status_led.update(); status_led.update();
} }
} }