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;
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 }
34 if (argc != 2)
35 {
36 fprintf(stderr, "Error, need input data filename as only argument\n");
37 exit(2);
38 }
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 }
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;
76 for (i=0; i < ecc_size; i++)
77 {
78 printf("0x%2.2X ", ecc_value[i]);
79 }
80 printf("\n");
81 }