forked from mirrors/qmk_userspace
		
	simple keymap layers.
This commit is contained in:
		
					parent
					
						
							
								82309deefc
							
						
					
				
			
			
				commit
				
					
						f777960c72
					
				
			
		
					 5 changed files with 88 additions and 21 deletions
				
			
		
							
								
								
									
										6
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								README
									
										
									
									
									
								
							| 
						 | 
					@ -15,14 +15,18 @@ TODO
 | 
				
			||||||
modulization
 | 
					modulization
 | 
				
			||||||
    clean source
 | 
					    clean source
 | 
				
			||||||
debouncing
 | 
					debouncing
 | 
				
			||||||
 | 
					    will be coded when bouncing occurs.
 | 
				
			||||||
 | 
					    bouncing doesnt occur on my alps switch so far.
 | 
				
			||||||
 | 
					    scan rate is too slow?(to be measure)
 | 
				
			||||||
anti-ghost
 | 
					anti-ghost
 | 
				
			||||||
 | 
					    2010/09/13 done
 | 
				
			||||||
sleep&wakeup
 | 
					sleep&wakeup
 | 
				
			||||||
boot keyboard support
 | 
					boot keyboard support
 | 
				
			||||||
mouse key
 | 
					mouse key
 | 
				
			||||||
keymap layer
 | 
					keymap layer
 | 
				
			||||||
 | 
					    2010/09/16 simple layer(HHKB/vi cursor)
 | 
				
			||||||
    key combination switch
 | 
					    key combination switch
 | 
				
			||||||
    toggle siwtch
 | 
					    toggle siwtch
 | 
				
			||||||
    HHKB like cursor etc.
 | 
					 | 
				
			||||||
setting menu(wizard)
 | 
					setting menu(wizard)
 | 
				
			||||||
    debug console
 | 
					    debug console
 | 
				
			||||||
    keymap setting
 | 
					    keymap setting
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										68
									
								
								keymap.c
									
										
									
									
									
								
							
							
						
						
									
										68
									
								
								keymap.c
									
										
									
									
									
								
							| 
						 | 
					@ -2,26 +2,82 @@
 | 
				
			||||||
 * keymap for modified macway keyboarq
 | 
					 * keymap for modified macway keyboarq
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#include <avr/pgmspace.h>
 | 
					#include <avr/pgmspace.h>
 | 
				
			||||||
 | 
					#include "matrix.h"
 | 
				
			||||||
#include "keymap.h"
 | 
					#include "keymap.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const uint8_t PROGMEM Keymap[MATRIX_ROWS][MATRIX_COLS] = {
 | 
					int current_layer = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const uint8_t PROGMEM Keymap[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					    // 0: default
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        { KB_LALT, KB_NO,     KB_BSPACE,  KB_NO, KB_LEFT,   KB_NO,      KB_ENTER, KB_SPACE },
 | 
					        { KB_LALT, KB_NO,     KB_BSPACE,  KB_NO, KB_LEFT,   KB_NO,      KB_ENTER, KB_SPACE },
 | 
				
			||||||
        { KB_1,    KB_ESCAPE, KB_TAB,     KB_Q,  KB_A,      KB_LCTRL,   KB_Z,     KB_RIGHT },
 | 
					        { KB_1,    KB_ESCAPE, KB_TAB,     KB_Q,  KB_A,      KB_LCTRL,   KB_Z,     KB_RIGHT },
 | 
				
			||||||
    { KB_2,    KB_RALT,   KB_LGUI,     KB_W,  KB_S,      KB_NO,     KB_X,     KB_UP },
 | 
					        { KB_2,    FN_0,      KB_LGUI,    KB_W,  KB_S,      KB_NO,      KB_X,     KB_UP },
 | 
				
			||||||
    { KB_3,    KB_NO,     KB_RSHIFT,   KB_E,  KB_D,      KB_BSLASH, KB_C,     KB_DOWN },
 | 
					        { KB_3,    KB_NO,     KB_RSHIFT,  KB_E,  KB_D,      FN_1,       KB_C,     KB_DOWN },
 | 
				
			||||||
        { KB_4,    KB_5,      KB_T,       KB_R,  KB_F,      KB_G,       KB_V,     KB_B },
 | 
					        { KB_4,    KB_5,      KB_T,       KB_R,  KB_F,      KB_G,       KB_V,     KB_B },
 | 
				
			||||||
        { KB_7,    KB_6,      KB_Y,       KB_U,  KB_J,      KB_H,       KB_M,     KB_N },
 | 
					        { KB_7,    KB_6,      KB_Y,       KB_U,  KB_J,      KB_H,       KB_M,     KB_N },
 | 
				
			||||||
        { KB_8,    KB_EQUAL,  KB_RBRACKET,KB_I,  KB_K,      KB_NO,      KB_COMMA, KB_LSHIFT },
 | 
					        { KB_8,    KB_EQUAL,  KB_RBRACKET,KB_I,  KB_K,      KB_NO,      KB_COMMA, KB_LSHIFT },
 | 
				
			||||||
    { KB_9,    KB_NO,     KB_NO,       KB_O,  KB_L,      KB_GRAVE,  KB_DOT,   KB_NO },
 | 
					        { KB_9,    KB_NO,     KB_NO,      KB_O,  KB_L,      FN_2,       KB_DOT,   KB_NO },
 | 
				
			||||||
        { KB_0,    KB_MINUS,  KB_LBRACKET,KB_P,  KB_SCOLON, KB_QUOTE,   KB_NO,    KB_SLASH }
 | 
					        { KB_0,    KB_MINUS,  KB_LBRACKET,KB_P,  KB_SCOLON, KB_QUOTE,   KB_NO,    KB_SLASH }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 1: FN_0
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        { KB_LALT, KB_NO,     KB_DELETE,  KB_NO, KB_NO,     KB_NO,      KB_BSLASH,KB_NO },
 | 
				
			||||||
 | 
					        { KB_F1,   KB_GRAVE,  KB_BSLASH,  KB_NO, KB_NO,     KB_LCTRL,   KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F2,   KB_NO,     KB_LGUI,    KB_NO, KB_NO,     KB_NO,      KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F3,   KB_NO,     KB_RSHIFT,  KB_NO, KB_NO,     KB_NO,      KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F4,   KB_F5,     KB_NO,      KB_NO, KB_NO,     KB_NO,      KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F7,   KB_F6,     KB_NO,      KB_NO, KB_DOWN,   KB_LEFT,    KB_PGDOWN,KB_HOME },
 | 
				
			||||||
 | 
					        { KB_F8,   KB_F12,    KB_NO,      KB_NO, KB_UP,     KB_NO,      KB_PGUP,  KB_LSHIFT },
 | 
				
			||||||
 | 
					        { KB_F9,   KB_NO,     KB_NO,      KB_NO, KB_RIGHT,  KB_NO,      KB_END,   KB_NO },
 | 
				
			||||||
 | 
					        { KB_F10,  KB_F11,    KB_NO,      KB_NO, KB_NO,     KB_NO,      KB_NO,    KB_NO }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 2: FN_1
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        { KB_LALT, KB_NO,     KB_DELETE,  KB_NO, KB_NO,     KB_NO,      KB_BSLASH,KB_NO },
 | 
				
			||||||
 | 
					        { KB_F1,   KB_GRAVE,  KB_BSLASH,  KB_NO, KB_VOLDOWN,KB_LCTRL,   KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F2,   KB_NO,     KB_LGUI,    KB_NO, KB_VOLUP,  KB_NO,      KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F3,   KB_NO,     KB_RSHIFT,  KB_NO, KB_MUTE,   KB_NO,      KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F4,   KB_F5,     KB_NO,      KB_NO, KB_F20,    KB_NO,      KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F7,   KB_F6,     KB_NO,      KB_NO, KP_SLASH,  KP_ASTERISK,KP_MINUS, KP_PLUS },
 | 
				
			||||||
 | 
					        { KB_F8,   KB_F12,    KB_NO,      KB_NO, KB_HOME,   KB_NO,      KB_END,   KB_LSHIFT },
 | 
				
			||||||
 | 
					        { KB_F9,   KB_NO,     KB_NO,      KB_NO, KB_PGUP,   KB_NO,      KB_PGDOWN,KB_NO },
 | 
				
			||||||
 | 
					        { KB_F10,  KB_F11,    KB_UP,      KB_NO, KB_LEFT,   KB_RIGHT,   KB_NO,    KB_DOWN }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 3: FN_2
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        { KB_LALT, KB_NO,     KB_DELETE,  KB_NO, KB_NO,     KB_NO,      KB_BSLASH,KB_NO },
 | 
				
			||||||
 | 
					        { KB_F1,   KB_GRAVE,  KB_BSLASH,  KB_NO, KB_NO,     KB_LCTRL,   KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F2,   KB_NO,     KB_LGUI,    KB_NO, KB_NO,     KB_NO,      KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F3,   KB_NO,     KB_RSHIFT,  KB_NO, KB_NO,     KB_NO,      KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F4,   KB_F5,     KB_NO,      KB_NO, KB_NO,     KB_NO,      KB_NO,    KB_NO },
 | 
				
			||||||
 | 
					        { KB_F7,   KB_F6,     KB_NO,      KB_NO, KB_DOWN,   KB_LEFT,    KB_PGDOWN,KB_HOME },
 | 
				
			||||||
 | 
					        { KB_F8,   KB_F12,    KB_NO,      KB_NO, KB_UP,     KB_NO,      KB_PGUP,  KB_LSHIFT },
 | 
				
			||||||
 | 
					        { KB_F9,   KB_NO,     KB_NO,      KB_NO, KB_RIGHT,  KB_NO,      KB_END,   KB_NO },
 | 
				
			||||||
 | 
					        { KB_F10,  KB_F11,    KB_NO,      KB_NO, KB_NO,     KB_NO,      KB_NO,    KB_NO }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t get_keycode(uint8_t row, uint8_t col)
 | 
					uint8_t get_keycode(int layer, uint8_t row, uint8_t col)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (row >= MATRIX_ROWS)
 | 
					    if (row >= MATRIX_ROWS)
 | 
				
			||||||
        return KB_NO;
 | 
					        return KB_NO;
 | 
				
			||||||
    if (col >= MATRIX_COLS)
 | 
					    if (col >= MATRIX_COLS)
 | 
				
			||||||
        return KB_NO;
 | 
					        return KB_NO;
 | 
				
			||||||
    return pgm_read_byte(&Keymap[row][col]);
 | 
					    return pgm_read_byte(&Keymap[layer][row][col]);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int get_layer(void) {
 | 
				
			||||||
 | 
					    int layer = 0;
 | 
				
			||||||
 | 
					    for (int row = 0; row < MATRIX_ROWS; row++) {
 | 
				
			||||||
 | 
					        for (int col = 0; col < MATRIX_ROWS; col++) {
 | 
				
			||||||
 | 
					            if (matrix[row] & 1<<col) continue;
 | 
				
			||||||
 | 
					            if (get_keycode(0, row, col) == FN_0) layer = 1;
 | 
				
			||||||
 | 
					            if (get_keycode(0, row, col) == FN_1) layer = 2;
 | 
				
			||||||
 | 
					            if (get_keycode(0, row, col) == FN_2) layer = 3;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    current_layer = layer;
 | 
				
			||||||
 | 
					    return current_layer;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								keymap.h
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								keymap.h
									
										
									
									
									
								
							| 
						 | 
					@ -4,7 +4,8 @@
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
#include "usbkeycodes.h"
 | 
					#include "usbkeycodes.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t get_keycode(uint8_t row, uint8_t col);
 | 
					int get_layer(void);
 | 
				
			||||||
 | 
					uint8_t get_keycode(int layer, uint8_t row, uint8_t col);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MATRIX_ROWS 9
 | 
					#define MATRIX_ROWS 9
 | 
				
			||||||
#define MATRIX_COLS 8
 | 
					#define MATRIX_COLS 8
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										8
									
								
								mykey.c
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								mykey.c
									
										
									
									
									
								
							| 
						 | 
					@ -78,9 +78,11 @@ int main(void)
 | 
				
			||||||
    print("keyboard firmware 0.1 for t.m.k.\n");
 | 
					    print("keyboard firmware 0.1 for t.m.k.\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (1) {
 | 
					    while (1) {
 | 
				
			||||||
 | 
					        int layer = 0;
 | 
				
			||||||
        uint8_t row, col, code;
 | 
					        uint8_t row, col, code;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        matrix_scan();
 | 
					        matrix_scan();
 | 
				
			||||||
 | 
					        layer = get_layer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        modified = matrix_is_modified();
 | 
					        modified = matrix_is_modified();
 | 
				
			||||||
        has_ghost = matrix_has_ghost();
 | 
					        has_ghost = matrix_has_ghost();
 | 
				
			||||||
| 
						 | 
					@ -95,8 +97,10 @@ int main(void)
 | 
				
			||||||
                for (col = 0; col < MATRIX_COLS; col++) {
 | 
					                for (col = 0; col < MATRIX_COLS; col++) {
 | 
				
			||||||
                    if (matrix[row] & 1<<col) continue;
 | 
					                    if (matrix[row] & 1<<col) continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    code = get_keycode(row, col);
 | 
					                    code = get_keycode(layer, row, col);
 | 
				
			||||||
                    if (KB_LCTRL <= code && code <= KB_RGUI) {
 | 
					                    if (code == KB_NO) {
 | 
				
			||||||
 | 
					                        continue;
 | 
				
			||||||
 | 
					                    } else if (KB_LCTRL <= code && code <= KB_RGUI) {
 | 
				
			||||||
                        // modifier keycode: 0xE0-0xE7
 | 
					                        // modifier keycode: 0xE0-0xE7
 | 
				
			||||||
                        keyboard_modifier_keys |= 1<<(code & 0x07);
 | 
					                        keyboard_modifier_keys |= 1<<(code & 0x07);
 | 
				
			||||||
                    } else {
 | 
					                    } else {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -255,11 +255,7 @@ enum keycodes {
 | 
				
			||||||
    KP_DECIMAL,
 | 
					    KP_DECIMAL,
 | 
				
			||||||
    KP_HEXADECIMAL,
 | 
					    KP_HEXADECIMAL,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /* modifiers */
 | 
				
			||||||
     * These are NOT standard USB HID - handled specially in decoding,
 | 
					 | 
				
			||||||
     * so they will be mapped to the modifier byte in the USB report.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    MOD_START = 0xE0,
 | 
					 | 
				
			||||||
    KB_LCTRL = 0xE0,    /* 0x01 */
 | 
					    KB_LCTRL = 0xE0,    /* 0x01 */
 | 
				
			||||||
    KB_LSHIFT,          /* 0x02 */
 | 
					    KB_LSHIFT,          /* 0x02 */
 | 
				
			||||||
    KB_LALT,            /* 0x04 */
 | 
					    KB_LALT,            /* 0x04 */
 | 
				
			||||||
| 
						 | 
					@ -268,6 +264,12 @@ enum keycodes {
 | 
				
			||||||
    KB_RSHIFT,          /* 0x20 */
 | 
					    KB_RSHIFT,          /* 0x20 */
 | 
				
			||||||
    KB_RALT,            /* 0x40 */
 | 
					    KB_RALT,            /* 0x40 */
 | 
				
			||||||
    KB_RGUI,            /* 0x80 */
 | 
					    KB_RGUI,            /* 0x80 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* function keys */
 | 
				
			||||||
 | 
					    FN_0 = 0xF0,
 | 
				
			||||||
 | 
					    FN_1,
 | 
				
			||||||
 | 
					    FN_2,
 | 
				
			||||||
 | 
					    FN_3,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* USBKEYCODES_H */
 | 
					#endif /* USBKEYCODES_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue