util: host program to generate ecc test patterns
[keystone-rtos/ibl.git] / src / util / ecc-test / ecc-test.c
1 /* ecc-test.c: generate ECC values for input data */
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <stdint.h>
8 #include "types.h"
9 #include "ecc/ecc.h"
11 uint8_t block[4096];
12 uint8_t ecc_value[64];
13 int block_size;
14 int ecc_size;
16 void print_ecc(void);
18 int main(int argc, const char* argv[])
19 {
20     FILE* fp;
21     int i;
22     int index;
23     int read_size;
24     
25     block_size = eccBytesPerBlock();
26     ecc_size   = eccNumBytes();
27     printf("ECC block size = %d  ECC value size = %d\n", block_size, ecc_size);
28     if (block_size > sizeof(block) || ecc_size > sizeof(ecc_value) )
29     {
30         fprintf(stderr, "Error max block size = %d and max ecc value size =%d\n", sizeof(block), sizeof(ecc_value));
31         exit(2);
32     }
33     
34     if (argc != 2)
35     {
36         fprintf(stderr, "Error, need input data filename as only argument\n");
37         exit(2);
38     }
39     
40     fp = fopen(argv[1], "rb");
41     if (fp == NULL)
42     {
43         fprintf(stderr, "can't open pattern input file %s", argv[1]);
44         exit(2);
45     }
46     
47     /* each bit number in the first byte */
48     for ( i=0; TRUE; i++)
49     {
50         block[0] = 1 << i;
51         read_size = fread(block, 1, block_size, fp);
52         if (feof(fp) && read_size == 0)
53         {
54             break;
55         }
56         if (ferror(fp)) 
57         { 
58             fprintf(stderr, "error reading from input file\n"); 
59             exit(2);
60         }
61         if (read_size != block_size)
62         {
63             fprintf(stderr, "ignoring extra %d bytes at end of input\n", read_size);
64             break;
65         }
66         eccComputeECC(block, ecc_value);
67         printf("block %6d: ", i);
68         print_ecc();
69     }
70 }
72 void print_ecc(void)
73 {
74     int i;
75     
76     for (i=0; i < ecc_size; i++)
77     {
78         printf("0x%2.2X ", ecc_value[i]);
79     }
80     printf("\n");
81 }