GNU Radio's SATNOGS Package
fec.h
Go to the documentation of this file.
1 /* User include file for libfec
2  * Copyright 2004, Phil Karn, KA9Q
3  * May be used under the terms of the GNU Lesser General Public License (LGPL)
4  */
5 
6 #ifndef _FEC_H_
7 #define _FEC_H_
8 
9 #include <satnogs/api.h>
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 /* r=1/2 k=7 convolutional encoder polynomials
15  * The NASA-DSN convention is to use V27POLYA inverted, then V27POLYB
16  * The CCSDS/NASA-GSFC convention is to use V27POLYB, then V27POLYA inverted
17  */
18 #define V27POLYA 0x6d
19 #define V27POLYB 0x4f
20 
21 SATNOGS_API void *create_viterbi27(int len);
22 SATNOGS_API void set_viterbi27_polynomial(int polys[2]);
23 SATNOGS_API int init_viterbi27(void *vp,int starting_state);
24 SATNOGS_API int update_viterbi27_blk(void *vp,unsigned char sym[],int npairs);
25 SATNOGS_API int chainback_viterbi27(void *vp, unsigned char *data,unsigned int nbits,unsigned int endstate);
26 SATNOGS_API int chainback_viterbi27_unpacked_trunc(void *p,unsigned char *data,unsigned int nbits);
27 SATNOGS_API void delete_viterbi27(void *vp);
28 
29 #ifdef __VEC__
30 SATNOGS_API void *create_viterbi27_av(int len);
31 SATNOGS_API void set_viterbi27_polynomial_av(int polys[2]);
32 SATNOGS_API int init_viterbi27_av(void *p,int starting_state);
33 SATNOGS_API int chainback_viterbi27_av(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
34 SATNOGS_API void delete_viterbi27_av(void *p);
35 SATNOGS_API int update_viterbi27_blk_av(void *p,unsigned char *syms,int nbits);
36 #endif
37 
38 #ifdef __i386__
39 SATNOGS_API void *create_viterbi27_mmx(int len);
40 SATNOGS_API void set_viterbi27_polynomial_mmx(int polys[2]);
41 SATNOGS_API int init_viterbi27_mmx(void *p,int starting_state);
42 SATNOGS_API int chainback_viterbi27_mmx(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
43 SATNOGS_API void delete_viterbi27_mmx(void *p);
44 SATNOGS_API int update_viterbi27_blk_mmx(void *p,unsigned char *syms,int nbits);
45 
46 SATNOGS_API void *create_viterbi27_sse(int len);
47 SATNOGS_API void set_viterbi27_polynomial_sse(int polys[2]);
48 SATNOGS_API int init_viterbi27_sse(void *p,int starting_state);
49 SATNOGS_API int chainback_viterbi27_sse(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
50 SATNOGS_API void delete_viterbi27_sse(void *p);
51 SATNOGS_API int update_viterbi27_blk_sse(void *p,unsigned char *syms,int nbits);
52 
53 SATNOGS_API void *create_viterbi27_sse2(int len);
54 SATNOGS_API void set_viterbi27_polynomial_sse2(int polys[2]);
55 SATNOGS_API int init_viterbi27_sse2(void *p,int starting_state);
56 SATNOGS_API int chainback_viterbi27_sse2(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
57 SATNOGS_API void delete_viterbi27_sse2(void *p);
58 SATNOGS_API int update_viterbi27_blk_sse2(void *p,unsigned char *syms,int nbits);
59 #endif
60 
61 SATNOGS_API void *create_viterbi27_port(int len);
63 SATNOGS_API int init_viterbi27_port(void *p,int starting_state);
64 SATNOGS_API int chainback_viterbi27_port(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
65 SATNOGS_API int chainback_viterbi27_port_unpacked_trunc(void *p,unsigned char *data,unsigned int nbits);
67 SATNOGS_API int update_viterbi27_blk_port(void *p,unsigned char *syms,int nbits);
68 
69 /* r=1/2 k=9 convolutional encoder polynomials */
70 #define V29POLYA 0x1af
71 #define V29POLYB 0x11d
72 
73 SATNOGS_API void *create_viterbi29(int len);
74 SATNOGS_API void set_viterbi29_polynomial(int polys[2]);
75 SATNOGS_API int init_viterbi29(void *vp,int starting_state);
76 SATNOGS_API int update_viterbi29_blk(void *vp,unsigned char syms[],int nbits);
77 SATNOGS_API int chainback_viterbi29(void *vp, unsigned char *data,unsigned int nbits,unsigned int endstate);
78 SATNOGS_API void delete_viterbi29(void *vp);
79 
80 #ifdef __VEC__
81 SATNOGS_API void *create_viterbi29_av(int len);
82 SATNOGS_API void set_viterbi29_polynomial_av(int polys[2]);
83 SATNOGS_API int init_viterbi29_av(void *p,int starting_state);
84 SATNOGS_API int chainback_viterbi29_av(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
85 SATNOGS_API void delete_viterbi29_av(void *p);
86 SATNOGS_API int update_viterbi29_blk_av(void *p,unsigned char *syms,int nbits);
87 #endif
88 
89 #ifdef __i386__
90 SATNOGS_API void *create_viterbi29_mmx(int len);
91 SATNOGS_API void set_viterbi29_polynomial_mmx(int polys[2]);
92 SATNOGS_API int init_viterbi29_mmx(void *p,int starting_state);
93 SATNOGS_API int chainback_viterbi29_mmx(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
94 SATNOGS_API void delete_viterbi29_mmx(void *p);
95 SATNOGS_API int update_viterbi29_blk_mmx(void *p,unsigned char *syms,int nbits);
96 
97 SATNOGS_API void *create_viterbi29_sse(int len);
98 SATNOGS_API void set_viterbi29_polynomial_sse(int polys[2]);
99 SATNOGS_API int init_viterbi29_sse(void *p,int starting_state);
100 SATNOGS_API int chainback_viterbi29_sse(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
101 SATNOGS_API void delete_viterbi29_sse(void *p);
102 SATNOGS_API int update_viterbi29_blk_sse(void *p,unsigned char *syms,int nbits);
103 
104 SATNOGS_API void *create_viterbi29_sse2(int len);
105 SATNOGS_API void set_viterbi29_polynomial_sse2(int polys[2]);
106 SATNOGS_API int init_viterbi29_sse2(void *p,int starting_state);
107 SATNOGS_API int chainback_viterbi29_sse2(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
108 SATNOGS_API void delete_viterbi29_sse2(void *p);
109 SATNOGS_API int update_viterbi29_blk_sse2(void *p,unsigned char *syms,int nbits);
110 #endif
111 
112 SATNOGS_API void *create_viterbi29_port(int len);
113 SATNOGS_API void set_viterbi29_polynomial_port(int polys[2]);
114 SATNOGS_API int init_viterbi29_port(void *p,int starting_state);
115 SATNOGS_API int chainback_viterbi29_port(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
116 SATNOGS_API void delete_viterbi29_port(void *p);
117 SATNOGS_API int update_viterbi29_blk_port(void *p,unsigned char *syms,int nbits);
118 
119 /* r=1/3 k=9 convolutional encoder polynomials */
120 #define V39POLYA 0x1ed
121 #define V39POLYB 0x19b
122 #define V39POLYC 0x127
123 
124 SATNOGS_API void *create_viterbi39(int len);
125 SATNOGS_API void set_viterbi39_polynomial(int polys[3]);
126 SATNOGS_API int init_viterbi39(void *vp,int starting_state);
127 SATNOGS_API int update_viterbi39_blk(void *vp,unsigned char syms[],int nbits);
128 SATNOGS_API int chainback_viterbi39(void *vp, unsigned char *data,unsigned int nbits,unsigned int endstate);
129 SATNOGS_API void delete_viterbi39(void *vp);
130 
131 #ifdef __VEC__
132 SATNOGS_API void *create_viterbi39_av(int len);
133 SATNOGS_API void set_viterbi39_polynomial_av(int polys[3]);
134 SATNOGS_API int init_viterbi39_av(void *p,int starting_state);
135 SATNOGS_API int chainback_viterbi39_av(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
136 SATNOGS_API void delete_viterbi39_av(void *p);
137 SATNOGS_API int update_viterbi39_blk_av(void *p,unsigned char *syms,int nbits);
138 #endif
139 
140 #ifdef __i386__
141 SATNOGS_API void *create_viterbi39_mmx(int len);
142 SATNOGS_API void set_viterbi39_polynomial_mmx(int polys[3]);
143 SATNOGS_API int init_viterbi39_mmx(void *p,int starting_state);
144 SATNOGS_API int chainback_viterbi39_mmx(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
145 SATNOGS_API void delete_viterbi39_mmx(void *p);
146 SATNOGS_API int update_viterbi39_blk_mmx(void *p,unsigned char *syms,int nbits);
147 
148 SATNOGS_API void *create_viterbi39_sse(int len);
149 SATNOGS_API void set_viterbi39_polynomial_sse(int polys[3]);
150 SATNOGS_API int init_viterbi39_sse(void *p,int starting_state);
151 SATNOGS_API int chainback_viterbi39_sse(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
152 SATNOGS_API void delete_viterbi39_sse(void *p);
153 SATNOGS_API int update_viterbi39_blk_sse(void *p,unsigned char *syms,int nbits);
154 
155 SATNOGS_API void *create_viterbi39_sse2(int len);
156 SATNOGS_API void set_viterbi39_polynomial_sse2(int polys[3]);
157 SATNOGS_API int init_viterbi39_sse2(void *p,int starting_state);
158 SATNOGS_API int chainback_viterbi39_sse2(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
159 SATNOGS_API void delete_viterbi39_sse2(void *p);
160 SATNOGS_API int update_viterbi39_blk_sse2(void *p,unsigned char *syms,int nbits);
161 #endif
162 
163 SATNOGS_API void *create_viterbi39_port(int len);
164 SATNOGS_API void set_viterbi39_polynomial_port(int polys[3]);
165 SATNOGS_API int init_viterbi39_port(void *p,int starting_state);
166 SATNOGS_API int chainback_viterbi39_port(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
167 SATNOGS_API void delete_viterbi39_port(void *p);
168 SATNOGS_API int update_viterbi39_blk_port(void *p,unsigned char *syms,int nbits);
169 
170 /* r=1/6 k=15 Cassini convolutional encoder polynomials without symbol inversion
171  * dfree = 56
172  * These bits may be left-right flipped from some textbook representations;
173  * here I have the bits entering the shift register from the right (low) end
174  *
175  * Some other spacecraft use the same code, but with the polynomials in a different order.
176  * E.g., Mars Pathfinder and STEREO swap POLYC and POLYD. All use alternate symbol inversion,
177  * so use set_viterbi615_polynomial() as appropriate.
178  */
179 #define V615POLYA 042631
180 #define V615POLYB 047245
181 #define V615POLYC 056507
182 #define V615POLYD 073363
183 #define V615POLYE 077267
184 #define V615POLYF 064537
185 
186 SATNOGS_API void *create_viterbi615(int len);
187 SATNOGS_API void set_viterbi615_polynomial(int polys[6]);
188 SATNOGS_API int init_viterbi615(void *vp,int starting_state);
189 SATNOGS_API int update_viterbi615_blk(void *vp,unsigned char *syms,int nbits);
190 SATNOGS_API int chainback_viterbi615(void *vp, unsigned char *data,unsigned int nbits,unsigned int endstate);
191 SATNOGS_API void delete_viterbi615(void *vp);
192 
193 #ifdef __VEC__
194 SATNOGS_API void *create_viterbi615_av(int len);
195 SATNOGS_API void set_viterbi615_polynomial_av(int polys[6]);
196 SATNOGS_API int init_viterbi615_av(void *p,int starting_state);
197 SATNOGS_API int chainback_viterbi615_av(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
198 SATNOGS_API void delete_viterbi615_av(void *p);
199 SATNOGS_API int update_viterbi615_blk_av(void *p,unsigned char *syms,int nbits);
200 #endif
201 
202 #ifdef __i386__
203 SATNOGS_API void *create_viterbi615_mmx(int len);
204 SATNOGS_API void set_viterbi615_polynomial_mmx(int polys[6]);
205 SATNOGS_API int init_viterbi615_mmx(void *p,int starting_state);
206 SATNOGS_API int chainback_viterbi615_mmx(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
207 SATNOGS_API void delete_viterbi615_mmx(void *p);
208 SATNOGS_API int update_viterbi615_blk_mmx(void *p,unsigned char *syms,int nbits);
209 
210 SATNOGS_API void *create_viterbi615_sse(int len);
211 SATNOGS_API void set_viterbi615_polynomial_sse(int polys[6]);
212 SATNOGS_API int init_viterbi615_sse(void *p,int starting_state);
213 SATNOGS_API int chainback_viterbi615_sse(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
214 SATNOGS_API void delete_viterbi615_sse(void *p);
215 SATNOGS_API int update_viterbi615_blk_sse(void *p,unsigned char *syms,int nbits);
216 
217 SATNOGS_API void *create_viterbi615_sse2(int len);
218 SATNOGS_API void set_viterbi615_polynomial_sse2(int polys[6]);
219 SATNOGS_API int init_viterbi615_sse2(void *p,int starting_state);
220 SATNOGS_API int chainback_viterbi615_sse2(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
221 SATNOGS_API void delete_viterbi615_sse2(void *p);
222 SATNOGS_API int update_viterbi615_blk_sse2(void *p,unsigned char *syms,int nbits);
223 #endif
224 
225 SATNOGS_API void *create_viterbi615_port(int len);
227 SATNOGS_API int init_viterbi615_port(void *p,int starting_state);
228 SATNOGS_API int chainback_viterbi615_port(void *p,unsigned char *data,unsigned int nbits,unsigned int endstate);
229 SATNOGS_API void delete_viterbi615_port(void *p);
230 SATNOGS_API int update_viterbi615_blk_port(void *p,unsigned char *syms,int nbits);
231 
232 /* General purpose RS codec, 8-bit symbols */
233 SATNOGS_API void encode_rs_char(void *rs,unsigned char *data,unsigned char *parity);
234 SATNOGS_API int decode_rs_char(void *rs,unsigned char *data,int *eras_pos,
235  int no_eras);
236 SATNOGS_API void *init_rs_char(int symsize,int gfpoly,
237  int fcr,int prim,int nroots,
238  int pad);
239 SATNOGS_API void free_rs_char(void *rs);
240 
241 /* General purpose RS codec, integer symbols */
242 SATNOGS_API void encode_rs_int(void *rs,int *data,int *parity);
243 SATNOGS_API int decode_rs_int(void *rs,int *data,int *eras_pos,int no_eras);
244 SATNOGS_API void *init_rs_int(int symsize,int gfpoly,int fcr,
245  int prim,int nroots,int pad);
246 SATNOGS_API void free_rs_int(void *rs);
247 
248 /* CCSDS standard (255,223) RS codec with conventional (*not* dual-basis)
249  * symbol representation
250  */
251 SATNOGS_API void encode_rs_8(unsigned char *data,unsigned char *parity,int pad);
252 SATNOGS_API int decode_rs_8(unsigned char *data,int *eras_pos,int no_eras,int pad);
253 
254 /* CCSDS standard (255,223) RS codec with dual-basis symbol representation */
255 SATNOGS_API void encode_rs_ccsds(unsigned char *data,unsigned char *parity,int pad);
256 SATNOGS_API int decode_rs_ccsds(unsigned char *data,int *eras_pos,int no_eras,int pad);
257 
258 /* Tables to map from conventional->dual (Taltab) and
259  * dual->conventional (Tal1tab) bases
260  */
261 extern unsigned char Taltab[],Tal1tab[];
262 
263 /* CPU SIMD instruction set available */
265 SATNOGS_API void find_cpu_mode(void); /* Call this once at startup to set Cpu_mode */
266 
267 /* Determine parity of argument: 1 = odd, 0 = even */
268 #if defined(__i386__) || defined(__x86_64__)
269 static inline int parityb(unsigned char x){
270  __asm__ __volatile__ ("test %1,%1;setpo %0" : "=q"(x) : "q" (x));
271  return x;
272 }
273 #else
274 void partab_init();
275 
276 static inline int parityb(unsigned char x){
277  extern unsigned char Partab[256];
278  extern int P_init;
279  if(!P_init){
280  partab_init();
281  }
282  return Partab[x];
283 }
284 #endif
285 
286 static inline int parity(int x){
287  /* Fold down to one byte */
288  x ^= (x >> 16);
289  x ^= (x >> 8);
290  return parityb(x);
291 }
292 
293 /* Useful utilities for simulation */
294 SATNOGS_API double normal_rand(double mean, double std_dev);
295 SATNOGS_API unsigned char addnoise(int sym,double amp,double gain,double offset,int clip);
296 
297 extern int Bitcnt[];
298 
299 /* Dot product functions */
300 SATNOGS_API void *initdp(signed short coeffs[],int len);
301 SATNOGS_API void freedp(void *dp);
302 SATNOGS_API long dotprod(void *dp,signed short a[]);
303 
304 SATNOGS_API void *initdp_port(signed short coeffs[],int len);
305 SATNOGS_API void freedp_port(void *dp);
306 SATNOGS_API long dotprod_port(void *dp,signed short a[]);
307 
308 #ifdef __i386__
309 SATNOGS_API void *initdp_mmx(signed short coeffs[],int len);
310 SATNOGS_API void freedp_mmx(void *dp);
311 SATNOGS_API long dotprod_mmx(void *dp,signed short a[]);
312 
313 SATNOGS_API void *initdp_sse(signed short coeffs[],int len);
314 SATNOGS_API void freedp_sse(void *dp);
315 SATNOGS_API long dotprod_sse(void *dp,signed short a[]);
316 
317 SATNOGS_API void *initdp_sse2(signed short coeffs[],int len);
318 SATNOGS_API void freedp_sse2(void *dp);
319 SATNOGS_API long dotprod_sse2(void *dp,signed short a[]);
320 #endif
321 
322 #ifdef __x86_64__
323 SATNOGS_API void *initdp_sse2(signed short coeffs[],int len);
324 SATNOGS_API void freedp_sse2(void *dp);
325 SATNOGS_API long dotprod_sse2(void *dp,signed short a[]);
326 #endif
327 
328 #ifdef __VEC__
329 SATNOGS_API void *initdp_av(signed short coeffs[],int len);
330 SATNOGS_API void freedp_av(void *dp);
331 SATNOGS_API long dotprod_av(void *dp,signed short a[]);
332 #endif
333 
334 /* Sum of squares - accepts signed shorts, produces unsigned long long */
335 SATNOGS_API unsigned long long sumsq(signed short *in,int cnt);
336 SATNOGS_API unsigned long long sumsq_port(signed short *in,int cnt);
337 
338 #ifdef __i386__
339 SATNOGS_API unsigned long long sumsq_mmx(signed short *in,int cnt);
340 SATNOGS_API unsigned long long sumsq_sse(signed short *in,int cnt);
341 SATNOGS_API unsigned long long sumsq_sse2(signed short *in,int cnt);
342 #endif
343 #ifdef __x86_64__
344 SATNOGS_API unsigned long long sumsq_sse2(signed short *in,int cnt);
345 #endif
346 #ifdef __VEC__
347 SATNOGS_API unsigned long long sumsq_av(signed short *in,int cnt);
348 #endif
349 
350 /* Low-level data structures and routines */
351 
352 SATNOGS_API int cpu_features(void);
353 
354 #ifdef __cplusplus
355 }
356 #endif
357 
358 #endif /* _FEC_H_ */
rs nroots
Definition: init_rs.h:97
SATNOGS_API int cpu_features(void)
SATNOGS_API int init_viterbi27(void *vp, int starting_state)
SATNOGS_API void set_viterbi615_polynomial_port(int polys[6])
SATNOGS_API int update_viterbi29_blk(void *vp, unsigned char syms[], int nbits)
Definition: rs-common.h:7
SATNOGS_API void encode_rs_char(void *rs, unsigned char *data, unsigned char *parity)
SATNOGS_API unsigned long long sumsq_port(signed short *in, int cnt)
SATNOGS_API int chainback_viterbi27_port_unpacked_trunc(void *p, unsigned char *data, unsigned int nbits)
SATNOGS_API void encode_rs_8(unsigned char *data, unsigned char *parity, int pad)
SATNOGS_API unsigned char addnoise(int sym, double amp, double gain, double offset, int clip)
SATNOGS_API void * create_viterbi39(int len)
SATNOGS_API int update_viterbi29_blk_port(void *p, unsigned char *syms, int nbits)
static int parityb(unsigned char x)
Definition: fec.h:276
SATNOGS_API void encode_rs_int(void *rs, int *data, int *parity)
SATNOGS_API void delete_viterbi39(void *vp)
Definition: fec.h:264
Definition: fec.h:264
SATNOGS_API int update_viterbi615_blk(void *vp, unsigned char *syms, int nbits)
SATNOGS_API int init_viterbi29(void *vp, int starting_state)
SATNOGS_API int chainback_viterbi27_unpacked_trunc(void *p, unsigned char *data, unsigned int nbits)
SATNOGS_API void set_viterbi39_polynomial_port(int polys[3])
void partab_init()
SATNOGS_API int update_viterbi27_blk(void *vp, unsigned char sym[], int npairs)
SATNOGS_API int init_viterbi39_port(void *p, int starting_state)
SATNOGS_API void * create_viterbi29(int len)
SATNOGS_API void delete_viterbi615(void *vp)
SATNOGS_API int init_viterbi615_port(void *p, int starting_state)
SATNOGS_API int decode_rs_int(void *rs, int *data, int *eras_pos, int no_eras)
SATNOGS_API void * initdp_port(signed short coeffs[], int len)
SATNOGS_API void freedp(void *dp)
SATNOGS_API int chainback_viterbi39_port(void *p, unsigned char *data, unsigned int nbits, unsigned int endstate)
SATNOGS_API void free_rs_int(void *rs)
unsigned char Tal1tab[]
SATNOGS_API void freedp_port(void *dp)
SATNOGS_API void * init_rs_int(int symsize, int gfpoly, int fcr, int prim, int nroots, int pad)
SATNOGS_API void * create_viterbi27(int len)
Definition: fec.h:264
SATNOGS_API int init_viterbi27_port(void *p, int starting_state)
unsigned char Taltab[]
SATNOGS_API int update_viterbi39_blk_port(void *p, unsigned char *syms, int nbits)
SATNOGS_API int chainback_viterbi39(void *vp, unsigned char *data, unsigned int nbits, unsigned int endstate)
SATNOGS_API void * create_viterbi615_port(int len)
SATNOGS_API void encode_rs_ccsds(unsigned char *data, unsigned char *parity, int pad)
SATNOGS_API void free_rs_char(void *rs)
SATNOGS_API void * create_viterbi615(int len)
rs pad
Definition: init_rs.h:43
SATNOGS_API void set_viterbi29_polynomial(int polys[2])
SATNOGS_API void set_viterbi615_polynomial(int polys[6])
SATNOGS_API long dotprod_port(void *dp, signed short a[])
SATNOGS_API int init_viterbi615(void *vp, int starting_state)
rs fcr
Definition: init_rs.h:95
SATNOGS_API int chainback_viterbi27(void *vp, unsigned char *data, unsigned int nbits, unsigned int endstate)
SATNOGS_API unsigned long long sumsq(signed short *in, int cnt)
SATNOGS_API int init_viterbi29_port(void *p, int starting_state)
cpu_mode
Definition: fec.h:264
rs prim
Definition: init_rs.h:96
enum cpu_mode Cpu_mode
SATNOGS_API void find_cpu_mode(void)
SATNOGS_API int update_viterbi27_blk_port(void *p, unsigned char *syms, int nbits)
SATNOGS_API void * create_viterbi29_port(int len)
SATNOGS_API int chainback_viterbi615_port(void *p, unsigned char *data, unsigned int nbits, unsigned int endstate)
SATNOGS_API void delete_viterbi29_port(void *p)
Definition: fec.h:264
SATNOGS_API int decode_rs_ccsds(unsigned char *data, int *eras_pos, int no_eras, int pad)
SATNOGS_API int chainback_viterbi615(void *vp, unsigned char *data, unsigned int nbits, unsigned int endstate)
static int parity(int x)
Definition: fec.h:286
SATNOGS_API void delete_viterbi29(void *vp)
SATNOGS_API int decode_rs_char(void *rs, unsigned char *data, int *eras_pos, int no_eras)
SATNOGS_API void delete_viterbi39_port(void *p)
SATNOGS_API int update_viterbi39_blk(void *vp, unsigned char syms[], int nbits)
SATNOGS_API void * init_rs_char(int symsize, int gfpoly, int fcr, int prim, int nroots, int pad)
SATNOGS_API void * create_viterbi39_port(int len)
SATNOGS_API void delete_viterbi27_port(void *p)
int Bitcnt[]
SATNOGS_API int chainback_viterbi27_port(void *p, unsigned char *data, unsigned int nbits, unsigned int endstate)
SATNOGS_API long dotprod(void *dp, signed short a[])
SATNOGS_API void * initdp(signed short coeffs[], int len)
SATNOGS_API void set_viterbi27_polynomial_port(int polys[2])
SATNOGS_API int update_viterbi615_blk_port(void *p, unsigned char *syms, int nbits)
SATNOGS_API void delete_viterbi615_port(void *p)
SATNOGS_API int init_viterbi39(void *vp, int starting_state)
SATNOGS_API int chainback_viterbi29(void *vp, unsigned char *data, unsigned int nbits, unsigned int endstate)
SATNOGS_API int chainback_viterbi29_port(void *p, unsigned char *data, unsigned int nbits, unsigned int endstate)
SATNOGS_API double normal_rand(double mean, double std_dev)
Definition: fec.h:264
SATNOGS_API void set_viterbi29_polynomial_port(int polys[2])
SATNOGS_API void set_viterbi27_polynomial(int polys[2])
SATNOGS_API int decode_rs_8(unsigned char *data, int *eras_pos, int no_eras, int pad)
SATNOGS_API void delete_viterbi27(void *vp)
#define SATNOGS_API
Definition: api.h:30
SATNOGS_API void set_viterbi39_polynomial(int polys[3])
Definition: fec.h:264
SATNOGS_API void * create_viterbi27_port(int len)