Skip to content
Snippets Groups Projects
Commit 7b5b8f19 authored by Dean Camera's avatar Dean Camera
Browse files

Tighten up Printer bootloader implementation; fold the IsHEX() function logic...

Tighten up Printer bootloader implementation; fold the IsHEX() function logic into HexToDecimal() and remove redundant state machine state logic to save space in the compiled binary.
parent 961da384
No related branches found
No related tags found
No related merge requests found
...@@ -133,21 +133,6 @@ void Application_Jump_Check(void) ...@@ -133,21 +133,6 @@ void Application_Jump_Check(void)
} }
} }
/**
* Determines if a given input byte of data is an ASCII encoded HEX value.
*
* \note Input HEX bytes are expected to be in uppercase only.
*
* \param[in] Byte ASCII byte of data to check
*
* \return Boolean \c true if the input data is ASCII encoded HEX, \c false otherwise.
*/
static bool IsHex(const char Byte)
{
return ((Byte >= 'A') && (Byte <= 'F')) ||
((Byte >= '0') && (Byte <= '9'));
}
/** /**
* Converts a given input byte of data from an ASCII encoded HEX value to an integer value. * Converts a given input byte of data from an ASCII encoded HEX value to an integer value.
* *
...@@ -155,16 +140,17 @@ static bool IsHex(const char Byte) ...@@ -155,16 +140,17 @@ static bool IsHex(const char Byte)
* *
* \param[in] Byte ASCII byte of data to convert * \param[in] Byte ASCII byte of data to convert
* *
* \return Integer converted value of the input ASCII encoded HEX byte of data. * \return Integer converted value of the input ASCII encoded HEX byte of data, or -1 if the
* input is not valid ASCII encoded HEX.
*/ */
static uint8_t HexToDecimal(const char Byte) static int8_t HexToDecimal(const char Byte)
{ {
if ((Byte >= 'A') && (Byte <= 'F')) if ((Byte >= 'A') && (Byte <= 'F'))
return (10 + (Byte - 'A')); return (10 + (Byte - 'A'));
else if ((Byte >= '0') && (Byte <= '9')) else if ((Byte >= '0') && (Byte <= '9'))
return (Byte - '0'); return (Byte - '0');
return 0; return -1;
} }
/** /**
...@@ -180,7 +166,6 @@ static void ParseIntelHEXByte(const char ReadCharacter) ...@@ -180,7 +166,6 @@ static void ParseIntelHEXByte(const char ReadCharacter)
{ {
HEXParser.Checksum = 0; HEXParser.Checksum = 0;
HEXParser.CurrAddress = HEXParser.CurrBaseAddress; HEXParser.CurrAddress = HEXParser.CurrBaseAddress;
HEXParser.ParserState = HEX_PARSE_STATE_WAIT_LINE;
HEXParser.ReadMSB = false; HEXParser.ReadMSB = false;
/* ASCII ':' indicates the start of a new HEX record */ /* ASCII ':' indicates the start of a new HEX record */
...@@ -191,11 +176,12 @@ static void ParseIntelHEXByte(const char ReadCharacter) ...@@ -191,11 +176,12 @@ static void ParseIntelHEXByte(const char ReadCharacter)
} }
/* Only allow ASCII HEX encoded digits, ignore all other characters */ /* Only allow ASCII HEX encoded digits, ignore all other characters */
if (!IsHex(ReadCharacter)) int8_t ReadCharacterDec = HexToDecimal(ReadCharacter);
if (ReadCharacterDec < 0)
return; return;
/* Read and convert the next nibble of data from the current character */ /* Read and convert the next nibble of data from the current character */
HEXParser.Data = (HEXParser.Data << 4) | HexToDecimal(ReadCharacter); HEXParser.Data = (HEXParser.Data << 4) | ReadCharacterDec;
HEXParser.ReadMSB = !HEXParser.ReadMSB; HEXParser.ReadMSB = !HEXParser.ReadMSB;
/* Only process further when a full byte (two nibbles) have been read */ /* Only process further when a full byte (two nibbles) have been read */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment