altos: Remove unused ao_adc_get from ao_adc_stm.c
[fw/altos] / ao-tools / lib / ao-hex.c
index 5cfc63c1347e999e70b7dd2da2e4c497b33925f1..73f3d7bed61dde5534fe03631ff62e4b563f49c9 100644 (file)
@@ -113,9 +113,9 @@ ao_hex_read_record(struct ao_hex_input *input)
        struct ao_hex_record *record = NULL;
        enum ao_hex_read_state state = read_marker;
        char c;
-       int nhexbytes;
-       uint32_t hex;
-       uint32_t ndata;
+       int nhexbytes = 0;
+       uint32_t hex = 0;
+       uint32_t ndata = 0;
        uint8_t checksum;
 
        while (state != read_done) {
@@ -294,7 +294,7 @@ load_symbols(struct ao_hex_file *hex,
        struct ao_sym           *symbol;
        int                     num_symbols = 0;
        int                     size_symbols = 0;
-       
+
        extended_addr = 0;
        for (i = 0; i < hex->nrecord; i++) {
                record = hex->records[i];
@@ -451,6 +451,31 @@ ao_hex_image_free(struct ao_hex_image *image)
        free(image);
 }
 
+static uint32_t min(uint32_t a, uint32_t b) { return a < b ? a : b; }
+static uint32_t max(uint32_t a, uint32_t b) { return a > b ? a : b; }
+
+struct ao_hex_image *
+ao_hex_image_cat(struct ao_hex_image *a, struct ao_hex_image *b)
+{
+       struct ao_hex_image     *n;
+       uint32_t                base, bound;
+       uint32_t                length;
+
+       base = min(a->address, b->address);
+       bound = max(a->address + a->length, b->address + b->length);
+       length = bound - base;
+
+       n = calloc (sizeof (struct ao_hex_image) + length, 1);
+       if (!n)
+               return NULL;
+       n->address = base;
+       n->length = length;
+       memset(n->data, 0xff, length);
+       memcpy(n->data + a->address - n->address, a->data, a->length);
+       memcpy(n->data + b->address - n->address, b->data, b->length);
+       return n;
+}
+
 int
 ao_hex_image_equal(struct ao_hex_image *a, struct ao_hex_image *b)
 {
@@ -471,7 +496,7 @@ ao_hex_load(char *filename, struct ao_sym **symbols, int *num_symbolsp)
        file = fopen (filename, "r");
        if (!file)
                return NULL;
-       
+
        hex_file = ao_hex_file_read(file, filename);
        fclose(file);
        if (!hex_file)
@@ -549,7 +574,7 @@ ao_hex_file_create(struct ao_hex_image *image, struct ao_sym *symbols, int num_s
        ao_hex_record_set_checksum(record);
 
        hex_file->records[nrecord++] = record;
-       
+
        /* Add the symbols
         */
 
@@ -616,7 +641,7 @@ ao_hex_save(FILE *file, struct ao_hex_image *image,
                        goto write_failed;
        }
        ret = true;
-       
+
        if (fflush(file) != 0)
                ret = false;
 write_failed: