annotate dev/efr-sid-insert.c @ 274:52c667f17d2c

libgsmfr2: implement gsmfr_0610_encode_frame() wrapper
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 14 Apr 2024 02:57:18 +0000
parents 3b5958f28a40
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }