Fix Locking CapsLock support in ADB converter
This commit is contained in:
parent
c0137b4b32
commit
c4ab832be0
@ -20,10 +20,7 @@ Build
|
||||
|
||||
LOCKING CAPSLOCK
|
||||
----------------
|
||||
Many old ADB keyboards have mechanical push-lock switch for Capslock key. This converter support the locking Capslock key by default.
|
||||
This feature will prevent you from remaping as normal key. You can disable the feature by *commenting out* a macro in config.h like this:
|
||||
|
||||
//#define MATRIX_HAS_LOCKING_CAPS
|
||||
Many of old ADB keyboards have mechanical push-lock switch for Capslock key and this converter supports the locking Capslock key by default. See README in top directory for more detail about this feature.
|
||||
|
||||
Also you may want to remove locking pin from the push-lock switch to use capslock as a normal momentary switch.
|
||||
http://www.youtube.com/watch?v=9wqnt2mGJ2Y
|
||||
@ -58,7 +55,7 @@ effort at this time.
|
||||
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, PWR,
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,EQL, PSLS,PAST,
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PMNS,
|
||||
CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
|
||||
LCAP,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
|
||||
LCTL,LGUI,LALT, SPC, LEFT,DOWN,RGHT, P0, PDOT,PENT
|
||||
),
|
||||
|
@ -32,13 +32,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define MATRIX_ROWS 16 // keycode bit: 3-0
|
||||
#define MATRIX_COLS 8 // keycode bit: 6-4
|
||||
|
||||
/* Locking Caps Lock support */
|
||||
#define MATRIX_HAS_LOCKING_CAPS
|
||||
|
||||
#define MATRIX_ROW(code) ((code)>>3&0x0F)
|
||||
#define MATRIX_COL(code) ((code)&0x07)
|
||||
|
||||
|
||||
/* Locking Caps Lock support */
|
||||
//#define MATRIX_HAS_LOCKING_CAPS
|
||||
/* 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
|
||||
|
||||
|
||||
/* legacy keymap support */
|
||||
#define USE_LEGACY_KEYMAP
|
||||
|
||||
|
||||
/* mouse keys */
|
||||
#ifdef MOUSEKEY_ENABLE
|
||||
# define MOUSEKEY_DELAY_TIME 192
|
||||
|
@ -155,7 +155,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, PWR,
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PEQL,PSLS,PAST,
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PMNS,
|
||||
CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
|
||||
LCAP,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
|
||||
LCTL,LGUI,LALT, SPC, RGUI,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
|
||||
),
|
||||
|
@ -25,8 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "print.h"
|
||||
#include "util.h"
|
||||
#include "debug.h"
|
||||
#include "host.h"
|
||||
#include "led.h"
|
||||
#include "adb.h"
|
||||
#include "matrix.h"
|
||||
|
||||
@ -38,8 +36,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
# error "MATRIX_ROWS must not exceed 255"
|
||||
#endif
|
||||
|
||||
#define ADB_CAPS_UP (ADB_CAPS | 0x80)
|
||||
|
||||
|
||||
static bool is_modified = false;
|
||||
|
||||
@ -98,12 +94,6 @@ uint8_t matrix_scan(void)
|
||||
print("adb_host_kbd_recv: "); phex16(codes); print("\n");
|
||||
}
|
||||
|
||||
#ifdef MATRIX_HAS_LOCKING_CAPS
|
||||
// Send Caps key up event
|
||||
if (matrix_is_on(MATRIX_ROW(ADB_CAPS), MATRIX_COL(ADB_CAPS))) {
|
||||
register_key(ADB_CAPS_UP);
|
||||
}
|
||||
#endif
|
||||
if (codes == 0) { // no keys
|
||||
return 0;
|
||||
} else if (codes == 0x7F7F) { // power key press
|
||||
@ -116,23 +106,6 @@ uint8_t matrix_scan(void)
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
|
||||
return key1;
|
||||
} else {
|
||||
#ifdef MATRIX_HAS_LOCKING_CAPS
|
||||
if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
|
||||
// Ignore LockingCaps key down event when CAPS LOCK is on
|
||||
if (key0 == ADB_CAPS && (key1 == ADB_CAPS || key1 == 0xFF)) return 0;
|
||||
if (key0 == ADB_CAPS) key0 = key1;
|
||||
if (key1 == ADB_CAPS) key1 = 0xFF;
|
||||
// Convert LockingCaps key up event into down event
|
||||
if (key0 == ADB_CAPS_UP) key0 = ADB_CAPS;
|
||||
if (key1 == ADB_CAPS_UP) key1 = ADB_CAPS;
|
||||
} else {
|
||||
// ADB_CAPS LOCK off:
|
||||
// Ignore LockingCaps key up event when ADB_CAPS LOCK is off
|
||||
if (key0 == ADB_CAPS_UP && (key1 == ADB_CAPS_UP || key1 == 0xFF)) return 0;
|
||||
if (key0 == ADB_CAPS_UP) key0 = key1;
|
||||
if (key1 == ADB_CAPS_UP) key1 = 0xFF;
|
||||
}
|
||||
#endif
|
||||
register_key(key0);
|
||||
if (key1 != 0xFF) // key1 is 0xFF when no second key.
|
||||
register_key(key1);
|
||||
|
@ -39,7 +39,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/* 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 */
|
||||
/* Locking CapsLock resynchronize hack */
|
||||
#define CAPSLOCK_LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* key combination for command */
|
||||
|
Reference in New Issue
Block a user