FreeCalypso > hg > fc-tourmaline
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 |
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 } |