diff --git a/firmware/src/cmdr_keyboard.cpp b/firmware/src/cmdr_keyboard.cpp index 5d1d687..88a662f 100755 --- a/firmware/src/cmdr_keyboard.cpp +++ b/firmware/src/cmdr_keyboard.cpp @@ -10,13 +10,11 @@ #include #include -const uint8_t USB_LED_NUM_LOCK = 0; -const uint8_t USB_LED_CAPS_LOCK = 1; -const uint8_t USB_LED_SCROLL_LOCK = 2; +const uint8_t USB_LED_CAPS_LOCK = 1; // Caps lock LED definition from HID spec 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_WIN_LATCH = 2 + KEY_OFFSET; // Function layer 2 button +const uint16_t KEY_FN = 1 + KEY_OFFSET; // Function layer button reference +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) @@ -87,7 +85,7 @@ Button buttons[NBR_OF_BUTTONS] = /* 5 */ {KEY_R, KEY_F4, KEY_F15, 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}, -/* 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}, /* 10 */ {KEY_O, KEY_F9, NO_KEY, 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 == KEY_WIN_LATCH) + if (keycode == KEY_GUI_LATCH) { win_latched = true; return 1; @@ -183,7 +181,7 @@ uint8_t set_key(uint16_t keycode, uint8_t kstate) /** * 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() { @@ -195,13 +193,14 @@ uint8_t process_keys() 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)) { buttons[kp_keypad.key[i].kchar - 1].run_keycode = true; 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; /* 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++; } - /* Enter bootloader if all four corner-buttons is pressed together */ if (corner_pressed == 4) { - /* Release all keys and reboot to bootloader */ Keyboard.releaseAll(); status_led.on(); status_led.update(); 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++) { - /* 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; - - /* Reset run_keycode flag */ buttons[i].run_keycode = false; - /* Check if key pressed or released */ if (buttons[i].kstate == RELEASED) { set_key(buttons[i].last_keycode, RELEASED); @@ -282,7 +275,7 @@ void loop() if (current_timestamp >= indicator_timestamp) { indicator_timestamp = current_timestamp + 200; - + /* Set status indication */ if (keyboard_leds & (1 << USB_LED_CAPS_LOCK)) { @@ -296,7 +289,7 @@ void loop() { status_led.off(); } - + status_led.update(); } }