2014-08-01 08:26:25 +00:00
/* Copyright (C) 2014 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
* in the Software without restriction , including without limitation the rights
* to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
* copies of the Software , and to permit persons to whom the Software is
* furnished to do so , subject to the following conditions :
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
* LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE .
*/
// ----- Includes -----
// Compiler Includes
# include <Lib/ScanLib.h>
// Project Includes
# include <cli.h>
# include <led.h>
# include <print.h>
2014-08-03 05:19:33 +00:00
# include <matrix_scan.h>
2014-12-01 03:36:19 +00:00
# include <macro.h>
2014-08-01 08:26:25 +00:00
// Local Includes
# include "scan_loop.h"
2014-08-03 05:19:33 +00:00
// ----- Function Declarations -----
// CLI Functions
void cliFunc_echo ( char * args ) ;
2014-08-01 08:26:25 +00:00
// ----- Variables -----
2014-08-03 05:19:33 +00:00
// Scan Module command dictionary
2014-10-03 05:09:34 +00:00
CLIDict_Entry ( echo , " Example command, echos the arguments. " ) ;
CLIDict_Def ( scanCLIDict , " Scan Module Commands " ) = {
CLIDict_Item ( echo ) ,
2014-08-03 05:19:33 +00:00
{ 0 , 0 , 0 } // Null entry for dictionary end
} ;
2014-08-01 08:26:25 +00:00
// Number of scans since the last USB send
uint16_t Scan_scanCount = 0 ;
// ----- Functions -----
// Setup
inline void Scan_setup ( )
{
2014-08-03 05:19:33 +00:00
// Register Scan CLI dictionary
CLI_registerDictionary ( scanCLIDict , scanCLIDictName ) ;
2014-08-01 08:26:25 +00:00
// Setup GPIO pins for matrix scanning
Matrix_setup ( ) ;
2014-08-03 05:19:33 +00:00
// Reset scan count
Scan_scanCount = 0 ;
2014-08-01 08:26:25 +00:00
}
// Main Detection Loop
inline uint8_t Scan_loop ( )
{
2014-08-03 05:19:33 +00:00
Matrix_scan ( Scan_scanCount + + ) ;
2014-08-01 08:26:25 +00:00
return 0 ;
}
// Signal from Macro Module that all keys have been processed (that it knows about)
inline void Scan_finishedWithMacro ( uint8_t sentKeys )
{
}
// Signal from Output Module that all keys have been processed (that it knows about)
inline void Scan_finishedWithOutput ( uint8_t sentKeys )
{
// Reset scan loop indicator (resets each key debounce state)
// TODO should this occur after USB send or Macro processing?
Scan_scanCount = 0 ;
}
2014-08-03 05:19:33 +00:00
// ----- CLI Command Functions -----
// XXX Just an example command showing how to parse arguments (more complex than generally needed)
void cliFunc_echo ( char * args )
{
char * curArgs ;
char * arg1Ptr ;
char * arg2Ptr = args ;
// Parse args until a \0 is found
while ( 1 )
{
print ( NL ) ; // No \r\n by default after the command is entered
curArgs = arg2Ptr ; // Use the previous 2nd arg pointer to separate the next arg from the list
CLI_argumentIsolation ( curArgs , & arg1Ptr , & arg2Ptr ) ;
// Stop processing args if no more are found
if ( * arg1Ptr = = ' \0 ' )
break ;
// Print out the arg
dPrint ( arg1Ptr ) ;
}
}