annotate ater/tx_func.c @ 51:db39e8855f3d

ater: implement play-d144
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 25 Sep 2024 05:53:38 +0000
parents 40f781efdbe1
children 626180a15857
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * Here we are going to implement Tx on Ater toward the TRAU.
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 */
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 #include <stdint.h>
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include <stdbool.h>
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <stdio.h>
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdlib.h>
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <string.h>
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <unistd.h>
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
51
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
12 #include <osmocom/core/bits.h>
19
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
13 #include <osmocom/core/msgb.h>
18
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include <osmocom/core/select.h>
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include <osmocom/isdn/i460_mux.h>
26
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
16 #include <osmocom/trau/trau_frame.h>
18
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 #include "globals.h"
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 #include "submux.h"
26
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
20 #include "out_frame.h"
18
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21
49
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
22 /*
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
23 * The following hard-coded frame is based on TS 48.060 section 5.3.1.
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
24 * 0-based octet numbers in the comments are as in the spec.
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
25 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
26 static const ubit_t d144_sync_frame[320] = {
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
27 0, 0, 0, 0, 0, 0, 0, 0, /* octet 0 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
28 0, 0, 0, 0, 0, 0, 0, 0, /* octet 1 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
29 1, 1, 0, 1, 0, 0, 1, 1, /* octet 2 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
30 1, 1, 1, 1, 1, 1, 1, 1, /* octet 3 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
31 1, 1, 1, 1, 1, 1, 1, 1, /* octet 4 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
32 1, 1, 1, 1, 1, 1, 1, 1, /* octet 5 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
33 1, 1, 1, 1, 1, 1, 1, 1, /* octet 6 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
34 1, 1, 1, 1, 1, 1, 1, 1, /* octet 7 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
35 1, 1, 1, 1, 1, 1, 1, 1, /* octet 8 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
36 1, 1, 1, 1, 1, 1, 1, 1, /* octet 9 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
37 1, 1, 1, 1, 1, 1, 1, 1, /* octet 10 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
38 1, 1, 1, 1, 1, 1, 1, 1, /* octet 11 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
39 1, 1, 1, 1, 1, 1, 1, 1, /* octet 12 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
40 1, 1, 1, 1, 1, 1, 1, 1, /* octet 13 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
41 1, 1, 1, 1, 1, 1, 1, 1, /* octet 14 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
42 1, 1, 1, 1, 1, 1, 1, 1, /* octet 15 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
43 1, 1, 1, 1, 1, 1, 1, 1, /* octet 16 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
44 1, 1, 1, 1, 1, 1, 1, 1, /* octet 17 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
45 1, 1, 1, 1, 1, 1, 1, 1, /* octet 18 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
46 1, 1, 1, 1, 1, 1, 1, 1, /* octet 19 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
47 1, 1, 1, 1, 1, 1, 1, 1, /* octet 20 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
48 1, 1, 1, 1, 1, 1, 1, 1, /* octet 21 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
49 1, 1, 1, 1, 1, 1, 1, 1, /* octet 22 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
50 1, 1, 1, 1, 1, 1, 1, 1, /* octet 23 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
51 1, 1, 1, 1, 1, 1, 1, 1, /* octet 24 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
52 1, 1, 1, 1, 1, 1, 1, 1, /* octet 25 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
53 1, 1, 1, 1, 1, 1, 1, 1, /* octet 26 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
54 1, 1, 1, 1, 1, 1, 1, 1, /* octet 27 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
55 1, 1, 1, 1, 1, 1, 1, 1, /* octet 28 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
56 1, 1, 1, 1, 1, 1, 1, 1, /* octet 29 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
57 1, 1, 1, 1, 1, 1, 1, 1, /* octet 30 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
58 1, 1, 1, 1, 1, 1, 1, 1, /* octet 31 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
59 1, 1, 1, 1, 1, 1, 1, 1, /* octet 32 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
60 1, 1, 1, 1, 1, 1, 1, 1, /* octet 33 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
61 1, 1, 1, 1, 1, 1, 1, 1, /* octet 34 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
62 1, 1, 1, 1, 1, 1, 1, 1, /* octet 35 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
63 1, 1, 1, 1, 1, 1, 1, 1, /* octet 36 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
64 1, 1, 1, 1, 1, 1, 1, 1, /* octet 37 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
65 1, 1, 1, 1, 1, 1, 1, 1, /* octet 38 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
66 1, 1, 1, 1, 1, 1, 1, 1, /* octet 39 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
67 };
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
68
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
69 /*
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
70 * The following hard-coded frame is based on TS 48.060 section 5.3.2.
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
71 * 0-based octet numbers in the comments are as in the spec.
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
72 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
73 static const ubit_t d144_idle_edata[320] = {
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
74 0, 0, 0, 0, 0, 0, 0, 0, /* octet 0 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
75 0, 0, 0, 0, 0, 0, 0, 0, /* octet 1 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
76 1, 1, 1, 1, 1, 1, 1, 1, /* octet 2 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
77 1, 1, 1, 1, 1, 1, 1, 1, /* octet 3 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
78 1, 1, 1, 1, 1, 1, 1, 1, /* octet 4 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
79 1, 1, 1, 1, 1, 1, 1, 1, /* octet 5 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
80 1, 1, 1, 1, 1, 1, 1, 1, /* octet 6 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
81 1, 1, 1, 1, 1, 1, 1, 1, /* octet 7 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
82 1, 1, 1, 1, 1, 1, 1, 1, /* octet 8 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
83 1, 1, 1, 1, 1, 1, 1, 1, /* octet 9 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
84 1, 1, 1, 1, 1, 1, 1, 1, /* octet 10 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
85 1, 1, 1, 1, 1, 1, 1, 1, /* octet 11 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
86 1, 1, 1, 1, 1, 1, 1, 1, /* octet 12 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
87 1, 1, 1, 1, 1, 1, 1, 1, /* octet 13 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
88 1, 1, 1, 1, 1, 1, 1, 1, /* octet 14 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
89 1, 1, 1, 1, 1, 1, 1, 1, /* octet 15 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
90 1, 1, 1, 1, 1, 1, 1, 1, /* octet 16 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
91 1, 1, 1, 1, 1, 1, 1, 1, /* octet 17 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
92 1, 1, 1, 1, 1, 1, 1, 1, /* octet 18 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
93 1, 1, 1, 1, 1, 1, 1, 1, /* octet 19 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
94 1, 1, 1, 1, 1, 1, 1, 1, /* octet 20 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
95 1, 1, 1, 1, 1, 1, 1, 1, /* octet 21 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
96 1, 1, 1, 1, 1, 1, 1, 1, /* octet 22 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
97 1, 1, 1, 1, 1, 1, 1, 1, /* octet 23 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
98 1, 1, 1, 1, 1, 1, 1, 1, /* octet 24 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
99 1, 1, 1, 1, 1, 1, 1, 1, /* octet 25 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
100 1, 1, 1, 1, 1, 1, 1, 1, /* octet 26 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
101 1, 1, 1, 1, 1, 1, 1, 1, /* octet 27 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
102 1, 1, 1, 1, 1, 1, 1, 1, /* octet 28 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
103 1, 1, 1, 1, 1, 1, 1, 1, /* octet 29 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
104 1, 1, 1, 1, 1, 1, 1, 1, /* octet 30 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
105 1, 1, 1, 1, 1, 1, 1, 1, /* octet 31 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
106 1, 1, 1, 1, 1, 1, 1, 1, /* octet 32 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
107 1, 1, 1, 1, 1, 1, 1, 1, /* octet 33 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
108 1, 1, 1, 1, 1, 1, 1, 1, /* octet 34 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
109 1, 1, 1, 1, 1, 1, 1, 1, /* octet 35 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
110 1, 1, 1, 1, 1, 1, 1, 1, /* octet 36 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
111 1, 1, 1, 1, 1, 1, 1, 1, /* octet 37 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
112 1, 1, 1, 1, 1, 1, 1, 1, /* octet 38 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
113 1, 1, 1, 1, 1, 1, 1, 1, /* octet 39 */
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
114 };
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
115
19
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
116 void init_trau_ul_frame(int nr)
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
117 {
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
118 struct ater_subslot *at = &subslots[nr];
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
119 struct osmo_trau_frame *fr = &at->ul_frame;
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
120
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
121 fr->type = at->is_efr ? OSMO_TRAU16_FT_EFR : OSMO_TRAU16_FT_FR;
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
122 fr->dir = OSMO_TRAU_DIR_UL;
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
123 memset(fr->c_bits + 5, 0, 6);
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
124 memset(fr->c_bits + 15, 1, 6);
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
125 memset(fr->t_bits, 1, 4);
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
126 }
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
127
44
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
128 void init_trau_ul_frame_csd(int nr, bool ir_16k)
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
129 {
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
130 struct ater_subslot *at = &subslots[nr];
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
131 struct osmo_trau_frame *fr = &at->ul_frame;
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
132
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
133 fr->type = OSMO_TRAU16_FT_DATA;
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
134 fr->dir = OSMO_TRAU_DIR_UL;
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
135 fr->c_bits[5] = ir_16k;
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
136 memset(fr->c_bits + 6, 1, 9);
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
137 memset(fr->d_bits, 1, 63 * 4);
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
138 }
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
139
51
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
140 static void d144_play_frame(struct ater_subslot *at, const uint8_t *filerec)
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
141 {
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
142 struct osmo_trau_frame *fr = &at->ul_frame;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
143 struct msgb *msg;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
144 int len;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
145
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
146 msg = msgb_alloc_c(g_ctx, 320, "TRAU-UL-frame");
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
147 if (!msg)
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
148 return;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
149 fr->type = OSMO_TRAU16_FT_EDATA;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
150 fr->dir = OSMO_TRAU_DIR_UL;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
151 fr->c_bits[5] = 0;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
152 memset(fr->c_bits + 6, 1, 7);
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
153 fr->m_bits[0] = (filerec[1] & 2) >> 1;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
154 fr->m_bits[1] = filerec[1] & 1;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
155 osmo_pbit2ubit(fr->d_bits, filerec + 2, 288);
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
156 len = osmo_trau_frame_encode(msg->tail, msgb_tailroom(msg), fr);
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
157 if (len <= 0) {
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
158 msgb_free(msg);
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
159 return;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
160 }
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
161 msgb_put(msg, len);
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
162 osmo_i460_mux_enqueue(at->schan, msg);
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
163 }
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
164
49
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
165 static void handle_d144(int nr)
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
166 {
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
167 struct ater_subslot *at = &subslots[nr];
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
168 struct msgb *msg;
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
169
51
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
170 if (at->play_buffer) {
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
171 d144_play_frame(at, at->play_buffer + at->play_buf_ptr * 38);
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
172 at->play_buf_ptr++;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
173 if (at->play_buf_ptr < at->play_buf_total)
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
174 return;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
175 free(at->play_buffer);
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
176 at->play_buffer = NULL;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
177 printf("file play finished\n");
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
178 return;
db39e8855f3d ater: implement play-d144
Mychaela Falconia <falcon@freecalypso.org>
parents: 49
diff changeset
179 }
49
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
180 msg = msgb_alloc_c(g_ctx, 320, "TRAU-UL-frame");
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
181 if (!msg)
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
182 return;
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
183 memcpy(msg->tail, at->d144_edata ? d144_idle_edata : d144_sync_frame,
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
184 320);
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
185 msgb_put(msg, 320);
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
186 osmo_i460_mux_enqueue(at->schan, msg);
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
187 }
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
188
26
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
189 static void handle_play(struct ater_subslot *at)
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
190 {
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
191 if (at->play_wait_align) {
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
192 if (at->mfrm_count)
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
193 return;
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
194 at->play_wait_align = false;
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
195 }
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
196 trau_frame_from_record(at->play_buffer + at->play_buf_ptr * 34,
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
197 at->is_efr, &at->ul_frame);
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
198 at->play_buf_ptr++;
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
199 if (at->play_buf_ptr < at->play_buf_total)
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
200 return;
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
201 free(at->play_buffer);
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
202 at->play_buffer = NULL;
27
2742dbea95f1 ater: implement play command
Mychaela Falconia <falcon@freecalypso.org>
parents: 26
diff changeset
203 printf("file play finished\n");
26
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
204 }
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
205
19
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
206 static void tx_service_subslot(int nr)
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
207 {
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
208 struct ater_subslot *at = &subslots[nr];
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
209 struct osmo_trau_frame *fr = &at->ul_frame;
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
210 struct msgb *msg;
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
211 int len;
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
212
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
213 if (!at->is_active)
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
214 return;
49
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
215 if (at->is_data_144) {
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
216 handle_d144(nr);
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
217 return;
40f781efdbe1 ater: beginning of D144 mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 47
diff changeset
218 }
26
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
219 if (at->play_buffer)
237687e2be6c ater: implement play internals
Mychaela Falconia <falcon@freecalypso.org>
parents: 23
diff changeset
220 handle_play(at);
44
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
221 if (!at->is_data) {
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
222 at->mfrm_count++;
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
223 if (at->mfrm_count >= 24) {
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
224 at->mfrm_count = 0;
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
225 fr->c_bits[14] = 1;
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
226 } else {
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
227 fr->c_bits[14] = 0;
16715bd149e0 ater: add support for data mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
228 }
19
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
229 }
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
230 msg = msgb_alloc_c(g_ctx, 640, "TRAU-UL-frame");
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
231 if (!msg)
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
232 return;
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
233 len = osmo_trau_frame_encode(msg->tail, msgb_tailroom(msg), fr);
23
0d70444b5070 ater: more robust msgb handling in TRAU-UL output
Mychaela Falconia <falcon@freecalypso.org>
parents: 19
diff changeset
234 if (len <= 0) {
0d70444b5070 ater: more robust msgb handling in TRAU-UL output
Mychaela Falconia <falcon@freecalypso.org>
parents: 19
diff changeset
235 msgb_free(msg);
0d70444b5070 ater: more robust msgb handling in TRAU-UL output
Mychaela Falconia <falcon@freecalypso.org>
parents: 19
diff changeset
236 return;
0d70444b5070 ater: more robust msgb handling in TRAU-UL output
Mychaela Falconia <falcon@freecalypso.org>
parents: 19
diff changeset
237 }
47
13fffc41f989 ater: add support for HR-data-16k TRAU-UL frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 44
diff changeset
238 /*
13fffc41f989 ater: add support for HR-data-16k TRAU-UL frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 44
diff changeset
239 * A very ugly/hacky way of setting C5 for HR data,
13fffc41f989 ater: add support for HR-data-16k TRAU-UL frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 44
diff changeset
240 * working around libosmotrau API that is not designed
13fffc41f989 ater: add support for HR-data-16k TRAU-UL frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 44
diff changeset
241 * for such hacking.
13fffc41f989 ater: add support for HR-data-16k TRAU-UL frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 44
diff changeset
242 */
13fffc41f989 ater: add support for HR-data-16k TRAU-UL frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 44
diff changeset
243 if (at->is_data && at->is_hr_data)
13fffc41f989 ater: add support for HR-data-16k TRAU-UL frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 44
diff changeset
244 msg->tail[21] = 1;
19
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
245 msgb_put(msg, len);
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
246 osmo_i460_mux_enqueue(at->schan, msg);
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
247 }
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
248
18
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249 void transmit_e1_ts(void)
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 {
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 uint8_t buf[160];
19
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
252 int nr;
18
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253
19
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
254 for (nr = 0; nr < ATER_SUBSLOTS; nr++)
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 18
diff changeset
255 tx_service_subslot(nr);
18
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 osmo_i460_mux_out(&i460_ts, buf, 160);
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257 write(ts_fd, buf, 160);
61862af2247f ater: E1 timeslot output (osmo_i460 mux)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 }