A program to insert Valid User Code checksums

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
chris
Date:
Wed Oct 17 13:18:31 2012 +0000
Child:
1:4521a1b10591
Commit message:
First commit

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 17 13:18:31 2012 +0000
@@ -0,0 +1,78 @@
+#include "mbed.h"
+
+LocalFileSystem fs ("fs");
+DigitalOut led1(LED1);
+DigitalOut led4(LED4);
+
+int main() {
+
+    int ctr=32; // 32 because the fixed size of the vector table
+    
+    printf("File patcher\n");
+
+    FILE *f1 = fopen("/fs/file.unp","rb"); // read binary
+    FILE *f2 = fopen("/fs/file.pat","wb"); // write binary
+
+    if (f1 == NULL) {
+        printf("Cant open file for reading\n");
+        while (1) {
+            led1 = !led1;
+            wait(0.2);
+        }
+    }
+
+    else {
+
+        unsigned int vector [8]; // storage for the vector table
+        unsigned int sum = 0;    //
+
+        // read first 7 words (28 bytes) into an array
+        for (int i = 0; i < 8; i++) {
+            vector[i] = 0; // zero the vector location
+            for (int j = 0; j < 4; j++) {
+                char c = fgetc(f1);         // read char from file
+                vector[i]  |= (c << (8*j)); // shift to byte location
+            }
+            sum += vector[i]; // keep a running total
+        }
+
+
+        // calculate the 2's compliment, for vector[7]
+        vector[7] = (~sum) + 1;
+
+        for (int i = 0; i < 8; i++) {
+            printf("Vector[%d] = 0x%08x\n",i,vector[i]);
+        }
+
+        printf("Sum vector = 0x%08x\n",sum);
+
+
+        // write out patched vector table
+        // read first 7 words (28 bytes) into an array
+        for (int i = 0; i < 8; i++) {
+            for (int j = 0; j < 4; j++) {
+                char c = ( vector[i] >> (8*j)) & 0xFF;
+                fputc(c,f2);         // read char from file
+            }
+        }
+
+        // read in and write remaining bytes of source binary
+        while (!feof(f1)) {
+            char c = fgetc (f1);    // read char from file
+            fputc(c,f2);            // write byte to file
+            ctr++;
+        }
+
+    }
+
+    fclose(f1);
+    fclose(f2);
+
+    printf("Done! %d bytes processed\n",ctr);
+    while (1) {
+        led4 = !led4;
+        wait(0.2);
+    }
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Oct 17 13:18:31 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/737756e0b479
\ No newline at end of file