refactoring layout stuff
- made short keycode macros for the USB keycodes (under "lib/...") - refactored "keyboard/.../layout.c", to make way for multiple layouts, and to make it easier to read (by using short keycode macros) - layout.h has a computed include line now, and the code (and layout specific header stuff) is in a subdirectory. the makefile should take care of which layout gets included and compiled - changed kbfun_press() and kbfun_release() to be able to handle the modifier keys (instead of requiring a separate function for the modifiers) - added a makefile variable for which keyboard gets compiled. even though there's only one right nowpartial-rewrite
parent
acba260663
commit
b7e5e7b735
|
@ -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 <benblazak.dev@gmail.com>
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 <benblazak.dev@gmail.com>
|
||||
* Released under The MIT License (MIT) (see "license.md")
|
||||
|
@ -8,5 +9,5 @@
|
|||
* ------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "keyboard/ergodox.h" // only supported keyboard right now
|
||||
#include KEYBOARD
|
||||
|
||||
|
|
|
@ -1,94 +0,0 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ergoDOX layout specific code
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2012 Ben Blazak <benblazak.dev@gmail.com>
|
||||
* Released under The MIT License (MIT) (see "license.md")
|
||||
* Project located at <https://github.com/benblazak/ergodox-firmware>
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#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 -------------------------- */
|
||||
}
|
||||
};
|
||||
|
|
@ -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 <benblazak.dev@gmail.com>
|
||||
* 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];
|
||||
|
|
|
@ -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 <layout.h>. 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 <matrix.md> for how the key matrix maps to hardware.
|
||||
* See </src/lib/_usb/keyboard-usage-page--short-names.h> for available
|
||||
keycodes.
|
||||
* See </src/key-functions.c> 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.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ergoDOX layout : QWERTY
|
||||
*
|
||||
* This is an overly basic implementation. It needs to be replaced.
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2012 Ben Blazak <benblazak.dev@gmail.com>
|
||||
* Released under The MIT License (MIT) (see "license.md")
|
||||
* Project located at <https://github.com/benblazak/ergodox-firmware>
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#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 ---- */
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ergoDOX layout : QWERTY : exports
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2012 Ben Blazak <benblazak.dev@gmail.com>
|
||||
* Released under The MIT License (MIT) (see "license.md")
|
||||
* Project located at <https://github.com/benblazak/ergodox-firmware>
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#define KB_LAYERS 1 // must match what's defined in "layout*.c"
|
||||
|
|
@ -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 <benblazak.dev@gmail.com>
|
||||
* Released under The MIT License (MIT) (see "license.md")
|
||||
* Project located at <https://github.com/benblazak/ergodox-firmware>
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#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
|
||||
|
|
@ -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 // - - - -
|
||||
|
|
39
src/makefile
39
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 '---------------------------------------------------------------'
|
||||
|
|
Loading…
Reference in New Issue