diff options
author | tmk <nobody@nowhere> | 2013-07-23 10:56:03 +0900 |
---|---|---|
committer | tmk <nobody@nowhere> | 2013-07-23 10:56:03 +0900 |
commit | 2721022078c30dd00c1063e4a2f8199b2b53e0d5 (patch) | |
tree | 421f2d6bdaad59fb338b1dbaffe38b5468aa66bb | |
parent | 5b425731c5b662d107ba0f970a7ae7c7fe97d01b (diff) |
Add mechanical locking switch support for NumLock and ScrollLock
-rw-r--r-- | README.md | 10 | ||||
-rw-r--r-- | common/action.c | 52 | ||||
-rw-r--r-- | common/keycode.h | 7 | ||||
-rw-r--r-- | converter/adb_usb/README.md | 4 | ||||
-rw-r--r-- | converter/adb_usb/config.h | 14 | ||||
-rw-r--r-- | converter/m0110_usb/config.h | 8 | ||||
-rw-r--r-- | keyboard/gh60/config.h | 8 |
7 files changed, 75 insertions, 28 deletions
@@ -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 diff --git a/common/action.c b/common/action.c index c22f681fba..59c6f252dc 100644 --- a/common/action.c +++ b/common/action.c @@ -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(); diff --git a/common/keycode.h b/common/keycode.h index 77d5b79baf..08c3cbf42b 100644 --- a/common/keycode.h +++ b/common/keycode.h @@ -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, diff --git a/converter/adb_usb/README.md b/converter/adb_usb/README.md index 3033cfa620..5301557d43 100644 --- a/converter/adb_usb/README.md +++ b/converter/adb_usb/README.md @@ -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 diff --git a/converter/adb_usb/config.h b/converter/adb_usb/config.h index 7e2372edff..4ce27bbfeb 100644 --- a/converter/adb_usb/config.h +++ b/converter/adb_usb/config.h @@ -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 diff --git a/converter/m0110_usb/config.h b/converter/m0110_usb/config.h index ac1c40a38e..dc446414b5 100644 --- a/converter/m0110_usb/config.h +++ b/converter/m0110_usb/config.h @@ -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 */ diff --git a/keyboard/gh60/config.h b/keyboard/gh60/config.h index 567b126b6f..e9c0f4366d 100644 --- a/keyboard/gh60/config.h +++ b/keyboard/gh60/config.h @@ -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() ( \ |