OSDN Git Service

[v2.0][SHELL][SRECORD] Invert checksum before check.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 8 Nov 2013 03:46:49 +0000 (12:46 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 8 Nov 2013 03:46:49 +0000 (12:46 +0900)
shell_strutl.c

index ef6bc26..a559348 100644 (file)
@@ -118,6 +118,7 @@ char str_shexheader(unsigned char *s, unsigned char *file)
     file[pp] = '\0';
     if(migrate_hex(&s[i]) == 0) return TERM_SRECERR;
     c = hex2byte(&s[i]);
+    sum = ~sum;
     if(c != sum) return TERM_SUMERR;
     return TERM_OK;
 }
@@ -161,6 +162,7 @@ char str_shex2bin(unsigned char *s, unsigned char *p, unsigned int *addr, unsign
         }
         if(migrate_hex(&s[i]) == 0) return TERM_SUMERR;
         c = hex2byte(&s[i]);
+        sum = ~sum;
         if(c != sum) return TERM_SUMERR;
         /*
          * OK!
@@ -168,13 +170,13 @@ char str_shex2bin(unsigned char *s, unsigned char *p, unsigned int *addr, unsign
     } else if(s[1] == '9') {
         if((s[2] != '0') || (s[3] != '3')) return TERM_SRECERR;
         for(i = 4; i < 10; i += 2)  if(migrate_hex(&s[i]) == 0) return TERM_SRECERR;
-        sum= 3;
+        sum = 3;
         h = hex2byte(&s[4]);
         l = hex2byte(&s[6]);
         c = hex2byte(&s[8]);
         *addr = (h << 8) | l;
         *len = 0;
-        sum = sum + h + l;
+        sum = ~(sum + h + l);
         if(c != sum) return TERM_SUMERR;
         return TERM_SRECEND;
     } else {
@@ -223,6 +225,7 @@ unsigned char str_bin2hex(unsigned char *s, unsigned char *p, unsigned int addr,
         bin2hex(&s[pp], c);
         pp += 2;
     }
+    sum = ~sum;
     bin2hex(&s[pp], sum);
     pp += 2;
     s[pp] = '\n';
@@ -252,6 +255,7 @@ unsigned char str_put_shexheader(unsigned char *s, char *filename)
         i += 2;
         pp++;
     }
+    sum = ~sum;
     bin2hex(&s[i], sum);
     s[i + 2] = '\n';
     s[i + 3] = '\0';
@@ -269,6 +273,7 @@ unsigned char str_put_shexfooter(unsigned char *s)
     s[3] = '3';
     sum = 3;
     for(pp = 4; pp < 8; pp++) s[pp] = '0';
+    sum = ~sum;
     bin2hex(&s[pp], sum);
 
     s[pp + 2] = '\n';