comparison src/g23m-gprs/grr/grr_tcp.c @ 183:219afcfc6250

src/g23m-gprs: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 13 Oct 2016 04:24:13 +0000
parents
children
comparison
equal deleted inserted replaced
182:f02d0a0e1849 183:219afcfc6250
1 /*
2 +-----------------------------------------------------------------------------
3 | Project : GPRS (8441)
4 | Modul : GRR
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 module implements primitive handler functions for service
18 | TC of entity GRR.
19 +-----------------------------------------------------------------------------
20 */
21
22 #ifndef GRR_TCP_C
23 #define GRR_TCP_C
24 #endif
25
26 #define ENTITY_GRR
27
28 /*==== INCLUDES =============================================================*/
29
30 #include "typedefs.h" /* to get Condat data types */
31 #include "vsi.h" /* to get a lot of macros */
32 #include <string.h>
33 #include "macdef.h"
34 #include "gprs.h"
35 #include "gsm.h" /* to get a lot of macros */
36 #include "ccdapi.h" /* to get CCD API */
37 #include "cnf_grr.h" /* to get cnf-definitions */
38 #include "mon_grr.h" /* to get mon-definitions */
39 #include "prim.h" /* to get the definitions of used SAP and directions */
40 #include "message.h" /* to get air message definitions */
41 #include "grr.h" /* to get the global entity definitions */
42 #include "grr_f.h" /* to get the grr global function definitions */
43 #include "grr_tcf.h" /* to get the service TC functions definitions */
44 #include "grr_tcs.h" /* to get the service TC functions definitions */
45 #include "grr_ctrls.h" /* to get the service CTRL signal definitions */
46 #include "grr_cpaps.h" /* to get the service CPAP signal definitions */
47 #include "grr_meass.h"
48
49 /*==== CONST ================================================================*/
50
51 /*==== DIAGNOSTICS ==========================================================*/
52
53 /*==== LOCAL VARS ===========================================================*/
54
55 /*==== LOCAL TYPES ==========================================================*/
56
57 /*==== PRIVATE FUNCTIONS ====================================================*/
58
59 /*==== PUBLIC FUNCTIONS =====================================================*/
60
61
62 /*
63 +------------------------------------------------------------------------------
64 | Function : tc_t3162
65 +------------------------------------------------------------------------------
66 | Description : Handles the primitive T3162
67 |
68 | Parameters : void
69 |
70 +------------------------------------------------------------------------------
71 */
72 GLOBAL void tc_t3162 ( void )
73 {
74 TRACE_FUNCTION( "tc_t3162" );
75
76 switch( GET_STATE( TC ) )
77 {
78 case TC_WAIT_ASSIGN:
79 case TC_POLLING:
80 SET_STATE(TC,TC_PIM);
81 tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ONE);
82 break;
83 default:
84 TRACE_ERROR( "T3162 unexpected" );
85 break;
86 }
87
88 } /* tc_t3162() */
89
90
91
92 /*
93 +------------------------------------------------------------------------------
94 | Function : tc_t3168
95 +------------------------------------------------------------------------------
96 | Description : Handles the primitive T3168
97 | This timer is involved in 3 Procedures
98 | 1) Two Phase Access Procedure
99 | 2) Uplink TBF Setup on existing Downlink TBF
100 | 3) Uplink Realloaction Procedure on existing Uplink TBF
101 |
102 | Parameters : void
103 |
104 +------------------------------------------------------------------------------
105 */
106 GLOBAL void tc_t3168 ( void )
107 {
108 TRACE_FUNCTION( "tc_t3168" );
109 /*
110 * The expiry of this timer may occure in 1 case:
111 *
112 * b) two phase access procedure
113 *
114 */
115
116 switch( GET_STATE( TC ) )
117 {
118 case TC_WAIT_2P_ASSIGN:
119 /*
120 * case b) stop for waiting assignment
121 */
122 tc_stop_normal_burst_req( );
123 if( grr_t_status( T3174 ) > 0 )
124 {
125 TRACE_ERROR( " Contention Failure on the network commanded cell: 3168 expired" );
126 grr_data->pcco_failure_cause = 1;
127 sig_tc_ctrl_access_reject_on_new_cell();
128 }
129 break;
130
131 default:
132 TRACE_ERROR( "T3168 unexpected" );
133 break;
134 }
135
136 } /* tc_t3168() */
137
138
139
140 /*
141 +------------------------------------------------------------------------------
142 | Function : tc_t3170
143 +------------------------------------------------------------------------------
144 | Description : Handles the primitive T3170
145 |
146 | Parameters : void
147 |
148 +------------------------------------------------------------------------------
149 */
150 GLOBAL void tc_t3170 ( void )
151 {
152
153 TRACE_FUNCTION( "tc_t3170" );
154
155 if(grr_t_status( T3176 ) > 0 )/*in case pcco running, t3170 should be ignored.*/
156 {
157 TRACE_EVENT("t3170 expired when t3176 is running: ignore");
158 return;
159 }
160
161 switch( GET_STATE( TC ) )
162 {
163 case TC_SINGLE_BLOCK:
164 /*
165 * MPHP_STOP_SINGLE_BLOCK_REQ was sent at receiving the packet access reject.
166 */
167 SET_STATE(TC,TC_PIM);
168 TRACE_EVENT("T3170 expired in TC_SINGLE_BLOCK");
169 tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ONE);
170 tc_set_stop_ctrl_blk( FALSE, CGRLC_BLK_OWNER_NONE, 0 );
171 break;
172 case TC_WAIT_2P_ASSIGN:
173
174 #if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH
175 if(grr_data->tc.tbf_est_pacch)
176 {
177 TRACE_EVENT_P1("T3170 expired in TC_WAIT_2P_ASSIGN tbf_est_pacch = %d",grr_data->tc.tbf_est_pacch);
178 tc_handle_error_ra();
179 }
180 else
181 #endif
182 {
183 /*
184 * GMMRR_STATUS_IND will send in tc_handle_error_ra after MPHP_STOP_SINGLE_BLOCK_CON
185 */
186 TRACE_EVENT("T3170 expired in TC_WAIT_2P_ASSIGN/");
187 tc_stop_normal_burst_req( );
188 }
189 break;
190 #if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH
191 case TC_TBF_ACTIVE :
192 if(grr_data->tc.tbf_est_pacch)
193 {
194 TRACE_EVENT("T3170 expired in TC_TBF_ACTIVE tbf_est_pacch active");
195 tc_handle_error_ra();
196 }
197 else
198 {
199 TRACE_ERROR("T3170 expired when TC:TC_TBF_ACTIVE");
200 }
201 break;
202 #endif
203 case TC_WAIT_ASSIGN:
204 case TC_POLLING:
205 SET_STATE(TC,TC_PIM);
206 TRACE_EVENT("T3170 expired in TC_WAIT_ASSIGN//TC_POLLING");
207 tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ONE);
208 tc_set_stop_ctrl_blk( FALSE, CGRLC_BLK_OWNER_NONE, 0 );
209 sig_tc_ctrl_set_pckt_mode( GLBL_PCKT_MODE_IDLE, TASK_STOP_DUMMY_VALUE );
210 break;
211 default:
212 TRACE_ERROR( "T3170 unexpected" );
213 break;
214 }
215 } /* tc_t3170() */
216
217
218
219 /*
220 +------------------------------------------------------------------------------
221 | Function : tc_t3172
222 +------------------------------------------------------------------------------
223 | Description : Handles the primitive T3172
224 |
225 | Parameters : inctance_i - identifier of timer's inctance
226 |
227 +------------------------------------------------------------------------------
228 */
229 GLOBAL void tc_t3172 ( UBYTE inctance_i )
230 {
231 TRACE_EVENT( "T3172 expired" );
232
233 switch( GET_STATE( TC ) )
234 {
235 case TC_PIM:
236 tc_cgrlc_access_status_req();
237 break;
238 case TC_CPAP:
239 /*
240 * set the CPAP state to CPAP_IDLE
241 */
242 sig_tc_cpap_t3142();
243 tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ALL);
244
245 /*
246 * Do we need to set the TC state to SET_STATE(TC, TC_PIM);??
247 */
248 SET_STATE(TC, TC_PIM);
249 break;
250 case TC_WAIT_ASSIGN:
251 case TC_POLLING:
252 SET_STATE(TC,TC_PIM);
253 vsi_t_stop(GRR_handle,T3170);
254 /*
255 * to set the states in services
256 */
257 tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ALL);
258 sig_tc_ctrl_set_pckt_mode( GLBL_PCKT_MODE_IDLE, TASK_STOP_DUMMY_VALUE );
259 break;
260 case TC_WAIT_2P_ASSIGN:
261 /* Donot send stop single block req as it would have got
262 * sent on 3170 expiry */
263 if(grr_t_status(T3170) > 0)
264 {
265 vsi_t_stop(GRR_handle,T3170);
266 tc_stop_normal_burst_req();
267 }
268 tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ALL);
269 sig_tc_ctrl_set_pckt_mode( GLBL_PCKT_MODE_IDLE, TASK_STOP_DUMMY_VALUE );
270 SET_STATE(TC,TC_PIM);
271 break;
272 case TC_CONTENTION_RESOLUTION:
273 case TC_ACCESS_DISABLED:
274 case TC_TBF_ACTIVE:
275 break;
276 default:
277 TRACE_ERROR( "T3172 unexpected" );
278 break;
279 }
280
281 } /* tc_t3172() */
282
283
284
285 /*
286 +------------------------------------------------------------------------------
287 | Function : tc_t3186
288 +------------------------------------------------------------------------------
289 | Description : Handles the primitive T3186
290 |
291 | Parameters : void
292 |
293 +------------------------------------------------------------------------------
294 */
295 GLOBAL void tc_t3186 ( void )
296 {
297 TRACE_FUNCTION( "tc_t3186" );
298 TRACE_EVENT("T3186 expired");
299
300
301 switch( GET_STATE( TC ) )
302 {
303 case TC_WAIT_ASSIGN:
304 SET_STATE(TC, TC_PIM);
305 /*
306 * stop sending packet access request
307 */
308 tc_send_ra_stop_req();
309 tc_cgrlc_ul_tbf_res(CGRLC_TBF_MODE_ACCESS_FAILED,CGRLC_PRIM_STATUS_ONE);
310 break;
311 default:
312 TRACE_ERROR( "T3186 unexpected" );
313 break;
314 }
315
316 } /* tc_t3186() */
317
318 /*
319 +------------------------------------------------------------------------------
320 | Function : tc_cgrlc_tbf_rel_ind
321 +------------------------------------------------------------------------------
322 | Description : Handles the primitive cgrlc_tbf_rel_ind
323 |
324 | Parameters : cgrlc_tbf_rel_ind - Ptr to primitive payload
325 |
326 +------------------------------------------------------------------------------
327 */
328 GLOBAL void tc_cgrlc_tbf_rel_ind ( T_CGRLC_TBF_REL_IND * cgrlc_tbf_rel_ind )
329 {
330 TRACE_FUNCTION( "tc_cgrlc_tbf_rel_ind" );
331
332
333 switch( GET_STATE( TC ) )
334 {
335 case TC_CONTENTION_RESOLUTION:
336 if(( !grr_is_pbcch_present()) AND
337 ( grr_data->tc.dcch_present) AND
338 cgrlc_tbf_rel_ind->tbf_rel_cause EQ CGRLC_TBF_REL_CR_FAILED AND
339 cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_UL )
340 {
341 SET_STATE(TC,TC_CPAP);
342 sig_tc_cpap_con_res_fail();
343 break;
344 }
345
346 /*lint -fallthrough*/
347
348 case TC_TBF_ACTIVE:
349 if( grr_data->cc_running OR grr_t_status( T3174 ) > 0 AND
350 cgrlc_tbf_rel_ind->tbf_rel_cause EQ CGRLC_TBF_REL_CR_FAILED AND
351 cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_UL)
352 {
353 TRACE_ERROR( " Contention Resolution failure on new cell" );
354 sig_tc_ctrl_contention_failure();
355 }
356 else if( cgrlc_tbf_rel_ind->tbf_rel_cause EQ CGRLC_TBF_REL_WITH_CELL_RESELECT AND
357 ( cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_UL OR
358 cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_DL_UL ) )
359 {
360 sig_tc_ctrl_prepare_abnorm_rel_with_cr( );
361 }
362 else
363 {
364 if( (grr_data->tbf_type EQ CGRLC_TBF_MODE_DL_UL OR
365 grr_data->tbf_type EQ cgrlc_tbf_rel_ind->tbf_mode) AND
366 cgrlc_tbf_rel_ind->tbf_mode NEQ CGRLC_TBF_MODE_NULL)
367 {
368 if( (grr_data->downlink_tbf.trans_id NEQ cgrlc_tbf_rel_ind->dl_trans_id) AND
369 cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_DL)
370 {
371 /* Dont perform REL_R as just configured L1 with TBF_R*/
372 TRACE_EVENT_P2("GRR and GRLC DL Transaction Id Diff grr=%d grlc=%d",
373 grr_data->downlink_tbf.trans_id,cgrlc_tbf_rel_ind->dl_trans_id);
374 }
375 else
376 {
377 tc_send_tbf_rel (cgrlc_tbf_rel_ind->tbf_mode);
378 tc_deactivate_tbf(cgrlc_tbf_rel_ind->tbf_mode);
379 }
380 }
381 else
382 {
383 TRACE_EVENT_P2("cgrlc_tbf_rel_ind grr_data->tbf_type=%d,cgrlc_tbf_rel_ind->tbf_mode=%d"
384 ,grr_data->tbf_type
385 ,cgrlc_tbf_rel_ind->tbf_mode);
386 }
387 }
388
389 if( cgrlc_tbf_rel_ind->v_c_value EQ TRUE )
390 {
391 meas_c_set_c_value( &cgrlc_tbf_rel_ind->c_value );
392 }
393 break;
394 #if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH
395 case TC_WAIT_2P_ASSIGN :
396 /* T3168 timer expires in GRLC */
397 if((grr_data->tc.tbf_est_pacch) AND
398 (cgrlc_tbf_rel_ind->tbf_mode EQ CGRLC_TBF_MODE_2PA))
399 {
400 tc_send_tbf_rel (cgrlc_tbf_rel_ind->tbf_mode);
401 tc_deactivate_tbf(cgrlc_tbf_rel_ind->tbf_mode);
402 }
403 break;
404 #endif
405 default:
406 TRACE_ERROR( "cgrlc_tbf_rel_ind unexpected" );
407 break;
408 }
409
410 PFREE(cgrlc_tbf_rel_ind);
411
412 } /* tc_cgrlc_tbf_rel_ind() */
413
414
415
416 /*
417 +------------------------------------------------------------------------------
418 | Function : tc_cgrlc_ul_tbf_ind
419 +------------------------------------------------------------------------------
420 | Description : Handles the primitive cgrlc_ul_tbf_ind
421 |
422 | Parameters : cgrlc_ul_tbf_ind - Ptr to primitive payload
423 |
424 +------------------------------------------------------------------------------
425 */
426 GLOBAL void tc_cgrlc_ul_tbf_ind ( T_CGRLC_UL_TBF_IND * cgrlc_ul_tbf_ind )
427 {
428 TRACE_FUNCTION( "tc_cgrlc_ul_tbf_ind" );
429
430
431 switch( GET_STATE( TC ) )
432 {
433 case TC_PIM:
434 grr_data->r_bit = 0;
435 grr_data->tc.sending_req = FALSE;
436 grr_data->tc.n_acc_req = 0;
437 grr_data->tc.ra_once_sent= 0;
438
439 if(cgrlc_ul_tbf_ind->access_type EQ CGRLC_AT_NULL )
440 {
441 /*
442 * check if single block access is required
443 */
444 if(tc_get_num_ctrl_blck( ) NEQ 0)
445 {
446 grr_data->tc.v_sb_without_tbf = TRUE;
447 grr_data->uplink_tbf.nr_blocks = 1;
448 grr_data->uplink_tbf.prio = RADIO_PRIO_4;
449 grr_data->uplink_tbf.access_type = CGRLC_AT_SINGLE_BLOCK;
450 grr_data->uplink_tbf.ti = 0; /* contention resolution NOT required */
451 tc_check_access_is_needed( CAC_OTHER );
452 }
453 else
454 {
455 sig_tc_ctrl_set_pckt_mode( GLBL_PCKT_MODE_IDLE, TASK_STOP_DUMMY_VALUE );
456 }
457 }
458 else
459 {
460 grr_data->uplink_tbf.access_type = cgrlc_ul_tbf_ind->access_type;
461 grr_data->uplink_tbf.prio = cgrlc_ul_tbf_ind->ra_prio;
462 grr_data->uplink_tbf.nr_blocks = cgrlc_ul_tbf_ind->nr_blocks;
463 grr_data->uplink_tbf.prim_type = cgrlc_ul_tbf_ind->llc_prim_type;
464 grr_data->uplink_tbf.peak = cgrlc_ul_tbf_ind->peak;
465 grr_data->uplink_tbf.rlc_oct_cnt = cgrlc_ul_tbf_ind->rlc_oct_cnt;
466
467 if(grr_data->uplink_tbf.access_type EQ CGRLC_AT_TWO_PHASE)
468 grr_data->uplink_tbf.ti = 0; /* contention resolution NOT required */
469 else
470 grr_data->uplink_tbf.ti = 1; /* contention resolution required */
471
472
473 TRACE_EVENT_P1("tc_cgrlc_ul_tbf_ind: nr_block: %d", grr_data->uplink_tbf.nr_blocks);
474
475 tc_check_access_is_needed( CAC_OTHER );
476 /*
477 * forward control messages to GRLC
478 */
479 if(tc_get_num_ctrl_blck( ) NEQ 0)
480 {
481 tc_send_control_msg_to_grlc();
482 }
483
484 }
485 break;
486 #if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH
487 case TC_CONTENTION_RESOLUTION:
488 case TC_TBF_ACTIVE:
489 /* TBF establishment on PACCH is initiated by GRLC */
490 if(cgrlc_ul_tbf_ind->tbf_est_pacch)
491 {
492 /* Set TBF establishment on PACCH flag */
493 grr_data->tc.tbf_est_pacch = TRUE;
494
495 /* Contention resolution is not required */
496 grr_data->uplink_tbf.ti = 0;
497 }
498 break;
499 #endif
500 default:
501 TRACE_ERROR( "cgrlc_ul_tbf_ind unexpected" );
502 break;
503 }
504
505 PFREE(cgrlc_ul_tbf_ind);
506
507 } /* tc_cgrlc_ul_tbf_ind() */
508
509
510 /*
511 +------------------------------------------------------------------------------
512 | Function : tc_cgrlc_ctrl_msg_sent_ind
513 +------------------------------------------------------------------------------
514 | Description : Handles the primitive cgrlc_ctrl_msg_sent_ind
515 |
516 | Parameters : cgrlc_ctrl_msg_sent_ind - Ptr to primitive payload
517 |
518 +------------------------------------------------------------------------------
519 */
520 GLOBAL void tc_cgrlc_ctrl_msg_sent_ind ( T_CGRLC_CTRL_MSG_SENT_IND * cgrlc_ctrl_msg_sent_ind )
521 {
522 TRACE_FUNCTION( "tc_cgrlc_ctrl_msg_sent_ind" );
523
524
525 switch( GET_STATE( TC ) )
526 {
527 case TC_CONTENTION_RESOLUTION:
528 case TC_TBF_ACTIVE:
529 /*
530 * todo : delete the first ctrl msg. Only type of cntrl msgs will be stored
531 */
532
533 break;
534 default:
535 TRACE_ERROR( "cgrlc_ctrl_msg_sent_ind unexpected" );
536 break;
537 }
538
539 PFREE(cgrlc_ctrl_msg_sent_ind);
540
541 } /* tc_cgrlc_ctrl_msg_sent_ind() */
542
543 /*
544 +------------------------------------------------------------------------------
545 | Function : tc_cgrlc_starting_time_ind
546 +------------------------------------------------------------------------------
547 | Description : Handles the primitive cgrlc_starting_time_ind
548 |
549 | Parameters : cgrlc_starting_time_ind - Ptr to primitive payload
550 |
551 +------------------------------------------------------------------------------
552 */
553 GLOBAL void tc_cgrlc_starting_time_ind ( T_CGRLC_STARTING_TIME_IND * cgrlc_starting_time_ind )
554 {
555 TRACE_FUNCTION( "tc_cgrlc_starting_time_ind" );
556
557
558 switch( GET_STATE( TC ) )
559 {
560 case TC_CONTENTION_RESOLUTION:
561 case TC_TBF_ACTIVE:
562 /*
563 * store the tfi
564 */
565 if(cgrlc_starting_time_ind->tbf_mode EQ CGRLC_TBF_MODE_UL)
566 {
567 grr_data->uplink_tbf.tfi = cgrlc_starting_time_ind->tfi;
568 grr_data->uplink_tbf.st_tfi = 0xFF;
569 grr_data->uplink_tbf.tbf_start_fn = CGRLC_STARTING_TIME_NOT_PRESENT;
570 grr_data->uplink_tbf.polling_bit = 0xFF;
571 grr_data->uplink_tbf.rlc_db_granted = 0;
572 if(grr_data->uplink_tbf.ts_usage)
573 {
574 grr_data->uplink_tbf.ts_mask = grr_data->uplink_tbf.ts_usage;
575 }
576 else
577 {
578 TRACE_EVENT("tc_cgrlc_starting_time_ind: uplink ts_usage is 0");
579 }
580 grr_data->uplink_tbf.ts_usage = 0;
581
582 #if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH
583 grr_data->tc.tbf_est_pacch = FALSE;
584 #endif
585 }
586 else
587 {
588 grr_data->downlink_tbf.tfi = cgrlc_starting_time_ind->tfi;
589 grr_data->downlink_tbf.st_tfi = 0xFF;
590 grr_data->downlink_tbf.tbf_start_fn = CGRLC_STARTING_TIME_NOT_PRESENT;
591 grr_data->downlink_tbf.polling_bit = 0xFF;
592 if(grr_data->downlink_tbf.ts_usage)
593 {
594 grr_data->downlink_tbf.ts_mask = grr_data->downlink_tbf.ts_usage;
595 }
596 else
597 {
598 TRACE_EVENT("tc_cgrlc_starting_time_ind: downlink ts_usage is 0");
599 }
600 grr_data->downlink_tbf.ts_usage = 0;
601 }
602
603 break;
604 default:
605 TRACE_ERROR( "cgrlc_starting_time_ind unexpected" );
606 break;
607 }
608
609 PFREE(cgrlc_starting_time_ind);
610
611 } /* tc_cgrlc_starting_time_ind() */
612
613 /*
614 +------------------------------------------------------------------------------
615 | Function : tc_cgrlc_t3192_started_ind
616 +------------------------------------------------------------------------------
617 | Description : Handles the primitive cgrlc_t3192_started_ind
618 |
619 | Parameters : cgrlc_t3192_started_ind - Ptr to primitive payload
620 |
621 +------------------------------------------------------------------------------
622 */
623 GLOBAL void tc_cgrlc_t3192_started_ind ( T_CGRLC_T3192_STARTED_IND * cgrlc_t3192_started_ind )
624 {
625 TRACE_FUNCTION( "tc_cgrlc_t3192_started_ind" );
626
627
628 switch( GET_STATE( TC ) )
629 {
630 case TC_CONTENTION_RESOLUTION:
631 case TC_TBF_ACTIVE:
632 grr_data->downlink_tbf.t3192 = TRUE;
633 break;
634 default:
635 TRACE_ERROR( "cgrlc_t3192_started_ind unexpected" );
636 break;
637 }
638
639 PFREE(cgrlc_t3192_started_ind);
640
641 } /* tc_cgrlc_t3192_started_ind() */
642
643 /*
644 +------------------------------------------------------------------------------
645 | Function : tc_cgrlc_cont_res_done_ind
646 +------------------------------------------------------------------------------
647 | Description : Handles the primitive cgrlc_cont_res_done_ind
648 |
649 | Parameters : cgrlc_cont_res_done_ind - Ptr to primitive payload
650 |
651 +------------------------------------------------------------------------------
652 */
653 GLOBAL void tc_cgrlc_cont_res_done_ind ( T_CGRLC_CONT_RES_DONE_IND * cgrlc_cont_res_done_ind )
654 {
655 TRACE_FUNCTION( "tc_cgrlc_cont_res_done_ind" );
656
657
658 switch( GET_STATE( TC ) )
659 {
660 case TC_CONTENTION_RESOLUTION:
661 SET_STATE(TC,TC_TBF_ACTIVE);
662 grr_data->uplink_tbf.ti = 0;
663 /*TRACE_EVENT_P1("CONT_RES:nacc set from %d to zero",grr_data->tc.n_acc_req_procedures);*/
664 if(grr_data->cc_running OR grr_t_status( T3174 ) > 0)
665 {
666 sig_tc_ctrl_contention_ok();
667 }
668 break;
669 default:
670 TRACE_ERROR( "cgrlc_cont_res_done_ind unexpected" );
671 break;
672 }
673
674 PFREE(cgrlc_cont_res_done_ind);
675
676 } /* tc_cgrlc_cont_res_done_ind() */
677
678 /*
679 +------------------------------------------------------------------------------
680 | Function : tc_cgrlc_ta_value_ind
681 +------------------------------------------------------------------------------
682 | Description : Handles the primitive cgrlc_ta_value_ind
683 |
684 | Parameters : cgrlc_ta_value_ind - Ptr to primitive payload
685 |
686 +------------------------------------------------------------------------------
687 */
688 GLOBAL void tc_cgrlc_ta_value_ind ( T_CGRLC_TA_VALUE_IND * cgrlc_ta_value_ind )
689 {
690 TRACE_FUNCTION( "tc_cgrlc_ta_value_ind" );
691
692
693 switch( GET_STATE( TC ) )
694 {
695 case TC_CONTENTION_RESOLUTION:
696 case TC_TBF_ACTIVE:
697 #if defined REL99 AND defined TI_PS_FF_TBF_EST_PACCH
698 case TC_WAIT_2P_ASSIGN:
699 #endif
700 grr_data->ta_params.ta_valid = TRUE;
701 grr_data->ta_params.ta_value = cgrlc_ta_value_ind->ta_value;
702 /*
703
704 {
705 ULONG trace[2];
706
707 trace[0] = grr_data->ta_params.ul_ta_tn << 0;
708 trace[0] |= grr_data->ta_params.ul_ta_i << 8;
709 trace[0] |= grr_data->ta_params.ta_value << 16;
710 trace[0] |= grr_data->ta_params.ta_valid << 24;
711
712 trace[1] = grr_data->ta_params.l1_ta_i << 0;
713 trace[1] |= grr_data->ta_params.l1_ta_value << 8;
714 trace[1] |= grr_data->ta_params.dl_ta_tn << 16;
715 trace[1] |= grr_data->ta_params.dl_ta_i << 24;
716
717 TRACE_EVENT_P4( "TA_PARAM_2: %08X%08X%02X %02X",
718 trace[0], trace[1], grr_data->ta_params.l1_ta_tn,
719 grr_data->ta_params.ta_value );
720 }
721
722 */
723
724 break;
725 default:
726 TRACE_ERROR( "cgrlc_ta_value_ind unexpected" );
727 break;
728 }
729
730 PFREE(cgrlc_ta_value_ind);
731
732 } /* tc_cgrlc_ta_value_ind() */
733
734
735 /*
736 +------------------------------------------------------------------------------
737 | Function : tc_cgrlc_test_mode_ind
738 +------------------------------------------------------------------------------
739 | Description : Handles the primitive cgrlc_test_mode_ind, GRLC is indicating
740 | that test mode is runnig
741 |
742 | Parameters : cgrlc_test_mode_ind - Ptr to primitive payload
743 |
744 +------------------------------------------------------------------------------
745 */
746 GLOBAL void tc_cgrlc_test_mode_ind ( T_CGRLC_TEST_MODE_IND * cgrlc_test_mode_ind )
747 {
748 TRACE_FUNCTION( "tc_cgrlc_test_mode_ind" );
749
750
751 switch( GET_STATE( TC ) )
752 {
753 case TC_CONTENTION_RESOLUTION:
754 case TC_TBF_ACTIVE:
755 case TC_PIM:/*testmode ended*/
756
757 grr_data->test_mode = cgrlc_test_mode_ind->test_mode_flag;
758 sig_tc_ctrl_test_mode_ind();
759
760 break;
761 default:
762 TRACE_ERROR( "cgrlc_test_mode_ind unexpected" );
763 break;
764 }
765
766 PFREE(cgrlc_test_mode_ind);
767
768 } /* tc_cgrlc_test_mode_ind() */