From 0f7ebe81ccafc4d0a37a0af595840ba92a99b4e5 Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Wed, 30 Mar 2011 17:51:28 -0700 Subject: [PATCH] Moving the layouts to a separate file. --- layouts.h | 160 +++++++++++++++++++++++++++++++++++++++++ main.c | 107 ++++------------------------ usb_keyboard.h | 190 ------------------------------------------------- 3 files changed, 173 insertions(+), 284 deletions(-) create mode 100644 layouts.h diff --git a/layouts.h b/layouts.h new file mode 100644 index 0000000..3ae7759 --- /dev/null +++ b/layouts.h @@ -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 + diff --git a/main.c b/main.c index baa8ce1..2039f09 100644 --- a/main.c +++ b/main.c @@ -24,6 +24,7 @@ #include #include #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 @@ int main( void ) // 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 diff --git a/usb_keyboard.h b/usb_keyboard.h index d9f1fc0..7f4cbbe 100644 --- a/usb_keyboard.h +++ b/usb_keyboard.h @@ -12,195 +12,5 @@ extern uint8_t keyboard_modifier_keys; 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 -#include -#include - -#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<