FreeCalypso > hg > gsm-codec-lib
annotate dev/efr-sid-insert.c @ 51:722959d9410f
libgsmefr: implement EFR_{en,de}coder_create() functions
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 25 Nov 2022 06:46:22 +0000 |
parents | 3b5958f28a40 |
children |
rev | line source |
---|---|
35
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * We need to implement a function that inserts the 95 bit wide SID |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * codeword into the frame, and we would like to do it more efficiently |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * than calling a "set bit" function for each of the 95 bits. This |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * program will produce a more efficient solution. |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 */ |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdio.h> |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <stdint.h> |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdlib.h> |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <string.h> |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 static const uint8_t SID_codeword_bit_idx[95] = |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 { |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 66, 67, 68, 94, 95, 96, 98, 99, 100, 101, |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 112, 113, 114, 115, 116, 117, 118, 148, 149, 150, |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 171, 196, 197, 198, 199, 200, 201, 202, 203, 204, |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 205, 206, 207, 208, 209, 212, 213, 214, 215, 216, |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 217, 218, 219, 220, 221 |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 }; |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 static void set_bit(uint8_t *frame, unsigned bitnum) |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 { |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 unsigned bytenum = bitnum >> 3; |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 unsigned bit_in_byte = 7 - (bitnum & 7); |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 unsigned bitmask = 1 << bit_in_byte; |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 frame[bytenum] |= bitmask; |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 } |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 main(argc, argv) |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 char **argv; |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 { |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 uint8_t bytes[31]; |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 unsigned n; |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 memset(bytes, 0, 31); |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 for (n = 0; n < 95; n++) |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 set_bit(bytes, SID_codeword_bit_idx[n] + 4); |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 for (n = 0; n < 31; n++) |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 if (bytes[n]) |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 printf("\tframe[%u] |= 0x%02X;\n", n, bytes[n]); |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 exit(0); |
3b5958f28a40
dev: efr-sid-insert helper program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 } |