(working on key definitions)

partial-rewrite
Ben Blazak 2013-04-04 01:20:19 -07:00
parent b1b04419e1
commit c6d9875d5d
2 changed files with 218 additions and 157 deletions

View File

@ -20,24 +20,85 @@
// ----------------------------------------------------------------------------
// `keys__` macros (needed by ".../lib/layout/keys.h")
// note: needed by ".../lib/layout/keys.h"
#define KEYS__DEFAULT(name, value) \
void keys__press__##name (void) { kf__press(value); } \
void keys__release__##name (void) { kf__release(value); }
#define KEYS__DEFAULT(name, value) \
KEY_T name = { \
.press_function = &kf__press, \
.press_value = value, \
.release_function = &kf__release, \
.release_value = value }
// note: needed by ".../lib/layout/keys.h"
#define KEYS__SHIFTED(name, value) \
void keys__press__##name (void) { kf__press(KEY__LeftShift); \
kf__press(value); } \
void keys__release__##name (void) { kf__release(value); \
kf__release(KEY__LeftShift); }
// TODO: this probably isn't right...
#define KEYS__CHORD__SETUP(chordname, init, comparison, threshold) \
bool keys__chord__##chordname (bool pressed) { \
static counter = (init); \
if (pressed) counter++; \
if (counter comparison (threshold)) \
return true; \
if (!pressed) counter--; \
}
// TODO: this probably isn't either
#define KEYS__CHORD(chordname, keyname, value) \
void keys__press__##name (void) { \
if (keys__chord__##chordname(true)) \
kf__press(value); \
} \
void keys__release__##name (void) { \
if (keys__chord__##chordname(false)) \
kf__release(value); \
}
// TODO: dunno if this is how we want to do things (or if it would even work)
#define KEYS__MACRO(name, pressfunctions, releasefunctions) \
void keys__press__##name (void) { pressfunctions } \
void keys__release__##name (void) { releasefunctions } \
// the whole key
#define K(name) { &keys__press__##name, &keys__release__##name }
// just the press function of the key (without the preceding '&')
#define KP(name) keys__press__##name
// just the release function of the key (without the preceding '&')
#define KR(name) keys__release__##name
// TODO: and we could do a lot better than this too. lol
void keys__chord__2kcaps(pressed, keycode) { // TODO: check
static counter = 0;
if (pressed) {
counter++;
kf__press(keycode);
}
if (counter == 2) {
kf__toggle_capslock();
}
if (!pressed) {
counter--;
kf__release(keycode);
}
}
void keys__press__shL2kcaps(void) {
keys__chord__2kcaps(true);
kf__press(KEY__LeftShift);
}
void keys__release__shL2kcaps(void) {
keys__chord__2kcaps(false);
kf__release(KEY__LeftShift);
}
void keys__press__shR2kcaps(void) {
keys__chord__2kcaps(true);
kf__press(KEY__RightShift);
}
void keys__release__shR2kcaps(void) {
keys__chord__2kcaps(false);
kf__release(KEY__RightShift);
}
#define KEYS__SHIFTED(name, value) \
const uint16_t PROGMEM name##__press[] = { \
2, &kf__press, KEY__LeftShift, \
&kf__press, value }; \
const uint16_t PROGMEM name##__release[] = { \
2, &kf__release, value, \
&kf__release, KEY__LeftShift }; \
KEY_T name = { &kf__macro__progmem, &name##__press, \
&kf__macro__progmem, &name##__release }
// other `keys__` macros (in the `keys__` namespace for consistency)

View File

@ -38,93 +38,93 @@
// ----------------------------------------------------------------------------
// letters
KEYS__DEFAULT( A, KEY__a_A );
KEYS__DEFAULT( B, KEY__b_B );
KEYS__DEFAULT( C, KEY__c_C );
KEYS__DEFAULT( D, KEY__d_D );
KEYS__DEFAULT( E, KEY__e_E );
KEYS__DEFAULT( F, KEY__f_F );
KEYS__DEFAULT( G, KEY__g_G );
KEYS__DEFAULT( H, KEY__h_H );
KEYS__DEFAULT( I, KEY__i_I );
KEYS__DEFAULT( J, KEY__j_J );
KEYS__DEFAULT( K, KEY__k_K );
KEYS__DEFAULT( L, KEY__l_L );
KEYS__DEFAULT( M, KEY__m_M );
KEYS__DEFAULT( N, KEY__n_N );
KEYS__DEFAULT( O, KEY__o_O );
KEYS__DEFAULT( P, KEY__p_P );
KEYS__DEFAULT( Q, KEY__q_Q );
KEYS__DEFAULT( R, KEY__r_R );
KEYS__DEFAULT( S, KEY__s_S );
KEYS__DEFAULT( T, KEY__t_T );
KEYS__DEFAULT( U, KEY__u_U );
KEYS__DEFAULT( V, KEY__v_V );
KEYS__DEFAULT( W, KEY__w_W );
KEYS__DEFAULT( X, KEY__x_X );
KEYS__DEFAULT( Y, KEY__y_Y );
KEYS__DEFAULT( Z, KEY__z_Z );
KEYS__DEFAULT( a, KEY__a_A );
KEYS__DEFAULT( b, KEY__b_B );
KEYS__DEFAULT( c, KEY__c_C );
KEYS__DEFAULT( d, KEY__d_D );
KEYS__DEFAULT( e, KEY__e_E );
KEYS__DEFAULT( f, KEY__f_F );
KEYS__DEFAULT( g, KEY__g_G );
KEYS__DEFAULT( h, KEY__h_H );
KEYS__DEFAULT( i, KEY__i_I );
KEYS__DEFAULT( j, KEY__j_J );
KEYS__DEFAULT( k, KEY__k_K );
KEYS__DEFAULT( l, KEY__l_L );
KEYS__DEFAULT( m, KEY__m_M );
KEYS__DEFAULT( n, KEY__n_N );
KEYS__DEFAULT( o, KEY__o_O );
KEYS__DEFAULT( p, KEY__p_P );
KEYS__DEFAULT( q, KEY__q_Q );
KEYS__DEFAULT( r, KEY__r_R );
KEYS__DEFAULT( s, KEY__s_S );
KEYS__DEFAULT( t, KEY__t_T );
KEYS__DEFAULT( u, KEY__u_U );
KEYS__DEFAULT( v, KEY__v_V );
KEYS__DEFAULT( w, KEY__w_W );
KEYS__DEFAULT( x, KEY__x_X );
KEYS__DEFAULT( y, KEY__y_Y );
KEYS__DEFAULT( z, KEY__z_Z );
// --- (shifted) ---
KEYS__SHIFTED( CA, KEY__a_A );
KEYS__SHIFTED( CB, KEY__b_B );
KEYS__SHIFTED( CC, KEY__c_C );
KEYS__SHIFTED( CD, KEY__d_D );
KEYS__SHIFTED( CE, KEY__e_E );
KEYS__SHIFTED( CF, KEY__f_F );
KEYS__SHIFTED( CG, KEY__g_G );
KEYS__SHIFTED( CH, KEY__h_H );
KEYS__SHIFTED( CI, KEY__i_I );
KEYS__SHIFTED( CJ, KEY__j_J );
KEYS__SHIFTED( CK, KEY__k_K );
KEYS__SHIFTED( CL, KEY__l_L );
KEYS__SHIFTED( CM, KEY__m_M );
KEYS__SHIFTED( CN, KEY__n_N );
KEYS__SHIFTED( CO, KEY__o_O );
KEYS__SHIFTED( CP, KEY__p_P );
KEYS__SHIFTED( CQ, KEY__q_Q );
KEYS__SHIFTED( CR, KEY__r_R );
KEYS__SHIFTED( CS, KEY__s_S );
KEYS__SHIFTED( CT, KEY__t_T );
KEYS__SHIFTED( CU, KEY__u_U );
KEYS__SHIFTED( CV, KEY__v_V );
KEYS__SHIFTED( CW, KEY__w_W );
KEYS__SHIFTED( CX, KEY__x_X );
KEYS__SHIFTED( CY, KEY__y_Y );
KEYS__SHIFTED( CZ, KEY__z_Z );
KEYS__SHIFTED( A, KEY__a_A );
KEYS__SHIFTED( B, KEY__b_B );
KEYS__SHIFTED( C, KEY__c_C );
KEYS__SHIFTED( D, KEY__d_D );
KEYS__SHIFTED( E, KEY__e_E );
KEYS__SHIFTED( F, KEY__f_F );
KEYS__SHIFTED( G, KEY__g_G );
KEYS__SHIFTED( H, KEY__h_H );
KEYS__SHIFTED( I, KEY__i_I );
KEYS__SHIFTED( J, KEY__j_J );
KEYS__SHIFTED( K, KEY__k_K );
KEYS__SHIFTED( L, KEY__l_L );
KEYS__SHIFTED( M, KEY__m_M );
KEYS__SHIFTED( N, KEY__n_N );
KEYS__SHIFTED( O, KEY__o_O );
KEYS__SHIFTED( P, KEY__p_P );
KEYS__SHIFTED( Q, KEY__q_Q );
KEYS__SHIFTED( R, KEY__r_R );
KEYS__SHIFTED( S, KEY__s_S );
KEYS__SHIFTED( T, KEY__t_T );
KEYS__SHIFTED( U, KEY__u_U );
KEYS__SHIFTED( V, KEY__v_V );
KEYS__SHIFTED( W, KEY__w_W );
KEYS__SHIFTED( X, KEY__x_X );
KEYS__SHIFTED( Y, KEY__y_Y );
KEYS__SHIFTED( Z, KEY__z_Z );
// numbers
KEYS__DEFAULT( K0, KEY__0_RightParenthesis );
KEYS__DEFAULT( K1, KEY__1_Exclamation );
KEYS__DEFAULT( K2, KEY__2_At );
KEYS__DEFAULT( K3, KEY__3_Pound );
KEYS__DEFAULT( K4, KEY__4_Dollar );
KEYS__DEFAULT( K5, KEY__5_Percent );
KEYS__DEFAULT( K6, KEY__6_Caret );
KEYS__DEFAULT( K7, KEY__7_Ampersand );
KEYS__DEFAULT( K8, KEY__8_Asterisk );
KEYS__DEFAULT( K9, KEY__9_LeftParenthesis );
KEYS__DEFAULT( 0, KEY__0_RightParenthesis );
KEYS__DEFAULT( 1, KEY__1_Exclamation );
KEYS__DEFAULT( 2, KEY__2_At );
KEYS__DEFAULT( 3, KEY__3_Pound );
KEYS__DEFAULT( 4, KEY__4_Dollar );
KEYS__DEFAULT( 5, KEY__5_Percent );
KEYS__DEFAULT( 6, KEY__6_Caret );
KEYS__DEFAULT( 7, KEY__7_Ampersand );
KEYS__DEFAULT( 8, KEY__8_Asterisk );
KEYS__DEFAULT( 9, KEY__9_LeftParenthesis );
// --- (shifted) ---
KEYS__SHIFTED( ParenR, KEY__0_RightParenthesis );
KEYS__SHIFTED( Exclam, KEY__1_Exclamation );
KEYS__SHIFTED( At, KEY__2_At );
KEYS__SHIFTED( Pound, KEY__3_Pound );
KEYS__SHIFTED( Dollar, KEY__4_Dollar );
KEYS__SHIFTED( Percent, KEY__5_Percent );
KEYS__SHIFTED( Caret, KEY__6_Caret );
KEYS__SHIFTED( Amp, KEY__7_Ampersand );
KEYS__SHIFTED( Asterisk, KEY__8_Asterisk );
KEYS__SHIFTED( ParenL, KEY__9_LeftParenthesis );
KEYS__SHIFTED( parenR, KEY__0_RightParenthesis );
KEYS__SHIFTED( exclam, KEY__1_Exclamation );
KEYS__SHIFTED( at, KEY__2_At );
KEYS__SHIFTED( pound, KEY__3_Pound );
KEYS__SHIFTED( dollar, KEY__4_Dollar );
KEYS__SHIFTED( percent, KEY__5_Percent );
KEYS__SHIFTED( caret, KEY__6_Caret );
KEYS__SHIFTED( amp, KEY__7_Ampersand );
KEYS__SHIFTED( asterisk, KEY__8_Asterisk );
KEYS__SHIFTED( parenL, KEY__9_LeftParenthesis );
// --- (keypad) ---
KEYS__DEFAULT( KP0, KEYPAD__0_Insert );
KEYS__DEFAULT( KP1, KEYPAD__1_End );
KEYS__DEFAULT( KP2, KEYPAD__2_DownArrow );
KEYS__DEFAULT( KP3, KEYPAD__3_PageDown );
KEYS__DEFAULT( KP4, KEYPAD__4_LeftArrow );
KEYS__DEFAULT( KP5, KEYPAD__5 );
KEYS__DEFAULT( KP6, KEYPAD__6_RightArrow );
KEYS__DEFAULT( KP7, KEYPAD__7_Home );
KEYS__DEFAULT( KP8, KEYPAD__8_UpArrow );
KEYS__DEFAULT( KP9, KEYPAD__9_PageUp );
KEYS__DEFAULT( kp0, KEYPAD__0_Insert );
KEYS__DEFAULT( kp1, KEYPAD__1_End );
KEYS__DEFAULT( kp2, KEYPAD__2_DownArrow );
KEYS__DEFAULT( kp3, KEYPAD__3_PageDown );
KEYS__DEFAULT( kp4, KEYPAD__4_LeftArrow );
KEYS__DEFAULT( kp5, KEYPAD__5 );
KEYS__DEFAULT( kp6, KEYPAD__6_RightArrow );
KEYS__DEFAULT( kp7, KEYPAD__7_Home );
KEYS__DEFAULT( kp8, KEYPAD__8_UpArrow );
KEYS__DEFAULT( kp9, KEYPAD__9_PageUp );
// function
KEYS__DEFAULT( F1, KEY__F1 );
@ -141,81 +141,81 @@ KEYS__DEFAULT( F11, KEY__F11 );
KEYS__DEFAULT( F12, KEY__F12 );
// whitespace and symbols
KEYS__DEFAULT( Enter, KEY__ReturnEnter );
KEYS__DEFAULT( Space, KEY__Spacebar );
KEYS__DEFAULT( Tab, KEY__Tab );
KEYS__DEFAULT( enter, KEY__ReturnEnter );
KEYS__DEFAULT( space, KEY__Spacebar );
KEYS__DEFAULT( tab, KEY__Tab );
// ---
KEYS__DEFAULT( Bkslash, KEY__Backslash_Pipe );
KEYS__DEFAULT( BrktL, KEY__LeftBracket_LeftBrace );
KEYS__DEFAULT( BrktR, KEY__RightBracket_RightBrace );
KEYS__DEFAULT( Comma, KEY__Comma_LessThan );
KEYS__DEFAULT( Dash, KEY__Dash_Underscore );
KEYS__DEFAULT( Equal, KEY__Equal_Plus );
KEYS__DEFAULT( Grave, KEY__GraveAccent_Tilde );
KEYS__DEFAULT( Period, KEY__Period_GreaterThan );
KEYS__DEFAULT( Quote, KEY__SingleQuote_DoubleQuote );
KEYS__DEFAULT( Semicol, KEY__Semicolon_Colon );
KEYS__DEFAULT( Slash, KEY__Slash_Question );
KEYS__DEFAULT( bkslash, KEY__Backslash_Pipe );
KEYS__DEFAULT( brktL, KEY__LeftBracket_LeftBrace );
KEYS__DEFAULT( brktR, KEY__RightBracket_RightBrace );
KEYS__DEFAULT( comma, KEY__Comma_LessThan );
KEYS__DEFAULT( dash, KEY__Dash_Underscore );
KEYS__DEFAULT( equal, KEY__Equal_Plus );
KEYS__DEFAULT( grave, KEY__GraveAccent_Tilde );
KEYS__DEFAULT( period, KEY__Period_GreaterThan );
KEYS__DEFAULT( quote, KEY__SingleQuote_DoubleQuote );
KEYS__DEFAULT( semicol, KEY__Semicolon_Colon );
KEYS__DEFAULT( slash, KEY__Slash_Question );
// --- (shifted) ---
KEYS__SHIFTED( Pipe, KEY__Backslash_Pipe );
KEYS__SHIFTED( BraceL, KEY__LeftBracket_LeftBrace );
KEYS__SHIFTED( BraceR, KEY__RightBracket_RightBrace );
KEYS__SHIFTED( LessThan, KEY__Comma_LessThan );
KEYS__SHIFTED( Undersc, KEY__Dash_Underscore );
KEYS__SHIFTED( Plus, KEY__Equal_Plus );
KEYS__SHIFTED( Tilde, KEY__GraveAccent_Tilde );
KEYS__SHIFTED( GrtrThan, KEY__Period_GreaterThan );
KEYS__SHIFTED( DblQuote, KEY__SingleQuote_DoubleQuote );
KEYS__SHIFTED( Colon, KEY__Semicolon_Colon );
KEYS__SHIFTED( Question, KEY__Slash_Question );
KEYS__SHIFTED( pipe, KEY__Backslash_Pipe );
KEYS__SHIFTED( braceL, KEY__LeftBracket_LeftBrace );
KEYS__SHIFTED( braceR, KEY__RightBracket_RightBrace );
KEYS__SHIFTED( lessThan, KEY__Comma_LessThan );
KEYS__SHIFTED( undersc, KEY__Dash_Underscore );
KEYS__SHIFTED( plus, KEY__Equal_Plus );
KEYS__SHIFTED( tilde, KEY__GraveAccent_Tilde );
KEYS__SHIFTED( grtrThan, KEY__Period_GreaterThan );
KEYS__SHIFTED( dblQuote, KEY__SingleQuote_DoubleQuote );
KEYS__SHIFTED( colon, KEY__Semicolon_Colon );
KEYS__SHIFTED( question, KEY__Slash_Question );
// --- (keypad) ---
KEYS__DEFAULT( KPEnter, KEYPAD__Enter );
KEYS__DEFAULT( kpEnter, KEYPAD__Enter );
// ---
KEYS__DEFAULT( KPDec, KEYPAD__Period_Delete );
KEYS__DEFAULT( kpDec, KEYPAD__Period_Delete );
// ---
KEYS__DEFAULT( KPAdd, KEYPAD__Plus );
KEYS__DEFAULT( KPSub, KEYPAD__Minus );
KEYS__DEFAULT( KPMul, KEYPAD__Asterisk );
KEYS__DEFAULT( KPDiv, KEYPAD__Slash );
KEYS__DEFAULT( kpAdd, KEYPAD__Plus );
KEYS__DEFAULT( kpSub, KEYPAD__Minus );
KEYS__DEFAULT( kpMul, KEYPAD__Asterisk );
KEYS__DEFAULT( kpDiv, KEYPAD__Slash );
// text control
KEYS__DEFAULT( ArrowU, KEY__UpArrow );
KEYS__DEFAULT( ArrowD, KEY__DownArrow );
KEYS__DEFAULT( ArrowL, KEY__LeftArrow );
KEYS__DEFAULT( ArrowR, KEY__RightArrow );
KEYS__DEFAULT( Bs, KEY__DeleteBackspace );
KEYS__DEFAULT( Del, KEY__DeleteForward );
KEYS__DEFAULT( End, KEY__End );
KEYS__DEFAULT( Esc, KEY__Escape );
KEYS__DEFAULT( Home, KEY__Home );
KEYS__DEFAULT( Ins, KEY__Insert );
KEYS__DEFAULT( PageU, KEY__PageUp );
KEYS__DEFAULT( PageD, KEY__PageDown );
KEYS__DEFAULT( arrowU, KEY__UpArrow );
KEYS__DEFAULT( arrowD, KEY__DownArrow );
KEYS__DEFAULT( arrowL, KEY__LeftArrow );
KEYS__DEFAULT( arrowR, KEY__RightArrow );
KEYS__DEFAULT( bs, KEY__DeleteBackspace );
KEYS__DEFAULT( del, KEY__DeleteForward );
KEYS__DEFAULT( end, KEY__End );
KEYS__DEFAULT( esc, KEY__Escape );
KEYS__DEFAULT( home, KEY__Home );
KEYS__DEFAULT( ins, KEY__Insert );
KEYS__DEFAULT( pageU, KEY__PageUp );
KEYS__DEFAULT( pageD, KEY__PageDown );
// modifier
KEYS__DEFAULT( AltR, KEY__RightAlt );
KEYS__DEFAULT( AltL, KEY__LeftAlt );
KEYS__DEFAULT( CtrlL, KEY__LeftControl );
KEYS__DEFAULT( CtrlR, KEY__RightControl );
KEYS__DEFAULT( GUIL, KEY__LeftGUI );
KEYS__DEFAULT( GUIR, KEY__RightGUI );
KEYS__DEFAULT( ShiftL, KEY__LeftShift );
KEYS__DEFAULT( ShiftR, KEY__RightShift );
KEYS__DEFAULT( altR, KEY__RightAlt );
KEYS__DEFAULT( altL, KEY__LeftAlt );
KEYS__DEFAULT( ctrlL, KEY__LeftControl );
KEYS__DEFAULT( ctrlR, KEY__RightControl );
KEYS__DEFAULT( guiL, KEY__LeftGUI );
KEYS__DEFAULT( guiR, KEY__RightGUI );
KEYS__DEFAULT( shiftL, KEY__LeftShift );
KEYS__DEFAULT( shiftR, KEY__RightShift );
// lock
KEYS__DEFAULT( Caps, KEY__CapsLock );
KEYS__DEFAULT( Scrl, KEY__ScrollLock );
KEYS__DEFAULT( caps, KEY__CapsLock );
KEYS__DEFAULT( scrl, KEY__ScrollLock );
// --- (keypad) ---
KEYS__DEFAULT( Num, KEYPAD__NumLock_Clear );
KEYS__DEFAULT( num, KEYPAD__NumLock_Clear );
// special function
KEYS__DEFAULT( App, KEY__Application );
KEYS__DEFAULT( Pause, KEY__Pause );
KEYS__DEFAULT( PrScr, KEY__PrintScreen );
KEYS__DEFAULT( app, KEY__Application );
KEYS__DEFAULT( pause, KEY__Pause );
KEYS__DEFAULT( prScr, KEY__PrintScreen );
// international and language
KEYS__DEFAULT( NonUSBackslash, KEY__NonUS_Backslash_Pipe );
KEYS__DEFAULT( NonUSPound, KEY__NonUS_Pound_Tilde );
KEYS__DEFAULT( nonUSBkslash, KEY__NonUS_Backslash_Pipe );
KEYS__DEFAULT( nonUSPound, KEY__NonUS_Pound_Tilde );
// ----------------------------------------------------------------------------