File: gencrc.c

package info (click to toggle)
rtklib 2.4.3%2Bdfsg1-2.1
  • links: PTS
  • area: main
  • in suites: bullseye
  • size: 41,796 kB
  • sloc: cpp: 51,592; ansic: 50,584; fortran: 987; makefile: 861; sh: 45
file content (77 lines) | stat: -rw-r--r-- 2,189 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*------------------------------------------------------------------------------
* gencrc.c : generate crc table
*
*          Copyright (C) 2013 by T.TAKASU, All rights reserved.
*
* version : $Revision:$ $Date:$
* history : 2013/02/28 1.0 new
*-----------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>

static const char rcsid[]="$Id:$";

#define POLYCRC16   0x1021u     /* CRC16  polynomial for BINEX,NVS */
#define POLYCRC24Q  0x1864CFBu  /* CRC24Q polynomial for SBAS  */

/* generate crc-16 parity table -----------------------------------------------*/
static void gen_crc16(FILE *fp)
{
    unsigned short crcs[256]={0};
    int i,j;
    
    for (i=0;i<256;i++) {
        crcs[i]=(unsigned short)i<<8;
        for (j=0;j<8;j++) {
            if (crcs[i]&0x8000) crcs[i]=(crcs[i]<<1)^POLYCRC16;
            else crcs[i]<<=1;
        }
    }
    fprintf(fp,"static const unsigned short tbl_CRC16[]={\n");
    
    for (i=0;i<32;i++) {
        fprintf(fp,"    ");
        for (j=0;j<8;j++) {
            fprintf(fp,"0x%04X%s",crcs[j+i*8],i==31&&j==7?"":",");
        }
        fprintf(fp,"\n");
    }
    fprintf(fp,"};\n");
}
/* generate crc-24q parity table ---------------------------------------------*/
static void gen_crc24(FILE *fp)
{
    unsigned int crcs[256]={0};
    int i,j;
    
    for (i=0;i<256;i++) {
        crcs[i]=(unsigned int)i<<16;
        for (j=0;j<8;j++) if ((crcs[i]<<=1)&0x1000000) crcs[i]^=POLYCRC24Q;
    }
    fprintf(fp,"static const unsigned int tbl_CRC24Q[]={\n");
    
    for (i=0;i<32;i++) {
        fprintf(fp,"    ");
        for (j=0;j<8;j++) {
            fprintf(fp,"0x%06X%s",crcs[j+i*8],i==31&&j==7?"":",");
        }
        fprintf(fp,"\n");
    }
    fprintf(fp,"};\n");
}
/* main ----------------------------------------------------------------------*/
int main(int argc, char **argv)
{
    FILE *fp=stdout;
    int i,crc=0;
    
    for (i=1;i<argc;i++) {
        if      (!strcmp(argv[i],"-16")) crc=0;
        else if (!strcmp(argv[i],"-24")) crc=1;
    }
    switch (crc) {
        case 0: gen_crc16(fp); break;
        case 1: gen_crc24(fp); break;
    }
    return 0;
}