104
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 | Project : GSM-PS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 | Modul : DL_DCCH0
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 | Copyright 2002 Texas Instruments Berlin, AG
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 | All rights reserved.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 | This file is confidential and a trade secret of Texas
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 | Instruments Berlin, AG
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 | The receipt of or possession of this file does not convey
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 | any rights to reproduce or disclose its contents or to
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 | manufacture, use, or sell anything it may describe, in
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 | whole, or in part, without the specific written consent of
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 | Texas Instruments Berlin, AG.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 | Purpose : This Modul defines the functions for the stand alone
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 | dedicated control channel (SDCCH) and the fast dedicated
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 | control channel (FACCH) each with SAPI 0 of the component DL
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 #ifndef DL_DCCH0_C
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 #define DL_DCCH0_C
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 #define ENTITY_DL
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 /*==== INCLUDES ===================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 #include "typedefs.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 #include "string.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "vsi.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "pconst.cdg"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #include "custom.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "gsm.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #include "mon_dl.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #include "prim.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #include "pei.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 #include "tok.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 #include "ccdapi.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 #include "dl.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 #include "dl_trc.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 /*==== EXPORT =====================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 /*==== PRIVAT =====================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 LOCAL void dcch0_resume_reconnect_req (T_PRIM * prim,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 U8 ch_type);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 /*==== VARIABLES ==================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 /*==== FUNCTIONS ==================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 | PROJECT : GSM-PS (6147) MODULE : DL_SDCCH |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 | STATE : code ROUTINE : sdcch0_init_dl_data |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 PURPOSE : Initialisation of DCCH data (SAPI 0) for an instance.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 GLOBAL void dcch0_init_dl_data (void)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 T_CCH *pcch = &dl_data->cch[C_DCCH0];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 TRACE_FUNCTION ("dcch0_init_dl_data()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 memset (pcch, 0, sizeof (T_CCH));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 dcch3_init_dl_data (); /*Disabling SAPI 3 connections */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 com_clear_queue (PS_SAPI_0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 dl_data->rr_short_pd_buffer.l_buf = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 if (dl_data->dcch0_in_msg)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 COM_FREE_POINTER (dl_data->dcch0_in_msg);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 dl_data->dcch0_in_msg = NULL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 dl_data->RR_dedicated = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 dl_data->dcch0_ch_type = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 dl_data->dcch0_disc_request = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 #if defined(DELAYED_SABM)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 dl_data->dcch0_sabm_delay = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 dl_data->dcch0_sabm_flag = NOT_PRESENT_8BIT;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 #endif /* DELAYED_SABM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 #if defined(DELAYED_RELEASE_IND)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 dl_data->release_ind_delay = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 dl_data->release_ind_ch_type = NOT_PRESENT_8BIT;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 #endif /* DELAYED_RELEASE_IND */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 set_channel_state(C_DCCH0, STATE_IDLE_DL);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 sacch0_init_dl_data ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 #if defined(DELAYED_SABM)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 GLOBAL void dcch0_delay_sabm (T_CCH *pcch)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 BOOL send_sabm = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 if (dl_data->dcch0_sabm_flag EQ NOT_PRESENT_8BIT)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 if ((pcch->ch_type EQ L2_CHANNEL_FACCH_F) OR (pcch->ch_type EQ L2_CHANNEL_FACCH_H))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 { /* start delay */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 pcch->vtx = EMPTY_CMD; /* send dummy only */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 dl_data->dcch0_sabm_flag = SABM_CMD;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 dl_data->dcch0_sabm_delay = DL_FACCH_SABM_DELAY_VALUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, pcch->ch_type, "delay SABM on FACCH");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 { /* but for FACCH only */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 send_sabm = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 else /* this part is called also called during uplink opportunity */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 { /* pending delay */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 if (dl_data->dcch0_sabm_delay > 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 dl_data->dcch0_sabm_delay--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, pcch->ch_type, "pending delayed SABM");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 {/* finishing delay, send SABM with the current (next) uplink opportunity */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 #if !defined(DL_TRACE_ENABLED)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 TRACE_EVENT ("delayed SABM");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 #endif /* ! DL_TRACE_ENABLED*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 dl_data->dcch0_sabm_flag = NOT_PRESENT_8BIT;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 send_sabm = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, pcch->ch_type, "send delayed SABM");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 if (send_sabm)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 pcch->vtx = SABM_CMD;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 pcch->time_flag = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 pcch->rc = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 set_channel_state (C_DCCH0, STATE_CONTENTION_RESOLUTION);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 #endif /* DELAYED_SABM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 | PROJECT : GSM-PS (6147) MODULE : DL_SDCCH |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 | STATE : code ROUTINE : sdcch0_establish_req |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 PURPOSE : Establish Request for SDCCH SAPI 0.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 GLOBAL void dcch0_establish_req (T_DL_ESTABLISH_REQ * est_req)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 T_CCH *pcch = &dl_data->cch[C_DCCH0];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 TRACE_FUNCTION ("sdcch0_establish_req()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, est_req->ch_type, "est req");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 dl_data->dcch0_ch_type = pcch->ch_type = est_req->ch_type;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 TRACE_EVENT_WIN_P1 ("set dcch0_ch_type=%s", CH_TYPE_NAME[dl_data->dcch0_ch_type]);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 dl_data->dcch0_unserved = com_queue_awaiting_transmission (PS_SAPI_0) ?
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 DL_UNSERVED : DL_ALL_DONE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 switch (dl_data->state[C_DCCH0])
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 case STATE_IDLE_DL:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 * initialize sacch buffer
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 dl_data->sacch_act_buffer = meas_report_no_nc;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 dl_data->sacch_last_buffer= meas_report_no_nc;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 com_clear_queue (PS_SAPI_0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 pcch->contention_resolution = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 dl_data->dcch0_queue.switch_buffer = (T_DL_DATA_REQ*)est_req;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 dl_data->dcch0_disc_request = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 #if defined(DELAYED_SABM)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 dcch0_delay_sabm(pcch);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 #else /* DELAYED_SABM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 pcch->vtx = SABM_CMD;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 pcch->time_flag = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 pcch->rc = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 set_channel_state (C_DCCH0, STATE_CONTENTION_RESOLUTION);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 #endif /* DELAYED_SABM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 TRACE_EVENT_WIN_P5 ("EST_REQ: %s SAPI=%u vtx=%s (%s#%u)", CH_TYPE_NAME[pcch->ch_type],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 est_req->sapi, VTX_NAME[pcch->vtx],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 __FILE10__, __LINE__);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 #if defined(DELAYED_SABM)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 dcch0_delay_sabm(pcch);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 #endif /* DELAYED_SABM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 case STATE_MULTIPLE_FRAME_ESTABLISHED:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 case STATE_TIMER_RECOVERY:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 if (est_req->sdu.l_buf EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 dcch3_init_dl_data (); /*Disabling SAPI 3 connections */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 com_clear_queue (PS_SAPI_0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 pcch->T200_counter = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 pcch->contention_resolution = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 pcch->vtx = SABM_CMD;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 pcch->time_flag = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 pcch->rc = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 set_channel_state (C_DCCH0, STATE_CONTENTION_RESOLUTION);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 TRACE_EVENT_WIN_P5 ("EST_REQ: %s SAPI=%u vtx=%s (%s#%u)", CH_TYPE_NAME[pcch->ch_type],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 est_req->sapi, VTX_NAME[pcch->vtx],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 __FILE10__, __LINE__);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 dcch0_mdl_release_req ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 COM_FREE_POINTER (est_req);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 COM_FREE_POINTER (est_req);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 dcch0_mdl_release_req ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 | PROJECT : GSM-PS (6147) MODULE : DL_SDCCH |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 | STATE : code ROUTINE : sdcch0_resume_req |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 PURPOSE : Resume Request for SDCCH (SAPI 0).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 GLOBAL void dcch0_resume_req (T_DL_RESUME_REQ * resume_req)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 TRACE_FUNCTION ("dcch0_resume_req()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, resume_req->ch_type, "resume req");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 dcch0_resume_reconnect_req( (T_PRIM *)D2P(resume_req), resume_req->ch_type);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 | PROJECT : GSM-PS (6147) MODULE : DL_SDCCH |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 | STATE : code ROUTINE : sdcch0_reconnect_req |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 PURPOSE : Reconnect Request for SDCCH (SAPI 0).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 GLOBAL void dcch0_reconnect_req (T_DL_RECONNECT_REQ * reconnect_req)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 TRACE_FUNCTION ("dcch0_reconnect_req()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, reconnect_req->ch_type, "reconn req");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 dcch0_resume_reconnect_req( (T_PRIM *)D2P (reconnect_req),reconnect_req->ch_type);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 | PROJECT : GSM-PS (6147) MODULE : DL_SDCCH |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 | STATE : code ROUTINE : dcch0_res_recon_req |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 PURPOSE : This function processes Resume Request and Reconnect Request
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 for SDCCH (SAPI 0).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 LOCAL void dcch0_resume_reconnect_req (T_PRIM * prim,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 U8 ch_type)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 TRACE_FUNCTION ("dcch0_resume_reconnect_req()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 switch (dl_data->state[C_DCCH0])
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 case STATE_SUSPENDED:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 case STATE_IDLE_DL:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 T_CCH *pcch = &dl_data->cch[C_DCCH0];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 dl_data->dcch0_ch_type = pcch->ch_type = ch_type;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 TRACE_EVENT_WIN_P1 ("set dcch0_ch_type=%s", CH_TYPE_NAME[dl_data->dcch0_ch_type]);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 com_restore_queue(PS_SAPI_0, (T_DL_DATA_REQ*)P2D(prim));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 pcch->contention_resolution = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 #if defined(DELAYED_SABM)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 dcch0_delay_sabm(dl_data, pcch);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 #else /* DELAYED_SABM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 pcch->vtx = SABM_CMD;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 pcch->time_flag = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 pcch->rc = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 set_channel_state (C_DCCH0, STATE_CONTENTION_RESOLUTION);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 #endif /* DELAYED_SABM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 if(prim->custom.opc EQ DL_RECONNECT_REQ)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 TRACE_EVENT_WIN_P5 ("RECONN_REQ: %s SAPI=%u vtx=%s (%s#%u)", CH_TYPE_NAME[pcch->ch_type],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 PS_SAPI_0, VTX_NAME[pcch->vtx],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 __FILE10__, __LINE__);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 TRACE_EVENT_WIN_P5 ("RESUME_REQ: %s SAPI=%u vtx=%s (%s#%u)", CH_TYPE_NAME[pcch->ch_type],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 PS_SAPI_0, VTX_NAME[pcch->vtx],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 __FILE10__, __LINE__);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 /* invalid measurement report first */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 sacch0_reset_meas ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 COM_FREE_POINTER (P2D(prim));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 }/* endswitch */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 | PROJECT : GSM-PS (6147) MODULE : DL_SDCCH |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 | STATE : code ROUTINE : sdcch0_release_req |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 PURPOSE : Release Request for SDCCH (SAPI 0).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 GLOBAL BOOL dcch0_release_req (T_DL_RELEASE_REQ * release_req)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 BOOL bFree = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 TRACE_FUNCTION ("dcch0_release_req()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 if (release_req->mode EQ DL_LOCAL_END_RELEASE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, release_req->ch_type, "local end release req");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 dcch0_init_dl_data ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 bFree = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, release_req->ch_type, "normal release req");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 dl_data->cch[C_DCCH0].ch_type = release_req->ch_type;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361 switch (dl_data->state[C_DCCH0])
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364 bFree = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367 case STATE_CONTENTION_RESOLUTION:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 case STATE_MULTIPLE_FRAME_ESTABLISHED:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 case STATE_TIMER_RECOVERY:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 if (!dl_data->dcch0_disc_request AND (dl_data->cch[C_DCCH0].vtx EQ RR_CMD))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372 dl_data->dcch0_disc_request = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373 dcch3_init_dl_data (); /*Disabling SAPI 3 connections */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377 dcch3_init_dl_data (); /*Disabling SAPI 3 connections */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 com_prepare_DISC (C_DCCH0, release_req->sapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
380 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
381
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382 case STATE_AWAITING_RELEASE:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383 dl_data->cch[C_DCCH0].T200_counter = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
387
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
388 if (bFree EQ FALSE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
390 PREUSE (release_req, release_cnf, DL_RELEASE_CNF);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
391 release_cnf->indication =
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
392 com_queue_awaiting_transmission (PS_SAPI_0) ? DL_UNSERVED : DL_ALL_DONE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
393 PSENDX (RR, release_cnf);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
394 dcch0_init_dl_data ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
395 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
396
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
397 return bFree;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
398 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
399
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
400 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
401 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
402 | PROJECT : GSM-PS (6147) MODULE : DL_SDCCH |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
403 | STATE : code ROUTINE : sdcch0_mdl_release_req |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
404 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
405
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
406 PURPOSE : Release Request from Mobility Management for SDCCH (SAPI 0).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
407
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
408 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
409
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
410 GLOBAL void dcch0_mdl_release_req (void)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
411 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
412 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
413 TRACE_FUNCTION ("dcch0_mdl_release_req()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
414
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
415 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, dl_data->cch[C_DCCH0].ch_type, "mdl rel req");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
416
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
417 switch (dl_data->state[C_DCCH0])
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
418 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
419 case STATE_CONTENTION_RESOLUTION:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
420 case STATE_AWAITING_RELEASE:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
421 drr_dl_release_cnf (dl_data->cch[C_DCCH0].ch_type, PS_SAPI_0, TRUE);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
422 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
423 case STATE_MULTIPLE_FRAME_ESTABLISHED:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
424 case STATE_TIMER_RECOVERY:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
425 drr_dl_release_ind (dl_data->cch[C_DCCH0].ch_type, PS_SAPI_0, NOT_PRESENT_8BIT, TRUE);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
426 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
427 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
428 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
429 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
430 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
431
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
432 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
433 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
434 | PROJECT : GSM-PS (6147) MODULE : DL_SDCCH |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
435 | STATE : code ROUTINE : sdcch0_suspend_req |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
436 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
437
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
438 PURPOSE : Suspend Request for SDCCH (SAPI 0).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
439
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
440 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
441
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
442 GLOBAL void dcch0_suspend_req (T_DL_SUSPEND_REQ * suspend_req)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
443 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
444 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
445 T_CCH *pcch = &dl_data->cch[C_DCCH0];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
446
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
447 TRACE_FUNCTION ("dcch0_suspend_req()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
448
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
449 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, suspend_req->ch_type, "suspend req");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
450
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
451 pcch->ch_type = suspend_req->ch_type;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
452
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
453 TRACE_EVENT_WIN_P1 ("reset dcch0_ch_type=%s ->0", CH_TYPE_NAME[dl_data->dcch0_ch_type]);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
454 dl_data->dcch0_ch_type = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
455
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
456 switch (dl_data->state[C_DCCH0])
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
457 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
458 case STATE_CONTENTION_RESOLUTION:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
459 case STATE_MULTIPLE_FRAME_ESTABLISHED:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
460 case STATE_TIMER_RECOVERY:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
461 case STATE_AWAITING_RELEASE:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
462 pcch->T200_counter = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
463 pcch->time_flag = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
464 pcch->contention_resolution = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
465 set_channel_state (C_DCCH0, STATE_SUSPENDED);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
466 dcch3_init_dl_data (); /* Disabling SAPI 3 connections */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
467
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
468 #if 0 /* yes, from now DL sends measurement reports also in suspended state */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
469 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
470 * no further measurement reports
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
471 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
472 sacch0_reset_meas (dl_data);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
473 #endif /* 0|1 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
474 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
475
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
476 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
477 TRACE_EVENT ("INVALID SUSPEND STATE");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
478 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
479 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
480 COM_FREE_POINTER (suspend_req);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
481
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
482 TRACE_EVENT_WIN_P5 ("SUSPEND_REQ: %s SAPI=%u vtx=%s (%s#%u)", CH_TYPE_NAME[pcch->ch_type],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
483 PS_SAPI_0, VTX_NAME[pcch->vtx],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
484 __FILE10__, __LINE__);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
485 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
486
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
487 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
488 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
489 | PROJECT : GSM-PS (6147) MODULE : DL_SDCCH |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
490 | STATE : code ROUTINE : dcch0_check_disc |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
491 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
492
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
493 PURPOSE : DISC command frame on DCCH0.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
494
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
495 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
496
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
497 GLOBAL int dcch0_check_disc (int send)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
498 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
499 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
500 TRACE_FUNCTION ("dcch0_check_disc()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
501
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
502 if (dl_data->dcch0_disc_request AND !(dl_data->cch[C_DCCH0].vtx EQ RR_CMD))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
503 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
504 dcch3_init_dl_data (); /*Disabling SAPI 3 connections */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
505 com_prepare_DISC (C_DCCH0, PS_SAPI_0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
506 dl_data->dcch0_disc_request = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
507 #if defined(DELAYED_SABM)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
508 dl_data->dcch0_sabm_flag = NOT_PRESENT_8BIT; /* delete pending delayed SABM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
509 #endif /* DELAYED_SABM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
510 return uplink_awaiting_release (C_DCCH0, PS_SAPI_0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
511 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
512 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
513 return send;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
514 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
515
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
516 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
517 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
518 | PROJECT : GSM-PS (6147) MODULE : DL_SDCCH |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
519 | STATE : code ROUTINE : dcch0_data_req |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
520 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
521
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
522 PURPOSE : Data Request on SDCCH (SAPI 0).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
523
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
524 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
525
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
526 GLOBAL void dcch0_data_req (T_DL_DATA_REQ * data_req)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
527 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
528 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
529 TRACE_FUNCTION ("sdcch0_data_req()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
530
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
531 dl_data->cch[C_DCCH0].ch_type = data_req->ch_type;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
532
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
533 switch (dl_data->state[C_DCCH0])
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
534 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
535 case STATE_MULTIPLE_FRAME_ESTABLISHED:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
536 case STATE_TIMER_RECOVERY:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
537 case STATE_SUSPENDED:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
538 case STATE_CONTENTION_RESOLUTION:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
539 com_store_queue (PS_SAPI_0, data_req);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
540 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
541
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
542 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
543 COM_FREE_POINTER (data_req);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
544 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
545 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
546 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
547
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
548 #endif /* !DL_DCCH0_C */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
549
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
550
|