GNU Radio 3.4.2 C++ API
|
00001 /* Include file to configure the RS codec for character symbols 00002 * 00003 * Copyright 2002, Phil Karn, KA9Q 00004 * May be used under the terms of the GNU General Public License (GPL) 00005 */ 00006 00007 #define DTYPE unsigned char 00008 00009 /* Reed-Solomon codec control block */ 00010 struct rs { 00011 unsigned int mm; /* Bits per symbol */ 00012 unsigned int nn; /* Symbols per block (= (1<<mm)-1) */ 00013 unsigned char *alpha_to; /* log lookup table */ 00014 unsigned char *index_of; /* Antilog lookup table */ 00015 unsigned char *genpoly; /* Generator polynomial */ 00016 unsigned int nroots; /* Number of generator roots = number of parity symbols */ 00017 unsigned char fcr; /* First consecutive root, index form */ 00018 unsigned char prim; /* Primitive element, index form */ 00019 unsigned char iprim; /* prim-th root of 1, index form */ 00020 }; 00021 00022 static inline int modnn(struct rs *rs,int x){ 00023 while (x >= rs->nn) { 00024 x -= rs->nn; 00025 x = (x >> rs->mm) + (x & rs->nn); 00026 } 00027 return x; 00028 } 00029 #define MODNN(x) modnn(rs,x) 00030 00031 #define MM (rs->mm) 00032 #define NN (rs->nn) 00033 #define ALPHA_TO (rs->alpha_to) 00034 #define INDEX_OF (rs->index_of) 00035 #define GENPOLY (rs->genpoly) 00036 #define NROOTS (rs->nroots) 00037 #define FCR (rs->fcr) 00038 #define PRIM (rs->prim) 00039 #define IPRIM (rs->iprim) 00040 #define A0 (NN) 00041 00042 #define ENCODE_RS encode_rs_char 00043 #define DECODE_RS decode_rs_char 00044 #define INIT_RS init_rs_char 00045 #define FREE_RS free_rs_char 00046 00047 void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity); 00048 int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras); 00049 void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned int fcr, 00050 unsigned int prim,unsigned int nroots); 00051 void FREE_RS(void *p); 00052 00053 00054 00055 00056