comparison src/g23m-fad/ra/ra_rlp.c @ 174:90eb61ecd093

src/g23m-fad: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 12 Oct 2016 05:40:46 +0000
parents
children
comparison
equal deleted inserted replaced
173:bf64d785238a 174:90eb61ecd093
1 /*
2 +-----------------------------------------------------------------------------
3 | Project : GSM-F&D (8411)
4 | Modul : RA_RLP
5 +-----------------------------------------------------------------------------
6 | Copyright 2002 Texas Instruments Berlin, AG
7 | All rights reserved.
8 |
9 | This file is confidential and a trade secret of Texas
10 | Instruments Berlin, AG
11 | The receipt of or possession of this file does not convey
12 | any rights to reproduce or disclose its contents or to
13 | manufacture, use, or sell anything it may describe, in
14 | whole, or in part, without the specific written consent of
15 | Texas Instruments Berlin, AG.
16 +-----------------------------------------------------------------------------
17 | Purpose : This Modul defines the functions for the non-transparent
18 | data model (RLP) for the component RA of the mobile
19 | station
20 +-----------------------------------------------------------------------------
21 */
22
23 #ifndef RA_RLP_C
24 #define RA_RLP_C
25 #endif
26
27 #define ENTITY_RA
28
29 /*==== INCLUDES ===================================================*/
30
31 #include <string.h>
32 #include "typedefs.h"
33 #include "vsi.h"
34 #include "macdef.h"
35 #include "pconst.cdg"
36 #include "custom.h"
37 #include "gsm.h"
38 #include "cnf_ra.h"
39 #include "prim.h"
40 #include "pei.h"
41 #include "tok.h"
42 #include "ccdapi.h"
43 #include "ra.h"
44
45 /*==== CONST ======================================================*/
46 /*==== TYPES ======================================================*/
47 /*==== VARIABLES ==================================================*/
48 /*==== FUNCTIONS ==================================================*/
49
50 /*
51 +--------------------------------------------------------------------+
52 | PROJECT : GSM-F&D (8411) MODULE : RA_RLP |
53 | STATE : code ROUTINE : rlp_init |
54 +--------------------------------------------------------------------+
55
56 PURPOSE :
57
58 */
59
60 GLOBAL void rlp_init(void)
61 {
62 TRACE_FUNCTION("rlp_init()");
63
64 memset(ra_data->rlp, 0, sizeof(T_RLP));
65 hCommRLP = vsi_c_open ( VSI_CALLER RLP_NAME );
66 hCommMMI = vsi_c_open ( VSI_CALLER ACI_NAME );
67 }
68
69 /*
70 +--------------------------------------------------------------------+
71 | PROJECT : GSM-F&D (8411) MODULE : RA_RLP |
72 | STATE : code ROUTINE : rlp_idle |
73 +--------------------------------------------------------------------+
74
75 PURPOSE : IDLE processing fpr uplink and downlink non-transparent mode
76 */
77
78 GLOBAL void rlp_idle(void)
79 {
80 TRACE_FUNCTION("rlp_idle()");
81 }
82
83 /*
84 +--------------------------------------------------------------------+
85 | PROJECT : GSM-F&D (8411) MODULE : RA_RLP |
86 | STATE : code ROUTINE : rlp_ul_null |
87 +--------------------------------------------------------------------+
88
89 PURPOSE :
90 */
91
92 GLOBAL void rlp_ul_null(void)
93 {
94 T_RLP *drlp = ra_data->rlp;
95 UBYTE i;
96
97 TRACE_FUNCTION("rlp_ul_null()");
98
99 if (ra_data->activated)
100 {
101 #ifdef TRACE_RA_RLP
102 drlp->fcs_error = 0L;
103 #endif
104 /*
105 * setup the communication parameters
106 */
107 shm_set_dsp_value (conf_b_itc, V_ITC_DATA);
108 shm_set_dsp_value (conf_b_ce, V_CE_NON_TRANSP);
109
110 switch (ra_data->tra_rate)
111 {
112 case TRA_FULLRATE_14400:
113 shm_set_dsp_value (conf_b_ur, V_UR_14400);
114 shm_set_dsp_value (conf_b_ct, V_CT_FR);
115 break;
116
117 case TRA_FULLRATE_9600:
118 shm_set_dsp_value (conf_b_ur, V_UR_9600);
119 shm_set_dsp_value (conf_b_ct, V_CT_FR);
120 break;
121
122 case TRA_FULLRATE_4800:
123 shm_set_dsp_value (conf_b_ur, V_UR_4800);
124 shm_set_dsp_value (conf_b_ct, V_CT_FR);
125 break;
126
127 case TRA_HALFRATE_4800:
128 shm_set_dsp_value (conf_b_ur, V_UR_4800);
129 shm_set_dsp_value (conf_b_ct, V_CT_HR);
130 break;
131
132 default:
133 break;
134 }
135
136 shm_set_dsp_value (ntu_M1, 0);
137 shm_set_dsp_value (ntu_M2, 0);
138 shm_set_dsp_value (ntu_empty, 1);
139 shm_set_dsp_value (ntu_byte_cnt, 2);
140
141 /*
142 * initialize the non-transparent mode data
143 */
144 drlp->ul_data_pending = FALSE;
145 drlp->m1 = 0;
146
147 ra_data->ra_data_ind.fr_type = FR_RLP;
148 ra_data->ra_data_ind.sdu.o_buf = 0;
149 ra_data->ra_data_ind.sdu.l_buf = 0;
150
151 ra_data->ra_ready_ind[0].req_frames = 1;
152
153 cl_ribu_init(&drlp->ulq, RLP_UL_QSIZE);
154
155 for (i = 0; i < drlp->ulq.depth; i++)
156 {
157 cl_set_frame_desc_0(&drlp->ul_frame_desc[i], NULL, 0);
158 }
159
160 cl_set_frame_desc_0(&ra_data->rlp->dl_frame_desc, NULL, 0);
161 shm_set_dsp_value (act_b_init, 1);
162
163 INIT_STATE (KER, RLP_INIT_L1);
164
165 #ifdef HO_WORKAROUND /* rlp_ul_null */
166 _act_d_ra_conf = *ra_data->shm.shm_addr[d_ra_conf];
167 TRACE_EVENT("d_ra_conf saved");
168 #endif
169
170 }
171 }
172
173 /*
174 +--------------------------------------------------------------------+
175 | PROJECT : GSM-F&D (8411) MODULE : RA_RLP |
176 | STATE : code ROUTINE : rlp_ul_init_l1 |
177 +--------------------------------------------------------------------+
178
179 PURPOSE :
180
181 */
182
183 GLOBAL void rlp_ul_init_l1(void)
184 {
185 TRACE_FUNCTION("rlp_ul_init_l1()");
186
187 if (shm_get_dsp_value (act_b_init) EQ 0)
188 {
189 /*
190 * initialisation finished -> enter the data transmission state
191 */
192 l1i_ra_activate_cnf();
193 SET_STATE (KER, RLP_DATA_TRANS);
194 }
195 }
196
197 /*
198 +--------------------------------------------------------------------+
199 | PROJECT : GSM-F&D (8411) MODULE : RA_RLP |
200 | STATE : code ROUTINE : rlp_ul_data_trans |
201 +--------------------------------------------------------------------+
202
203 PURPOSE :
204 */
205
206 GLOBAL void rlp_ul_data_trans(void)
207 {
208 T_RLP *drlp = ra_data->rlp;
209
210 TRACE_FUNCTION("rlp_ul_data_trans()");
211
212 if (drlp->ul_data_pending) /* a frame is ready to be sent */
213 {
214 USHORT len = 0;
215
216 switch (ra_data->tra_rate)
217 {
218 case TRA_FULLRATE_9600:
219 case TRA_HALFRATE_4800:
220 len = NT_DATA_SIZE;
221 drlp->ul_data_pending = FALSE;
222 break;
223
224 case TRA_FULLRATE_4800:
225 /* S844: 1=1st half, 0=2nd half */
226 if (shm_get_dsp_value (act_b_f48blk_ul) EQ 1)
227 {
228 TRACE_FUNCTION("send 4800 first half");
229 len = NT_DATA_SIZE_4800_FR_A;
230 drlp->ul_48_first_half_sent = TRUE;
231 }
232 else
233 {
234 if (drlp->ul_48_first_half_sent)
235 {
236 TRACE_FUNCTION("send 4800 second half");
237 len = NT_DATA_SIZE_4800_FR_B;
238 drlp->ul_data_pending = FALSE;
239 drlp->ul_frame_desc[drlp->ulq.ri].Adr[0] += NT_DATA_SIZE_4800_FR_A;
240 }
241 else
242 {
243 TRACE_FUNCTION("wait for 4800 first half");
244 len = 0;
245 }
246 }
247 break;
248
249 case TRA_FULLRATE_14400:
250 shm_set_dsp_value (ntu_M1, drlp->m1);
251 /* S844: 0 = first half, 1 = second half */
252 if (drlp->m1 EQ 0)
253 {
254 len = NT_DATA_SIZE_14400_A;
255 drlp->m1 = 1;
256 }
257 else
258 {
259 len = NT_DATA_SIZE_14400_B;
260 drlp->ul_data_pending = FALSE;
261 drlp->ul_frame_desc[drlp->ulq.ri].Adr[0] += NT_DATA_SIZE_14400_A;
262 }
263 break;
264 }
265 if (len > 0)
266 {
267 shm_set_dsp_buffer(&drlp->ul_frame_desc[drlp->ulq.ri],
268 ra_data->shm.shm_addr[adr_ntu_data]+wof_ntu_data, 0, len);
269 shm_set_dsp_value (ntu_empty, 0);
270 shm_set_dsp_value (ntu_byte_cnt, (len+2));
271 if (!drlp->ul_data_pending)
272 {
273 cl_ribu_read_index(&drlp->ulq);
274 /* PZ 22.7.99 */
275 drlp->ul_data_pending = (drlp->ulq.ri NEQ drlp->ulq.wi);
276 /* PZ 22.7.99 */
277 }
278 }
279 else
280 {
281 shm_set_dsp_value (ntu_M1, 0);
282 shm_set_dsp_value (ntu_empty, 1);
283 shm_set_dsp_value (ntu_byte_cnt, 2);
284 }
285 }
286 else
287 {
288 /* no frame is ready to be sent */
289 shm_set_dsp_value (ntu_M1, 0);
290 shm_set_dsp_value (ntu_empty, 1);
291 shm_set_dsp_value (ntu_byte_cnt, 2);
292 }
293
294 if (!drlp->ul_data_pending)
295 {
296 l1i_ra_ready_ind(hCommRLP, 0);
297 }
298 }
299
300 /*
301 +--------------------------------------------------------------------+
302 | PROJECT : GSM-F&D (8411) MODULE : RA_RLP |
303 | STATE : code ROUTINE : rlp_dl_data_trans |
304 +--------------------------------------------------------------------+
305
306 PURPOSE :
307 */
308
309 GLOBAL void rlp_dl_data_trans(void)
310 {
311 BOOL frame_complete = FALSE;
312
313 TRACE_FUNCTION("rlp_dl_data_trans()");
314
315 #ifdef HO_WORKAROUND /* rlp_dl_data_trans */
316 if (*ra_data->shm.shm_addr[d_ra_conf] NEQ _act_d_ra_conf)
317 {
318 *ra_data->shm.shm_addr[d_ra_conf] = _act_d_ra_conf; /* rlp_dl_data_trans */
319 TRACE_EVENT("HO_REFRESH rlp_dl_data_trans");
320 }
321 #endif
322
323 /*
324 * read out the received downlink data
325 */
326 if (shm_get_dsp_value (ntd_byte_cnt) > 0)
327 {
328 USHORT len = 0;
329
330 switch (ra_data->tra_rate)
331 {
332 case TRA_FULLRATE_9600:
333 case TRA_HALFRATE_4800:
334 if (shm_get_dsp_value (ntd_fcs_ok) EQ 0)
335 {
336 frame_complete = TRUE;
337 len = NT_DATA_SIZE;
338
339 #ifdef _SIMULATION_
340 cl_set_frame_desc_0(&ra_data->rlp->dl_frame_desc, ra_data->rlp->dl_buf, NT_DATA_SIZE);
341 ra_data->ra_data_ind.sdu.l_buf = NT_DATA_SIZE << 3;
342 #else
343 rlp_rbm_get_next_buffer(&ra_data->rlp->dl_frame_desc);
344 #endif
345 }
346 else
347 {
348 #ifdef TRACE_RA_RLP
349 TRACE_EVENT("FCS-Error");
350 ra_data->rlp->fcs_error++;
351 #endif
352 frame_complete = FALSE;
353 len = 0;
354 }
355 break;
356
357 case TRA_FULLRATE_4800:
358 /* S844: 0=1st half, 1=2nd half */
359 if (shm_get_dsp_value (act_b_f48blk_dl) EQ 0)
360 {
361 len = NT_DATA_SIZE_4800_FR_A;
362 frame_complete = FALSE;
363 #ifdef _SIMULATION_
364 cl_set_frame_desc_0(&ra_data->rlp->dl_frame_desc, ra_data->rlp->dl_buf, NT_DATA_SIZE_4800_FR_A+NT_DATA_SIZE_4800_FR_B);
365 ra_data->ra_data_ind.sdu.l_buf = (NT_DATA_SIZE_4800_FR_A+NT_DATA_SIZE_4800_FR_B) << 3;
366 #else
367 rlp_rbm_get_next_buffer(&ra_data->rlp->dl_frame_desc);
368 #endif
369 }
370 else if (shm_get_dsp_value (ntd_fcs_ok) EQ 0)
371 {
372 frame_complete = TRUE;
373 len = NT_DATA_SIZE_4800_FR_B;
374 ra_data->rlp->dl_frame_desc.Adr[0] += NT_DATA_SIZE_4800_FR_A;
375 }
376 else
377 {
378 #ifdef TRACE_RA_RLP
379 TRACE_EVENT("FCS-Error");
380 ra_data->rlp->fcs_error++;
381 #endif
382 frame_complete = FALSE;
383 len = 0;
384 }
385 break;
386
387 case TRA_FULLRATE_14400:
388 /* S844: 0 = first half, 1 = second half */
389 if (shm_get_dsp_value (ntd_M1) EQ 0)
390 {
391 frame_complete = FALSE;
392 len = NT_DATA_SIZE_14400_A;
393 #ifdef _SIMULATION_
394 cl_set_frame_desc_0(&ra_data->rlp->dl_frame_desc, ra_data->rlp->dl_buf, NT_DATA_SIZE_14400_A + NT_DATA_SIZE_14400_B);
395 ra_data->ra_data_ind.sdu.l_buf = (NT_DATA_SIZE_14400_A + NT_DATA_SIZE_14400_B) << 3;
396 #else
397 rlp_rbm_get_next_buffer(&ra_data->rlp->dl_frame_desc);
398 #endif
399 }
400 else if (shm_get_dsp_value (ntd_fcs_ok) EQ 0)
401 {
402 frame_complete = TRUE;
403 len = NT_DATA_SIZE_14400_B;
404 ra_data->rlp->dl_frame_desc.Adr[0] += NT_DATA_SIZE_14400_A;
405 }
406 else
407 {
408 #ifdef TRACE_RA_RLP
409 TRACE_EVENT("FCS-Error");
410 ra_data->rlp->fcs_error++;
411 #endif
412 frame_complete = FALSE;
413 len = 0;
414 }
415 break;
416 }
417 if (len > 0)
418 {
419 shm_get_dsp_buffer(&ra_data->rlp->dl_frame_desc, ra_data->shm.shm_addr[adr_ntd_data]+wof_ntd_data, len);
420 shm_set_dsp_value (ntd_byte_cnt, 0);
421
422 if (frame_complete)
423 {
424 l1i_ra_data_ind(hCommRLP);
425 }
426 }
427 }
428 }
429