FreeCalypso > hg > fc-tourmaline
annotate src/cs/layer1/cfile/l1_tch_tap.c @ 304:58c7961bd0b0 default tip
TCH tap: extend DL sniffing feature to support CSD modes
Our debug feature for TCH DL sniffing reads the content of the DSP's
a_dd_0 buffer (or a_dd_1 for TCH/H subchannel 1) at appropriate times
and forwards captured bits to the host. This feature was originally
implemented for TCH/FS, TCH/EFS and TCH/HS - now extend it to cover
TCH/F data modes too.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 25 Nov 2024 23:33:27 +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 } |