diff --git a/Debug/cli/cli.c b/Debug/cli/cli.c index 80a8af9..7b38a43 100644 --- a/Debug/cli/cli.c +++ b/Debug/cli/cli.c @@ -40,7 +40,8 @@ CLIDictItem basicCLIDict[] = { { "help", "You're looking at it :P", cliFunc_help }, { "led", "Enables/Disables indicator LED. Try a couple times just in case the LED is in an odd state.\r\n\t\t\033[33mWarning\033[0m: May adversely affect some modules...", cliFunc_led }, { "reload", "Signals microcontroller to reflash/reload.", cliFunc_reload }, - { "reset", "Sends a software reset, should be similar to powering on the device.", cliFunc_reset }, + { "reset", "Resets the terminal back to initial settings.", cliFunc_reset }, + { "restart", "Sends a software restart, should be similar to powering on the device.", cliFunc_restart }, { "version", "Version information about this firmware.", cliFunc_version }, { 0, 0, 0 } // Null entry for dictionary end }; @@ -51,9 +52,11 @@ CLIDictItem basicCLIDict[] = { inline void prompt() { + print("\033[2K"); // Erases the current line print(": "); } +// Initialize the CLI inline void init_cli() { // Reset the Line Buffer @@ -69,8 +72,12 @@ inline void init_cli() // Initialize main LED init_errorLED(); CLILEDState = 0; + + // Hex debug mode is off by default + CLIHexDebugMode = 0; } +// Query the serial input buffer for any new characters void process_cli() { // Current buffer position @@ -106,6 +113,22 @@ void process_cli() CLILineBuffer[CLILineBufferCurrent++] = cur_char; } + // Display Hex Key Input if enabled + if ( CLIHexDebugMode && CLILineBufferCurrent > prev_buf_pos ) + { + print("\033[s\r\n"); // Save cursor position, and move to the next line + print("\033[2K"); // Erases the current line + + uint8_t pos = prev_buf_pos; + while ( CLILineBufferCurrent > pos ) + { + printHex( CLILineBuffer[pos++] ); + print(" "); + } + + print("\033[u"); // Restore cursor position + } + // If buffer has changed, output to screen while there are still characters in the buffer not displayed while ( CLILineBufferCurrent > prev_buf_pos ) { @@ -168,17 +191,6 @@ void process_cli() break; } - - /* TODO Enable via option - uint8_t pos = prev_buf_pos; - while ( CLILineBuffer[pos] != 0 ) - { - printHex( CLILineBuffer[pos++] ); - print(" "); - } - - print( NL ); - */ } } @@ -206,6 +218,7 @@ inline void argumentIsolation_cli( char* string, char** first, char** second ) *second = argPtr; } +// Scans the CLILineBuffer for any valid commands void commandLookup_cli() { // Ignore command if buffer is 0 length @@ -244,6 +257,7 @@ void commandLookup_cli() erro_dPrint("\"", CLILineBuffer, "\" is not a valid command...type \033[35mhelp\033[0m"); } +// Registers a command dictionary with the CLI inline void registerDictionary_cli( CLIDictItem *cmdDict ) { // Make sure this max limit of dictionaries hasn't been reached @@ -263,6 +277,19 @@ inline void registerDictionary_cli( CLIDictItem *cmdDict ) void cliFunc_cliDebug( char* args ) { + // Toggle Hex Debug Mode + if ( CLIHexDebugMode ) + { + print( NL ); + info_print("Hex debug mode disabled..."); + CLIHexDebugMode = 0; + } + else + { + print( NL ); + info_print("Hex debug mode enabled..."); + CLIHexDebugMode = 1; + } } void cliFunc_help( char* args ) @@ -303,6 +330,11 @@ void cliFunc_reload( char* args ) } void cliFunc_reset( char* args ) +{ + print("\033c"); // Resets the terminal +} + +void cliFunc_restart( char* args ) { // Trigger an overall software reset SOFTWARE_RESET(); diff --git a/Debug/cli/cli.h b/Debug/cli/cli.h index 3b3ab34..4533e28 100644 --- a/Debug/cli/cli.h +++ b/Debug/cli/cli.h @@ -59,7 +59,7 @@ CLIDictItem *CLIDict[CLIMaxDictionaries]; uint8_t CLIDictionariesUsed; uint8_t CLILEDState; - +uint8_t CLIHexDebugMode; @@ -81,6 +81,7 @@ void cliFunc_help ( char* args ); void cliFunc_led ( char* args ); void cliFunc_reload ( char* args ); void cliFunc_reset ( char* args ); +void cliFunc_restart ( char* args ); void cliFunc_version ( char* args ); diff --git a/Lib/_buildvars.h b/Lib/_buildvars.h index 29abafe..6abbeda 100644 --- a/Lib/_buildvars.h +++ b/Lib/_buildvars.h @@ -41,7 +41,7 @@ #define CLI_RepoOrigin "@Git_Origin_URL@" #define CLI_CommitDate "@Git_Date_INFO@" #define CLI_CommitAuthor @Git_Commit_Author@ -#define CLI_Modules "@OutputModule@ @DebugModule@" +#define CLI_Modules "Output(@OutputModule@) Debug(@DebugModule@)" #define CLI_BuildDate "@Build_Date@" #define CLI_BuildOS "@CMAKE_SYSTEM@" #define CLI_Arch "@COMPILER_FAMILY@"