]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
Add mechanical locking switch support for NumLock and ScrollLock
authortmk <nobody@nowhere>
Tue, 23 Jul 2013 01:56:03 +0000 (10:56 +0900)
committertmk <nobody@nowhere>
Tue, 23 Jul 2013 01:56:03 +0000 (10:56 +0900)
README.md
common/action.c
common/keycode.h
converter/adb_usb/README.md
converter/adb_usb/config.h
converter/m0110_usb/config.h
keyboard/gh60/config.h

index aae350d08f9b7103e89615b010ee023e8818ae97..8864795c5b95f1517c98fb9f7437ede7bad83216 100644 (file)
--- a/README.md
+++ b/README.md
@@ -164,12 +164,12 @@ TODO: Magic key combination to avoid unintentional press during plug in
 **TBD**
 
 
-Mechanical Locking support for CapsLock
----------------------------------------
-To enable this feature define these two macros in `config.h` and use `KC_LCAP` for locking CapsLock in keymap instead of normal `KC_CAPS`. Resync option tries to keep lock switch state consistent with keyboard LED state.
+Mechanical Locking support
+--------------------------
+This feature makes it possible for you to use mechanical switch for `CapsLock`, `NumLock` or `ScrollLock`. To enable this feature define these macros in `config.h` and use `KC_LCAP`, `KC_LNUM` or `KC_LSCR` in keymap for locking key instead of normal `KC_CAPS`, `KC_NLCK` or `KC_SLCK`. Resync option tries to keep lock switch state consistent with keyboard LED state.
  
-    #define CAPSLOCK_LOCKING_ENABLE
-    #define CAPSLOCK_LOCKING_RESYNC_ENABLE
+    #define LOCKING_SUPPORT_ENABLE
+    #define LOCKING_RESYNC_ENABLE
 
 
 Start Your Own Project
index c22f681fbafb1e26518bbffe2fbd82b1628cefbf..59c6f252dcdbc6a08695d88259ba5b99ff350b6e 100644 (file)
@@ -336,9 +336,10 @@ void register_code(uint8_t code)
     if (code == KC_NO) {
         return;
     }
-#ifdef CAPSLOCK_LOCKING_ENABLE
+
+#ifdef LOCKING_SUPPORT_ENABLE
     else if (KC_LOCKING_CAPS == code) {
-#ifdef CAPSLOCK_LOCKING_RESYNC_ENABLE
+#ifdef LOCKING_RESYNC_ENABLE
         // Resync: ignore if caps lock already is on
         if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) return;
 #endif
@@ -347,7 +348,28 @@ void register_code(uint8_t code)
         host_del_key(KC_CAPSLOCK);
         host_send_keyboard_report();
     }
+
+    else if (KC_LOCKING_NUM == code) {
+#ifdef LOCKING_RESYNC_ENABLE
+        if (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) return;
+#endif
+        host_add_key(KC_NUMLOCK);
+        host_send_keyboard_report();
+        host_del_key(KC_NUMLOCK);
+        host_send_keyboard_report();
+    }
+
+    else if (KC_LOCKING_SCROLL == code) {
+#ifdef LOCKING_RESYNC_ENABLE
+        if (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) return;
+#endif
+        host_add_key(KC_SCROLLLOCK);
+        host_send_keyboard_report();
+        host_del_key(KC_SCROLLLOCK);
+        host_send_keyboard_report();
+    }
 #endif
+
     else if IS_KEY(code) {
         // TODO: should push command_proc out of this block?
         if (command_proc(code)) return;
@@ -386,9 +408,10 @@ void unregister_code(uint8_t code)
     if (code == KC_NO) {
         return;
     }
-#ifdef CAPSLOCK_LOCKING_ENABLE
+
+#ifdef LOCKING_SUPPORT_ENABLE
     else if (KC_LOCKING_CAPS == code) {
-#ifdef CAPSLOCK_LOCKING_RESYNC_ENABLE
+#ifdef LOCKING_RESYNC_ENABLE
         // Resync: ignore if caps lock already is off
         if (!(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) return;
 #endif
@@ -397,7 +420,28 @@ void unregister_code(uint8_t code)
         host_del_key(KC_CAPSLOCK);
         host_send_keyboard_report();
     }
+
+    else if (KC_LOCKING_NUM == code) {
+#ifdef LOCKING_RESYNC_ENABLE
+        if (!(host_keyboard_leds() & (1<<USB_LED_NUM_LOCK))) return;
+#endif
+        host_add_key(KC_NUMLOCK);
+        host_send_keyboard_report();
+        host_del_key(KC_NUMLOCK);
+        host_send_keyboard_report();
+    }
+
+    else if (KC_LOCKING_SCROLL == code) {
+#ifdef LOCKING_RESYNC_ENABLE
+        if (!(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK))) return;
+#endif
+        host_add_key(KC_SCROLLLOCK);
+        host_send_keyboard_report();
+        host_del_key(KC_SCROLLLOCK);
+        host_send_keyboard_report();
+    }
 #endif
+
     else if IS_KEY(code) {
         host_del_key(code);
         host_send_keyboard_report();
index 77d5b79baf10e29cf538a3f8ad19666906c348fa..08c3cbf42b55e6b34b9138e8e852b8384a21e5e0 100644 (file)
@@ -60,10 +60,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define KC_DEL  KC_DELETE
 #define KC_INS  KC_INSERT
 #define KC_CAPS KC_CAPSLOCK
+#define KC_CLCK KC_CAPSLOCK
 #define KC_RGHT KC_RIGHT
 #define KC_PGDN KC_PGDOWN
 #define KC_PSCR KC_PSCREEN
-#define KC_SLCK KC_SCKLOCK
+#define KC_SLCK KC_SCROLLLOCK
 #define KC_PAUS KC_PAUSE
 #define KC_BRK  KC_PAUSE
 #define KC_NLCK KC_NUMLOCK
@@ -82,6 +83,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define KC_NUHS KC_NONUS_HASH
 #define KC_NUBS KC_NONUS_BSLASH
 #define KC_LCAP KC_LOCKING_CAPS
+#define KC_LNUM KC_LOCKING_NUM
+#define KC_LSCR KC_LOCKING_SCROLL
 #define KC_ERAS KC_ALT_ERASE,
 #define KC_CLR  KC_CLEAR
 /* Japanese specific */
@@ -230,7 +233,7 @@ enum hid_keyboard_keypad_usage {
     KC_F11,
     KC_F12,
     KC_PSCREEN,
-    KC_SCKLOCK,
+    KC_SCROLLLOCK,
     KC_PAUSE,
     KC_INSERT,
     KC_HOME,
index 3033cfa6202db2388ae066c3057c7c064baf0702..5301557d43553cac68c6c66bd9b5f7c0702bcb1b 100644 (file)
@@ -9,10 +9,10 @@ Discuss: http://geekhack.org/showwiki.php?title=Island:14290
 
 Build
 -----
-0. Connect ADB keyboard to Teensy by 3 lines(Vcc, GND, Data). By default Data line uses port F0.
+0. Connect ADB keyboard to Teensy by 3 lines(Vcc, GND, Data). By default Data line uses port D0.
    This converter uses AVR's internal pull-up, but it seems to be too weak, in particular when you want to use a long or coiled cable.
    The external pull-up resistor(1K-10K Ohm) on Data is strongly recommended.
-1. Define following macros for ADB connection in config.h if you use other than port F0.
+1. Define following macros for ADB connection in config.h if you use other than port D0.
    ADB_PORT, ADB_PIN, ADB_DDR, ADB_DATA_BIT
 2. make
 3. program Teensy
index 7e2372edff0a3d0860a383b529e0309e5e5faa11..4ce27bbfeb1ae00fa8a99ac4963a7920a36f15fb 100644 (file)
@@ -34,10 +34,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define MATRIX_COL(code)    ((code)&0x07)
 
 
-/* Mechanical locking CapsLock support. Use KC_LCAP instead of KC_CAPS in keymap */
-#define CAPSLOCK_LOCKING_ENABLE
-/* Locking CapsLock resynchronize hack */
-#define CAPSLOCK_LOCKING_RESYNC_ENABLE
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
 
 
 /* legacy keymap support */
@@ -51,9 +51,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 /* ADB port setting */
-#define ADB_PORT        PORTF
-#define ADB_PIN         PINF
-#define ADB_DDR         DDRF
+#define ADB_PORT        PORTD
+#define ADB_PIN         PIND
+#define ADB_DDR         DDRD
 #define ADB_DATA_BIT    0
 //#define ADB_PSW_BIT     1       // optional
 
index ac1c40a38e08c70bc5258371a4512411c1f2e622..dc446414b5992ca4b13270cba19befffb5a12a98 100644 (file)
@@ -36,10 +36,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define USE_LEGACY_KEYMAP
 
 
-/* Mechanical locking CapsLock support. Use KC_LCAP instead of KC_CAPS in keymap */
-#define CAPSLOCK_LOCKING_ENABLE
-/* Locking CapsLock resynchronize hack */
-#define CAPSLOCK_LOCKING_RESYNC_ENABLE
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
 
 
 /* magic key */
index 567b126b6f1fa71021c4b2cc4a0b6cc6a55d4424..e9c0f4366dc71077edc004786df13e64f1eca253 100644 (file)
@@ -37,10 +37,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */
-#define CAPSLOCK_LOCKING_RESYNC_ENABLE
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
 
 /* key combination for command */
 #define IS_COMMAND() ( \