mirror of
https://github.com/VK3FNG/soundmodem.git
synced 2025-12-06 03:01:59 +01:00
56 lines
1.2 KiB
C
56 lines
1.2 KiB
C
#ifndef _FEC_H
|
|
#define _FEC_H
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
struct fecstate {
|
|
int feclevel;
|
|
int bitbatchlen;
|
|
int inlv;
|
|
unsigned inlvpipe[MaxInlv * DataCarriers];
|
|
unsigned inlvptr;
|
|
};
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
static inline void init_fec(struct fecstate *f)
|
|
{
|
|
switch (f->feclevel) {
|
|
case 0:
|
|
f->bitbatchlen = 15;
|
|
break;
|
|
case 1:
|
|
f->bitbatchlen = 11;
|
|
break;
|
|
case 2:
|
|
f->bitbatchlen = 7;
|
|
break;
|
|
case 3:
|
|
f->bitbatchlen = 5;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
static inline void init_inlv(struct fecstate *f)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < f->inlv * DataCarriers; i++)
|
|
f->inlvpipe[i] = 0;
|
|
f->inlvptr = 0;
|
|
}
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
extern unsigned deinlv(struct fecstate *, unsigned);
|
|
extern unsigned inlv(struct fecstate *, unsigned);
|
|
|
|
extern unsigned fecencode(struct fecstate *, unsigned);
|
|
extern unsigned fecdecode(struct fecstate *, unsigned, unsigned *);
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
#endif
|