From 1f9c51e5df300c1b546cb939e4391691bbe0128c Mon Sep 17 00:00:00 2001 From: Hugo Villeneuve Date: Sun, 26 Jan 2014 17:52:21 -0500 Subject: [PATCH] Refactor hex loading code Merged two identical code portions that validated the checksum. Also added better debug messages. --- src/common/hexfile.c | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/common/hexfile.c b/src/common/hexfile.c index 80a0aac..a84c117 100644 --- a/src/common/hexfile.c +++ b/src/common/hexfile.c @@ -140,36 +140,35 @@ LoadHexFile(const char *filename) i += 2; Checksum += RecType; - if (RecType == 1) { - Checksum += Ascii2Hex(&line[i], 2); - Checksum &= 0x000000FF; - - if (Checksum) { - log_err("hexfile invalid format"); - goto close_file; - } else { - /* OK */ - goto close_file; + if (RecType == 0) { + for (j = 0; j < RecLength; j++) { + Data = Ascii2Hex(&line[i], 2); + memory_write8(PGM_MEM_ID, + (unsigned int)(LoadOffset + j), + (unsigned char)Data); + i += 2; + Checksum += Data; } } - for (j = 0; j < RecLength; j++) { - Data = Ascii2Hex(&line[i], 2); - memory_write8(PGM_MEM_ID, - (unsigned int)(LoadOffset + j), - (unsigned char)Data); - i += 2; - Checksum += Data; - } - - RecType = Ascii2Hex(&line[i], 2); - Checksum += RecType; + /* Read and add checksum value */ + Checksum += Ascii2Hex(&line[i], 2); Checksum &= 0x000000FF; + /* Make sure line checksum is valid */ if (Checksum) { log_err("hexfile checksum mismatch"); goto close_file; } + + if (RecType == 0) { + log_debug("hex record: data"); + } else if (RecType == 1) { + log_debug("hex record: End Of File"); + goto close_file; + } else { + log_warn("hex record: Unsupported ($%02X)", RecType); + } } close_file: -- 2.20.1