@@ -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 | |||
@@ -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 @@ 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 |
@@ -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 <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 |