Added help command and function'ized the arugmentIsolator.
This commit is contained in:
parent
30c45e948f
commit
267b99dedb
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
// Basic command dictionary
|
// Basic command dictionary
|
||||||
CLIDictItem basicCLIDict[] = {
|
CLIDictItem basicCLIDict[] = {
|
||||||
{ "help", "This command :P", cliFunc_help },
|
{ "help", "You're looking at it :P", cliFunc_help },
|
||||||
{ "version", "Version information about this firmware.", cliFunc_version },
|
{ "version", "Version information about this firmware.", cliFunc_version },
|
||||||
{ 0, 0, 0 } // Null entry for dictionary end
|
{ 0, 0, 0 } // Null entry for dictionary end
|
||||||
};
|
};
|
||||||
@ -172,18 +172,15 @@ void process_cli()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void commandLookup_cli()
|
// Takes a string, returns two pointers
|
||||||
|
// One to the first non-space character
|
||||||
|
// The second to the next argument (first NULL if there isn't an argument). delimited by a space
|
||||||
|
// Places a NULL at the first space after the first argument
|
||||||
|
inline void argumentIsolation_cli( char* string, char** first, char** second )
|
||||||
{
|
{
|
||||||
// Ignore command if buffer is 0 length
|
|
||||||
if ( CLILineBufferCurrent == 0 )
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Set the last+1 character of the buffer to NULL for string processing
|
|
||||||
CLILineBuffer[CLILineBufferCurrent] = '\0';
|
|
||||||
|
|
||||||
// Mark out the first argument
|
// Mark out the first argument
|
||||||
// This is done by finding the first space after a list of non-spaces and setting it NULL
|
// This is done by finding the first space after a list of non-spaces and setting it NULL
|
||||||
char* cmdPtr = CLILineBuffer - 1;
|
char* cmdPtr = string - 1;
|
||||||
while ( *++cmdPtr == ' ' ); // Skips leading spaces, and points to first character of cmd
|
while ( *++cmdPtr == ' ' ); // Skips leading spaces, and points to first character of cmd
|
||||||
|
|
||||||
// Locates first space delimiter
|
// Locates first space delimiter
|
||||||
@ -194,6 +191,26 @@ void commandLookup_cli()
|
|||||||
// Point to the first character of args or a NULL (no args) and set the space delimiter as a NULL
|
// Point to the first character of args or a NULL (no args) and set the space delimiter as a NULL
|
||||||
(++argPtr)[-1] = '\0';
|
(++argPtr)[-1] = '\0';
|
||||||
|
|
||||||
|
// Set return variables
|
||||||
|
*first = cmdPtr;
|
||||||
|
*second = argPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void commandLookup_cli()
|
||||||
|
{
|
||||||
|
// Ignore command if buffer is 0 length
|
||||||
|
if ( CLILineBufferCurrent == 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Set the last+1 character of the buffer to NULL for string processing
|
||||||
|
CLILineBuffer[CLILineBufferCurrent] = '\0';
|
||||||
|
|
||||||
|
// Retrieve pointers to command and beginning of arguments
|
||||||
|
// Places a NULL at the first space after the command
|
||||||
|
char* cmdPtr;
|
||||||
|
char* argPtr;
|
||||||
|
argumentIsolation_cli( CLILineBuffer, &cmdPtr, &argPtr );
|
||||||
|
|
||||||
// Scan array of dictionaries for a valid command match
|
// Scan array of dictionaries for a valid command match
|
||||||
for ( uint8_t dict = 0; dict < CLIDictionariesUsed; dict++ )
|
for ( uint8_t dict = 0; dict < CLIDictionariesUsed; dict++ )
|
||||||
{
|
{
|
||||||
@ -214,10 +231,10 @@ void commandLookup_cli()
|
|||||||
|
|
||||||
// No match for the command...
|
// No match for the command...
|
||||||
print( NL );
|
print( NL );
|
||||||
erro_dPrint("\"", CLILineBuffer, "\" is not a valid command...try help");
|
erro_dPrint("\"", CLILineBuffer, "\" is not a valid command...type \033[35mhelp\033[0m");
|
||||||
}
|
}
|
||||||
|
|
||||||
void registerDictionary_cli( CLIDictItem *cmdDict )
|
inline void registerDictionary_cli( CLIDictItem *cmdDict )
|
||||||
{
|
{
|
||||||
// Make sure this max limit of dictionaries hasn't been reached
|
// Make sure this max limit of dictionaries hasn't been reached
|
||||||
if ( CLIDictionariesUsed >= CLIMaxDictionaries )
|
if ( CLIDictionariesUsed >= CLIMaxDictionaries )
|
||||||
@ -236,9 +253,20 @@ void registerDictionary_cli( CLIDictItem *cmdDict )
|
|||||||
|
|
||||||
void cliFunc_help( char* args )
|
void cliFunc_help( char* args )
|
||||||
{
|
{
|
||||||
print( NL );
|
// Scan array of dictionaries and print every description
|
||||||
print("Help!");
|
// (no alphabetical here, too much processing/memory to sort...)
|
||||||
dPrint( args );
|
for ( uint8_t dict = 0; dict < CLIDictionariesUsed; dict++ )
|
||||||
|
{
|
||||||
|
print( NL "\033[1;32mCOMMAND SET\033[0m " );
|
||||||
|
printInt8( dict + 1 );
|
||||||
|
print( NL );
|
||||||
|
|
||||||
|
// Parse each cmd/description until a null command entry is found
|
||||||
|
for ( uint8_t cmd = 0; CLIDict[dict][cmd].name != 0; cmd++ )
|
||||||
|
{
|
||||||
|
dPrintStrs( " \033[35m", CLIDict[dict][cmd].name, NL, "\033[0m ", CLIDict[dict][cmd].description, NL );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cliFunc_version( char* args )
|
void cliFunc_version( char* args )
|
||||||
|
@ -69,6 +69,7 @@ uint8_t CLIDictionariesUsed;
|
|||||||
void init_cli();
|
void init_cli();
|
||||||
void process_cli();
|
void process_cli();
|
||||||
void registerDictionary_cli( CLIDictItem *cmdDict );
|
void registerDictionary_cli( CLIDictItem *cmdDict );
|
||||||
|
void argumentIsolation_cli( char* string, char** first, char** second );
|
||||||
|
|
||||||
void commandLookup_cli();
|
void commandLookup_cli();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user