annotate src/cs/layer1/cfile/l1_tch_tap.c @ 303:f76436d19a7a default tip

!GPRS config: fix long-standing AT+COPS chance hanging bug There has been a long-standing bug in FreeCalypso going back years: sometimes in the AT command bring-up sequence of an ACI-only MS, the AT+COPS command would produce only a power scan followed by cessation of protocol stack activity (only L1 ADC traces), instead of the expected network search sequence. This behaviour was seen in different FC firmware versions going back to Citrine, and seemed to follow some law of chance, not reliably repeatable. This bug has been tracked down and found to be specific to !GPRS configuration, stemming from our TCS2/TCS3 hybrid and reconstruction of !GPRS support that was bitrotten in TCS3.2/LoCosto version. ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3 version and had to be pulled from TCS2 - but as it turns out, there is a new field in the MMR_REG_REQ primitive that needs to be set correctly, and that psa_mms.c module is the place where this initialization needed to be added.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 08 Jun 2023 08:23:37 +0000
parents edcb8364d45b
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 }