Added locking capslock key support and default now.
This commit is contained in:
parent
0dde25e81c
commit
b703de7b29
@ -31,6 +31,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MATRIX_ROWS 16 // keycode bit: 3-0
|
#define MATRIX_ROWS 16 // keycode bit: 3-0
|
||||||
#define MATRIX_COLS 8 // keycode bit: 6-4
|
#define MATRIX_COLS 8 // keycode bit: 6-4
|
||||||
|
|
||||||
|
/* Locking Caps Lock support */
|
||||||
|
#define MATRIX_HAS_LOCKING_CAPS
|
||||||
|
|
||||||
|
|
||||||
/* key combination for command */
|
/* key combination for command */
|
||||||
#define IS_COMMAND() ( \
|
#define IS_COMMAND() ( \
|
||||||
|
@ -25,6 +25,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "print.h"
|
#include "print.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "host.h"
|
||||||
|
#include "led.h"
|
||||||
#include "adb.h"
|
#include "adb.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
|
|
||||||
@ -36,6 +38,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
# error "MATRIX_ROWS must not exceed 255"
|
# error "MATRIX_ROWS must not exceed 255"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define CAPS 0x39
|
||||||
|
#define CAPS_UP (CAPS | 0x80)
|
||||||
|
#define ROW(key) ((key)>>3&0x0F)
|
||||||
|
#define COL(key) ((key)&0x07)
|
||||||
|
|
||||||
|
|
||||||
static bool _matrix_is_modified = false;
|
static bool _matrix_is_modified = false;
|
||||||
|
|
||||||
@ -93,11 +100,35 @@ uint8_t matrix_scan(void)
|
|||||||
key0 = codes>>8;
|
key0 = codes>>8;
|
||||||
key1 = codes&0xFF;
|
key1 = codes&0xFF;
|
||||||
|
|
||||||
|
#ifdef MATRIX_HAS_LOCKING_CAPS
|
||||||
|
// Send Caps key up event
|
||||||
|
if (matrix_is_on(ROW(CAPS), COL(CAPS))) {
|
||||||
|
_matrix_is_modified = true;
|
||||||
|
_register_key(CAPS_UP);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (codes == 0) { // no keys
|
if (codes == 0) { // no keys
|
||||||
return 0;
|
return 0;
|
||||||
} else if (key0 == 0xFF && key1 != 0xFF) { // error
|
} else if (key0 == 0xFF && key1 != 0xFF) { // error
|
||||||
return codes&0xFF;
|
return codes&0xFF;
|
||||||
} else {
|
} 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 == CAPS && (key1 == CAPS || key1 == 0xFF)) return 0;
|
||||||
|
if (key0 == CAPS) key0 = key1;
|
||||||
|
if (key1 == CAPS) key1 = 0xFF;
|
||||||
|
// Convert LockingCaps key up event into down event
|
||||||
|
if (key0 == CAPS_UP) key0 = CAPS;
|
||||||
|
if (key1 == CAPS_UP) key1 = CAPS;
|
||||||
|
} else {
|
||||||
|
// CAPS LOCK off:
|
||||||
|
// Ignore LockingCaps key up event when CAPS LOCK is off
|
||||||
|
if (key0 == CAPS_UP && (key1 == CAPS_UP || key1 == 0xFF)) return 0;
|
||||||
|
if (key0 == CAPS_UP) key0 = key1;
|
||||||
|
if (key1 == CAPS_UP) key1 = 0xFF;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
_matrix_is_modified = true;
|
_matrix_is_modified = true;
|
||||||
_register_key(key0);
|
_register_key(key0);
|
||||||
if (key1 != 0xFF) // key1 is 0xFF when no second key.
|
if (key1 != 0xFF) // key1 is 0xFF when no second key.
|
||||||
|
Reference in New Issue
Block a user