GNU Radio 3.6.5 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 #include <gr_core_api.h> 00010 00011 /* Reed-Solomon codec control block */ 00012 struct rs { 00013 unsigned int mm; /* Bits per symbol */ 00014 unsigned int nn; /* Symbols per block (= (1<<mm)-1) */ 00015 unsigned char *alpha_to; /* log lookup table */ 00016 unsigned char *index_of; /* Antilog lookup table */ 00017 unsigned char *genpoly; /* Generator polynomial */ 00018 unsigned int nroots; /* Number of generator roots = number of parity symbols */ 00019 unsigned char fcr; /* First consecutive root, index form */ 00020 unsigned char prim; /* Primitive element, index form */ 00021 unsigned char iprim; /* prim-th root of 1, index form */ 00022 }; 00023 00024 static inline unsigned int modnn(struct rs *rs, unsigned int x){ 00025 while (x >= rs->nn) { 00026 x -= rs->nn; 00027 x = (x >> rs->mm) + (x & rs->nn); 00028 } 00029 return x; 00030 } 00031 #define MODNN(x) modnn(rs,x) 00032 00033 #define MM (rs->mm) 00034 #define NN (rs->nn) 00035 #define ALPHA_TO (rs->alpha_to) 00036 #define INDEX_OF (rs->index_of) 00037 #define GENPOLY (rs->genpoly) 00038 #define NROOTS (rs->nroots) 00039 #define FCR (rs->fcr) 00040 #define PRIM (rs->prim) 00041 #define IPRIM (rs->iprim) 00042 #define A0 (NN) 00043 00044 #define ENCODE_RS encode_rs_char 00045 #define DECODE_RS decode_rs_char 00046 #define INIT_RS init_rs_char 00047 #define FREE_RS free_rs_char 00048 00049 GR_CORE_API void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity); 00050 GR_CORE_API int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras); 00051 GR_CORE_API void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned int fcr, 00052 unsigned int prim,unsigned int nroots); 00053 GR_CORE_API void FREE_RS(void *p); 00054 00055 00056 00057