Changing decToInt to numToInt (adds support for Hex number interpreter)
- CLI now works with hex or decimal numbers - Hex requires 0x (technically just x would work too)
This commit is contained in:
parent
662d1f557f
commit
d6d792fdf9
@ -313,7 +313,7 @@ int16_t eqStr( char* str1, char* str2 )
|
|||||||
return *--str1 == *--str2 ? -1 : *++str1;
|
return *--str1 == *--str2 ? -1 : *++str1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int decToInt( char* in )
|
int numToInt( char* in )
|
||||||
{
|
{
|
||||||
// Pointers to the LSD (Least Significant Digit) and MSD
|
// Pointers to the LSD (Least Significant Digit) and MSD
|
||||||
char* lsd = in;
|
char* lsd = in;
|
||||||
@ -321,6 +321,7 @@ int decToInt( char* in )
|
|||||||
|
|
||||||
int total = 0;
|
int total = 0;
|
||||||
int sign = 1; // Default to positive
|
int sign = 1; // Default to positive
|
||||||
|
uint8_t base = 10; // Use base 10 by default TODO Add support for bases other than 10 and 16
|
||||||
|
|
||||||
// Scan the string once to determine the length
|
// Scan the string once to determine the length
|
||||||
while ( *lsd != '\0' )
|
while ( *lsd != '\0' )
|
||||||
@ -335,12 +336,32 @@ int decToInt( char* in )
|
|||||||
case ' ':
|
case ' ':
|
||||||
msd = lsd;
|
msd = lsd;
|
||||||
break;
|
break;
|
||||||
|
case 'x': // Hex Mode
|
||||||
|
base = 0x10;
|
||||||
|
msd = lsd;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rescan the string from the LSD to MSD to convert it to a decimal number
|
// Process string depending on which base
|
||||||
for ( unsigned int digit = 1; lsd > msd ; digit *= 10 )
|
switch ( base )
|
||||||
total += ( (*--lsd) - '0' ) * digit;
|
{
|
||||||
|
case 10: // Decimal
|
||||||
|
// Rescan the string from the LSD to MSD to convert it to a decimal number
|
||||||
|
for ( unsigned int digit = 1; lsd > msd ; digit *= 10 )
|
||||||
|
total += ( (*--lsd) - '0' ) * digit;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x10: // Hex
|
||||||
|
// Rescan the string from the LSD to MSD to convert it to a hexadecimal number
|
||||||
|
for ( unsigned int digit = 1; lsd > msd ; digit *= 0x10 )
|
||||||
|
{
|
||||||
|
if ( *--lsd <= '9' ) total += ( *lsd - '0' ) * digit;
|
||||||
|
else if ( *lsd <= 'F' ) total += ( *lsd - 'A' + 10 ) * digit;
|
||||||
|
else if ( *lsd <= 'f' ) total += ( *lsd - 'a' + 10 ) * digit;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Propagate sign and return
|
// Propagate sign and return
|
||||||
return total * sign;
|
return total * sign;
|
||||||
|
@ -114,7 +114,7 @@ void hex32ToStr_op( uint32_t in, char* out, uint8_t op );
|
|||||||
void revsStr ( char* in );
|
void revsStr ( char* in );
|
||||||
uint16_t lenStr ( char* in );
|
uint16_t lenStr ( char* in );
|
||||||
int16_t eqStr ( char* str1, char* str2 ); // Returns -1 if identical, last character of str1 comparison (0 if str1 is like str2)
|
int16_t eqStr ( char* str1, char* str2 ); // Returns -1 if identical, last character of str1 comparison (0 if str1 is like str2)
|
||||||
int decToInt ( char* in ); // Returns the int representation of a string
|
int numToInt ( char* in ); // Returns the int representation of a string
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -221,6 +221,7 @@ Guide_TM( 0 ) = { 1, 0x00, 0x01, 0x73, 0 };
|
|||||||
Guide_TM( 1 ) = { 1, 0x00, 0x01, 0x73, 1, 0x00, 0x01, 0x75, 0 };
|
Guide_TM( 1 ) = { 1, 0x00, 0x01, 0x73, 1, 0x00, 0x01, 0x75, 0 };
|
||||||
Guide_TM( 2 ) = { 2, 0x00, 0x01, 0x73, 0x00, 0x01, 0x74, 0 };
|
Guide_TM( 2 ) = { 2, 0x00, 0x01, 0x73, 0x00, 0x01, 0x74, 0 };
|
||||||
Guide_TM( 3 ) = { 1, 0x00, 0x01, 0x76, 0 };
|
Guide_TM( 3 ) = { 1, 0x00, 0x01, 0x76, 0 };
|
||||||
|
Guide_TM( 4 ) = { 1, 0x00, 0x01, 0x77, 0 };
|
||||||
|
|
||||||
|
|
||||||
// -- Trigger Macro List
|
// -- Trigger Macro List
|
||||||
@ -235,6 +236,7 @@ TriggerMacro TriggerMacroList[] = {
|
|||||||
Define_TM( 1, 1 ),
|
Define_TM( 1, 1 ),
|
||||||
Define_TM( 2, 2 ),
|
Define_TM( 2, 2 ),
|
||||||
Define_TM( 3, 3 ),
|
Define_TM( 3, 3 ),
|
||||||
|
Define_TM( 4, 0 ),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -379,7 +381,7 @@ Define_TL( default, 0x73 ) = { 3, 0, 1, 2 };
|
|||||||
Define_TL( default, 0x74 ) = { 1, 2 };
|
Define_TL( default, 0x74 ) = { 1, 2 };
|
||||||
Define_TL( default, 0x75 ) = { 1, 1 };
|
Define_TL( default, 0x75 ) = { 1, 1 };
|
||||||
Define_TL( default, 0x76 ) = { 1, 3 };
|
Define_TL( default, 0x76 ) = { 1, 3 };
|
||||||
Define_TL( default, 0x77 ) = { 0 };
|
Define_TL( default, 0x77 ) = { 1, 4 };
|
||||||
Define_TL( default, 0x78 ) = { 0 };
|
Define_TL( default, 0x78 ) = { 0 };
|
||||||
Define_TL( default, 0x79 ) = { 0 };
|
Define_TL( default, 0x79 ) = { 0 };
|
||||||
Define_TL( default, 0x7A ) = { 0 };
|
Define_TL( default, 0x7A ) = { 0 };
|
||||||
|
@ -784,7 +784,7 @@ void cliFunc_capSelect( char* args )
|
|||||||
// Keyboard Capability
|
// Keyboard Capability
|
||||||
case 'K':
|
case 'K':
|
||||||
// Determine capability index
|
// Determine capability index
|
||||||
cap = decToInt( &arg1Ptr[1] );
|
cap = numToInt( &arg1Ptr[1] );
|
||||||
|
|
||||||
// Lookup the number of args
|
// Lookup the number of args
|
||||||
totalArgs += CapabilitiesList[ cap ].argCount;
|
totalArgs += CapabilitiesList[ cap ].argCount;
|
||||||
@ -793,7 +793,7 @@ void cliFunc_capSelect( char* args )
|
|||||||
|
|
||||||
// Because allocating memory isn't doable, and the argument count is arbitrary
|
// Because allocating memory isn't doable, and the argument count is arbitrary
|
||||||
// The argument pointer is repurposed as the argument list (much smaller anyways)
|
// The argument pointer is repurposed as the argument list (much smaller anyways)
|
||||||
argSet[ argSetCount++ ] = (uint8_t)decToInt( arg1Ptr );
|
argSet[ argSetCount++ ] = (uint8_t)numToInt( arg1Ptr );
|
||||||
|
|
||||||
// Once all the arguments are prepared, call the keyboard capability function
|
// Once all the arguments are prepared, call the keyboard capability function
|
||||||
if ( argSetCount == totalArgs )
|
if ( argSetCount == totalArgs )
|
||||||
@ -838,7 +838,7 @@ void cliFunc_keyHold( char* args )
|
|||||||
{
|
{
|
||||||
// Scancode
|
// Scancode
|
||||||
case 'S':
|
case 'S':
|
||||||
Macro_keyState( (uint8_t)decToInt( &arg1Ptr[1] ), 0x02 ); // Hold scancode
|
Macro_keyState( (uint8_t)numToInt( &arg1Ptr[1] ), 0x02 ); // Hold scancode
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -866,7 +866,7 @@ void cliFunc_keyPress( char* args )
|
|||||||
{
|
{
|
||||||
// Scancode
|
// Scancode
|
||||||
case 'S':
|
case 'S':
|
||||||
Macro_keyState( (uint8_t)decToInt( &arg1Ptr[1] ), 0x01 ); // Press scancode
|
Macro_keyState( (uint8_t)numToInt( &arg1Ptr[1] ), 0x01 ); // Press scancode
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -894,7 +894,7 @@ void cliFunc_keyRelease( char* args )
|
|||||||
{
|
{
|
||||||
// Scancode
|
// Scancode
|
||||||
case 'S':
|
case 'S':
|
||||||
Macro_keyState( (uint8_t)decToInt( &arg1Ptr[1] ), 0x03 ); // Release scancode
|
Macro_keyState( (uint8_t)numToInt( &arg1Ptr[1] ), 0x03 ); // Release scancode
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -956,11 +956,11 @@ void cliFunc_layerState( char* args )
|
|||||||
if ( arg1Ptr[0] != 'L' )
|
if ( arg1Ptr[0] != 'L' )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
arg1 = (uint8_t)decToInt( &arg1Ptr[1] );
|
arg1 = (uint8_t)numToInt( &arg1Ptr[1] );
|
||||||
break;
|
break;
|
||||||
// Second argument (e.g. 4)
|
// Second argument (e.g. 4)
|
||||||
case 1:
|
case 1:
|
||||||
arg2 = (uint8_t)decToInt( arg1Ptr );
|
arg2 = (uint8_t)numToInt( arg1Ptr );
|
||||||
|
|
||||||
// Display operation (to indicate that it worked)
|
// Display operation (to indicate that it worked)
|
||||||
print( NL );
|
print( NL );
|
||||||
@ -1223,11 +1223,11 @@ void cliFunc_macroShow( char* args )
|
|||||||
{
|
{
|
||||||
// Indexed Trigger Macro
|
// Indexed Trigger Macro
|
||||||
case 'T':
|
case 'T':
|
||||||
macroDebugShowTrigger( decToInt( &arg1Ptr[1] ) );
|
macroDebugShowTrigger( numToInt( &arg1Ptr[1] ) );
|
||||||
break;
|
break;
|
||||||
// Indexed Result Macro
|
// Indexed Result Macro
|
||||||
case 'R':
|
case 'R':
|
||||||
macroDebugShowResult( decToInt( &arg1Ptr[1] ) );
|
macroDebugShowResult( numToInt( &arg1Ptr[1] ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1242,7 +1242,7 @@ void cliFunc_macroStep( char* args )
|
|||||||
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
||||||
|
|
||||||
// Default to 1, if no argument given
|
// Default to 1, if no argument given
|
||||||
unsigned int count = (unsigned int)decToInt( arg1Ptr );
|
unsigned int count = (unsigned int)numToInt( arg1Ptr );
|
||||||
|
|
||||||
if ( count == 0 )
|
if ( count == 0 )
|
||||||
count = 1;
|
count = 1;
|
||||||
|
@ -276,7 +276,7 @@ void cliFunc_setKeys( char* args )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
// Add the USB code to be sent
|
// Add the USB code to be sent
|
||||||
USBKeys_ArrayCLI[USBKeys_SentCLI] = decToInt( arg1Ptr );
|
USBKeys_ArrayCLI[USBKeys_SentCLI] = numToInt( arg1Ptr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,6 +289,6 @@ void cliFunc_setMod( char* args )
|
|||||||
char* arg2Ptr;
|
char* arg2Ptr;
|
||||||
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
||||||
|
|
||||||
USBKeys_ModifiersCLI = decToInt( arg1Ptr );
|
USBKeys_ModifiersCLI = numToInt( arg1Ptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ void cliFunc_setKeys( char* args )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
// Add the USB code to be sent
|
// Add the USB code to be sent
|
||||||
USBKeys_ArrayCLI[USBKeys_SentCLI] = decToInt( arg1Ptr );
|
USBKeys_ArrayCLI[USBKeys_SentCLI] = numToInt( arg1Ptr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,6 +227,6 @@ void cliFunc_setMod( char* args )
|
|||||||
char* arg2Ptr;
|
char* arg2Ptr;
|
||||||
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
||||||
|
|
||||||
USBKeys_ModifiersCLI = decToInt( arg1Ptr );
|
USBKeys_ModifiersCLI = numToInt( arg1Ptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ void cliFunc_setKeys( char* args )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
// Add the USB code to be sent
|
// Add the USB code to be sent
|
||||||
USBKeys_ArrayCLI[USBKeys_SentCLI] = decToInt( arg1Ptr );
|
USBKeys_ArrayCLI[USBKeys_SentCLI] = numToInt( arg1Ptr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,6 +291,6 @@ void cliFunc_setMod( char* args )
|
|||||||
char* arg2Ptr;
|
char* arg2Ptr;
|
||||||
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
||||||
|
|
||||||
USBKeys_ModifiersCLI = decToInt( arg1Ptr );
|
USBKeys_ModifiersCLI = numToInt( arg1Ptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ void cliFunc_adc( char* args )
|
|||||||
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
||||||
|
|
||||||
// Set the ADC Channel
|
// Set the ADC Channel
|
||||||
uint8_t channel = decToInt( arg1Ptr );
|
uint8_t channel = numToInt( arg1Ptr );
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
ADC0_SC1A = channel;
|
ADC0_SC1A = channel;
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
@ -187,7 +187,7 @@ void cliFunc_adc( char* args )
|
|||||||
int displayedADC = 1; // Default to 1 read
|
int displayedADC = 1; // Default to 1 read
|
||||||
if ( arg1Ptr ) // If there is an argument, use that instead
|
if ( arg1Ptr ) // If there is an argument, use that instead
|
||||||
{
|
{
|
||||||
displayedADC = decToInt( arg1Ptr );
|
displayedADC = numToInt( arg1Ptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Poll ADC until it gets a value, making sure to serve interrupts on each attempt
|
// Poll ADC until it gets a value, making sure to serve interrupts on each attempt
|
||||||
@ -232,7 +232,7 @@ void cliFunc_adcInit( char* args )
|
|||||||
ADC0_SC3 = 0;
|
ADC0_SC3 = 0;
|
||||||
|
|
||||||
// Select bit resolution
|
// Select bit resolution
|
||||||
int bitResolution = decToInt( arg1Ptr );
|
int bitResolution = numToInt( arg1Ptr );
|
||||||
switch ( bitResolution )
|
switch ( bitResolution )
|
||||||
{
|
{
|
||||||
case 8: // 8-bit
|
case 8: // 8-bit
|
||||||
@ -260,7 +260,7 @@ void cliFunc_adcInit( char* args )
|
|||||||
|
|
||||||
// Select Vref
|
// Select Vref
|
||||||
CLI_argumentIsolation( arg2Ptr, &arg1Ptr, &arg2Ptr );
|
CLI_argumentIsolation( arg2Ptr, &arg1Ptr, &arg2Ptr );
|
||||||
int vRef = decToInt( arg1Ptr );
|
int vRef = numToInt( arg1Ptr );
|
||||||
switch ( vRef )
|
switch ( vRef )
|
||||||
{
|
{
|
||||||
case 0: // 1.2V internal Vref
|
case 0: // 1.2V internal Vref
|
||||||
@ -276,7 +276,7 @@ void cliFunc_adcInit( char* args )
|
|||||||
|
|
||||||
// Hardware averaging (and start calibration)
|
// Hardware averaging (and start calibration)
|
||||||
CLI_argumentIsolation( arg2Ptr, &arg1Ptr, &arg2Ptr );
|
CLI_argumentIsolation( arg2Ptr, &arg1Ptr, &arg2Ptr );
|
||||||
int hardwareAvg = decToInt( arg1Ptr );
|
int hardwareAvg = numToInt( arg1Ptr );
|
||||||
switch ( hardwareAvg )
|
switch ( hardwareAvg )
|
||||||
{
|
{
|
||||||
case 0: // No hardware averaging
|
case 0: // No hardware averaging
|
||||||
@ -342,7 +342,7 @@ void cliFunc_dac( char* args )
|
|||||||
char* arg2Ptr;
|
char* arg2Ptr;
|
||||||
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
||||||
|
|
||||||
int dacOut = decToInt( arg1Ptr );
|
int dacOut = numToInt( arg1Ptr );
|
||||||
|
|
||||||
// Make sure the value is between 0 and 4096, otherwise ignore
|
// Make sure the value is between 0 and 4096, otherwise ignore
|
||||||
if ( dacOut >= 0 && dacOut <= 4095 )
|
if ( dacOut >= 0 && dacOut <= 4095 )
|
||||||
@ -361,7 +361,7 @@ void cliFunc_dacVref( char* args )
|
|||||||
char* arg2Ptr;
|
char* arg2Ptr;
|
||||||
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
|
||||||
|
|
||||||
switch ( decToInt( arg1Ptr ) )
|
switch ( numToInt( arg1Ptr ) )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
DAC0_C0 = DAC_C0_DACEN; // 1.2V Vref is DACREF_1
|
DAC0_C0 = DAC_C0_DACEN; // 1.2V Vref is DACREF_1
|
||||||
|
@ -1027,7 +1027,7 @@ void cliFunc_senseDebug( char* args )
|
|||||||
// If there was an argument, use that instead
|
// If there was an argument, use that instead
|
||||||
if ( *arg1Ptr != '\0' )
|
if ( *arg1Ptr != '\0' )
|
||||||
{
|
{
|
||||||
senseDebugCount = decToInt( arg1Ptr );
|
senseDebugCount = numToInt( arg1Ptr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -444,7 +444,7 @@ void cliFunc_matrixState ( char* args )
|
|||||||
|
|
||||||
if ( arg1Ptr[0] != '\0' )
|
if ( arg1Ptr[0] != '\0' )
|
||||||
{
|
{
|
||||||
matrixDebugStateCounter = (uint16_t)decToInt( arg1Ptr );
|
matrixDebugStateCounter = (uint16_t)numToInt( arg1Ptr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user