Initial public release.
This commit is contained in:
parent
7b169e8116
commit
dac4af8d25
255 changed files with 68595 additions and 2 deletions
254
2020TPCApp1.cydsn/COMM/COMM_Console_Util.c
Normal file
254
2020TPCApp1.cydsn/COMM/COMM_Console_Util.c
Normal file
|
@ -0,0 +1,254 @@
|
|||
/** \file
|
||||
* \brief This file implements utility functions used by the command interpreter.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \ingroup CONSOLE
|
||||
*/
|
||||
|
||||
/* Include Files */
|
||||
#include "KTag.h"
|
||||
|
||||
#if (CONFIG__FEATURE_COMM_CONSOLE == CONFIG__FEATURE_ENABLED)
|
||||
|
||||
/* Local Definitions and Constants */
|
||||
|
||||
/* Public Variables */
|
||||
|
||||
/* Private Variables */
|
||||
|
||||
/* Private Function Prototypes */
|
||||
|
||||
/* Public Functions */
|
||||
|
||||
//! Find the start location of the nth parameter in the buffer.
|
||||
/*!
|
||||
* \note The command itself is parameter 0.
|
||||
*/
|
||||
COMM_Console_Parameter_Result_T COMM_Console_FindNthParameter(const char * const buffer, const uint8_t parameterNumber, const char ** parameterLocation)
|
||||
{
|
||||
uint32_t buffer_index = 0;
|
||||
uint32_t parameter_index = 0;
|
||||
COMM_Console_Parameter_Result_T result = COMM_CONSOLE_PARAMETER_RESULT_SUCCESS;
|
||||
|
||||
while (parameterNumber != parameter_index)
|
||||
{
|
||||
if (buffer[buffer_index] == COMM_CONSOLE_PARAMETER_DELIMITER)
|
||||
{
|
||||
parameter_index++;
|
||||
}
|
||||
else if (buffer[buffer_index] == COMM_CONSOLE_END_OF_MESSAGE)
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
break;
|
||||
}
|
||||
else if (buffer[buffer_index] == COMM_CONSOLE_STRING_TERMINATOR)
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
break;
|
||||
}
|
||||
buffer_index++;
|
||||
}
|
||||
|
||||
if (result == COMM_CONSOLE_PARAMETER_RESULT_SUCCESS)
|
||||
{
|
||||
*parameterLocation = &buffer[buffer_index];
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
COMM_Console_Parameter_Result_T COMM_Console_DecodeParameterUInt8(const char * const buffer, uint8_t * const parameterUInt8)
|
||||
{
|
||||
uint8_t value = 0;
|
||||
COMM_Console_Parameter_Result_T result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
|
||||
// Strings containing uint8s range from "0" to "255". The large number has three characters.
|
||||
uint_fast16_t MAX_CHARACTERS = 3;
|
||||
uint_fast16_t index = 0;
|
||||
|
||||
while (index < (MAX_CHARACTERS + 1))
|
||||
{
|
||||
if ((buffer[index] >= '0') && (buffer[index] <= '9'))
|
||||
{
|
||||
value *= 10;
|
||||
value += buffer[index] - '0';
|
||||
index++;
|
||||
}
|
||||
else if ( (buffer[index] == COMM_CONSOLE_PARAMETER_DELIMITER) ||
|
||||
(buffer[index] == COMM_CONSOLE_STRING_TERMINATOR) ||
|
||||
(buffer[index] == COMM_CONSOLE_END_OF_MESSAGE) )
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_END;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (result == COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_END)
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_SUCCESS;
|
||||
*parameterUInt8 = value;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
COMM_Console_Parameter_Result_T COMM_Console_DecodeParameterUInt16(const char * const buffer, uint16_t * const parameterUInt16)
|
||||
{
|
||||
uint16_t value = 0;
|
||||
COMM_Console_Parameter_Result_T result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
|
||||
// Strings containing uint16s range from "0" to "65535". The large number has five characters.
|
||||
uint_fast16_t MAX_CHARACTERS = 5;
|
||||
uint_fast16_t index = 0;
|
||||
|
||||
while (index < (MAX_CHARACTERS + 1))
|
||||
{
|
||||
if ((buffer[index] >= '0') && (buffer[index] <= '9'))
|
||||
{
|
||||
value *= 10;
|
||||
value += buffer[index] - '0';
|
||||
index++;
|
||||
}
|
||||
else if ( (buffer[index] == COMM_CONSOLE_PARAMETER_DELIMITER) ||
|
||||
(buffer[index] == COMM_CONSOLE_STRING_TERMINATOR) ||
|
||||
(buffer[index] == COMM_CONSOLE_END_OF_MESSAGE) )
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_END;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (result == COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_END)
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_SUCCESS;
|
||||
*parameterUInt16 = value;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
COMM_Console_Parameter_Result_T COMM_Console_DecodeParameterInt32(const char * const buffer, int32_t * const parameterInt32)
|
||||
{
|
||||
int32_t value = 0;
|
||||
COMM_Console_Parameter_Result_T result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
bool is_negative = false;
|
||||
|
||||
// Strings containing int32s range from "-2147483648" to "2147483647". The negative number has eleven characters.
|
||||
uint_fast16_t MAX_CHARACTERS = 11;
|
||||
uint_fast16_t index = 0;
|
||||
|
||||
if (buffer[index] == '-')
|
||||
{
|
||||
is_negative = true;
|
||||
index++;
|
||||
}
|
||||
|
||||
while (index < (MAX_CHARACTERS + 1))
|
||||
{
|
||||
if ((buffer[index] >= '0') && (buffer[index] <= '9'))
|
||||
{
|
||||
value *= 10;
|
||||
value += buffer[index] - '0';
|
||||
index++;
|
||||
}
|
||||
else if ( (buffer[index] == COMM_CONSOLE_PARAMETER_DELIMITER) ||
|
||||
(buffer[index] == COMM_CONSOLE_STRING_TERMINATOR) ||
|
||||
(buffer[index] == COMM_CONSOLE_END_OF_MESSAGE) )
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_END;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_negative == true)
|
||||
{
|
||||
value *= -1;
|
||||
}
|
||||
|
||||
if (result == COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_END)
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_SUCCESS;
|
||||
*parameterInt32 = value;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
COMM_Console_Parameter_Result_T COMM_Console_DecodeParameterUInt32(const char * const buffer, uint32_t * const parameterUInt32)
|
||||
{
|
||||
uint32_t value = 0;
|
||||
COMM_Console_Parameter_Result_T result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
|
||||
// Strings containing uint32s range from "0" to "4294967296". The large number has ten characters.
|
||||
uint_fast16_t MAX_CHARACTERS = 10;
|
||||
uint_fast16_t index = 0;
|
||||
|
||||
while (index < (MAX_CHARACTERS + 1))
|
||||
{
|
||||
if ((buffer[index] >= '0') && (buffer[index] <= '9'))
|
||||
{
|
||||
value *= 10;
|
||||
value += buffer[index] - '0';
|
||||
index++;
|
||||
}
|
||||
else if ( (buffer[index] == COMM_CONSOLE_PARAMETER_DELIMITER) ||
|
||||
(buffer[index] == COMM_CONSOLE_STRING_TERMINATOR) ||
|
||||
(buffer[index] == COMM_CONSOLE_END_OF_MESSAGE) )
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_END;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (result == COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_END)
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_SUCCESS;
|
||||
*parameterUInt32 = value;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
COMM_Console_Parameter_Result_T COMM_Console_DecodeHexParameterUInt64(const char * const buffer, uint64_t * const parameterUInt64)
|
||||
{
|
||||
COMM_Console_Parameter_Result_T result = COMM_CONSOLE_PARAMETER_RESULT_SUCCESS;
|
||||
struct _reent context;
|
||||
|
||||
context._errno = 0;
|
||||
|
||||
*parameterUInt64 = _strtoull_r(&context, buffer, NULL, 16);
|
||||
|
||||
if (context._errno != 0)
|
||||
{
|
||||
result = COMM_CONSOLE_PARAMETER_RESULT_PARAMETER_ERROR;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Private Functions */
|
||||
|
||||
#endif // (CONFIG__FEATURE_COMM_CONSOLE == CONFIG__FEATURE_ENABLED)
|
Loading…
Add table
Add a link
Reference in a new issue