FreeCalypso > hg > freecalypso-tools
annotate tchtools/efr2dsp.c @ 921:74d284add54d
fc-fsio: guard against bogus readdir results from the target
If the FFS being operated on contains SE K2x0 extended filenames,
readdir will return strings that are bad for printing. We need to
guard against this possibility, and also against possible other
bogosity that could be sent by other alien firmwares.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 31 Dec 2022 22:55:23 +0000 |
parents | 94890123a74f |
children |
rev | line source |
---|---|
906
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * The utility function implemented in this module constructs a 33-byte |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * frame for loading into Calypso DSP TCH UL buffer from a standard |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * 244-bit EFR codec frame in the RTP encoding format of ETSI TS 101 318. |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 */ |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <sys/types.h> |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <string.h> |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <strings.h> |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 static const u_short efr_to_tidsp_table[244] = { |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 50, 24, 25, 37, 38, 43, 44, 26, 42, 27, 39, 40, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 45, 51, 52, 41, 46, 28, 29, 47, 53, 77, 78, 30, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 54, 55, 79, 56, 80, 109, 110, 111, 112, 113, 114, 115, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 180, 181, 0, 1, 2, 3, 4, 5, 20, 31, 32, 16, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 73, 105, 157, 81, 118, 138, 165, 82, 119, 139, 166, 83, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 120, 140, 167, 84, 121, 141, 168, 85, 122, 186, 200, 204, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 224, 244, 205, 225, 245, 206, 226, 246, 207, 227, 247, 208, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 228, 248, 17, 61, 101, 153, 161, 12, 13, 22, 35, 48, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 116, 18, 74, 106, 158, 86, 123, 142, 169, 87, 124, 143, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 170, 88, 125, 144, 171, 89, 126, 145, 172, 90, 127, 189, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 201, 209, 229, 249, 210, 230, 250, 211, 231, 251, 212, 232, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 252, 213, 233, 253, 19, 62, 102, 154, 162, 6, 7, 8, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 9, 10, 11, 21, 33, 34, 57, 75, 107, 159, 91, 128, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 146, 173, 92, 129, 147, 174, 93, 130, 148, 175, 94, 131, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 149, 176, 95, 132, 192, 202, 214, 234, 254, 215, 235, 255, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 216, 236, 256, 217, 237, 257, 218, 238, 258, 59, 63, 103, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 155, 163, 14, 15, 23, 36, 49, 117, 58, 76, 108, 160, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 96, 133, 150, 177, 97, 134, 198, 199, 98, 135, 151, 178, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 99, 136, 152, 179, 100, 137, 195, 203, 219, 239, 259, 220, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 240, 260, 221, 241, 261, 222, 242, 262, 223, 243, 263, 60, |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 64, 104, 156, 164 |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 }; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 static int |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 msb_get_bit(buf, bn) |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 u_char *buf; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 { |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 int pos_byte = bn >> 3; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 int pos_bit = 7 - (bn & 7); |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 return (buf[pos_byte] >> pos_bit) & 1; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 } |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 static void |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 msb_set_bit(buf, bn) |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 u_char *buf; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 { |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 int pos_byte = bn >> 3; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 int pos_bit = 7 - (bn & 7); |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 buf[pos_byte] |= (1 << pos_bit); |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 } |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 void |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 efr_std_to_tidsp(inbytes, outbytes) |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 u_char *inbytes, *outbytes; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 { |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 int i; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 bzero(outbytes, 33); |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 for (i = 0; i < 244; i++) { |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 if (msb_get_bit(inbytes, i + 4)) |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 msb_set_bit(outbytes, efr_to_tidsp_table[i]); |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 } |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 /* set repetition bits */ |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 if (outbytes[23] & 0x20) |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 outbytes[23] |= 0x18; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 if (outbytes[23] & 0x04) |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 outbytes[23] |= 0x03; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 if (outbytes[24] & 0x80) |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 outbytes[24] |= 0x60; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 if (outbytes[24] & 0x10) |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 outbytes[24] |= 0x0C; |
94890123a74f
tchtools: new program fc-efr2tch
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 } |