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