-/* Copyright (C) 2014-2015 by Jacob Alexander
+/* Copyright (C) 2014-2016 by Jacob Alexander
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
// CLI Functions
void cliFunc_matrixDebug( char* args );
+void cliFunc_matrixInfo( char* args );
void cliFunc_matrixState( char* args );
// Scan Module command dictionary
CLIDict_Entry( matrixDebug, "Enables matrix debug mode, prints out each scan code." NL "\t\tIf argument \033[35mT\033[0m is given, prints out each scan code state transition." );
+CLIDict_Entry( matrixInfo, "Print info about the configured matrix." );
CLIDict_Entry( matrixState, "Prints out the current scan table N times." NL "\t\t \033[1mO\033[0m - Off, \033[1;33mP\033[0m - Press, \033[1;32mH\033[0m - Hold, \033[1;35mR\033[0m - Release, \033[1;31mI\033[0m - Invalid" );
CLIDict_Def( matrixCLIDict, "Matrix Module Commands" ) = {
CLIDict_Item( matrixDebug ),
+ CLIDict_Item( matrixInfo ),
CLIDict_Item( matrixState ),
{ 0, 0, 0 } // Null entry for dictionary end
};
// Register Matrix CLI dictionary
CLI_registerDictionary( matrixCLIDict, matrixCLIDictName );
- info_msg("Columns: ");
- printHex( Matrix_colsNum );
-
// Setup Strobe Pins
for ( uint8_t pin = 0; pin < Matrix_colsNum; pin++ )
{
Matrix_pin( Matrix_cols[ pin ], Type_StrobeSetup );
}
- print( NL );
- info_msg("Rows: ");
- printHex( Matrix_rowsNum );
-
// Setup Sense Pins
for ( uint8_t pin = 0; pin < Matrix_rowsNum; pin++ )
{
Matrix_pin( Matrix_rows[ pin ], Type_SenseSetup );
}
- print( NL );
- info_msg("Max Keys: ");
- printHex( Matrix_maxKeys );
- print( NL );
-
// Clear out Debounce Array
for ( uint8_t item = 0; item < Matrix_maxKeys; item++ )
{
// Matrix ghosting check and elimination
- // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
#ifdef GHOSTING_MATRIX
// strobe = column, sense = row
row_use[row] = used;
row_ghost[row] = 0; // clear
}
-
+
// Check if matrix has ghost
// Happens when key is pressed and some other key is pressed in same row and another in same column
//print(" G ");
uint8_t key = Matrix_colsNum * row + col;
KeyState *state = &Matrix_scanArray[ key ];
KeyGhost *st = &Matrix_ghostArray[ key ];
-
+
// col or row is ghosting (crossed)
uint8_t ghost = (col_ghost[col] > 0 || row_ghost[row] > 0) ? 1 : 0;
-
+
st->prev = st->cur; // previous
// save state if no ghost or outside ghosted area
if ( ghost == 0 )
// final
// use saved state if ghosting, or current if not
st->cur = ghost > 0 ? st->saved : state->curState;
-
+
// Send keystate to macro module
- KeyPosition k = !st->cur
+ KeyPosition k = !st->cur
? (!st->prev ? KeyState_Off : KeyState_Release)
: ( st->prev ? KeyState_Hold : KeyState_Press);
Macro_keyState( key, k );
}
}
#endif
- // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
// State Table Output Debug
}
+// Called by parent scan module whenever the available current changes
+// current - mA
+void Matrix_currentChange( unsigned int current )
+{
+ // TODO - Any potential power savings?
+}
+
+
+
// ----- CLI Command Functions -----
-void cliFunc_matrixDebug ( char* args )
+void cliFunc_matrixInfo( char* args )
+{
+ print( NL );
+ info_msg("Columns: ");
+ printHex( Matrix_colsNum );
+
+ print( NL );
+ info_msg("Rows: ");
+ printHex( Matrix_rowsNum );
+
+ print( NL );
+ info_msg("Max Keys: ");
+ printHex( Matrix_maxKeys );
+}
+
+void cliFunc_matrixDebug( char* args )
{
// Parse number from argument
// NOTE: Only first argument is used
printInt8( matrixDebugMode );
}
-void cliFunc_matrixState ( char* args )
+void cliFunc_matrixState( char* args )
{
// Parse number from argument
// NOTE: Only first argument is used