diff --git a/src/key-functions.c b/src/key-functions.c index 3eb9c1f..ab13b0c 100644 --- a/src/key-functions.c +++ b/src/key-functions.c @@ -1,5 +1,9 @@ /* ---------------------------------------------------------------------------- * key functions: code + * + * These functions may do.. pretty much anything rational that thay like. If + * they want keycodes to be sent to the host in an aggrate report, they're + * responsible for modifying the appropriate report variables. * ---------------------------------------------------------------------------- * Copyright (c) 2012 Ben Blazak * Released under The MIT License (MIT) (see "license.md") @@ -43,6 +47,27 @@ void kbfun_press( uint8_t * keycode, uint8_t * current_layer, uint8_t * row, uint8_t * col ) { + // modifier keys + switch (*keycode) { + case KEY_LeftControl: keyboard_modifier_keys |= (1<<0); + return; + case KEY_LeftShift: keyboard_modifier_keys |= (1<<1); + return; + case KEY_LeftAlt: keyboard_modifier_keys |= (1<<2); + return; + case KEY_LeftGUI: keyboard_modifier_keys |= (1<<3); + return; + case KEY_RightControl: keyboard_modifier_keys |= (1<<4); + return; + case KEY_RightShift: keyboard_modifier_keys |= (1<<5); + return; + case KEY_RightAlt: keyboard_modifier_keys |= (1<<6); + return; + case KEY_RightGUI: keyboard_modifier_keys |= (1<<7); + return; + } + + // all others for (uint8_t i=0; i<6; i++) if (keyboard_keys[i] == 0) { keyboard_keys[i] = *keycode; @@ -54,6 +79,27 @@ void kbfun_release( uint8_t * keycode, uint8_t * current_layer, uint8_t * row, uint8_t * col ) { + // modifier keys + switch (*keycode) { + case KEY_LeftControl: keyboard_modifier_keys &= ~(1<<0); + return; + case KEY_LeftShift: keyboard_modifier_keys &= ~(1<<1); + return; + case KEY_LeftAlt: keyboard_modifier_keys &= ~(1<<2); + return; + case KEY_LeftGUI: keyboard_modifier_keys &= ~(1<<3); + return; + case KEY_RightControl: keyboard_modifier_keys &= ~(1<<4); + return; + case KEY_RightShift: keyboard_modifier_keys &= ~(1<<5); + return; + case KEY_RightAlt: keyboard_modifier_keys &= ~(1<<6); + return; + case KEY_RightGUI: keyboard_modifier_keys &= ~(1<<7); + return; + } + + // all others for (uint8_t i=0; i<6; i++) if (keyboard_keys[i] == *keycode) { keyboard_keys[i] = 0; @@ -61,35 +107,3 @@ void kbfun_release( } } -void kbfun_mod_press( - uint8_t * keycode, uint8_t * current_layer, - uint8_t * row, uint8_t * col ) { - - switch (*keycode) { - case KEY_LeftControl: keyboard_modifier_keys |= (1<<0); break; - case KEY_LeftShift: keyboard_modifier_keys |= (1<<1); break; - case KEY_LeftAlt: keyboard_modifier_keys |= (1<<2); break; - case KEY_LeftGUI: keyboard_modifier_keys |= (1<<3); break; - case KEY_RightControl: keyboard_modifier_keys |= (1<<4); break; - case KEY_RightShift: keyboard_modifier_keys |= (1<<5); break; - case KEY_RightAlt: keyboard_modifier_keys |= (1<<6); break; - case KEY_RightGUI: keyboard_modifier_keys |= (1<<7); break; - } -} - -void kbfun_mod_release( - uint8_t * keycode, uint8_t * current_layer, - uint8_t * row, uint8_t * col ) { - - switch (*keycode) { - case KEY_LeftControl: keyboard_modifier_keys &= ~(1<<0); break; - case KEY_LeftShift: keyboard_modifier_keys &= ~(1<<1); break; - case KEY_LeftAlt: keyboard_modifier_keys &= ~(1<<2); break; - case KEY_LeftGUI: keyboard_modifier_keys &= ~(1<<3); break; - case KEY_RightControl:keyboard_modifier_keys &= ~(1<<4); break; - case KEY_RightShift: keyboard_modifier_keys &= ~(1<<5); break; - case KEY_RightAlt: keyboard_modifier_keys &= ~(1<<6); break; - case KEY_RightGUI: keyboard_modifier_keys &= ~(1<<7); break; - } -} - diff --git a/src/key-functions.h b/src/key-functions.h index 04dce41..99367ea 100644 --- a/src/key-functions.h +++ b/src/key-functions.h @@ -20,12 +20,6 @@ void kbfun_release( uint8_t * keycode, uint8_t * current_layer, uint8_t * row, uint8_t * col ); - void kbfun_mod_press( - uint8_t * keycode, uint8_t * current_layer, - uint8_t * row, uint8_t * col ); - void kbfun_mod_release( - uint8_t * keycode, uint8_t * current_layer, - uint8_t * row, uint8_t * col ); #endif diff --git a/src/keyboard.h b/src/keyboard.h index 6b0dd15..0379051 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -1,6 +1,7 @@ /* ---------------------------------------------------------------------------- * keyboard specific exports - * use this file to include the keyboard you're compiling for + * + * Different keyboards are included by modifying a variable in the makefile. * ---------------------------------------------------------------------------- * Copyright (c) 2012 Ben Blazak * Released under The MIT License (MIT) (see "license.md") @@ -8,5 +9,5 @@ * ------------------------------------------------------------------------- */ -#include "keyboard/ergodox.h" // only supported keyboard right now +#include KEYBOARD diff --git a/src/keyboard/ergodox/layout.c b/src/keyboard/ergodox/layout.c deleted file mode 100644 index a342cc6..0000000 --- a/src/keyboard/ergodox/layout.c +++ /dev/null @@ -1,94 +0,0 @@ -/* ---------------------------------------------------------------------------- - * ergoDOX layout specific code - * ---------------------------------------------------------------------------- - * Copyright (c) 2012 Ben Blazak - * Released under The MIT License (MIT) (see "license.md") - * Project located at - * ------------------------------------------------------------------------- */ - - -#include "lib/_data-types.h" -#include "lib/_usb/keyboard-usage-page.h" - -#include "key-functions.h" - -#include "matrix.h" -#include "layout.h" - - -// error check; everything below assumes these dimensions -#if KB_LAYERS != 1 || KB_ROWS != 12 || KB_COLUMNS != 7 - #error "Expecting different keyboard dimensions" -#endif - - -// TODO (before release): put more effort into this -uint8_t kb_layout[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { -{ // layer 0: default - // right hand - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ -/* 0 */ { 0, KEY_6_Caret, KEY_7_Ampersand, KEY_8_Asterisk, KEY_9_LeftParenthesis, KEY_0_RightParenthesis, KEY_Dash_Underscore }, /* 0 */ -/* 1 */ { 0, KEY_y_Y, KEY_u_U, KEY_i_I, KEY_o_O, KEY_p_P, KEY_LeftBracket_LeftBrace }, /* 1 */ -/* 2 */ { 0,/*unused*/ KEY_h_H, KEY_j_J, KEY_k_K, KEY_l_L, KEY_Semicolon_Colon, KEY_SingleQuote_DoubleQuote }, /* 2 */ -/* 3 */ { 0, KEY_n_N, KEY_m_M, KEY_Comma_LessThan, KEY_Period_GreaterThan, KEY_Slash_Question, KEY_RightShift }, /* 3 */ -/* 4 */ { 0,/*unused*/ 0,/*unused*/ KEY_UpArrow, KEY_DownArrow, KEY_Backslash_Pipe, KEY_RightBracket_RightBrace, 0 }, /* 4 */ -/* 5 */ { 0,/*unused*/ KEY_RightControl, KEY_RightAlt, KEY_PageUp, KEY_PageDown, KEY_ReturnEnter, KEY_Spacebar }, /* 5 */ - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ - // left hand - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ -/* 6 */ { KEY_Equal_Plus, KEY_1_Exclamation, KEY_2_At, KEY_3_Pound, KEY_4_Dollar, KEY_5_Percent, 0 }, /* 6 */ -/* 7 */ { KEY_Tab, KEY_q_Q, KEY_w_W, KEY_e_E, KEY_r_R, KEY_t_T, 0 }, /* 7 */ -/* 8 */ { KEY_CapsLock, KEY_a_A, KEY_s_S, KEY_d_D, KEY_f_F, KEY_g_G, 0/*unused*/ }, /* 8 */ -/* 9 */ { KEY_LeftShift, KEY_z_Z, KEY_x_X, KEY_c_C, KEY_v_V, KEY_b_B, 0 }, /* 9 */ -/* A */ { 0, KEY_GraveAccent_Tilde, KEY_Backslash_Pipe, KEY_LeftArrow, KEY_RightArrow, 0,/*unused*/ 0/*unused*/ }, /* A */ -/* B */ { KEY_DeleteBackspace, KEY_DeleteForward, KEY_End, KEY_Home, KEY_LeftAlt, KEY_LeftControl, 0/*unused*/ } /* B */ - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ -} -}; - -kbfun_funptr_t kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { -{ // layer 0: default - // right hand - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ -/* 0 */ { NULL, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press }, /* 0 */ -/* 1 */ { NULL, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press }, /* 1 */ -/* 2 */ { NULL,/*unused*/ &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press }, /* 2 */ -/* 3 */ { NULL, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_mod_press }, /* 3 */ -/* 4 */ { NULL,/*unused*/ NULL,/*unused*/ &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, NULL }, /* 4 */ -/* 5 */ { NULL,/*unused*/ &kbfun_mod_press, &kbfun_mod_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press }, /* 5 */ - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ - // left hand - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ -/* 6 */ { &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, NULL }, /* 6 */ -/* 7 */ { &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, NULL }, /* 7 */ -/* 8 */ { &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, NULL/*unused*/ }, /* 8 */ -/* 9 */ { &kbfun_mod_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, NULL }, /* 9 */ -/* A */ { NULL, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, NULL,/*unused*/ NULL/*unused*/ }, /* A */ -/* B */ { &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_press, &kbfun_mod_press, &kbfun_mod_press, NULL/*unused*/ } /* B */ - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ -} -}; - -kbfun_funptr_t kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { -{ // layer 0: default - // right hand - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ -/* 0 */ { NULL, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release }, /* 0 */ -/* 1 */ { NULL, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release }, /* 1 */ -/* 2 */ { NULL,/*unused*/ &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release }, /* 2 */ -/* 3 */ { NULL, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_mod_release }, /* 3 */ -/* 4 */ { NULL,/*unused*/ NULL,/*unused*/ &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, NULL }, /* 4 */ -/* 5 */ { NULL,/*unused*/ &kbfun_mod_release, &kbfun_mod_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release }, /* 5 */ - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ - // left hand - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ -/* 6 */ { &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, NULL }, /* 6 */ -/* 7 */ { &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, NULL }, /* 7 */ -/* 8 */ { &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, NULL/*unused*/ }, /* 8 */ -/* 9 */ { &kbfun_mod_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, NULL }, /* 9 */ -/* A */ { NULL, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, NULL,/*unused*/ NULL/*unused*/ }, /* A */ -/* B */ { &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_release, &kbfun_mod_release, &kbfun_mod_release, NULL/*unused*/ } /* B */ - /* 0 -------------------------- 1 -------------------------- 2 -------------------------- 3 -------------------------- 4 -------------------------- 5 -------------------------- 6 -------------------------- */ -} -}; - diff --git a/src/keyboard/ergodox/layout.h b/src/keyboard/ergodox/layout.h index 0d26981..528c67d 100644 --- a/src/keyboard/ergodox/layout.h +++ b/src/keyboard/ergodox/layout.h @@ -1,5 +1,7 @@ /* ---------------------------------------------------------------------------- - * ergoDOX layout specific exports + * ergoDOX layout : exports + * + * Different layouts are included by modifying a variable in the makefile. * ---------------------------------------------------------------------------- * Copyright (c) 2012 Ben Blazak * Released under The MIT License (MIT) (see "license.md") @@ -11,11 +13,11 @@ #include "lib/_data-types.h" - #include "key-functions.h" + #include "key-functions.h" // for a pointer typedef - #include "matrix.h" + #include "matrix.h" // for number of rows and columns - #define KB_LAYERS 1 // must match what's defined in "layout.c" + #include KEYBOARD_LAYOUT // for number of layers extern uint8_t kb_layout [KB_LAYERS][KB_ROWS][KB_COLUMNS]; diff --git a/src/keyboard/ergodox/layout.md b/src/keyboard/ergodox/layout.md index 9af5374..b65c5f3 100644 --- a/src/keyboard/ergodox/layout.md +++ b/src/keyboard/ergodox/layout.md @@ -1,5 +1,18 @@ # Documentation : layout +Different layouts are included by modifying a variable in the makefile. + +To write a new one: +* You must implement everything defined in . Take a look at existing + layouts. +* The number of layers must be defined in the layout *.h file. +* Use `0` for no-operation (unused) keys. +* See for how the key matrix maps to hardware. +* See for available + keycodes. +* See for what functions keys can call. + + ## notes * Assuming 560 bytes for everything else in RAM space, there's 2000 bytes left @@ -7,8 +20,10 @@ usage if you're getting close. * The layout matricies could be moved to flash memory (program space, instead - of data space), but that doesn't seem necessary at the moment. It would - also be slightly slower, though that probably shouldn't be a concern. + of data space) in order to save RAM, but that doesn't seem necessary at the + moment. It would also be slightly slower, though that probably shouldn't + be a concern. + ------------------------------------------------------------------------------- diff --git a/src/keyboard/ergodox/layout/qwerty.c b/src/keyboard/ergodox/layout/qwerty.c new file mode 100644 index 0000000..80e07cb --- /dev/null +++ b/src/keyboard/ergodox/layout/qwerty.c @@ -0,0 +1,105 @@ +/* ---------------------------------------------------------------------------- + * ergoDOX layout : QWERTY + * + * This is an overly basic implementation. It needs to be replaced. + * ---------------------------------------------------------------------------- + * Copyright (c) 2012 Ben Blazak + * Released under The MIT License (MIT) (see "license.md") + * Project located at + * ------------------------------------------------------------------------- */ + + +#include "lib/_data-types.h" +#include "lib/_usb/keyboard-usage-page--short-names.h" + +#include "key-functions.h" + +#include "../matrix.h" +#include "../layout.h" + + +// aliases +#define NA 0 // for keys not available on the matrix +#define NOP 0 // for keys that do nothing +#define f_NA NULL // for functions not available on the matrix +#define f_NOP NULL // for functions that do nothing +// --- +#define f_press &kbfun_press +#define f_release &kbfun_release + + +// error check; everything below assumes these dimensions +#if KB_LAYERS != 1 || KB_ROWS != 12 || KB_COLUMNS != 7 + #error "Expecting different keyboard dimensions" +#endif + + +uint8_t kb_layout[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { +{ // layer 0: default +// right hand +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +/* 0 */ { NOP , _6 , _7 , _8 , _9 , _0 , _dash }, /* 0 */ +/* 1 */ { NOP , _Y , _U , _I , _O , _P , _bracketL }, /* 1 */ +/* 2 */ { NA , _H , _J , _K , _L , _semicolon, _quote }, /* 2 */ +/* 3 */ { NOP , _N , _M , _comma , _period , _slash , _shiftR }, /* 3 */ +/* 4 */ { NA , NA , _arrowU , _arrowD , _backslash, _bracketR , NOP }, /* 4 */ +/* 5 */ { NA , _ctrlR , _altR , _pageU , _pageD , _enter , _space }, /* 5 */ +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +// left hand +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +/* 6 */ { _equal , _1 , _2 , _3 , _4 , _5 , NOP }, /* 6 */ +/* 7 */ { _tab , _Q , _W , _E , _R , _T , NOP }, /* 7 */ +/* 8 */ { _capsLock , _A , _S , _D , _F , _G , NA }, /* 8 */ +/* 9 */ { _shiftL , _Z , _X , _C , _V , _B , NOP }, /* 9 */ +/* A */ { NOP , _grave , _backslash, _arrowL , _arrowR , NA , NA }, /* A */ +/* B */ { _bs , _del , _end , _home , _altL , _ctrlL , NA } /* B */ +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +} +}; + +kbfun_funptr_t kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { +{ // layer 0: default +// right hand +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +/* 0 */ { f_NOP , f_press , f_press , f_press , f_press , f_press , f_press }, /* 0 */ +/* 1 */ { f_NOP , f_press , f_press , f_press , f_press , f_press , f_press }, /* 1 */ +/* 2 */ { f_NA , f_press , f_press , f_press , f_press , f_press , f_press }, /* 2 */ +/* 3 */ { f_NOP , f_press , f_press , f_press , f_press , f_press , f_press }, /* 3 */ +/* 4 */ { f_NA , f_NA , f_press , f_press , f_press , f_press , f_NOP }, /* 4 */ +/* 5 */ { f_NA , f_press , f_press , f_press , f_press , f_press , f_press }, /* 5 */ +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +// left hand +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +/* 6 */ { f_press , f_press , f_press , f_press , f_press , f_press , f_NOP }, /* 6 */ +/* 7 */ { f_press , f_press , f_press , f_press , f_press , f_press , f_NOP }, /* 7 */ +/* 8 */ { f_press , f_press , f_press , f_press , f_press , f_press , f_NA }, /* 8 */ +/* 9 */ { f_press , f_press , f_press , f_press , f_press , f_press , f_NOP }, /* 9 */ +/* A */ { f_NOP , f_press , f_press , f_press , f_press , f_NA , f_NA }, /* A */ +/* B */ { f_press , f_press , f_press , f_press , f_press , f_press , f_NA } /* B */ +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +} +}; + +kbfun_funptr_t kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { +{ // layer 0: default +// right hand +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +/* 0 */ { f_NOP , f_release , f_release , f_release , f_release , f_release , f_release }, /* 0 */ +/* 1 */ { f_NOP , f_release , f_release , f_release , f_release , f_release , f_release }, /* 1 */ +/* 2 */ { f_NA , f_release , f_release , f_release , f_release , f_release , f_release }, /* 2 */ +/* 3 */ { f_NOP , f_release , f_release , f_release , f_release , f_release , f_release }, /* 3 */ +/* 4 */ { f_NA , f_NA , f_release , f_release , f_release , f_release , f_NOP }, /* 4 */ +/* 5 */ { f_NA , f_release , f_release , f_release , f_release , f_release , f_release }, /* 5 */ +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +// left hand +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +/* 6 */ { f_release , f_release , f_release , f_release , f_release , f_release , f_NOP }, /* 6 */ +/* 7 */ { f_release , f_release , f_release , f_release , f_release , f_release , f_NOP }, /* 7 */ +/* 8 */ { f_release , f_release , f_release , f_release , f_release , f_release , f_NA }, /* 8 */ +/* 9 */ { f_release , f_release , f_release , f_release , f_release , f_release , f_NOP }, /* 9 */ +/* A */ { f_NOP , f_release , f_release , f_release , f_release , f_NA , f_NA }, /* A */ +/* B */ { f_release , f_release , f_release , f_release , f_release , f_release , f_NA } /* B */ +/* ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ---- ---- 4 ---- ---- 5 ---- ---- 6 ---- */ +} +}; + diff --git a/src/keyboard/ergodox/layout/qwerty.h b/src/keyboard/ergodox/layout/qwerty.h new file mode 100644 index 0000000..b78238a --- /dev/null +++ b/src/keyboard/ergodox/layout/qwerty.h @@ -0,0 +1,11 @@ +/* ---------------------------------------------------------------------------- + * ergoDOX layout : QWERTY : exports + * ---------------------------------------------------------------------------- + * Copyright (c) 2012 Ben Blazak + * Released under The MIT License (MIT) (see "license.md") + * Project located at + * ------------------------------------------------------------------------- */ + + +#define KB_LAYERS 1 // must match what's defined in "layout*.c" + diff --git a/src/lib/_usb/keyboard-usage-page--short-names.h b/src/lib/_usb/keyboard-usage-page--short-names.h new file mode 100644 index 0000000..8e09729 --- /dev/null +++ b/src/lib/_usb/keyboard-usage-page--short-names.h @@ -0,0 +1,300 @@ +/* ---------------------------------------------------------------------------- + * USB Keyboard Key Codes : short names + * + * These are for convenience (and to help with formatting, keeping stuff from + * getting too long). See "keyboard-usage-page.h" for definitions and + * everything. + * ---------------------------------------------------------------------------- + * Copyright (c) 2012 Ben Blazak + * Released under The MIT License (MIT) (see "license.md") + * Project located at + * ------------------------------------------------------------------------- */ + + +#include "keyboard-usage-page.h" + + +// ---------------------------------------------------------------------------- +// protocol +// ---------------------------------------------------------------------------- + +// error +#define _ErrRollover KEY_ErrorRollOver +#define _PostFail KEY_POSTFail +#define _ErrUndef KEY_ErrorUndefined + + +// ---------------------------------------------------------------------------- +// main keyboard +// ---------------------------------------------------------------------------- + +// letters +#define _A KEY_a_A +#define _B KEY_b_B +#define _C KEY_c_C +#define _D KEY_d_D +#define _E KEY_e_E +#define _F KEY_f_F +#define _G KEY_g_G +#define _H KEY_h_H +#define _I KEY_i_I +#define _J KEY_j_J +#define _K KEY_k_K +#define _L KEY_l_L +#define _M KEY_m_M +#define _N KEY_n_N +#define _O KEY_o_O +#define _P KEY_p_P +#define _Q KEY_q_Q +#define _R KEY_r_R +#define _S KEY_s_S +#define _T KEY_t_T +#define _U KEY_u_U +#define _V KEY_v_V +#define _W KEY_w_W +#define _X KEY_x_X +#define _Y KEY_y_Y +#define _Z KEY_z_Z + +// numbers +#define _0 KEY_0_RightParenthesis +#define _1 KEY_1_Exclamation +#define _2 KEY_2_At +#define _3 KEY_3_Pound +#define _4 KEY_4_Dollar +#define _5 KEY_5_Percent +#define _6 KEY_6_Caret +#define _7 KEY_7_Ampersand +#define _8 KEY_8_Asterisk +#define _9 KEY_9_LeftParenthesis + +// function +#define _F1 KEY_F1 +#define _F2 KEY_F2 +#define _F3 KEY_F3 +#define _F4 KEY_F4 +#define _F5 KEY_F5 +#define _F6 KEY_F6 +#define _F7 KEY_F7 +#define _F8 KEY_F8 +#define _F9 KEY_F9 +#define _F10 KEY_F10 +#define _F11 KEY_F11 +#define _F12 KEY_F12 +#define _F13 KEY_F13 +#define _F14 KEY_F14 +#define _F15 KEY_F15 +#define _F16 KEY_F16 +#define _F17 KEY_F17 +#define _F18 KEY_F18 +#define _F19 KEY_F19 +#define _F20 KEY_F20 +#define _F21 KEY_F21 +#define _F22 KEY_F22 +#define _F23 KEY_F23 +#define _F24 KEY_F24 + +// whitespace and symbols +#define _enter KEY_ReturnEnter +#define _space KEY_Spacebar +#define _tab KEY_Tab +// --- +#define _backslash KEY_Backslash_Pipe +#define _bracketL KEY_LeftBracket_LeftBrace +#define _bracketR KEY_RightBracket_RightBrace +#define _comma KEY_Comma_LessThan +#define _dash KEY_Dash_Underscore +#define _equal KEY_Equal_Plus +#define _grave KEY_GraveAccent_Tilde +#define _period KEY_Period_GreaterThan +#define _quote KEY_SingleQuote_DoubleQuote +#define _semicolon KEY_Semicolon_Colon +#define _slash KEY_Slash_Question +// --- +#define _sep_dec KEY_DecimalSeparator +#define _sep_thousands KEY_ThousandsSeparator +#define _currencyUnit KEY_CurrencyUnit +#define _currencySubunit KEY_CurrencySubunit + +// international and language +#define _int1 KEY_International1 +#define _int2 KEY_International2 +#define _int3 KEY_International3 +#define _int4 KEY_International4 +#define _int5 KEY_International5 +#define _int6 KEY_International6 +#define _int7 KEY_International7 +#define _int8 KEY_International8 +#define _int9 KEY_International9 +// --- +#define _lang1 KEY_LANG1 +#define _lang2 KEY_LANG2 +#define _lang3 KEY_LANG3 +#define _lang4 KEY_LANG4 +#define _lang5 KEY_LANG5 +#define _lang6 KEY_LANG6 +#define _lang7 KEY_LANG7 +#define _lang8 KEY_LANG8 +#define _lang9 KEY_LANG9 +// --- +#define _backslash_nonUS KEY_NonUS_Backslash_Pipe +#define _pound_nonUS KEY_NonUS_Pound_Tilde + +// text control +#define _bs KEY_DeleteBackspace +#define _del KEY_DeleteForward +#define _home KEY_Home +#define _end KEY_End +#define _pageU KEY_PageUp +#define _pageD KEY_PageDown +#define _arrowU KEY_UpArrow +#define _arrowD KEY_DownArrow +#define _arrowL KEY_LeftArrow +#define _arrowR KEY_RightArrow +#define _esc KEY_Escape +#define _insert KEY_Insert + +// modifier +#define _altL KEY_LeftAlt +#define _altR KEY_RightAlt +#define _ctrlL KEY_LeftControl +#define _ctrlR KEY_RightControl +#define _guiL KEY_LeftGUI +#define _guiR KEY_RightGUI +#define _shiftL KEY_LeftShift +#define _shiftR KEY_RightShift + +// lock +#define _capsLock KEY_CapsLock +#define _scrollLock KEY_ScrollLock +// (numlock is under keypad) +// --- not generally used +#define _capsLock_locking KEY_LockingCapsLock +#define _numLock_locking KEY_LockingNumLock +#define _scrollLock_locking KEY_LockingScrollLock + +// special function +#define _pause KEY_Pause +#define _print KEY_PrintScreen +// --- +#define _application KEY_Application +#define _execute KEY_Execute +#define _power KEY_Power +// --- +#define _help KEY_Help +#define _menu KEY_Menu +// --- +#define _cut KEY_Cut +#define _copy KEY_Copy +#define _paste KEY_Paste +#define _find KEY_Find +#define _select KEY_Select +#define _stop KEY_Stop +#define _undo KEY_Undo +// --- +#define _mute KEY_Mute +#define _volumeU KEY_VolumeUp +#define _volumeD KEY_VolumeDown +// --- +#define _altErase KEY_AlternateErase +// --- +#define _again KEY_Again +#define _cancel KEY_Cancel +#define _clear_again KEY_Clear_Again +#define _clear KEY_Clear +#define _oper KEY_Oper +#define _out KEY_Out +#define _prior KEY_Prior +#define _return KEY_Return +#define _separator KEY_Separator +// --- +#define _crSel KEY_CrSel_Props +#define _exSel KEY_ExSel +#define _sysReq KEY_SysReq_Attention + + +// ---------------------------------------------------------------------------- +// keypad +// ---------------------------------------------------------------------------- + +// numbers and hex letters +#define _1_kp KEYPAD_1_End +#define _2_kp KEYPAD_2_DownArrow +#define _3_kp KEYPAD_3_PageDown +#define _4_kp KEYPAD_4_LeftArrow +#define _5_kp KEYPAD_5 +#define _6_kp KEYPAD_6_RightArrow +#define _7_kp KEYPAD_7_Home +#define _8_kp KEYPAD_8_UpArrow +#define _9_kp KEYPAD_9_PageUp +#define _0_kp KEYPAD_0_Insert +#define _A_kp KEYPAD_A +#define _B_kp KEYPAD_B +#define _C_kp KEYPAD_C +#define _D_kp KEYPAD_D +#define _E_kp KEYPAD_E +#define _F_kp KEYPAD_F +// --- +#define _00_kp KEYPAD_00 +#define _000_kp KEYPAD_000 + +// whitespace and symbols +#define _tab_kp KEYPAD_Tab +#define _space_kp KEYPAD_Space +#define _enter_kp KEYPAD_ENTER +// --- +#define _dec_del_kp KEYPAD_Period_Delete +#define _comma_kp KEYPAD_Comma +#define _equal_kp KEYPAD_Equal +#define _equalSign_kp KEYPAD_EqualSign +#define _parenL_kp KEYPAD_LeftParenthesis +#define _parenR_kp KEYPAD_RightParenthesis +#define _braceL_kp KEYPAD_LeftBrace +#define _braceR_kp KEYPAD_RightBrace + +// operations +// --- basic +#define _add_kp KEYPAD_Plus +#define _sub_kp KEYPAD_Minus +#define _mul_kp KEYPAD_Asterisk +#define _div_kp KEYPAD_Slash +#define _plusMinus_kp KEYPAD_PlusMinus +// --- logical +#define _lt_kp KEYPAD_LessThan +#define _gt_kp KEYPAD_GreaterThan +#define _xor_kp KEYPAD_XOR +#define _and_kp KEYPAD_Ampersand +#define _andand_kp KEYPAD_AmpersandAmpersand +#define _pipe_kp KEYPAD_Pipe +#define _pipepipe_kp KEYPAD_PipePipe +#define _caret_kp KEYPAD_Caret +#define _exclamation_kp KEYPAD_Exclamation +// --- other +#define _at_kp KEYPAD_At +#define _colon_kp KEYPAD_Colon +#define _percent_kp KEYPAD_Percent +#define _pound_kp KEYPAD_Pound + +// radix +#define _bin_kp KEYPAD_Binary +#define _oct_kp KEYPAD_Octal +#define _dec_kp KEYPAD_Decimal +#define _hex_kp KEYPAD_Hexadecimal + +// text control +#define _bs_kp KEYPAD_Backspace +#define _clear_kp KEYPAD_Clear +#define _clearEntry_kp KEYPAD_ClearEntry + +// lock +#define _numLock_kp KEYPAD_NumLock_Clear + +// memory control +#define _memStore_kp KEYPAD_MemoryStore +#define _memRecall_kp KEYPAD_MemoryRecall +#define _memClear_kp KEYPAD_MemoryClear +#define _memAdd_kp KEYPAD_MemoryAdd +#define _memSub_kp KEYPAD_MemorySubtract +#define _memMul_kp KEYPAD_MemoryMultiply +#define _memDiv_kp KEYPAD_MemoryDivide + diff --git a/src/lib/_usb/keyboard-usage-page.h b/src/lib/_usb/keyboard-usage-page.h index 8f429b1..81c042b 100644 --- a/src/lib/_usb/keyboard-usage-page.h +++ b/src/lib/_usb/keyboard-usage-page.h @@ -241,7 +241,7 @@ #define KEYPAD_MemorySubtract 0xD4 // - - - - #define KEYPAD_MemoryMultiply 0xD5 // - - - - #define KEYPAD_MemoryDivide 0xD6 // - - - - -#define KEYPAD_PlusMinux 0xD7 // - - - - +#define KEYPAD_PlusMinus 0xD7 // - - - - #define KEYPAD_Clear 0xD8 // - - - - #define KEYPAD_ClearEntry 0xD9 // - - - - #define KEYPAD_Binary 0xDA // - - - - diff --git a/src/makefile b/src/makefile index d2b25d5..628549e 100644 --- a/src/makefile +++ b/src/makefile @@ -14,15 +14,29 @@ # ----------------------------------------------------------------------------- -TARGET = firmware -FORMAT = ihex +TARGET = firmware +FORMAT = ihex +KEYBOARD = ergodox # see "src/keyboard" for what's available +LAYOUT = qwerty # see "src/keyboard/*/layout" for what's available -SRC = \ - $(wildcard *.c) \ - $(wildcard keyboard/ergodox*.c) \ - $(wildcard keyboard/ergodox/*.c) \ - $(wildcard lib/_teensy-2-0/*.c) \ - $(wildcard lib/pjrc/usb_keyboard/*.c) +# firmware stuff +SRC = $(wildcard *.c) +# keyboard stuff +# --- remove whitespace +KEYBOARD := $(strip $(KEYBOARD)) +LAYOUT := $(strip $(LAYOUT)) +# --- include stuff +SRC += $(wildcard keyboard/$(KEYBOARD)*.c) +SRC += $(wildcard keyboard/$(KEYBOARD)/*.c) +SRC += $(wildcard keyboard/$(KEYBOARD)/layout/$(LAYOUT)*.c) +# library stuff +# - add more "*/*/..."s as necessary to compile everything. +# - parts the stuff under "lib" may not be necessary, depending on other +# options, but it's all included here. hopefully any unnecessary stuff gets +# compiled out. else, the makefile will have to become more complicated. +SRC += $(wildcard lib/*.c) +SRC += $(wildcard lib/*/*.c) +SRC += $(wildcard lib/*/*/*.c) OBJ = $(SRC:%.c=%.o) @@ -33,6 +47,9 @@ CFLAGS += -DF_CPU=16000000 # processor frequency; must match initialization # in source CFLAGS += -I. # search for includes in the current directory # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +CFLAGS += -DKEYBOARD='"keyboard/$(strip $(KEYBOARD)).h"' +CFLAGS += -DKEYBOARD_LAYOUT='"layout/$(strip $(LAYOUT)).h"' +# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CFLAGS += -std=gnu99 # use C99 plus GCC extensions CFLAGS += -Os # optimize for size # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@ -66,6 +83,12 @@ SIZE = avr-size .PHONY: all clean +# remove extraneous whitespace +FORMAT := $(strip $(FORMAT)) +TARGET := $(strip $(TARGET)) +CFLAGS := $(strip $(CFLAGS)) +LDFLAGS := $(strip $(LDFLAGS)) + all: $(TARGET).hex $(TARGET).eep @echo @echo '---------------------------------------------------------------'