annotate src/cs/layer1/cfile/l1_tch_tap.c @ 300:edcb8364d45b

L1: resurrect TCH tap feature In this new incarnation of our TCH tap feature, we support DL sniffing in all 3 of FR1, HR1 and EFR, and the new implementation will capture every 20 ms frame where the old one silently skipped a frame (sent nothing) during FACCH stealing. The wire interface on RVTMUX changed slightly, and fc-shell tch record will need to be updated to support the new version. TCH UL play or substitution is supported for FR1 and EFR only; support for HR1 can be added later if needed.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 13 Dec 2022 02:44:01 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
300
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This module is a FreeCalypso addition; it contains code implementing
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * our TCH tap functional additions: TCH downlink capture and TCH uplink
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * play.
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include "l1_macro.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include "l1_confg.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include "l1_types.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include "sys_types.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <string.h>
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include "l1_const.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #if TESTMODE
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include "l1tm_defty.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #endif
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 #if (AUDIO_TASK == 1)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 #include "l1audio_const.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 #include "l1audio_cust.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 #include "l1audio_defty.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 #endif
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 #if (L1_GTT == 1)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 #include "l1gtt_const.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 #include "l1gtt_defty.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 #endif
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 #if (L1_MIDI == 1)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 #include "l1midi_defty.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 #endif
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 #include "l1_defty.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 #include "l1_varex.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 #include "l1_trace.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 #include "tch_tap_proto.h"
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 T_RVT_USER_ID tch_tap_rvt_id;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 BOOL tch_dl_sniff_mode, tch_ul_play_mode;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 void tch_send_downlink_bits(API *dsp_buffer, UWORD8 nwords, UWORD8 chan_mode,
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 UWORD8 fn_mod_104)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 UWORD16 size;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 T_RVT_BUFFER buf;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 T_RVT_RET rc;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 UINT8 *dp;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 UWORD16 apiword;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 int i;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 size = nwords * 2 + 3;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 rc = rvt_mem_alloc(tch_tap_rvt_id, size, &buf);
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 if (rc != RVT_OK)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 return;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 dp = buf;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 *dp++ = TCH_DLBITS_NEW_IND;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 *dp++ = chan_mode;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 *dp++ = fn_mod_104;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 for (i = 0; i < nwords; i++) {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 apiword = dsp_buffer[i];
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 *dp++ = apiword >> 8;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 *dp++ = apiword;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 rvt_send_trace_no_cpy(buf, tch_tap_rvt_id, size, RVT_BINARY_FORMAT);
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 static void send_tch_ulbits_conf(void)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 T_RVT_BUFFER buf;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 T_RVT_RET rc;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 rc = rvt_mem_alloc(tch_tap_rvt_id, 1, &buf);
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 if (rc == RVT_OK) {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 buf[0] = TCH_ULBITS_CONF;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 rvt_send_trace_no_cpy(buf, tch_tap_rvt_id, 1,
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 RVT_BINARY_FORMAT);
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 #define UPLINK_QUEUE_SIZE 5
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 #define WORDS_PER_ENTRY 17
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 static UWORD16 uplink_data[UPLINK_QUEUE_SIZE][WORDS_PER_ENTRY];
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 static volatile int ul_read_ptr, ul_write_ptr;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 void tchf_substitute_uplink(API *dsp_buffer)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 int read_ptr;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 int i;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 read_ptr = ul_read_ptr;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 if (read_ptr == ul_write_ptr) {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 /* no uplink substitution */
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 l1s_dsp_com.dsp_ndb_ptr->d_tch_mode &= ~B_PLAY_UL;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 tch_ul_play_mode = FALSE;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 return;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 for (i = 0; i < WORDS_PER_ENTRY; i++)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 dsp_buffer[i+3] = uplink_data[read_ptr][i];
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 // Fill data block Header...
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 dsp_buffer[0] = (1 << B_BLUD); // 1st word: Set B_BLU bit.
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 dsp_buffer[1] = 0; // 2nd word: cleared.
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 dsp_buffer[2] = 0; // 3rd word: cleared.
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 l1s_dsp_com.dsp_ndb_ptr->d_tch_mode |= B_PLAY_UL;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 /* advance the read pointer and send TCH_ULBITS_CONF */
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 read_ptr++;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 if (read_ptr >= UPLINK_QUEUE_SIZE)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 read_ptr = 0;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 ul_read_ptr = read_ptr;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 send_tch_ulbits_conf();
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 static void handle_tch_ulbits_req(T_RVT_BUFFER pkt)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 int write_ptr, write_next, i;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 UINT8 *sp;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 write_ptr = ul_write_ptr;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 write_next = write_ptr + 1;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 if (write_next >= UPLINK_QUEUE_SIZE)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 write_next = 0;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 if (write_next == ul_read_ptr) /* queue full */
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 return;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 sp = pkt + 1;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 for (i = 0; i < WORDS_PER_ENTRY; i++) {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 uplink_data[write_ptr][i] = (sp[0] << 8) | sp[1];
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 sp += 2;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 ul_write_ptr = write_next;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 tch_ul_play_mode = TRUE;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 static void handle_tch_config_req(T_RVT_BUFFER pkt)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 UWORD8 config;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 T_RVT_BUFFER buf;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 T_RVT_RET rc;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 config = pkt[1] & 0x01;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 tch_dl_sniff_mode = config;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 /* send TCH_CONFIG_CONF response */
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 rc = rvt_mem_alloc(tch_tap_rvt_id, 2, &buf);
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 if (rc == RVT_OK) {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 buf[0] = TCH_CONFIG_CONF;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 buf[1] = config;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 rvt_send_trace_no_cpy(buf, tch_tap_rvt_id, 2,
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 RVT_BINARY_FORMAT);
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 /*
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 * The following function is the callback registered with RVT; it gets
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 * called in RVT HISR context.
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 */
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 static void tch_rvt_input_callback(T_RVT_BUFFER pkt, UINT16 pktlen)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 if (pktlen < 1)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 return;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 switch (pkt[0]) {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 case TCH_CONFIG_REQ:
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 if (pktlen != 2)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 return;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 handle_tch_config_req(pkt);
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162 break;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 case TCH_ULBITS_REQ:
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 if (pktlen < 34)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 return;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 handle_tch_ulbits_req(pkt);
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 break;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 }
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 void tch_tap_init(void)
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 {
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 rvt_register_id("TCH", &tch_tap_rvt_id, tch_rvt_input_callback);
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 tch_dl_sniff_mode = FALSE;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 tch_ul_play_mode = FALSE;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 ul_read_ptr = 0;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 ul_write_ptr = 0;
edcb8364d45b L1: resurrect TCH tap feature
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 }