|
|
|
@ -33,44 +33,44 @@
|
|
|
|
|
|
|
|
|
|
/* These are defined by the platform
|
|
|
|
|
|
|
|
|
|
#define KEY_LEFT_CTRL 0x80
|
|
|
|
|
#define KEY_LEFT_SHIFT 0x81
|
|
|
|
|
#define KEY_LEFT_ALT 0x82
|
|
|
|
|
#define KEY_LEFT_GUI 0x83
|
|
|
|
|
#define KEY_RIGHT_CTRL 0x84
|
|
|
|
|
#define KEY_RIGHT_SHIFT 0x85
|
|
|
|
|
#define KEY_RIGHT_ALT 0x86
|
|
|
|
|
#define KEY_RIGHT_GUI 0x87
|
|
|
|
|
|
|
|
|
|
#define KEY_UP_ARROW 0xDA
|
|
|
|
|
#define KEY_DOWN_ARROW 0xD9
|
|
|
|
|
#define KEY_LEFT_ARROW 0xD8
|
|
|
|
|
#define KEY_RIGHT_ARROW 0xD7
|
|
|
|
|
#define KEY_BACKSPACE 0xB2
|
|
|
|
|
#define KEY_TAB 0xB3
|
|
|
|
|
#define KEY_RETURN 0xB0
|
|
|
|
|
#define KEY_ESC 0xB1
|
|
|
|
|
#define KEY_INSERT 0xD1
|
|
|
|
|
#define KEY_DELETE 0xD4
|
|
|
|
|
#define KEY_PAGE_UP 0xD3
|
|
|
|
|
#define KEY_PAGE_DOWN 0xD6
|
|
|
|
|
#define KEY_HOME 0xD2
|
|
|
|
|
#define KEY_END 0xD5
|
|
|
|
|
#define KEY_CAPS_LOCK 0xC1
|
|
|
|
|
#define KEY_F1 0xC2
|
|
|
|
|
#define KEY_F2 0xC3
|
|
|
|
|
#define KEY_F3 0xC4
|
|
|
|
|
#define KEY_F4 0xC5
|
|
|
|
|
#define KEY_F5 0xC6
|
|
|
|
|
#define KEY_F6 0xC7
|
|
|
|
|
#define KEY_F7 0xC8
|
|
|
|
|
#define KEY_F8 0xC9
|
|
|
|
|
#define KEY_F9 0xCA
|
|
|
|
|
#define KEY_F10 0xCB
|
|
|
|
|
#define KEY_F11 0xCC
|
|
|
|
|
#define KEY_F12 0xCD
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
#define KEY_LEFT_CTRL 0x80
|
|
|
|
|
#define KEY_LEFT_SHIFT 0x81
|
|
|
|
|
#define KEY_LEFT_ALT 0x82
|
|
|
|
|
#define KEY_LEFT_GUI 0x83
|
|
|
|
|
#define KEY_RIGHT_CTRL 0x84
|
|
|
|
|
#define KEY_RIGHT_SHIFT 0x85
|
|
|
|
|
#define KEY_RIGHT_ALT 0x86
|
|
|
|
|
#define KEY_RIGHT_GUI 0x87
|
|
|
|
|
|
|
|
|
|
#define KEY_UP_ARROW 0xDA
|
|
|
|
|
#define KEY_DOWN_ARROW 0xD9
|
|
|
|
|
#define KEY_LEFT_ARROW 0xD8
|
|
|
|
|
#define KEY_RIGHT_ARROW 0xD7
|
|
|
|
|
#define KEY_BACKSPACE 0xB2
|
|
|
|
|
#define KEY_TAB 0xB3
|
|
|
|
|
#define KEY_RETURN 0xB0
|
|
|
|
|
#define KEY_ESC 0xB1
|
|
|
|
|
#define KEY_INSERT 0xD1
|
|
|
|
|
#define KEY_DELETE 0xD4
|
|
|
|
|
#define KEY_PAGE_UP 0xD3
|
|
|
|
|
#define KEY_PAGE_DOWN 0xD6
|
|
|
|
|
#define KEY_HOME 0xD2
|
|
|
|
|
#define KEY_END 0xD5
|
|
|
|
|
#define KEY_CAPS_LOCK 0xC1
|
|
|
|
|
#define KEY_F1 0xC2
|
|
|
|
|
#define KEY_F2 0xC3
|
|
|
|
|
#define KEY_F3 0xC4
|
|
|
|
|
#define KEY_F4 0xC5
|
|
|
|
|
#define KEY_F5 0xC6
|
|
|
|
|
#define KEY_F6 0xC7
|
|
|
|
|
#define KEY_F7 0xC8
|
|
|
|
|
#define KEY_F8 0xC9
|
|
|
|
|
#define KEY_F9 0xCA
|
|
|
|
|
#define KEY_F10 0xCB
|
|
|
|
|
#define KEY_F11 0xCC
|
|
|
|
|
#define KEY_F12 0xCD
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define KEY_0 '0'
|
|
|
|
@ -179,7 +179,7 @@ loop()
|
|
|
|
|
void
|
|
|
|
|
reset_matrix()
|
|
|
|
|
{
|
|
|
|
|
//TODO:be smarter and just move pointers around
|
|
|
|
|
//TODO:be smarter and just move pointers around
|
|
|
|
|
|
|
|
|
|
for (int col = 0; col < COLS; col++) {
|
|
|
|
|
for (int row = 0; row < ROWS; row++) {
|
|
|
|
@ -195,7 +195,7 @@ send_key_event()
|
|
|
|
|
//for every newly pressed button, figure out what logical key it is and send a key down event
|
|
|
|
|
// for every newly released button, figure out what logical key it is and send a key up event
|
|
|
|
|
|
|
|
|
|
// TODO:switch to sending raw HID packets
|
|
|
|
|
// TODO:switch to sending raw HID packets
|
|
|
|
|
|
|
|
|
|
// set last_matrix to matrix and clear matrix
|
|
|
|
|
|
|
|
|
@ -205,26 +205,26 @@ send_key_event()
|
|
|
|
|
void
|
|
|
|
|
setup_matrix()
|
|
|
|
|
{
|
|
|
|
|
//set up the row pins as outputs
|
|
|
|
|
for (int row = 0; row < ROWS; row++) {
|
|
|
|
|
//set up the row pins as outputs
|
|
|
|
|
for (int row = 0; row < ROWS; row++) {
|
|
|
|
|
pinMode(rowPins[row], OUTPUT);
|
|
|
|
|
digitalWrite(rowPins[row], HIGH);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int col = 0; col < COLS; col++) {
|
|
|
|
|
for (int col = 0; col < COLS; col++) {
|
|
|
|
|
pinMode(colPins[col], INPUT);
|
|
|
|
|
digitalWrite(colPins[col], HIGH);
|
|
|
|
|
//drive em high by default s it seems to be more reliable than driving em low
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//blank out the matrix.blank out the previous version of the matrix
|
|
|
|
|
}
|
|
|
|
|
//blank out the matrix.blank out the previous version of the matrix
|
|
|
|
|
|
|
|
|
|
for (int col = 0; col < COLS; col++) {
|
|
|
|
|
for (int col = 0; col < COLS; col++) {
|
|
|
|
|
for (int row = 0; row < ROWS; row++) {
|
|
|
|
|
previousMatrix[col][col] = 0;
|
|
|
|
|
currentMatrix[col][row] = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -244,7 +244,8 @@ scan_matrix()
|
|
|
|
|
if (previousMatrix[col][row] != value) {
|
|
|
|
|
if (value) {
|
|
|
|
|
Keyboard.press(keymap[row][col]);
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
Keyboard.release(keymap[row][col]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -265,79 +266,80 @@ scan_matrix()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void init_keymap() {
|
|
|
|
|
keymap[ROW_A][COL_1] = NO_KEY;
|
|
|
|
|
keymap[ROW_A][COL_2] = KEY_1;
|
|
|
|
|
keymap[ROW_A][COL_3] = KEY_2;
|
|
|
|
|
keymap[ROW_A][COL_4] = KEY_3;
|
|
|
|
|
keymap[ROW_A][COL_5] = KEY_4;
|
|
|
|
|
keymap[ROW_A][COL_6] = KEY_5;
|
|
|
|
|
keymap[ROW_A][COL_7] = NO_KEY;
|
|
|
|
|
keymap[ROW_A][COL_8] = NO_KEY;
|
|
|
|
|
keymap[ROW_A][COL_9] = KEY_6;
|
|
|
|
|
keymap[ROW_A][COL_10] = KEY_7;
|
|
|
|
|
keymap[ROW_A][COL_11] = KEY_8;
|
|
|
|
|
keymap[ROW_A][COL_12] = KEY_9;
|
|
|
|
|
keymap[ROW_A][COL_13] = KEY_0;
|
|
|
|
|
keymap[ROW_A][COL_14] = NO_KEY;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
keymap[ROW_B][COL_1] = KEY_BACKTICK;
|
|
|
|
|
keymap[ROW_B][COL_2] = KEY_Q;
|
|
|
|
|
keymap[ROW_B][COL_3] = KEY_W;
|
|
|
|
|
keymap[ROW_B][COL_4] = KEY_E;
|
|
|
|
|
keymap[ROW_B][COL_5] = KEY_R;
|
|
|
|
|
keymap[ROW_B][COL_6] = KEY_T;
|
|
|
|
|
keymap[ROW_B][COL_7] = NO_KEY;
|
|
|
|
|
keymap[ROW_B][COL_8] = NO_KEY;
|
|
|
|
|
keymap[ROW_B][COL_9] = KEY_Y;
|
|
|
|
|
keymap[ROW_B][COL_10] = KEY_U;
|
|
|
|
|
keymap[ROW_B][COL_11] = KEY_I;
|
|
|
|
|
keymap[ROW_B][COL_12] = KEY_O;
|
|
|
|
|
keymap[ROW_B][COL_13] = KEY_P;
|
|
|
|
|
keymap[ROW_B][COL_14] = KEY_EQUALS;
|
|
|
|
|
keymap[ROW_C][COL_1] = KEY_PAGE_UP;
|
|
|
|
|
keymap[ROW_C][COL_2] = KEY_A;
|
|
|
|
|
keymap[ROW_C][COL_3] = KEY_S;
|
|
|
|
|
keymap[ROW_C][COL_4] = KEY_D;
|
|
|
|
|
keymap[ROW_C][COL_5] = KEY_F;
|
|
|
|
|
keymap[ROW_C][COL_6] = KEY_G;
|
|
|
|
|
keymap[ROW_C][COL_7] = KEY_TAB;
|
|
|
|
|
keymap[ROW_C][COL_8] = KEY_RETURN;
|
|
|
|
|
keymap[ROW_C][COL_9] = KEY_H;
|
|
|
|
|
keymap[ROW_C][COL_10] = KEY_J;
|
|
|
|
|
keymap[ROW_C][COL_11] = KEY_K;
|
|
|
|
|
keymap[ROW_C][COL_12] = KEY_L;
|
|
|
|
|
keymap[ROW_C][COL_13] = KEY_SEMICOLON;
|
|
|
|
|
keymap[ROW_C][COL_14] = KEY_QUOTE;
|
|
|
|
|
keymap[ROW_D][COL_1] = KEY_PAGE_DOWN;
|
|
|
|
|
keymap[ROW_D][COL_2] = KEY_Z;
|
|
|
|
|
keymap[ROW_D][COL_3] = KEY_X;
|
|
|
|
|
keymap[ROW_D][COL_4] = KEY_C;
|
|
|
|
|
keymap[ROW_D][COL_5] = KEY_V;
|
|
|
|
|
keymap[ROW_D][COL_6] = KEY_B;
|
|
|
|
|
keymap[ROW_D][COL_7] = KEY_ESC;
|
|
|
|
|
keymap[ROW_D][COL_8] = KEY_RETURN;
|
|
|
|
|
keymap[ROW_D][COL_9] = KEY_N;
|
|
|
|
|
keymap[ROW_D][COL_10] = KEY_M;
|
|
|
|
|
keymap[ROW_D][COL_11] = KEY_COMMA;
|
|
|
|
|
keymap[ROW_D][COL_12] = KEY_PERIOD;
|
|
|
|
|
keymap[ROW_D][COL_13] = KEY_SLASH;
|
|
|
|
|
keymap[ROW_D][COL_14] = KEY_MINUS;
|
|
|
|
|
keymap[ROW_E][COL_1] = KEY_LEFT_GUI;
|
|
|
|
|
keymap[ROW_E][COL_2] = KEY_BACKSPACE;
|
|
|
|
|
keymap[ROW_E][COL_3] = KEY_LEFT_SHIFT;
|
|
|
|
|
keymap[ROW_E][COL_4] = KEY_LEFT_CTRL;
|
|
|
|
|
keymap[ROW_E][COL_5] = KEY_LEFT_FN2;
|
|
|
|
|
keymap[ROW_E][COL_6] = NO_KEY;
|
|
|
|
|
keymap[ROW_E][COL_7] = NO_KEY;
|
|
|
|
|
keymap[ROW_E][COL_8] = NO_KEY;
|
|
|
|
|
keymap[ROW_E][COL_9] = NO_KEY;
|
|
|
|
|
keymap[ROW_E][COL_10] = KEY_RIGHT_FN2;
|
|
|
|
|
keymap[ROW_E][COL_11] = KEY_RIGHT_CTRL;
|
|
|
|
|
keymap[ROW_E][COL_12] = KEY_RIGHT_SHIFT;
|
|
|
|
|
keymap[ROW_E][COL_13] = KEY_SPACE;
|
|
|
|
|
keymap[ROW_E][COL_14] = KEY_RIGHT_ALT;
|
|
|
|
|
keymap[ROW_A][COL_1] = NO_KEY;
|
|
|
|
|
keymap[ROW_A][COL_2] = KEY_1;
|
|
|
|
|
keymap[ROW_A][COL_3] = KEY_2;
|
|
|
|
|
keymap[ROW_A][COL_4] = KEY_3;
|
|
|
|
|
keymap[ROW_A][COL_5] = KEY_4;
|
|
|
|
|
keymap[ROW_A][COL_6] = KEY_5;
|
|
|
|
|
keymap[ROW_A][COL_7] = NO_KEY;
|
|
|
|
|
keymap[ROW_A][COL_8] = NO_KEY;
|
|
|
|
|
keymap[ROW_A][COL_9] = KEY_6;
|
|
|
|
|
keymap[ROW_A][COL_10] = KEY_7;
|
|
|
|
|
keymap[ROW_A][COL_11] = KEY_8;
|
|
|
|
|
keymap[ROW_A][COL_12] = KEY_9;
|
|
|
|
|
keymap[ROW_A][COL_13] = KEY_0;
|
|
|
|
|
keymap[ROW_A][COL_14] = NO_KEY;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
keymap[ROW_B][COL_1] = KEY_BACKTICK;
|
|
|
|
|
keymap[ROW_B][COL_2] = KEY_Q;
|
|
|
|
|
keymap[ROW_B][COL_3] = KEY_W;
|
|
|
|
|
keymap[ROW_B][COL_4] = KEY_E;
|
|
|
|
|
keymap[ROW_B][COL_5] = KEY_R;
|
|
|
|
|
keymap[ROW_B][COL_6] = KEY_T;
|
|
|
|
|
keymap[ROW_B][COL_7] = NO_KEY;
|
|
|
|
|
keymap[ROW_B][COL_8] = NO_KEY;
|
|
|
|
|
keymap[ROW_B][COL_9] = KEY_Y;
|
|
|
|
|
keymap[ROW_B][COL_10] = KEY_U;
|
|
|
|
|
keymap[ROW_B][COL_11] = KEY_I;
|
|
|
|
|
keymap[ROW_B][COL_12] = KEY_O;
|
|
|
|
|
keymap[ROW_B][COL_13] = KEY_P;
|
|
|
|
|
keymap[ROW_B][COL_14] = KEY_EQUALS;
|
|
|
|
|
keymap[ROW_C][COL_1] = KEY_PAGE_UP;
|
|
|
|
|
keymap[ROW_C][COL_2] = KEY_A;
|
|
|
|
|
keymap[ROW_C][COL_3] = KEY_S;
|
|
|
|
|
keymap[ROW_C][COL_4] = KEY_D;
|
|
|
|
|
keymap[ROW_C][COL_5] = KEY_F;
|
|
|
|
|
keymap[ROW_C][COL_6] = KEY_G;
|
|
|
|
|
keymap[ROW_C][COL_7] = KEY_TAB;
|
|
|
|
|
keymap[ROW_C][COL_8] = KEY_RETURN;
|
|
|
|
|
keymap[ROW_C][COL_9] = KEY_H;
|
|
|
|
|
keymap[ROW_C][COL_10] = KEY_J;
|
|
|
|
|
keymap[ROW_C][COL_11] = KEY_K;
|
|
|
|
|
keymap[ROW_C][COL_12] = KEY_L;
|
|
|
|
|
keymap[ROW_C][COL_13] = KEY_SEMICOLON;
|
|
|
|
|
keymap[ROW_C][COL_14] = KEY_QUOTE;
|
|
|
|
|
keymap[ROW_D][COL_1] = KEY_PAGE_DOWN;
|
|
|
|
|
keymap[ROW_D][COL_2] = KEY_Z;
|
|
|
|
|
keymap[ROW_D][COL_3] = KEY_X;
|
|
|
|
|
keymap[ROW_D][COL_4] = KEY_C;
|
|
|
|
|
keymap[ROW_D][COL_5] = KEY_V;
|
|
|
|
|
keymap[ROW_D][COL_6] = KEY_B;
|
|
|
|
|
keymap[ROW_D][COL_7] = KEY_ESC;
|
|
|
|
|
keymap[ROW_D][COL_8] = KEY_RETURN;
|
|
|
|
|
keymap[ROW_D][COL_9] = KEY_N;
|
|
|
|
|
keymap[ROW_D][COL_10] = KEY_M;
|
|
|
|
|
keymap[ROW_D][COL_11] = KEY_COMMA;
|
|
|
|
|
keymap[ROW_D][COL_12] = KEY_PERIOD;
|
|
|
|
|
keymap[ROW_D][COL_13] = KEY_SLASH;
|
|
|
|
|
keymap[ROW_D][COL_14] = KEY_MINUS;
|
|
|
|
|
keymap[ROW_E][COL_1] = KEY_LEFT_GUI;
|
|
|
|
|
keymap[ROW_E][COL_2] = KEY_BACKSPACE;
|
|
|
|
|
keymap[ROW_E][COL_3] = KEY_LEFT_SHIFT;
|
|
|
|
|
keymap[ROW_E][COL_4] = KEY_LEFT_CTRL;
|
|
|
|
|
keymap[ROW_E][COL_5] = KEY_LEFT_FN2;
|
|
|
|
|
keymap[ROW_E][COL_6] = NO_KEY;
|
|
|
|
|
keymap[ROW_E][COL_7] = NO_KEY;
|
|
|
|
|
keymap[ROW_E][COL_8] = NO_KEY;
|
|
|
|
|
keymap[ROW_E][COL_9] = NO_KEY;
|
|
|
|
|
keymap[ROW_E][COL_10] = KEY_RIGHT_FN2;
|
|
|
|
|
keymap[ROW_E][COL_11] = KEY_RIGHT_CTRL;
|
|
|
|
|
keymap[ROW_E][COL_12] = KEY_RIGHT_SHIFT;
|
|
|
|
|
keymap[ROW_E][COL_13] = KEY_SPACE;
|
|
|
|
|
keymap[ROW_E][COL_14] = KEY_RIGHT_ALT;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|