31 #error "NROOTS not defined" 35 #error "NN not defined" 39 #error "PAD not defined" 42 #if !defined(ALPHA_TO) 43 #error "ALPHA_TO not defined" 46 #if !defined(INDEX_OF) 47 #error "INDEX_OF not defined" 51 #error "MODNN not defined" 55 #error "FCR not defined" 59 #error "PRIM not defined" 63 #define NULL ((void*)0) 67 #define MIN(a, b) ((a) < (b) ? (a) : (b)) 89 for (i = 0; i <
NROOTS; i++)
92 for (j = 1; j <
NN -
PAD; j++) {
93 for (i = 0; i <
NROOTS; i++) {
104 for (i = 0; i <
NROOTS; i++) {
116 memset(&lambda[1], 0, NROOTS *
sizeof(lambda[0]));
122 for (i = 1; i < no_eras; i++) {
124 for (j = i + 1; j > 0; j--) {
136 for (i = 1; i <= no_eras; i++)
142 for (j = 1; j <= no_eras; j++)
144 reg[
j] =
MODNN(reg[j] + j);
154 if (count != no_eras) {
155 printf(
"count = %d no_eras = %d\n lambda(x) is WRONG\n", count, no_eras);
160 printf(
"\n Erasure positions as determined by roots of Eras Loc Poly:\n");
161 for (i = 0; i <
count; i++)
162 printf(
"%d ", loc[i]);
167 for (i = 0; i < NROOTS + 1; i++)
176 while (++r <= NROOTS) {
179 for (i = 0; i <
r; i++) {
180 if ((lambda[i] != 0) && (s[r - i - 1] !=
A0)) {
187 memmove(&b[1], b, NROOTS *
sizeof(b[0]));
192 for (i = 0; i <
NROOTS; i++) {
196 t[i + 1] = lambda[i + 1];
198 if (2 * el <= r + no_eras - 1) {
199 el = r + no_eras -
el;
204 for (i = 0; i <=
NROOTS; i++)
209 memmove(&b[1], b, NROOTS *
sizeof(b[0]));
212 memcpy(lambda, t, (NROOTS + 1) *
sizeof(t[0]));
218 for (i = 0; i < NROOTS + 1; i++) {
224 memcpy(®[1], &lambda[1], NROOTS *
sizeof(reg[0]));
228 for (j = deg_lambda; j > 0; j--) {
230 reg[
j] =
MODNN(reg[j] + j);
238 printf(
"count %d root %d loc %d\n", count, i, k);
245 if (++count == deg_lambda)
248 if (deg_lambda != count) {
260 deg_omega = deg_lambda - 1;
263 for (j = i; j >= 0; j--) {
264 if ((s[i - j] !=
A0) && (lambda[j] !=
A0))
274 for (j = count - 1; j >= 0; j--) {
276 for (i = deg_omega; i >= 0; i--) {
284 for (i =
MIN(deg_lambda, NROOTS - 1) & ~1; i >= 0; i -= 2) {
285 if (lambda[i + 1] !=
A0)
290 printf(
"\n ERROR: denominator = 0\n");
296 if (num1 != 0 && loc[j] >= PAD) {
297 data[loc[
j] -
PAD] ^=
302 if (eras_pos !=
NULL) {
304 eras_pos[i] = loc[i];
data_t loc[NROOTS]
Definition: lib/libfec/decode_rs.h:84
data_t root[NROOTS]
Definition: lib/libfec/decode_rs.h:84
data_t discr_r
Definition: lib/libfec/decode_rs.h:74
data_t q
Definition: lib/libfec/decode_rs.h:74
data_t num1
Definition: lib/libfec/decode_rs.h:74
data_t den
Definition: lib/libfec/decode_rs.h:74
#define PAD
Definition: char.h:19
data_t omega[NROOTS+1]
Definition: lib/libfec/decode_rs.h:83
#define A0
Definition: lib/libfec/decode_rs.h:69
int count
Definition: lib/libfec/decode_rs.h:86
int k
Definition: lib/libfec/decode_rs.h:71
#define NN
Definition: ccsds.h:3
data_t b[NROOTS+1]
Definition: lib/libfec/decode_rs.h:83
unsigned char data_t
Definition: ccsds.h:1
int syn_error
Definition: lib/libfec/decode_rs.h:86
data_t s[NROOTS]
Definition: lib/libfec/decode_rs.h:81
#define FCR
Definition: char.h:16
data_t u
Definition: lib/libfec/decode_rs.h:74
int i
Definition: lib/libfec/decode_rs.h:71
#define NULL
Definition: lib/libfec/decode_rs.h:63
#define INDEX_OF
Definition: char.h:13
data_t t[NROOTS+1]
Definition: lib/libfec/decode_rs.h:83
#define ALPHA_TO
Definition: char.h:12
#define NROOTS
Definition: ccsds.h:4
memset(parity, 0, NROOTS *sizeof(data_t))
deg_lambda
Definition: lib/libfec/decode_rs.h:217
#define MODNN(x)
Definition: char.h:8
data_t tmp
Definition: lib/libfec/decode_rs.h:74
#define MIN(a, b)
Definition: lib/libfec/decode_rs.h:67
int r
Definition: lib/libfec/decode_rs.h:71
el
Definition: lib/libfec/decode_rs.h:175
#define IPRIM
Definition: char.h:18
#define PRIM
Definition: char.h:17
int j
Definition: lib/libfec/decode_rs.h:71
data_t num2
Definition: lib/libfec/decode_rs.h:74
data_t reg[NROOTS+1]
Definition: lib/libfec/decode_rs.h:84
deg_omega
Definition: lib/libfec/decode_rs.h:260
data_t lambda[NROOTS+1]
Definition: lib/libfec/decode_rs.h:81