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.

pull/1469/head
Dean Camera 12 years ago
parent 961da384f9
commit 7b5b8f199f

@ -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)
* *
* \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)
{ {
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)
} }
/* 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 */

Loading…
Cancel
Save