]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
Added locking capslock key support and default now.
authortmk <nobody@nowhere>
Thu, 1 Sep 2011 02:21:35 +0000 (11:21 +0900)
committertmk <nobody@nowhere>
Thu, 1 Sep 2011 02:21:35 +0000 (11:21 +0900)
adb_usb/config.h
adb_usb/matrix.c

index ef1076c3199a3dc8534c81d463fa7af3f1089e83..27f31ca9e99768ac036268f0c21051d72eeb58b3 100644 (file)
@@ -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() ( \
index 51dd37fca2d0bf4814294d1303c838871f5b8599..a2367af56a52c74a461d35121c48d3900a062735 100644 (file)
@@ -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.