Refactor hex loading code
authorHugo Villeneuve <hugo@hugovil.com>
Sun, 26 Jan 2014 22:52:21 +0000 (17:52 -0500)
committerHugo Villeneuve <hugo@hugovil.com>
Sun, 26 Jan 2014 22:52:21 +0000 (17:52 -0500)
Merged two identical code portions that validated the checksum.

Also added better debug messages.

src/common/hexfile.c

index 80a0aac..a84c117 100644 (file)
@@ -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: