diff options
author | Piotr Krysik <perper@o2.pl> | 2009-06-30 23:10:11 +0200 |
---|---|---|
committer | Piotr Krysik <perper@o2.pl> | 2009-06-30 23:10:11 +0200 |
commit | 3f91ce4f1c4a047a94497041b82c77c815d52a1f (patch) | |
tree | ed787719fb4e89670cc2161ecd4136c554834686 /gsm-receiver/src/lib/decoder/interleave.c | |
parent | 26a95cc318fcc8022a42f679d81b41d949771b8d (diff) | |
parent | 8d2bc49fb9e0c9a5fbd75aa3cad207608e72bf99 (diff) |
Merge branch 'moving_to_airprobe'
Diffstat (limited to 'gsm-receiver/src/lib/decoder/interleave.c')
-rw-r--r-- | gsm-receiver/src/lib/decoder/interleave.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gsm-receiver/src/lib/decoder/interleave.c b/gsm-receiver/src/lib/decoder/interleave.c new file mode 100644 index 0000000..7b45927 --- /dev/null +++ b/gsm-receiver/src/lib/decoder/interleave.c @@ -0,0 +1,47 @@ +//TODO: this file shouldn't be part of the GSM Receiver +#include <stdlib.h> +#include <stdio.h> +#include "interleave.h" + +int +interleave_init(INTERLEAVE_CTX *ictx, int size, int block_size) +{ + ictx->trans_size = size; + ictx->trans = (unsigned short *)malloc(size * sizeof *ictx->trans); + +// DEBUGF("size: %d\n", size); +// DEBUGF("Block size: %d\n", block_size); + int j, k, B; + for (k = 0; k < size; k++) + { + B = k % 4; + j = 2 * ((49 * k) % 57) + ((k % 8) / 4); + ictx->trans[k] = B * block_size + j; + /* Mapping: pos1 goes to pos2: pos1 -> pos2 */ +// DEBUGF("%d -> %d\n", ictx->trans[k], k); + } +// exit(0); + return 0; +} + +int +interleave_deinit(INTERLEAVE_CTX *ictx) +{ + if (ictx->trans != NULL) + { + free(ictx->trans); + ictx->trans = NULL; + } + + return 0; +} + +void +interleave_decode(INTERLEAVE_CTX *ictx, unsigned char *dst, unsigned char *src) +{ + + int k; + for (k = 0; k < ictx->trans_size; k++) + dst[k] = src[ictx->trans[k]]; +} + |