util: host program to generate ecc test patterns
[keystone-rtos/ibl.git] / src / util / ecc-test / ecc-pattern.c
1 /* ecc-pattern.c: generate ECC test patterns */
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 int main(int argc, const char* argv[])
17 {
18     FILE* fp;
19     int i;
20     int index;
21     
22     block_size = eccBytesPerBlock();
23     ecc_size   = eccNumBytes();
24     printf("ECC block size = %d  ECC value size = %d\n", block_size, ecc_size);
25     if (block_size > sizeof(block) || ecc_size > sizeof(ecc_value) )
26     {
27         fprintf(stderr, "Error max block size = %d and max ecc value size =%d\n", sizeof(block), sizeof(ecc_value));
28         exit(2);
29     }
30     
31     fp = fopen("ecc-pattern.bin", "wb");
32     if (fp == NULL)
33     {
34         fprintf(stderr, "can't open pattern output file");
35         exit(2);
36     }
37     
38     /* start with all zeros */
39     memset(block, 0, block_size);
40     fwrite(block, 1, block_size, fp);
41     
42     /* each bit number in the first byte */
43     for (i=0; i < 8; i++)
44     {
45         block[0] = 1 << i;
46         fwrite(block, 1, block_size, fp);
47     }
49     /* first bit of each byte on a power of 2 */
50     block[0] = 0;
51     for (index = 1; index < block_size; index = index << 1)
52     {
53         block[index] = 1;
54         fwrite(block, 1, block_size, fp);
55         block[index] = 0;
56     }
57 }