# HG changeset patch # User Jacob Alexander # Date 1301617460 25200 # Node ID 932f34404318d3cf5242b0c4ca9dfef4c146303f # Parent d42d16dd73935809fec0aefbd0cabf5627f182e4 Adding the HHKB style navigation layer. - Hack included for a minor debouncing/electrical problem (will fix later properly) - Changed internal shift layers for nested switching. diff -r d42d16dd7393 -r 932f34404318 layouts.h --- a/layouts.h Wed Mar 30 17:51:28 2011 -0700 +++ b/layouts.h Thu Mar 31 17:24:20 2011 -0700 @@ -4,8 +4,9 @@ // Modifier Mask #define MODIFIERS_KEYPAD 0 #define MODIFIERS_KEYBOARD 4 -static uint8_t keypad_modifierMask[] = {}; -static uint8_t keyboard_modifierMask[] = { 1, 17, 33, 49 }; +static uint8_t keypad_modifierMask[] = {}; +static uint8_t keyboard_modifierMask[] = { 1, 17, 33, 49 }; +static uint8_t alternate_modifierMask[] = { 1, 17, 33, 49, 62 }; // Default 1-indexed key mappings static uint8_t keypadDefaultMap[] = { 0, @@ -91,6 +92,71 @@ KEY_RIGHT, KEY_SPACE }; +static uint8_t navigationMap[] = { 0, + KEY_GUI, + KEY_F1, + KEY_F2, + KEY_F3, + KEY_F4, + KEY_F5, + KEY_F6, + KEY_F7, + KEY_F8, + KEY_F9, + KEY_F10, + KEY_F11, + KEY_F12, + KEY_INSERT, + KEY_DELETE, + KEY_BACKSPACE, + KEY_ALT, + KEY_CAPS_LOCK, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + KEY_SYSREQ_ATT, + KEY_SCROLL_LOCK, + KEY_PAUSE, + KEY_UP, + 0, + 0, + 0, + KEY_CTRL, + KEY_CAPS_LLOCK, + 0, + 0, + 0, + 0, + 0, + KEYPAD_ASTERIX, + KEYPAD_SLASH, + KEY_HOME, + KEY_PAGE_UP, + KEY_LEFT, + KEY_RIGHT, + KEY_ENTER, + 0, + KEY_ESC, + KEY_LEFT_SHIFT, + 0, + 0, + 0, + 0, + 0, + KEYPAD_PLUS, + KEYPAD_MINUS, + KEY_END, + KEY_PAGE_DOWN, + KEY_DOWN, + KEY_RIGHT_SHIFT, + 165, + KEY_RIGHT_ALT, + KEY_SPACE }; + static uint8_t colemakMap[] = { 0, KEY_GUI, KEY_1, @@ -123,7 +189,7 @@ KEY_LEFT_BRACE, KEY_RIGHT_BRACE, KEY_DELETE, - KEY_UP, + KEY_PAGE_UP, KEY_CTRL, KEY_CAPS_LLOCK, KEY_A, @@ -138,7 +204,7 @@ KEY_O, KEY_QUOTE, KEY_ENTER, - KEY_DOWN, + KEY_PAGE_DOWN, KEY_ESC, KEY_LEFT_SHIFT, KEY_Z, @@ -152,8 +218,8 @@ KEY_PERIOD, KEY_SLASH, KEY_RIGHT_SHIFT, - KEY_LEFT, - KEY_RIGHT, + 165, + KEY_RIGHT_ALT, KEY_SPACE }; #endif diff -r d42d16dd7393 -r 932f34404318 main.c --- a/main.c Wed Mar 30 17:51:28 2011 -0700 +++ b/main.c Thu Mar 31 17:24:20 2011 -0700 @@ -39,7 +39,7 @@ // Debouncing Defines -#define SAMPLE_THRESHOLD 100 +#define SAMPLE_THRESHOLD 110 #define MAX_SAMPLES 127 // Max is 127, reaching 128 is very bad @@ -288,7 +288,10 @@ // Too many keys if ( *validKeys == 6 ) break; - keyboard_keys[(*validKeys)++] = map[key]; + + // Allow ignoring keys with 0's + if ( map[key] != 0 ) + keyboard_keys[(*validKeys)++] = map[key]; } } } @@ -374,19 +377,37 @@ continue; + // XXX TODO HACK REMOVEME KILL_WITH_FIRE + // Too lazy to find (electrical?) issue, so I'm adding a software fix (case is impossible anyways without moar diodes) + if ( keyDetectArray[20] & (1 << 7) && keyDetectArray[21] & (1 << 7) && keyDetectArray[38] & (1 << 7) ) { + keyDetectArray[20] &= ~(1 << 7); + print("HACK!! - Fixme sometime"); + } + // Detect Valid Keypresses - TODO uint8_t validKeys = 0; - // Map selection + uint8_t *keyboard_MODMASK = keyboard_modifierMask; + uint8_t keyboard_NUMMODS = MODIFIERS_KEYBOARD; + uint8_t *keyboard_MAP = defaultMap; + uint8_t *keypad_MODMASK = keypad_modifierMask; + uint8_t keypad_NUMMODS = MODIFIERS_KEYPAD; + uint8_t *keypad_MAP = keypadDefaultMap; + + // Map selection - CapsLock FN if ( keyDetectArray[34] & (1 << 7) ) { // CapsLock FN Modifier - keyPressDetection( keyDetectArray, &validKeys, KEYBOARD_SIZE, keyboard_modifierMask, MODIFIERS_KEYBOARD, colemakMap ); - keyPressDetection( keypadDetectArray, &validKeys, KEYPAD_SIZE, keypad_modifierMask, MODIFIERS_KEYPAD, keypadDefaultMap ); - } - else { - keyPressDetection( keyDetectArray, &validKeys, KEYBOARD_SIZE, keyboard_modifierMask, MODIFIERS_KEYBOARD, defaultMap ); - keyPressDetection( keypadDetectArray, &validKeys, KEYPAD_SIZE, keypad_modifierMask, MODIFIERS_KEYPAD, keypadDefaultMap ); + keyboard_MAP = colemakMap; + keyboard_MODMASK = alternate_modifierMask; + keyboard_NUMMODS = 5; + + // Function Key + if ( keyDetectArray[61] & (1 << 7) ) { + keyboard_MAP = navigationMap; + } } + keyPressDetection( keyDetectArray, &validKeys, KEYBOARD_SIZE, keyboard_MODMASK, keyboard_NUMMODS, keyboard_MAP ); + keyPressDetection( keypadDetectArray, &validKeys, KEYPAD_SIZE, keypad_MODMASK, keypad_NUMMODS, keypad_MAP ); print(":\n"); // TODO undo potentially old keys