changeset 13:932f34404318

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.
author Jacob Alexander <triplehaata@gmail.com>
date Thu, 31 Mar 2011 17:24:20 -0700
parents d42d16dd7393
children 31e2022f06a0
files layouts.h main.c
diffstat 2 files changed, 102 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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