2015-03-15 23:58:01 +00:00
/* Copyright (C) 2014-2015 by Jacob Alexander
2014-01-20 00:40:36 +00:00
*
2011-09-30 05:22:19 +00:00
* 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 :
2014-01-20 00:40:36 +00:00
*
2011-09-30 05:22:19 +00:00
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software .
2014-01-20 00:40:36 +00:00
*
2011-09-30 05:22:19 +00:00
* 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 .
*/
2014-01-20 00:40:36 +00:00
# ifndef cli_h__
# define cli_h__
2011-09-30 05:22:19 +00:00
// ----- Includes -----
// Compiler Includes
2014-01-23 10:01:12 +00:00
# include <Lib/MainLib.h>
2011-09-30 05:22:19 +00:00
2014-01-23 10:01:12 +00:00
// Project Includes
# include <output_com.h>
2011-09-30 05:22:19 +00:00
2014-01-20 00:40:36 +00:00
// ----- Defines -----
2013-01-27 06:47:52 +00:00
2014-01-22 08:38:53 +00:00
# define CLILineBufferMaxSize 100
2015-03-15 23:58:01 +00:00
# define CLIMaxDictionaries 10
2014-01-24 09:42:43 +00:00
# define CLIEntryTabAlign 13
2014-01-22 08:38:53 +00:00
2014-10-03 05:09:34 +00:00
// ----- Macros -----
// AVR CLI Dictionary definitions (has to deal with the annoying PROGMEM
// Only using PROGMEM with descriptions (all the string comparison tools need to be re-written otherwise)
# if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
# define CLIDict_Def(name,description) \
const PROGMEM char name # # Name [ ] = description ; \
const CLIDictItem name [ ]
# define CLIDict_Item(name) \
{ # name , name # # CLIDict_DescEntry , ( const void ( * ) ( char * ) ) cliFunc_ # # name }
# define CLIDict_Entry(name,description) \
const PROGMEM char name # # CLIDict_DescEntry [ ] = description ;
// ARM is easy :P
# elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) // ARM
# define CLIDict_Def(name,description) \
const char name # # Name [ ] = description ; \
const CLIDictItem name [ ]
# define CLIDict_Item(name) \
{ # name , name # # CLIDict_DescEntry , ( const void ( * ) ( char * ) ) cliFunc_ # # name }
# define CLIDict_Entry(name,description) \
const char name # # CLIDict_DescEntry [ ] = description ;
# endif
2014-01-22 08:38:53 +00:00
// ----- Structs -----
// Each item has a name, description, and function pointer with an argument for arguments
typedef struct CLIDictItem {
2014-10-03 05:09:34 +00:00
const char * name ;
const char * description ;
const void ( * function ) ( char * ) ;
2014-01-22 08:38:53 +00:00
} CLIDictItem ;
// ----- Variables -----
char CLILineBuffer [ CLILineBufferMaxSize + 1 ] ; // +1 for an additional NULL
uint8_t CLILineBufferCurrent ;
// Main command dictionary
2014-01-24 09:56:44 +00:00
CLIDictItem * CLIDict [ CLIMaxDictionaries ] ;
char * CLIDictNames [ CLIMaxDictionaries ] ;
uint8_t CLIDictionariesUsed ;
2014-01-22 08:38:53 +00:00
2014-01-23 10:01:12 +00:00
uint8_t CLILEDState ;
2014-01-23 10:36:00 +00:00
uint8_t CLIHexDebugMode ;
2014-01-22 08:38:53 +00:00
2011-09-30 05:22:19 +00:00
2013-01-27 06:47:52 +00:00
2014-01-20 00:40:36 +00:00
// ----- Functions and Corresponding Function Aliases -----
2011-09-30 05:22:19 +00:00
2014-04-06 18:49:27 +00:00
void CLI_init ( ) ;
void CLI_process ( ) ;
2014-08-15 17:42:12 +00:00
void CLI_registerDictionary ( const CLIDictItem * cmdDict , const char * dictName ) ;
2014-04-06 18:49:27 +00:00
void CLI_argumentIsolation ( char * string , char * * first , char * * second ) ;
2014-01-22 08:38:53 +00:00
2014-04-06 18:49:27 +00:00
void CLI_commandLookup ( ) ;
void CLI_tabCompletion ( ) ;
2011-09-30 05:22:19 +00:00
2014-01-22 08:38:53 +00:00
// CLI Command Functions
2014-01-23 10:01:12 +00:00
void cliFunc_arch ( char * args ) ;
void cliFunc_chip ( char * args ) ;
2015-04-02 06:38:26 +00:00
void cliFunc_clear ( char * args ) ;
2014-01-23 10:01:12 +00:00
void cliFunc_cliDebug ( char * args ) ;
void cliFunc_device ( char * args ) ;
void cliFunc_help ( char * args ) ;
void cliFunc_led ( char * args ) ;
void cliFunc_reload ( char * args ) ;
void cliFunc_reset ( char * args ) ;
2014-01-23 10:36:00 +00:00
void cliFunc_restart ( char * args ) ;
2014-01-23 10:01:12 +00:00
void cliFunc_version ( char * args ) ;
2011-09-30 05:22:19 +00:00
# endif