~ruther/qmk_firmware

b703de7b298f8463bf4654fa3730ba1958a7fa9e — tmk 14 years ago 0dde25e
Added locking capslock key support and default now.
2 files changed, 34 insertions(+), 0 deletions(-)

M adb_usb/config.h
M adb_usb/matrix.c
M adb_usb/config.h => adb_usb/config.h +3 -0
@@ 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_COLS 8   // keycode bit: 6-4

/* Locking Caps Lock support */
#define MATRIX_HAS_LOCKING_CAPS


/* key combination for command */
#define IS_COMMAND() ( \

M adb_usb/matrix.c => adb_usb/matrix.c +31 -0
@@ 25,6 25,8 @@ 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"



@@ 36,6 38,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#   error "MATRIX_ROWS must not exceed 255"
#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;



@@ 93,11 100,35 @@ uint8_t matrix_scan(void)
    key0 = codes>>8;
    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
        return 0;
    } else if (key0 == 0xFF && key1 != 0xFF) {  // error
        return codes&0xFF;
    } 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;
        _register_key(key0);
        if (key1 != 0xFF)       // key1 is 0xFF when no second key.