changeset 12:d42d16dd7393

Moving the layouts to a separate file.
author Jacob Alexander <triplehaata@gmail.com>
date Wed, 30 Mar 2011 17:51:28 -0700
parents c033251c3e6b
children 932f34404318
files layouts.h main.c usb_keyboard.h
diffstat 3 files changed, 173 insertions(+), 284 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/layouts.h	Wed Mar 30 17:51:28 2011 -0700
@@ -0,0 +1,160 @@
+#ifndef __layouts_h
+#define __layouts_h
+
+// Modifier Mask
+#define MODIFIERS_KEYPAD   0
+#define MODIFIERS_KEYBOARD 4
+static uint8_t   keypad_modifierMask[] = {};
+static uint8_t keyboard_modifierMask[] = { 1, 17, 33, 49 };
+
+// Default 1-indexed key mappings
+static uint8_t keypadDefaultMap[] = { 0,
+				KEYPAD_ASTERIX,
+				KEYPAD_MINUS,
+				KEYPAD_PLUS,
+				KEYPAD_ENTER,
+				KEYPAD_9,
+				KEYPAD_6,
+				KEYPAD_3,
+				KEYPAD_0,
+				KEYPAD_8,
+				KEYPAD_5,
+				KEYPAD_2,
+				KEYPAD_PERIOD,
+				KEYPAD_7,
+				KEYPAD_4,
+				KEYPAD_1,
+				KEYPAD_SLASH };
+
+static uint8_t defaultMap[] = { 0,
+				KEY_GUI,
+				KEY_1,
+				KEY_2,
+				KEY_3,
+				KEY_4,
+				KEY_5,
+				KEY_6,
+				KEY_7,
+				KEY_8,
+				KEY_9,
+				KEY_0,
+				KEY_MINUS,
+				KEY_EQUAL,
+				KEY_BACKSLASH,
+				KEY_TILDE,
+				KEY_BACKSPACE,
+				KEY_ALT,
+				KEY_TAB,
+				KEY_Q,
+				KEY_W,
+				KEY_E,
+				KEY_R,
+				KEY_T,
+				KEY_Y,
+				KEY_U,
+				KEY_I,
+				KEY_O,
+				KEY_P,
+				KEY_LEFT_BRACE,
+				KEY_RIGHT_BRACE,
+				KEY_DELETE,
+				KEY_UP,
+				KEY_CTRL,
+				KEY_CAPS_LLOCK,
+				KEY_A,
+				KEY_S,
+				KEY_D,
+				KEY_F,
+				KEY_G,
+				KEY_H,
+				KEY_J,
+				KEY_K,
+				KEY_L,
+				KEY_SEMICOLON,
+				KEY_QUOTE,
+				KEY_ENTER,
+				KEY_DOWN,
+				KEY_ESC,
+				KEY_LEFT_SHIFT,
+				KEY_Z,
+				KEY_X,
+				KEY_C,
+				KEY_V,
+				KEY_B,
+				KEY_N,
+				KEY_M,
+				KEY_COMMA,
+				KEY_PERIOD,
+				KEY_SLASH,
+				KEY_RIGHT_SHIFT,
+				KEY_LEFT,
+				KEY_RIGHT,
+				KEY_SPACE };
+
+static uint8_t colemakMap[] = { 0,
+				KEY_GUI,
+				KEY_1,
+				KEY_2,
+				KEY_3,
+				KEY_4,
+				KEY_5,
+				KEY_6,
+				KEY_7,
+				KEY_8,
+				KEY_9,
+				KEY_0,
+				KEY_MINUS,
+				KEY_EQUAL,
+				KEY_BACKSLASH,
+				KEY_TILDE,
+				KEY_BACKSPACE,
+				KEY_ALT,
+				KEY_TAB,
+				KEY_Q,
+				KEY_W,
+				KEY_F,
+				KEY_P,
+				KEY_G,
+				KEY_J,
+				KEY_L,
+				KEY_U,
+				KEY_Y,
+				KEY_SEMICOLON,
+				KEY_LEFT_BRACE,
+				KEY_RIGHT_BRACE,
+				KEY_DELETE,
+				KEY_UP,
+				KEY_CTRL,
+				KEY_CAPS_LLOCK,
+				KEY_A,
+				KEY_R,
+				KEY_S,
+				KEY_T,
+				KEY_D,
+				KEY_H,
+				KEY_N,
+				KEY_E,
+				KEY_I,
+				KEY_O,
+				KEY_QUOTE,
+				KEY_ENTER,
+				KEY_DOWN,
+				KEY_ESC,
+				KEY_LEFT_SHIFT,
+				KEY_Z,
+				KEY_X,
+				KEY_C,
+				KEY_V,
+				KEY_B,
+				KEY_K,
+				KEY_M,
+				KEY_COMMA,
+				KEY_PERIOD,
+				KEY_SLASH,
+				KEY_RIGHT_SHIFT,
+				KEY_LEFT,
+				KEY_RIGHT,
+				KEY_SPACE };
+
+#endif
+
--- a/main.c	Wed Mar 30 00:58:22 2011 -0700
+++ b/main.c	Wed Mar 30 17:51:28 2011 -0700
@@ -24,6 +24,7 @@
 #include <avr/interrupt.h>
 #include <util/delay.h>
 #include "usb_keys.h"
+#include "layouts.h"
 //#include "usb_keyboard.h"
 
 // TEMP INCLUDES
@@ -32,7 +33,6 @@
 
 #define CPU_PRESCALE(n)	(CLKPR = 0x80, CLKPR = (n))
 
-
 // Number of keys
 #define KEYBOARD_SIZE 63
 #define KEYPAD_SIZE 16
@@ -220,101 +220,11 @@
 uint8_t keyDetectArray[KEYBOARD_SIZE + 1];
 uint8_t keypadDetectArray[KEYPAD_SIZE + 1];
 
+// Interrupt Variables
 uint16_t sendKeypressCounter = 0;
 volatile uint8_t sendKeypresses = 0;
 
 
-// Modifier Mask
-#define MODIFIERS_KEYPAD   0
-#define MODIFIERS_KEYBOARD 4
-static uint8_t   keypad_modifierMask[] = {};
-static uint8_t keyboard_modifierMask[] = { 1, 17, 33, 49 };
-
-// Default 1-indexed key mappings
-static uint8_t keypadDefaultMap[] = { 0,
-				KEYPAD_ASTERIX,
-				KEYPAD_MINUS,
-				KEYPAD_PLUS,
-				KEYPAD_ENTER,
-				KEYPAD_9,
-				KEYPAD_6,
-				KEYPAD_3,
-				KEYPAD_0,
-				KEYPAD_8,
-				KEYPAD_5,
-				KEYPAD_2,
-				KEYPAD_PERIOD,
-				KEYPAD_7,
-				KEYPAD_4,
-				KEYPAD_1,
-				KEYPAD_SLASH };
-
-static uint8_t defaultMap[] = { 0,
-				KEY_GUI,
-				KEY_1,
-				KEY_2,
-				KEY_3,
-				KEY_4,
-				KEY_5,
-				KEY_6,
-				KEY_7,
-				KEY_8,
-				KEY_9,
-				KEY_0,
-				KEY_MINUS,
-				KEY_EQUAL,
-				KEY_BACKSLASH,
-				KEY_TILDE,
-				KEY_BACKSPACE,
-				KEY_ALT,
-				KEY_TAB,
-				KEY_Q,
-				KEY_W,
-				KEY_E,
-				KEY_R,
-				KEY_T,
-				KEY_Y,
-				KEY_U,
-				KEY_I,
-				KEY_O,
-				KEY_P,
-				KEY_LEFT_BRACE,
-				KEY_RIGHT_BRACE,
-				KEY_DELETE,
-				KEY_UP,
-				KEY_CTRL,
-				KEY_CAPS_LLOCK,
-				KEY_A,
-				KEY_S,
-				KEY_D,
-				KEY_F,
-				KEY_G,
-				KEY_H,
-				KEY_J,
-				KEY_K,
-				KEY_L,
-				KEY_SEMICOLON,
-				KEY_QUOTE,
-				KEY_ENTER,
-				KEY_DOWN,
-				KEY_ESC,
-				KEY_LEFT_SHIFT,
-				KEY_Z,
-				KEY_X,
-				KEY_C,
-				KEY_V,
-				KEY_B,
-				KEY_N,
-				KEY_M,
-				KEY_COMMA,
-				KEY_PERIOD,
-				KEY_SLASH,
-				KEY_RIGHT_SHIFT,
-				KEY_LEFT,
-				KEY_RIGHT,
-				KEY_SPACE };
-
-
 void detection( int group )
 {
 	// XXX Modify for different detection groups <-> groupArray mappings
@@ -466,8 +376,17 @@
 
 		// Detect Valid Keypresses - TODO
 		uint8_t validKeys = 0;
-		keyPressDetection( keyDetectArray, &validKeys, KEYBOARD_SIZE, keyboard_modifierMask, MODIFIERS_KEYBOARD, defaultMap );
-		keyPressDetection( keypadDetectArray, &validKeys, KEYPAD_SIZE, keypad_modifierMask, MODIFIERS_KEYPAD, keypadDefaultMap );
+
+		// Map selection
+		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 );
+		}
+
 		print(":\n");
 
 		// TODO undo potentially old keys
--- a/usb_keyboard.h	Wed Mar 30 00:58:22 2011 -0700
+++ b/usb_keyboard.h	Wed Mar 30 17:51:28 2011 -0700
@@ -12,195 +12,5 @@
 extern uint8_t keyboard_keys[6];
 extern volatile uint8_t keyboard_leds;
 
-// This file does not include the HID debug functions, so these empty
-// macros replace them with nothing, so users can compile code that
-// has calls to these functions.
-#define usb_debug_putchar(c)
-#define usb_debug_flush_output()
-
-
-#define KEY_CTRL	0x01
-#define KEY_SHIFT	0x02
-#define KEY_ALT		0x04
-#define KEY_GUI		0x08
-#define KEY_LEFT_CTRL	0x01
-#define KEY_LEFT_SHIFT	0x02
-#define KEY_LEFT_ALT	0x04
-#define KEY_LEFT_GUI	0x08
-#define KEY_RIGHT_CTRL	0x10
-#define KEY_RIGHT_SHIFT	0x20
-#define KEY_RIGHT_ALT	0x40
-#define KEY_RIGHT_GUI	0x80
-
-#define KEY_A		4
-#define KEY_B		5
-#define KEY_C		6
-#define KEY_D		7
-#define KEY_E		8
-#define KEY_F		9
-#define KEY_G		10
-#define KEY_H		11
-#define KEY_I		12
-#define KEY_J		13
-#define KEY_K		14
-#define KEY_L		15
-#define KEY_M		16
-#define KEY_N		17
-#define KEY_O		18
-#define KEY_P		19
-#define KEY_Q		20
-#define KEY_R		21
-#define KEY_S		22
-#define KEY_T		23
-#define KEY_U		24
-#define KEY_V		25
-#define KEY_W		26
-#define KEY_X		27
-#define KEY_Y		28
-#define KEY_Z		29
-#define KEY_1		30
-#define KEY_2		31
-#define KEY_3		32
-#define KEY_4		33
-#define KEY_5		34
-#define KEY_6		35
-#define KEY_7		36
-#define KEY_8		37
-#define KEY_9		38
-#define KEY_0		39
-#define KEY_ENTER	40	
-#define KEY_ESC		41
-#define KEY_BACKSPACE	42	
-#define KEY_TAB		43
-#define KEY_SPACE	44	
-#define KEY_MINUS	45
-#define KEY_EQUAL	46
-#define KEY_LEFT_BRACE	47
-#define KEY_RIGHT_BRACE	48
-#define KEY_BACKSLASH	49
-#define KEY_NUMBER	50
-#define KEY_SEMICOLON	51
-#define KEY_QUOTE	52
-#define KEY_TILDE	53
-#define KEY_COMMA	54
-#define KEY_PERIOD	55
-#define KEY_SLASH	56
-#define KEY_CAPS_LOCK	57
-#define KEY_F1		58
-#define KEY_F2		59
-#define KEY_F3		60
-#define KEY_F4		61
-#define KEY_F5		62
-#define KEY_F6		63
-#define KEY_F7		64
-#define KEY_F8		65
-#define KEY_F9		66
-#define KEY_F10		67
-#define KEY_F11		68
-#define KEY_F12		69
-#define KEY_PRINTSCREEN	70		
-#define KEY_SCROLL_LOCK	71		
-#define KEY_PAUSE	72
-#define KEY_INSERT	73	
-#define KEY_HOME	74
-#define KEY_PAGE_UP	75
-#define KEY_DELETE	76
-#define KEY_END		77
-#define KEY_PAGE_DOWN	78	
-#define KEY_RIGHT	79
-#define KEY_LEFT	80
-#define KEY_DOWN	81
-#define KEY_UP		82
-#define KEY_NUM_LOCK	83
-#define KEYPAD_SLASH	84	
-#define KEYPAD_ASTERIX	85	
-#define KEYPAD_MINUS	86	
-#define KEYPAD_PLUS	87	
-#define KEYPAD_ENTER	88	
-#define KEYPAD_1	89
-#define KEYPAD_2	90
-#define KEYPAD_3	91	
-#define KEYPAD_4	92	
-#define KEYPAD_5	93	
-#define KEYPAD_6	94	
-#define KEYPAD_7	95	
-#define KEYPAD_8	96	
-#define KEYPAD_9	97	
-#define KEYPAD_0	98		
-#define KEYPAD_PERIOD	99		
-
-
-
-
-// Everything below this point is only intended for usb_serial.c
-#ifdef USB_SERIAL_PRIVATE_INCLUDE
-#include <avr/io.h>
-#include <avr/pgmspace.h>
-#include <avr/interrupt.h>
-
-#define EP_TYPE_CONTROL			0x00
-#define EP_TYPE_BULK_IN			0x81
-#define EP_TYPE_BULK_OUT		0x80
-#define EP_TYPE_INTERRUPT_IN		0xC1
-#define EP_TYPE_INTERRUPT_OUT		0xC0
-#define EP_TYPE_ISOCHRONOUS_IN		0x41
-#define EP_TYPE_ISOCHRONOUS_OUT		0x40
-
-#define EP_SINGLE_BUFFER		0x02
-#define EP_DOUBLE_BUFFER		0x06
-
-#define EP_SIZE(s)	((s) == 64 ? 0x30 :	\
-			((s) == 32 ? 0x20 :	\
-			((s) == 16 ? 0x10 :	\
-			             0x00)))
-
-#define MAX_ENDPOINT		4
-
-#define LSB(n) (n & 255)
-#define MSB(n) ((n >> 8) & 255)
-
-#if defined(__AVR_AT90USB162__)
-#define HW_CONFIG() 
-#define PLL_CONFIG() (PLLCSR = ((1<<PLLE)|(1<<PLLP0)))
-#define USB_CONFIG() (USBCON = (1<<USBE))
-#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
-#elif defined(__AVR_ATmega32U4__)
-#define HW_CONFIG() (UHWCON = 0x01)
-#define PLL_CONFIG() (PLLCSR = 0x12)
-#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
-#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
-#elif defined(__AVR_AT90USB646__)
-#define HW_CONFIG() (UHWCON = 0x81)
-#define PLL_CONFIG() (PLLCSR = 0x1A)
-#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
-#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
-#elif defined(__AVR_AT90USB1286__)
-#define HW_CONFIG() (UHWCON = 0x81)
-#define PLL_CONFIG() (PLLCSR = 0x16)
-#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
-#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
 #endif
 
-// standard control endpoint request types
-#define GET_STATUS			0
-#define CLEAR_FEATURE			1
-#define SET_FEATURE			3
-#define SET_ADDRESS			5
-#define GET_DESCRIPTOR			6
-#define GET_CONFIGURATION		8
-#define SET_CONFIGURATION		9
-#define GET_INTERFACE			10
-#define SET_INTERFACE			11
-// HID (human interface device)
-#define HID_GET_REPORT			1
-#define HID_GET_IDLE			2
-#define HID_GET_PROTOCOL		3
-#define HID_SET_REPORT			9
-#define HID_SET_IDLE			10
-#define HID_SET_PROTOCOL		11
-// CDC (communication class device)
-#define CDC_SET_LINE_CODING		0x20
-#define CDC_GET_LINE_CODING		0x21
-#define CDC_SET_CONTROL_LINE_STATE	0x22
-#endif
-#endif