]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
Add mechanical locking switch support for CapsLock
authortmk <nobody@nowhere>
Mon, 11 Mar 2013 16:07:06 +0000 (01:07 +0900)
committertmk <nobody@nowhere>
Tue, 12 Mar 2013 01:43:02 +0000 (10:43 +0900)
common/action.c
common/keyboard.c
common/keycode.h
keyboard/gh60/config.h

index 15e125a3ec917d41a1e880ac9ed860bab6182bb0..4fafbfa79f58f86a0c1cf1638f859efa2fc3b1f2 100644 (file)
@@ -23,6 +23,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "command.h"
 #include "util.h"
 #include "debug.h"
+#include "led.h"
 #include "layer_switch.h"
 #include "action_macro.h"
 #include "action.h"
@@ -889,6 +890,18 @@ void register_code(uint8_t code)
     if (code == KC_NO) {
         return;
     }
+#ifdef CAPSLOCK_LOCKING_ENABLE
+    else if (KC_LOCKING_CAPS == code) {
+#ifdef CAPSLOCK_LOCKING_RESYNC_ENABLE
+        // Resync: ignore if caps lock already is on
+        if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) return;
+#endif
+        host_add_key(KC_CAPSLOCK);
+        host_send_keyboard_report();
+        host_del_key(KC_CAPSLOCK);
+        host_send_keyboard_report();
+    }
+#endif
     else if IS_KEY(code) {
         // TODO: should push command_proc out of this block?
         if (command_proc(code)) return;
@@ -914,7 +927,22 @@ void register_code(uint8_t code)
 
 void unregister_code(uint8_t code)
 {
-    if IS_KEY(code) {
+    if (code == KC_NO) {
+        return;
+    }
+#ifdef CAPSLOCK_LOCKING_ENABLE
+    else if (KC_LOCKING_CAPS == code) {
+#ifdef CAPSLOCK_LOCKING_RESYNC_ENABLE
+        // Resync: ignore if caps lock already is off
+        if (!(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) return;
+#endif
+        host_add_key(KC_CAPSLOCK);
+        host_send_keyboard_report();
+        host_del_key(KC_CAPSLOCK);
+        host_send_keyboard_report();
+    }
+#endif
+    else if IS_KEY(code) {
         host_del_key(code);
         host_send_keyboard_report();
     }
index 401fdb4e17f311be9bdae5d6f991f8ac4aff6bd1..42c57ac96fad956d8ed323afb2f10443538ab14e 100644 (file)
@@ -134,5 +134,6 @@ MATRIX_LOOP_END:
 
 void keyboard_set_leds(uint8_t leds)
 {
+    if (debug_keyboard) { debug("keyboard_set_led: "); debug_hex8(leds); debug("\n"); }
     led_set(leds);
 }
index 36467999488e5716b9e2e315e5aeb8f18e1b5534..aea630846bda9c61a9c4cd84733cce98146f94d0 100644 (file)
@@ -81,6 +81,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define KC_APP  KC_APPLICATION
 #define KC_NUHS KC_NONUS_HASH
 #define KC_NUBS KC_NONUS_BSLASH
+#define KC_LCAP KC_LOCKING_CAPS
 #define KC_ERAS KC_ALT_ERASE,
 #define KC_CLR  KC_CLEAR
 /* Japanese specific */
index cd98395eb50da985c99d91c0f7af195d2d92a16e..bd0a19c33c85a1405755547a5601f2ed61edb067 100644 (file)
@@ -27,16 +27,21 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define PRODUCT         GH60
 #define DESCRIPTION     t.m.k. keyboard firmware for GH60
 
-/* matrix size */
+/* key matrix size */
 #define MATRIX_ROWS 5
 #define MATRIX_COLS 14
 
 /* define if matrix has ghost */
 //#define MATRIX_HAS_GHOST
 
-/* Set 0 if need no debouncing */
+/* Set 0 if debouncing isn't needed */
 #define DEBOUNCE    5
 
+/* Mechanical locking CapsLock support. Use KC_LCAP instead of KC_CAPS in keymap */
+#define CAPSLOCK_LOCKING_ENABLE
+/* Locking CapsLock resynchronize hack, which won't work on Linux */
+#define CAPSLOCK_LOCKING_RESYNC_ENABLE
+
 /* key combination for command */
 #define IS_COMMAND() ( \
     keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
@@ -51,20 +56,5 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #define BOOTLOADER_SIZE 4096
 
-/* 
- * Boot magic keys
- * call some function by pressing key when pluging cable or powering on.
- */
-/* key position on matrix(ROW:COL) */
-#define KEY_FN          0x4A
-#define KEY_D           0x23
-#define KEY_ESC         0x00
-#define KEY_IS_ON(key)  matrix_is_on((key)>>4, (key)&0xF)
-/* kick up bootloader */
-#define IS_BOOTMAGIC_BOOTLOADER()       KEY_IS_ON(KEY_FN)
-/* debug on */
-#define IS_BOOTMAGIC_DEBUG()            KEY_IS_ON(KEY_D)
-/* eeprom clear */
-#define IS_BOOTMAGIC_EEPROM_CLEAR()     KEY_IS_ON(KEY_ESC)
 
 #endif