forked from mirrors/qmk_userspace
		
	Added locking capslock key support and default now.
This commit is contained in:
		
					parent
					
						
							
								0dde25e81c
							
						
					
				
			
			
				commit
				
					
						b703de7b29
					
				
			
		
					 2 changed files with 34 additions and 0 deletions
				
			
		| 
						 | 
					@ -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.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue