+++ /dev/null
-#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 };
-static uint8_t alternate_modifierMask[] = { 1, 17, 33, 49, 62 };
-
-// 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 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,
- 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_PAGE_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_PAGE_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,
- 165,
- KEY_RIGHT_ALT,
- KEY_SPACE };
-
-#endif
-
#include <avr/interrupt.h>
#include <util/delay.h>
#include "usb_keys.h"
-#include "layouts.h"
+#include "scan_loop.h"
+//#include "layouts.h"
//#include "usb_keyboard.h"
// TEMP INCLUDES
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
-// Number of keys
-#define KEYBOARD_SIZE 63
-#define KEYPAD_SIZE 16
-
// Debouncing Defines
#define SAMPLE_THRESHOLD 110
// Verified Keypress Defines
#define USB_TRANSFER_DIVIDER 10 // 1024 == 1 Send of keypresses per second, 1 == 1 Send of keypresses per ~1 millisecond
+/*
+// Number of keys
+#define KEYBOARD_SIZE 63
+#define KEYPAD_SIZE 16
// Drive Pin Defines
#define DRIVE_reg_1 PORTD
// NOTE: Highest Bit: Valid keypress (0x80 is valid keypress)
// Other Bits: Pressed state sample counter
-uint8_t keyDetectArray[KEYBOARD_SIZE + 1];
-uint8_t keypadDetectArray[KEYPAD_SIZE + 1];
+uint8_t keyboardDetectArray[KEYBOARD_SIZE + 1];
// Interrupt Variables
uint16_t sendKeypressCounter = 0;
DET_GROUP(9,1)
}
}
+*/
+// Error LED Control
+void errorLED( uint8_t on )
+{
+ // Error LED On
+ if ( on ) {
+ DDRD |= (1<<6);
+ PORTD |= (1<<6);
+ }
+ // Error LED Off
+ else {
+ DDRD &= ~(1<<6);
+ PORTD &= ~(1<<6);
+ }
+}
-// XXX This part is configurable
+
+// Initial Pin Setup
+// If the matrix is properly set, this function does not need to be changed
inline void pinSetup(void)
{
// For each pin, 0=input, 1=output
DDRA = 0x00;
DDRB = 0x00;
DDRC = 0x00;
- DDRD = 0xFC;
- DDRE = 0x43;
+ DDRD = 0x40; // LED Setup
+ DDRE = 0x00;
DDRF = 0x00;
// Setting pins to either high or pull-up resistor
- PORTA = 0xFF;
- PORTB = 0xFF;
- PORTC = 0x01;
- PORTD = 0xFF;
- PORTE = 0xC3;
- PORTF = 0xFF;
+ PORTA = 0x00;
+ PORTB = 0x00;
+ PORTC = 0x00;
+ PORTD = 0x40; // LED Enable
+ PORTE = 0x00;
+ PORTF = 0x00;
}
-
+/*
// Given a sampling array, and the current number of detected keypress
// Add as many keypresses from the sampling array to the USB key send array as possible.
void keyPressDetection( uint8_t *keys, uint8_t *validKeys, uint8_t numberOfKeys, uint8_t *modifiers, uint8_t numberOfModifiers, uint8_t *map ) {
}
}
}
+*/
int main( void )
{
TIMSK0 = (1 << TOIE0);
// Main Detection Loop
+ while ( 1 ) {
+ scan_loop();
+
+ // Loop should never get here (indicate error)
+ errorLED( 1 );
+
+ // TODO HID Debug message
+ }
+}
+/*
int8_t group = 1;
uint8_t count = 0;
for ( ;;group++ ) {
return 0;
}
+*/
// Timer Interrupt for flagging a send of the sampled key detection data to the USB host
ISR( TIMER0_OVF_vect )