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.

Dean Camera 12 years ago
parent 961da384f9
commit 7b5b8f199f
  1. 28
      Bootloaders/Printer/BootloaderPrinter.c

@ -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