summaryrefslogtreecommitdiff
path: root/gsm-receiver/src/lib/decoder/interleave.c
diff options
context:
space:
mode:
Diffstat (limited to 'gsm-receiver/src/lib/decoder/interleave.c')
-rw-r--r--gsm-receiver/src/lib/decoder/interleave.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gsm-receiver/src/lib/decoder/interleave.c b/gsm-receiver/src/lib/decoder/interleave.c
index 7b45927..8d11286 100644
--- a/gsm-receiver/src/lib/decoder/interleave.c
+++ b/gsm-receiver/src/lib/decoder/interleave.c
@@ -25,6 +25,27 @@ interleave_init(INTERLEAVE_CTX *ictx, int size, int block_size)
}
int
+interleave_init_facch_f(INTERLEAVE_CTX *ictx, int size, int block_size, int block_offset)
+{
+ 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 + block_offset) % 8;
+ 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)
personal git repositories of Harald Welte. Your mileage may vary