FreeCalypso > hg > fc-magnetite
annotate src/g23m-gsm/dl/dl_state.c @ 686:59f07d67eb45
luna target split into luna1 and luna2
luna1 is FC Luna based on iWOW DSK v4.0 or v5.0 motherboard
luna2 is FC Luna based on FC Caramel2 MB
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Mon, 12 Oct 2020 18:51:24 +0000 | 
| parents | 4b7e0dba42f6 | 
| children | 
| rev | line source | 
|---|---|
| 104 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 +----------------------------------------------------------------------------- | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 | Project : GSM-PS | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 | Modul : DL_STATE | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 +----------------------------------------------------------------------------- | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 | Copyright 2002 Texas Instruments Berlin, AG | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 | All rights reserved. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 | | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 | This file is confidential and a trade secret of Texas | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 | Instruments Berlin, AG | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 | The receipt of or possession of this file does not convey | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 | any rights to reproduce or disclose its contents or to | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 | manufacture, use, or sell anything it may describe, in | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 | whole, or in part, without the specific written consent of | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 | Texas Instruments Berlin, AG. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 +----------------------------------------------------------------------------- | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 | Purpose : This Modul defines the state machine of the component DL | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 | (replaces the old channel dependent implementation) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 +----------------------------------------------------------------------------- | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 #ifndef DL_STATE_C | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 #define DL_STATE_C | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 #define ENTITY_DL | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 #define NEW_REJ_ACK /* Acknowledgement by valid reject frame | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 * in accordance with 3GPP 04.06, 5.5.3.1 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 * "On receipt of a valid I frame or supervisory frame" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 /*==== INCLUDES ===================================================*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 #include "typedefs.h" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 #include <string.h> | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 #include "vsi.h" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 #include "pconst.cdg" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 #include "custom.h" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 #include "gsm.h" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 #include "mon_dl.h" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 #include "prim.h" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 #include "pei.h" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 #include "tok.h" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 #include "ccdapi.h" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 #include "dl.h" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 #include "dl_em.h" | 
| 518 
4b7e0dba42f6
src/g23m-gsm defenestration: include case fixes
 Mychaela Falconia <falcon@freecalypso.org> parents: 
104diff
changeset | 46 #include "dl_trc.h" | 
| 104 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 /*==== TYPEDEFS ===================================================*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 typedef struct | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 UBYTE channel; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 UBYTE sapi; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 UBYTE state; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 UBYTE T200_Stop; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 UBYTE T200_Start; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 UBYTE pf_bit_flag; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 UBYTE dl_data_ind; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 UBYTE mdl_error_ind; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 } T_CCH_INTERN; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 #define T_CCH_INTERN_INIT {0,0,0,0,0,0,0} | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 /*==== EXPORT =====================================================*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 /*==== PRIVAT =====================================================*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 static int frame_validation (UBYTE channel_type, UBYTE* frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 static int downlink_idle (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 static int downlink_contention_resolution (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 static int downlink_mfe (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 static int downlink_timer_recovery (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 static int downlink_awaiting_release (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 static void downlink_mfe_information (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 static void downlink_mfe_supervisory (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 static void downlink_mfe_sabm (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 static void downlink_mfe_dm (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 static void downlink_mfe_tr_unnumbered (T_CCH_INTERN* pcch_i, UBYTE *frame, UBYTE state); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 static void downlink_i_frame (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 static void downlink_tr_supervisory (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 static void downlink_tr_information (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 static void invoke_retransmission (T_CCH_INTERN* pcch_i, UBYTE frame_nr); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 static void enquiry_response (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 static void mdl_error_ind (UBYTE cause, UBYTE channel_type, UBYTE sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 static void nr_error_recovery (T_CCH_INTERN* pcch_i, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 static void concatenate (UBYTE ch_type, UBYTE sapi, UBYTE *frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 static void free_sending_buffer (UBYTE ch_type, UBYTE sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 static void repeat_sabm (UBYTE channel, UBYTE sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 90 static void delayed_release_ind(UBYTE channel); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 91 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 static int uplink_idle (UBYTE channel, UBYTE sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 93 static int uplink_awaiting_establishment (UBYTE channel, UBYTE sapi, UBYTE no_signalling_mode); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 94 static int uplink_mfe (UBYTE channel, UBYTE sapi, UBYTE no_signalling_mode); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 95 static int uplink_timer_recovery (UBYTE channel, UBYTE sapi, UBYTE no_signalling_mode); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 96 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 97 static void T200_expiry (UBYTE channel, UBYTE sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 98 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 99 /*==== VARIABLES ==================================================*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 /*Removed the const from the definition,rework for issue 25370*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 102 static UBYTE l2_empty_frame [25] = { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 103 0x00, 0x00, /* the first two dummy bytes only for SACCH L1 header! */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 104 /* here begins the normal empty frame (SDCCH, FACCH) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 0x01, /* address field: SAPI 0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 0x03, /* control field: UI frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 0x01, /* length field: length = 0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 108 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 0x2b, 0x2b, 0x2b, 0x2b, 0x2b }; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 112 #if 0 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 113 static UBYTE l2_invalid_frame [25] = { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 0x00, 0x00, /* the first two dummy bytes only for SACCH L1 header! */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 115 /* here begins the normal empty frame (SDCCH, FACCH) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 116 0x1D, /* address field: SAPI 7 (unallocated SAPI; no action shall be taken on such frames) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 0x03, /* control field: UI frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 0x01, /* length field: length = 0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 122 0x2b, 0x2b, 0x2b, 0x2b, 0x2b }; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 static UBYTE l2_invalid_frame_0 [25] = { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 124 0x00, 0x00, /* the first two dummy bytes only for SACCH L1 header! */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 125 /* here begins the normal empty frame (SDCCH, FACCH) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 126 0x00, /* address field: SAPI 0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 127 0x00, /* control field: UI frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 128 0x00, /* length field: length = 0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 129 0x00, 0x00, 0x00, 0x00, 0x00, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 130 0x00, 0x00, 0x00, 0x00, 0x00, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 131 0x00, 0x00, 0x00, 0x00, 0x00, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 132 0x00, 0x00, 0x00, 0x00, 0x00 }; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 133 #endif /* 0|1 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 134 static T_CCH_INTERN cch_i; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 135 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 136 #if defined(CHECK_PCCHI) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 137 #define CHECK_PCCH_I() if (check_pcch_i(pcch_i, __LINE__)()return; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 138 #define CHECK_PCCH_Ir() if (check_pcch_i(pcch_i, __LINE__)()return -1; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 139 #else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 140 #define CHECK_PCCH_I() | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 141 #define CHECK_PCCH_Ir() | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 142 #endif /* CHECK_PCCHI */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 143 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 /*==== FUNCTIONS ==================================================*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 145 int dl_downlink (UBYTE error_flag, UBYTE channel_type, UBYTE* frame, ULONG fn) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 146 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 147 UBYTE channel_state = STATE_INVALID; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 UBYTE channel = NOT_PRESENT_8BIT; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 UBYTE frame_sapi = PS_SAPI_0; /* to calm lint, will be new set for valid frames */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 static UBYTE invalid = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 int ret = -2; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 int cause; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 153 int l2_offset; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 154 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 TRACE_EVENT_WIN_P1 ("downlink(): dcch0_ch_type:%s", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 158 CH_TYPE_NAME[dl_data->dcch0_ch_type]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 159 TRACE_EVENT_WIN_P6 ("DL: DCCH0=%s,%s vr=%u vs=%u va=%u T200=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 160 CH_TYPE_NAME[dl_data->cch[C_DCCH0].ch_type], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 161 STATE_DCCH0_NAME[dl_data->state[C_DCCH0]], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 dl_data->cch[C_DCCH0].vr, dl_data->cch[C_DCCH0].vs, dl_data->cch[C_DCCH0].va, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 163 dl_data->cch[C_DCCH0].T200_counter); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 164 TRACE_EVENT_WIN_P6 ("DL: DCCH3=%s,%s vr=%u vs=%u va=%u T200=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 165 CH_TYPE_NAME[dl_data->cch[C_DCCH3].ch_type], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 STATE_DCCH3_NAME[dl_data->state[C_DCCH3]], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 167 dl_data->cch[C_DCCH3].vr, dl_data->cch[C_DCCH3].vs, dl_data->cch[C_DCCH3].va, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 168 dl_data->cch[C_DCCH3].T200_counter); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 169 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 170 if (channel_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 171 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 172 l2_offset = 2; /* with layer 1 header */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 173 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 174 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 l2_offset = 0; /* without layer 1 header */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 179 #define RR_SHORT_PD_HANDLING | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 180 #if defined(RR_SHORT_PD_HANDLING) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 /* Handling of unacknowledged UI frames with format type Bter */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 #if defined(RR_SHORT_PD_DETECT_KNOWN_MSG_ONLY) /* detection of known messages only */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 183 cause = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 184 switch (frame[l2_offset]) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 185 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 186 case RR_SHORT_PD_SI10: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 case RR_SHORT_PD_MEAS_INFO: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 if (channel_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 cause = 1; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 case RR_SHORT_PD_NOTI_FACCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 192 if ((channel_type EQ L2_CHANNEL_FACCH_F) OR | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 193 (channel_type EQ L2_CHANNEL_FACCH_H)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 194 cause = 1; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 196 case RR_SHORT_PD_UPLINK_FREE: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 cause = 1; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 199 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 200 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 201 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 202 if (cause) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 203 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 204 drr_dl_short_unitdata_ind (channel_type, error_flag, frame, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 205 &frame[l2_offset], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 206 (channel_type EQ L2_CHANNEL_SACCH) ? DL_N201_SACCH_Bter : DL_N201_DCCH_Bter, fn); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 207 return 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 208 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 209 #else /* detection of all possible messages with short L2 header and format Bter */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 210 TRACE_EVENT_WIN_P4 ("detection of format Bter: %02x&%02x=%02x ?= %02x", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 211 frame[l2_offset], BTER_FORMAT_MASK, GET_BTER_FORMAT (&frame[l2_offset]), SHORT_L2_HEADER_TYPE_1); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 212 if ((GET_BTER_FORMAT (&frame[l2_offset]) EQ SHORT_L2_HEADER_TYPE_1)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 213 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 214 drr_dl_short_unitdata_ind (channel_type, error_flag, frame, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 215 &frame[l2_offset], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 216 (UBYTE)((channel_type EQ L2_CHANNEL_SACCH) ? DL_N201_SACCH_Bter : DL_N201_DCCH_Bter), fn); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 217 return 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 218 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 219 #endif /* kind of Bter detection */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 220 #endif /* RR_SHORT_PD_HANDLING */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 221 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 222 /* check frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 223 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 224 if (error_flag EQ VALID_BLOCK) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 225 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 226 frame_sapi = GET_SAPI (frame+l2_offset); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 227 if ((frame_sapi NEQ PS_SAPI_0) AND (frame_sapi NEQ PS_SAPI_3)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 228 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 229 TRACE_EVENT_WIN_P1 ("downlink() returns -1 (wrong SAPI=%u)", frame_sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 230 return -1; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 231 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 232 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 233 cause = frame_validation (channel_type, frame+l2_offset); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 234 if (cause >= 0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 235 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 236 TRACE_FUNCTION ("frame validation failed!"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 237 if (invalid EQ 0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 238 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 239 TRACE_ERROR ("invalid frame"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 240 invalid = 1; /* only one message per succession */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 241 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 242 mdl_error_ind ((UBYTE)cause, channel_type, frame_sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 243 return 0;/* ETSI GSM 04.06 Annex G.2 - G.4 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 244 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 245 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 246 invalid = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 247 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 248 #if defined(DL_2TO1) || defined(_SIMULATION_) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 249 /* Handling of unacknowledged UI frames on SACCH with SAPI=0 (not format type Bter) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 250 if ((channel_type EQ L2_CHANNEL_SACCH) AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 251 (frame_sapi EQ PS_SAPI_0) AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 252 (GET_FORMAT_TYPE(frame+l2_offset) EQ U_FORMAT) AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 253 (GET_U_TYPE(frame+l2_offset) EQ UI_FRAME) ) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 254 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 255 drr_dl_unitdata_ind (error_flag, frame, frame+l2_offset+3, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 256 (UBYTE)(GET_LENGTH_INDICATOR (frame+l2_offset)), fn); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 257 return 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 258 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 259 #endif /* DL_2TO1 || _SIMULATION_ */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 260 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 261 #if defined(DL_2TO1) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 262 else if (channel_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 263 { /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 264 * Indicate invalid SACCH frame for decrement of radio link timeout counter. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 265 * The invalid frame possible contains invalid headers, use length 0. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 266 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 267 drr_dl_unitdata_ind (error_flag, frame, frame+l2_offset+3, 0, fn); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 268 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 269 #endif /* DL_2TO1 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 270 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 271 if (error_flag NEQ VALID_BLOCK) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 272 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 273 TRACE_EVENT_WIN ("invalid frame->stop download handling"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 274 return 0; /* no further handling */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 275 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 276 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 277 memset (&cch_i, 0, sizeof (T_CCH_INTERN)); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 278 switch (channel_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 279 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 280 case L2_CHANNEL_SDCCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 281 if (frame_sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 282 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 283 channel = C_DCCH3; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 284 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 285 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 286 /*lint -fallthrough*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 287 case L2_CHANNEL_FACCH_F: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 288 case L2_CHANNEL_FACCH_H: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 289 if (frame_sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 290 channel = C_DCCH0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 291 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 292 case L2_CHANNEL_SACCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 293 if (frame_sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 294 { /* SACCH with SAPI=3 only supported with associated TCH (FACCH) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 295 if ((dl_data->cch[C_DCCH0].ch_type EQ L2_CHANNEL_FACCH_H) OR | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 296 (dl_data->cch[C_DCCH0].ch_type EQ L2_CHANNEL_FACCH_F)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 297 channel = C_DCCH3; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 298 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 299 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 300 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 301 TRACE_EVENT_WIN ("No handling of SACCH with SAPI=0 here!"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 302 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 303 * The SACCH with SAPI=0 is handled some lines before for DL_2TO1 and | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 304 * simulation. Handling of frames other than UI frames is not supported. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 305 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 306 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 307 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 308 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 309 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 310 }/* endswitch channel_type */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 311 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 312 if (channel EQ NOT_PRESENT_8BIT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 313 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 314 TRACE_EVENT_WIN ("downlink() returns -3"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 315 return -3; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 316 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 317 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 318 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 319 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 320 #if defined(DELAYED_SABM) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 321 /* ignore downlinked frames before delayed SABM was sent */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 322 if ((channel EQ C_DCCH0) AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 323 (dl_data->dcch0_sabm_flag NEQ NOT_PRESENT_8BIT)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 324 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 325 DL_OFFLINE_TRACE (TRACE_DL_EVENT, channel, channel_type, "DL:pend.SABM->ignore"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 326 return 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 327 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 328 #endif /* DELAYED_SABM */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 329 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 330 cch_i.channel = channel; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 331 cch_i.sapi = frame_sapi; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 332 #if defined(_SIMULATION_) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 333 if (channel_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 334 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 335 TRACE_EVENT_WIN_P1 ("SACCH: set SAPI=%u set during downlink", frame_sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 336 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 337 #endif /* _SIMULATION_ */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 338 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 339 cch_i.state = channel_state = dl_data->state[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 340 cch_i.pcch = &dl_data->cch[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 341 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 342 * The channel type pcch->ch_type is overwritten as input to the downlink | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 343 * sub functions. In case of DCCH0 this is temporary only and the channel | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 344 * type have to be re-assigned with the value of dl_data->dcch0_ch_type. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 345 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 346 cch_i.pcch->ch_type = channel_type; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 347 if (cch_i.pcch->vtx NEQ EMPTY_CMD) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 348 { /* save bit for the case of unsolicited frames */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 349 cch_i.pf_bit_flag = cch_i.pcch->f_bit; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 350 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 351 TRACE_EVENT_WIN_P4 ("downlink() in:%s SAPI=%u st=%u vtx=%s", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 352 CH_TYPE_NAME[channel_type], frame_sapi, channel_state, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 353 VTX_NAME[cch_i.pcch->vtx]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 354 TRACE_EVENT_WIN_P9 ("vr=%u vs=%u va=%u rc=%u contres=%u reje=%u ackp=%u %c=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 355 cch_i.pcch->vr, cch_i.pcch->vs, cch_i.pcch->va, cch_i.pcch->rc, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 356 cch_i.pcch->contention_resolution, cch_i.pcch->reject_exception, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 357 cch_i.pcch->acknowledge_pending, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 358 cch_i.pcch->time_flag ? 'T' : 't', cch_i.pcch->T200_counter); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 359 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 360 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 361 switch (channel_state) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 362 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 363 case STATE_DISABLED: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 364 case STATE_IDLE_DL: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 365 ret = downlink_idle (&cch_i, frame+l2_offset); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 366 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 367 case STATE_CONTENTION_RESOLUTION: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 368 ret = downlink_contention_resolution (&cch_i, frame+l2_offset); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 369 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 370 case STATE_MULTIPLE_FRAME_ESTABLISHED: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 371 ret = downlink_mfe (&cch_i, frame+l2_offset); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 372 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 373 case STATE_TIMER_RECOVERY: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 374 ret = downlink_timer_recovery (&cch_i, frame+l2_offset); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 375 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 376 case STATE_AWAITING_RELEASE: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 377 ret = downlink_awaiting_release (&cch_i, frame+l2_offset); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 378 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 379 }/* endswitch channel_state */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 380 if (channel EQ C_DCCH0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 381 { /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 382 * Reconstruct the temporary overwritten pcch->ch_type with the value | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 383 * of dl_data->dcch0_ch_type. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 384 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 385 cch_i.pcch->ch_type = dl_data->dcch0_ch_type; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 386 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 387 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 388 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 389 TRACE_EVENT_WIN_P5 ("%s SAPI=%u vtx=%s (%s#%u)", CH_TYPE_NAME[cch_i.pcch->ch_type], cch_i.sapi, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 390 VTX_NAME[cch_i.pcch->vtx], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 391 __FILE10__, __LINE__); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 392 if (ret NEQ 0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 393 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 394 TRACE_EVENT_WIN_P1 ("downlink() returns %d", ret); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 395 return ret; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 396 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 397 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 398 /* transfer states and flags to dl_data */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 399 dl_data->cch[channel].f_bit_flag = dl_data->cch[channel].f_bit = cch_i.pf_bit_flag; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 400 if (cch_i.T200_Start) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 401 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 402 dl_data->cch[channel].T200_counter = T200_STOPPED; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 403 dl_data->cch[channel].time_flag = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 404 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 405 else if (cch_i.T200_Stop) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 406 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 407 dl_data->cch[channel].T200_counter = T200_STOPPED; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 408 dl_data->cch[channel].time_flag = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 409 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 410 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 411 if (cch_i.dl_data_ind) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 412 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 413 com_data_ind(channel_type, frame_sapi, fn); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 414 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 415 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 416 if (channel_state NEQ cch_i.state) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 417 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 418 set_channel_state ( | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 419 (UBYTE)((frame_sapi EQ PS_SAPI_0) ? C_DCCH0 : C_DCCH3), cch_i.state); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 420 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 421 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 422 if (cch_i.mdl_error_ind) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 423 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 424 mdl_error_ind ( cch_i.mdl_error_ind, channel_type, frame_sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 425 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 426 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 427 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 428 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 429 TRACE_EVENT_WIN_P4 ("downlink() out:%s SAPI=%u st=%u vtx=%s", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 430 CH_TYPE_NAME[channel_type], cch_i.sapi, cch_i.state, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 431 VTX_NAME[cch_i.pcch->vtx]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 432 TRACE_EVENT_WIN_P9 ("vr=%u vs=%u va=%u rc=%u contres=%u reje=%u ackp=%u %c=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 433 cch_i.pcch->vr, cch_i.pcch->vs, cch_i.pcch->va, cch_i.pcch->rc, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 434 cch_i.pcch->contention_resolution, cch_i.pcch->reject_exception, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 435 cch_i.pcch->acknowledge_pending, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 436 cch_i.pcch->time_flag ? 'T' : 't', cch_i.pcch->T200_counter); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 437 TRACE_EVENT_WIN_P4 ("T200=%s %s %s %s", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 438 cch_i.T200_Start ? "Start" : cch_i.T200_Stop ? "Stop" : "...", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 439 cch_i.pf_bit_flag ? "P/F" : "", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 440 cch_i.dl_data_ind ? "DATA_IND" : "", cch_i.mdl_error_ind ? "ERROR_IND" : ""); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 441 TRACE_EVENT_WIN_P1 ("downlink() returns %d", ret); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 442 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 443 return ret; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 444 }/* endfunc downlink */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 445 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 446 LOCAL int frame_validation (UBYTE channel_type, UBYTE* frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 447 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 448 UBYTE frame_length; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 449 BOOL frame_m_bit; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 450 UBYTE N201; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 451 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 452 if (!GET_EA (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 453 return FRAME_NOT_IMPLEMENTED; /* ETSI GSM 04.06 Annex G.2.3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 454 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 455 if (!GET_EL (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 456 return FRAME_NOT_IMPLEMENTED; /* ETSI GSM 04.06 Annex G.4.1 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 457 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 458 frame_length = GET_LENGTH_INDICATOR (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 459 frame_m_bit = GET_M_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 460 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 461 /* get the maximal number of octets */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 462 switch (channel_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 463 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 464 case L2_CHANNEL_SDCCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 465 N201 = N201_SDCCH; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 466 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 467 case L2_CHANNEL_SACCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 468 N201 = N201_SACCH; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 469 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 470 default:/* CH_TYPE_FACCH_FR, L2_CHANNEL_FACCH_H */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 471 N201 = N201_FACCH; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 472 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 473 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 474 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 475 switch (GET_FORMAT_TYPE (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 476 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 477 case I_FORMAT: /* I format */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 478 case I1_FORMAT: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 479 if ((frame_length > N201) OR (frame_length EQ 0)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 480 return I_FRAME_WITH_INCORRECT_LENGTH; /* ETSI GSM 04.06 Annex G.4.2 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 481 if ((frame_length < N201) AND (frame_m_bit EQ 1)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 482 return I_FRAME_WITH_INCORRECT_USE_OF_M_BIT; /* ETSI GSM 04.06 Annex G.4.2 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 483 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 484 case S_FORMAT: /* S format */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 485 if (frame_length OR frame_m_bit) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 486 return S_FRAME_WITH_INCORRECT_PARAMETERS; /* ETSI GSM 04.06 Annex G.4.3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 487 if ((frame[1] & 0x0f) EQ 0x0d) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 488 return FRAME_NOT_IMPLEMENTED; /* ETSI GSM 04.06 Annex G.3.1 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 489 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 490 case U_FORMAT: /* U format */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 491 switch (GET_U_TYPE (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 492 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 493 case DM_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 494 case DISC_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 495 if (frame_length OR frame_m_bit) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 496 return U_FRAME_WITH_INCORRECT_PARAMETERS; /* ETSI GSM 04.06 Annex G.4.4 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 497 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 498 case UA_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 499 case SABM_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 500 case UI_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 501 if ((frame_length > N201) OR (frame_m_bit)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 502 return U_FRAME_WITH_INCORRECT_PARAMETERS; /* ETSI GSM 04.06 Annex G.4.5 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 503 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 504 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 505 return FRAME_NOT_IMPLEMENTED; /* ETSI GSM 04.06 Annex G.3.2 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 506 /*break;*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 507 }/* endswitch U frame_type */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 508 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 509 }/* endswitch frame_format */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 510 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 511 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 512 * ETSI GSM 04.06 Annex G.2.1, G.2.2 will be check in the following functions | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 513 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 514 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 515 return -1; /* frame is valid */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 516 }/* endfunc frame_validation */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 517 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 518 static int downlink_idle( T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 519 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 520 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 521 * According to 3GPP TS 04.05, 5.4.5 Idle state: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 522 * While in the idle state: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 523 * - the receipt of a DISC command shall result in the transmission of a | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 524 * DM response with the F bit set to the value of the received P bit; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 525 * - the receipt of an I frame or supervisory frame with the P bit set to "1" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 526 * shall result in the transmission of a DM response with the F bit set to | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 527 * "1" (as defined in subclause 5.2.2); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 528 * - the content of any received I frame shall be discarded; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 529 * - on receipt of an SABM command, the procedures defined in subclause 5.4.1 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 530 * shall be followed; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 531 * - on receipt of UI commands, the procedures defined in subclause 5.3 shall | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 532 * be followed; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 533 * - all other frame types shall be discarded. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 534 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 535 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 536 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 537 CHECK_PCCH_Ir(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 538 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 539 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 540 TRACE_FUNCTION ("downlink_idle()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 541 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 542 switch (GET_FORMAT_TYPE (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 543 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 544 case S_FORMAT: /* S frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 545 if (GET_S_TYPE (frame) NEQ RR_CMD) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 546 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 547 /*lint -fallthrough*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 548 case I_FORMAT: /* I frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 549 case I1_FORMAT: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 550 if (GET_P_BIT (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 551 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 552 pcch->vtx = DM_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 553 pcch_i->pf_bit_flag = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 554 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 555 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 556 case U_FORMAT: /* U frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 557 if (GET_CR (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 558 { /* command */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 559 switch (GET_U_TYPE (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 560 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 561 case SABM_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 562 if (!GET_LENGTH_INDICATOR (frame) AND pcch_i->sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 563 { /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 564 * Mobile Terminated Establishment, but only for SAPI=3! | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 565 * | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 566 * According to 3GPP TS 04.06, 5.4.1 Establishment of multiple frame | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 567 * operation, 5.4.1.1 General, Note: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 568 * For SAPI 0 the data link is always established by the MS. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 569 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 570 com_restore_queue ( pcch_i->sapi, NULL); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 571 pcch->vtx = UA_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 572 pcch_i->pf_bit_flag = GET_P_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 573 pcch->va = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 574 pcch->vr = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 575 pcch->vs = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 576 pcch->rc = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 577 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 578 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 579 case DISC_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 580 pcch->vtx = DM_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 581 pcch_i->pf_bit_flag = GET_P_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 582 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 583 case UI_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 584 /* drr_dl_unitdata_ind() was called in the main downlink function */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 585 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 586 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 587 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 588 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 589 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 590 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 591 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 592 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 593 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 594 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 595 return 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 596 }/* endfunc downlink_idle */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 597 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 598 static int downlink_contention_resolution(T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 599 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 600 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 601 UBYTE frame_type; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 602 UBYTE frame_format; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 603 UBYTE frame_cr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 604 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 605 UBYTE establish_cnf = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 606 UBYTE release_ind = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 607 UBYTE release_ind_cs = NOT_PRESENT_8BIT; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 608 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 609 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 610 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 611 CHECK_PCCH_Ir(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 612 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 613 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 614 TRACE_FUNCTION ("downlink_contention_resolution()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 615 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 616 frame_format = GET_FORMAT_TYPE (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 617 if (frame_format EQ U_FORMAT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 618 { /* U frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 619 frame_cr = GET_CR (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 620 frame_type = GET_U_TYPE (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 621 if (frame_cr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 622 { /* command */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 623 switch (frame_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 624 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 625 case SABM_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 626 if (pcch_i->sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 627 { /* DCCH3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 628 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 629 * According to 3GPP TS 04.06, 5.4.6.1: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 630 * SAPI = 3, Collision of unnumbered commands and responses. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 631 * Collision situations (Identical transmitted and received commands) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 632 * shall be resolved in the following way: If the transmitted and | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 633 * received unnumbered commands (SABM or DISC) are the same, the data | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 634 * link layer entities shall send the UA response at the earliest | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 635 * possible opportunity. The indicated state shall be entered after | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 636 * receiving the UA response. The data link layer entities shall each | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 637 * notify its respective layer 3 entity by means of the appropriate | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 638 * confirm primitive, i.e. DL-ESTABLISH-CONFIRM or DL-RELEASE-CONFIRM. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 639 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 640 if (!GET_LENGTH_INDICATOR (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 641 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 642 com_clear_queue (PS_SAPI_3); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 643 /* establish_cnf = TRUE; cnf will be sent at uplink opportunity */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 644 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 645 pcch_i->pf_bit_flag = GET_P_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 646 pcch->vtx = UA_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 647 pcch->va = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 648 pcch->vr = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 649 pcch->vs = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 650 pcch->rc = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 651 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 652 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 653 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 654 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 655 /* no contention resolution procedure with SAPI=3! */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 656 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 657 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 658 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 659 {/* DCCH0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 660 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 661 * According to 3GPP TS 04.06, 5.4.1.1 General: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 662 * NOTE: SAPI=0 the data link is always established by the MS! | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 663 * | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 664 * According to 3GPP TS 04.06, 5.4.1.4 Contention resolution | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 665 * establishment procedure: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 666 * All frames other than unnumbered frame formats received for the | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 667 * SAPI in use during the establishment procedures shall be ignored. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 668 * The reception of unnumbered frames other than UA is treated as | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 669 * specified for the normal establishment case. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 670 * NOTE 4: In fact, there are no foreseen cases in which the network | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 671 * will send SABM, DISC or DM, but for sake of completeness | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 672 * these occurrences are specified and must be treated. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 673 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 674 establish_cnf = TRUE;/* Treated as normal establishment case */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 675 pcch_i->pf_bit_flag = GET_P_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 676 pcch->vtx = UA_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 677 pcch->va = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 678 pcch->vr = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 679 pcch->vs = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 680 pcch->rc = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 681 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 682 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 683 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 684 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 685 case DISC_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 686 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 687 release_ind = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 688 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 689 pcch_i->pf_bit_flag = GET_P_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 690 pcch->vtx = DM_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 691 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 692 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 693 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 694 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 695 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 696 }/* endswitch command frame_type */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 697 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 698 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 699 { /* response */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 700 switch (frame_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 701 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 702 case DM_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 703 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 704 * PATCH LE 14.09.99 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 705 * Ignore DM(F=0) frames | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 706 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 707 if (GET_P_BIT (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 708 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 709 release_ind = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 710 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 711 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 712 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 713 case UA_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 714 if (pcch_i->sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 715 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 716 if (pcch->contention_resolution) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 717 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 718 if (com_compare_L3_msg (dl_data->dcch0_queue.switch_buffer, frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 719 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 720 establish_cnf = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 721 COM_FREE_QUEUE_BUFFER(&dl_data->dcch0_queue, INDEX_SWITCH_BUFFER); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 722 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 723 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 724 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 725 release_ind = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 726 release_ind_cs = CAUSE_DL_INFO_FIELD_MISMATCH; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 727 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 728 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 729 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 730 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 731 if (!GET_LENGTH_INDICATOR (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 732 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 733 establish_cnf = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 734 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 735 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 736 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 737 release_ind = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 738 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 739 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 740 }/* endif PS_SAPI_0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 741 else if (pcch_i->sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 742 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 743 if (!GET_LENGTH_INDICATOR (frame) OR (pcch->ch_type EQ L2_CHANNEL_SACCH)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 744 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 745 establish_cnf = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 746 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 747 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 748 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 749 release_ind = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 750 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 751 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 752 }/* endif PS_SAPI_3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 753 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 754 if (establish_cnf AND (pcch_i->sapi EQ PS_SAPI_0)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 755 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 756 dcch3_enable(pcch->ch_type); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 757 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 758 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 759 break;/* endbreak UA_FRAME */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 760 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 761 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 762 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 763 }/* endswitch response frame_type */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 764 }/* endifelse command/response */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 765 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 766 if (establish_cnf) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 767 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 768 drr_dl_establish_cnf (pcch->ch_type, pcch_i->sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 769 pcch->va = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 770 pcch->vr = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 771 pcch->vs = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 772 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 773 pcch_i->state = STATE_MULTIPLE_FRAME_ESTABLISHED; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 774 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 775 else if (release_ind) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 776 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 777 if (pcch_i->sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 778 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 779 if (pcch->contention_resolution) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 780 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 781 pcch->contention_resolution = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 782 COM_FREE_QUEUE_BUFFER(&dl_data->dcch0_queue, INDEX_SWITCH_BUFFER); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 783 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 784 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 785 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 786 drr_dl_release_ind (pcch->ch_type, pcch_i->sapi, release_ind_cs, FALSE); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 787 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 788 pcch_i->state = STATE_IDLE_DL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 789 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 790 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 791 }/* endif frame_format == 3 (only unnumbered frames) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 792 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 793 return 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 794 }/* endfunc downlink_contention_resolution */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 795 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 796 static int downlink_mfe(T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 797 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 798 TRACE_EVENT_WIN ("downlink_mfe()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 799 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 800 switch (GET_FORMAT_TYPE (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 801 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 802 case I_FORMAT:/* I frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 803 case I1_FORMAT: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 804 downlink_mfe_information (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 805 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 806 case S_FORMAT: /* S frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 807 downlink_mfe_supervisory (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 808 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 809 case U_FORMAT: /* U frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 810 downlink_mfe_tr_unnumbered (pcch_i, frame, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 811 STATE_MULTIPLE_FRAME_ESTABLISHED); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 812 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 813 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 814 TRACE_EVENT_WIN ("invalid/unknown frame"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 815 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 816 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 817 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 818 return 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 819 }/* endfunc downlink_mfe */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 820 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 821 static void downlink_mfe_supervisory (T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 822 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 823 UBYTE frame_cr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 824 UBYTE frame_pollbit; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 825 UBYTE frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 826 UBYTE frame_type; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 827 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 828 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 829 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 830 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 831 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 832 TRACE_EVENT_WIN ("downlink_mfe_supervisory()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 833 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 834 frame_type = GET_S_TYPE (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 835 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 836 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 837 * Ignore RNR frame without notification | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 838 * (ETSI GSM 04.06, section 6. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 839 * "Special protocol operation on SAPI=0 and SAPI=3", page 53) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 840 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 841 if (frame_type EQ RNR_FRAME) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 842 return; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 843 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 844 frame_cr = GET_CR (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 845 frame_pollbit = GET_P_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 846 frame_nr = GET_RECEIVE_NUMBER (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 847 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 848 /* in accordance with CCITT Q.921 figure B.7 (sheet 5 to 7 of 10) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 849 if (frame_pollbit) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 850 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 851 if (frame_cr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 852 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 853 enquiry_response (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 854 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 855 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 856 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 857 mdl_error_ind (UNSOLICITED_SUPERVISORY_RESPONSE, pcch->ch_type, pcch_i->sapi);/* 3GPP TS 04.06, 5.4.2.2 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 858 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 859 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 860 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 861 if (com_check_nr (pcch->va, pcch->vs, frame_nr)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 862 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 863 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 864 * N(R) check is successfull | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 865 * in accordance with CCITT Q.921 figure B.7 (sheet 6 and 7 of 10) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 866 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 867 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 868 switch (frame_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 869 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 870 case RR_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 871 if (frame_nr EQ pcch->vs) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 872 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 873 /* T200 handling under ETSI GSM 04.06 section 5.5.3.1 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 874 if (((8 + frame_nr - pcch->va ) & 7) > 0 /*frame_nr > pcch->va*/) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 875 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 876 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 877 pcch->va = frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 878 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 879 free_sending_buffer (pcch->ch_type, pcch_i->sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 880 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 881 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 882 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 883 if (frame_nr NEQ pcch->va) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 884 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 885 pcch->va = frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 886 pcch_i->T200_Start = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 887 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 888 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 889 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 890 case REJ_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 891 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 892 * in accordance with ETSI GSM 04.06; chapter 5.5.4.1 i) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 893 * | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 894 * clear existing peer receiver busy condition (not applicable in GSM) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 895 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 896 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 897 /* reset timer T200 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 898 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 899 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 900 * If REJ command with P bit set to 1, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 901 * transmit an appropiate supervisory response frame with F bit set to 1 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 902 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 903 if (frame_pollbit AND frame_cr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 904 enquiry_response (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 905 /* transmit the corresponding I frame asap */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 906 invoke_retransmission (pcch_i, frame_nr); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 907 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 908 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 909 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 910 * set its send state variable V(S) and its acknowledge state | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 911 * variable V(A) to the value of the N(R) contained in the REJ frame | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 912 * control field | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 913 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 914 pcch->vs = pcch->va = frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 915 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 916 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 917 * if it was an REJ response frame with the F bit set to 1, notify | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 918 * a protocol violation to layer 3 (cause=unsolicited supervisory frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 919 * | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 920 * fulfilled at the beginning of this function! | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 921 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 922 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 923 case RNR_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 924 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 925 * Ignore frame without notification | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 926 * (ETSI GSM 04.06, section 6. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 927 * "Special protocol operation on SAPI=0 and SAPI=3", page 53) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 928 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 929 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 930 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 931 TRACE_EVENT_WIN ("invalid S frame"); /* GSM 04.06 Annex G.3.1 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 932 mdl_error_ind (FRAME_NOT_IMPLEMENTED, pcch->ch_type, pcch_i->sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 933 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 934 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 935 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 936 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 937 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 938 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 939 nr_error_recovery (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 940 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 941 }/* endfunc downlink_mfe_supervisory */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 942 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 943 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 944 static void downlink_mfe_sabm (T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 945 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 946 TRACE_EVENT_WIN ("downlink_mfe_sabm()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 947 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 948 if (!GET_LENGTH_INDICATOR (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 949 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 950 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 951 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 952 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 953 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 954 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 955 if (pcch_i->sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 956 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 957 /* SACCH0: only unacknowledge mode available -> ignore SABM */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 958 if (pcch->ch_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 959 return; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 960 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 961 * SDCCH0, FACCH: can not be a normal establishment procedure | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 962 * because for SAPI=0 the data link is always established by the MS. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 963 * Therefore only the V state variables and any exception states | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 964 * will be reseted. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 965 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 966 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 967 else if (pcch_i->sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 968 { /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 969 * SDCCH3, SACCH: normal establishment procedure, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 970 * might be a re-establishment according to GSM 04.06, 5.4.1.2 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 971 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 972 com_clear_queue (PS_SAPI_3); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 973 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 974 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 975 /* respond with an unnumbered acknowledgement */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 976 pcch->vtx = UA_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 977 /* with the F bit set to the same value as the P bit */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 978 pcch_i->pf_bit_flag = GET_P_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 979 /* reset timer T200 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 980 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 981 /* reset all state variables (internal sequence counter) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 982 pcch->va = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 983 pcch->vr = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 984 pcch->vs = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 985 /* reset the retransmission counter */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 986 pcch->rc = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 987 /* clear all exception conditions */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 988 pcch->reject_exception = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 989 pcch->acknowledge_pending = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 990 /* enter the multiple-frame-established state */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 991 pcch_i->state = STATE_MULTIPLE_FRAME_ESTABLISHED; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 992 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 993 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 994 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 995 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 996 * frame_length NEQ 0 is only possible in contention resolution establishment | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 997 * initiated by mobile! | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 998 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 999 mdl_error_ind (U_FRAME_WITH_INCORRECT_PARAMETERS, pcch_i->pcch->ch_type, pcch_i->sapi);/* according to GSM 04.06, 5.4.2.1 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1000 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1001 }/* endfunc mfe_sabm */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1002 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1003 static void downlink_mfe_dm (T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1004 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1005 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1006 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1007 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1008 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1009 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1010 if (!GET_P_BIT (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1011 { /* release after unsolicited DM response during connection */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1012 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1013 /* New! Called now by mdl_error_ind() from caller of this function | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1014 * drr_dl_release_ind (dl_data, pcch->ch_type, pcch_i->sapi, NOT_PRESENT_8BIT); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1015 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1016 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1017 if ((pcch->ch_type EQ L2_CHANNEL_SDCCH) AND (pcch_i->sapi EQ PS_SAPI_3)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1018 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1019 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1020 com_clear_queue (PS_SAPI_3); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1021 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1022 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1023 }/* endfunc mfe_dm */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1024 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1025 static void downlink_mfe_tr_unnumbered (T_CCH_INTERN* pcch_i, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1026 UBYTE *frame, UBYTE state) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1027 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1028 UBYTE frame_type; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1029 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1030 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1031 TRACE_EVENT_WIN ("downlink_mfe_tr_unnumbered()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1032 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1033 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1034 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1035 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1036 frame_type = GET_U_TYPE (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1037 if (GET_CR (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1038 { /* command */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1039 switch (frame_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1040 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1041 case SABM_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1042 downlink_mfe_sabm (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1043 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1044 case UI_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1045 /* drr_dl_unitdata_ind() was called in the main downlink function */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1046 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1047 case DISC_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1048 pcch->vtx = UA_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1049 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1050 pcch_i->state = STATE_AWAITING_RELEASE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1051 #if !defined(LATE_LEAVING_DEDICATED) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1052 com_leave_dedicated (pcch->ch_type); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1053 #endif /* LATE_LEAVING_DEDICATED */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1054 if (pcch_i->sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1055 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1056 dcch3_enable(pcch->ch_type); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1057 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1058 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1059 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1060 /* GSM 04.06 Annex G.2.2, G.3.2 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1061 TRACE_EVENT_WIN_P1 ("invalid command U frame (%02x)", frame_type); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1062 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1063 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1064 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1065 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1066 { /* response */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1067 switch (frame_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1068 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1069 case DM_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1070 /* fulfill the actions required by 3GPP TS 4.06 section 5.4.2.2, table 7 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1071 if (!GET_P_BIT(frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1072 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1073 mdl_error_ind (UNSOLICITED_DM_RESPONSE_ABNORMAL_REL, pcch->ch_type, pcch_i->sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1074 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1075 else if (state EQ STATE_MULTIPLE_FRAME_ESTABLISHED) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1076 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1077 mdl_error_ind (UNSOLICITED_DM_RESPONSE, pcch->ch_type, pcch_i->sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1078 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1079 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1080 downlink_mfe_dm (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1081 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1082 case UA_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1083 mdl_error_ind (UNSOLICITED_UA_RESPONSE, pcch->ch_type, pcch_i->sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1084 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1085 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1086 /* GSM 04.06 Annex G.2.2, G.3.2 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1087 TRACE_EVENT_WIN_P1 ("invalid response U frame (%02x)", frame_type); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1088 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1089 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1090 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1091 }/* endfunc downlink_mfe_unnumbered */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1092 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1093 static void downlink_i_frame (T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1094 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1095 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1096 * in accordance with CCITT Q.921 figure B.7 (sheet 8 of 10) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1097 * in accordance with CCITT Q.921 figure B.8 (sheet 7 of 9) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1098 * according to GSM 04.06 (same as CCITT Q.921!) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1099 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1100 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1101 UBYTE frame_pollbit; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1102 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1103 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1104 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1105 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1106 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1107 frame_pollbit = GET_P_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1108 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1109 if (GET_SEND_NUMBER (frame) EQ pcch->vr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1110 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1111 pcch->vr++; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1112 pcch->vr &= 7; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1113 pcch->reject_exception = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1114 concatenate (pcch->ch_type, pcch_i->sapi, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1115 if (!GET_M_BIT (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1116 pcch_i->dl_data_ind = TRUE;/* send DL-DATA indication */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1117 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1118 if (frame_pollbit) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1119 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1120 pcch_i->pf_bit_flag = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1121 pcch->vtx = RR_RSP; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1122 pcch->acknowledge_pending = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1123 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1124 else if (pcch->acknowledge_pending EQ FALSE) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1125 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1126 #if defined(IFRAME_AS_RR) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1127 pcch->vtx = RR_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1128 #else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1129 pcch->vtx = RR_RSP; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1130 #endif /* IFRAME_AS_RR */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1131 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1132 }/* endif ns == vr */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1133 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1134 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1135 if (pcch->reject_exception) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1136 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1137 if (frame_pollbit) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1138 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1139 pcch_i->pf_bit_flag = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1140 /*pcch->vtx = RR_RSP; */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1141 pcch->vtx = REJ_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1142 pcch->acknowledge_pending = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1143 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1144 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1145 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1146 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1147 pcch->reject_exception = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1148 pcch_i->pf_bit_flag = frame_pollbit; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1149 pcch->vtx = REJ_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1150 pcch->acknowledge_pending = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1151 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1152 if (pcch->vtx EQ REJ_CMD) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1153 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1154 TRACE_EVENT_WIN_P1 ("->REJ_CMD pf=%u", pcch_i->pf_bit_flag); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1155 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1156 }/* endelse ns != vr */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1157 }/* endfunc downlink_i_frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1158 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1159 static void downlink_mfe_information ( T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1160 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1161 UBYTE frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1162 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1163 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1164 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1165 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1166 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1167 TRACE_EVENT_WIN ("downlink_mfe_information()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1168 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1169 if (!GET_CR (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1170 { /* GSM 04.06 Annex G.2.2 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1171 TRACE_EVENT_WIN ("invalid I response (C=0)"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1172 return; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1173 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1174 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1175 frame_nr = GET_RECEIVE_NUMBER (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1176 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1177 /* in accordance with CCITT Q.921 figure B.7 (sheet 8 of 10) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1178 downlink_i_frame (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1179 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1180 /* in accordance with CCITT Q.921 figure B.7 (sheet 9 of 10) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1181 if (com_check_nr (pcch->va, pcch->vs, frame_nr)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1182 { /* N(R) check is successfull */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1183 if (frame_nr EQ pcch->vs) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1184 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1185 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1186 /* T200 handling under ETSI GSM 04.06 section 5.5.3.1 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1187 if (((8 + frame_nr - pcch->va ) & 7) > 0 /*frame_nr > pcch->va*/) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1188 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1189 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1190 pcch->va = frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1191 free_sending_buffer (pcch->ch_type, pcch_i->sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1192 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1193 else if (frame_nr NEQ pcch->va) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1194 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1195 pcch->va = frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1196 pcch_i->T200_Start = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1197 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1198 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1199 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1200 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1201 nr_error_recovery (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1202 }/* endifelse com_check_nr */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1203 }/* endfunc downlink_mfe_information */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1204 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1205 static int downlink_timer_recovery(T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1206 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1207 TRACE_EVENT_WIN ("downlink_timer_recovery()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1208 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1209 switch (GET_FORMAT_TYPE (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1210 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1211 case I_FORMAT: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1212 case I1_FORMAT: /* I frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1213 downlink_tr_information (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1214 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1215 case S_FORMAT: /* S frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1216 downlink_tr_supervisory (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1217 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1218 case U_FORMAT: /* U frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1219 downlink_mfe_tr_unnumbered (pcch_i, frame, STATE_TIMER_RECOVERY); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1220 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1221 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1222 TRACE_EVENT_WIN ("invalid/unknown frame"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1223 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1224 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1225 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1226 return 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1227 }/* endfunc downlink_tr */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1228 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1229 static void downlink_tr_supervisory (T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1230 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1231 UBYTE frame_cr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1232 UBYTE frame_pollbit; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1233 UBYTE frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1234 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1235 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1236 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1237 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1238 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1239 TRACE_EVENT_WIN ("downlink_tr_supervisory()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1240 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1241 frame_cr = GET_CR (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1242 frame_pollbit = GET_P_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1243 frame_nr = GET_RECEIVE_NUMBER (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1244 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1245 switch (GET_S_TYPE (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1246 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1247 case RR_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1248 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1249 * in accordance with CCITT Q.921 figure B.8 (sheet 5 and 6 of 9) and | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1250 * 3GPP 04.06, 5.5.3.1 "On receipt of a valid I frame or supervisory frame" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1251 * and 5.5.7 "Waiting acknowledgement". | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1252 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1253 if (frame_pollbit AND frame_cr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1254 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1255 enquiry_response (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1256 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1257 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1258 if (com_check_nr (pcch->va, pcch->vs, frame_nr)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1259 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1260 /* N(R) check is successfull */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1261 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1262 TRACE_EVENT_WIN_P5 ("V(A)=%d =< N(R)=%d =< V(S)=%d check is successfull, pf=%u cr=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1263 pcch->va, frame_nr, pcch->vs, frame_pollbit, frame_cr); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1264 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1265 pcch->va = frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1266 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1267 if (frame_pollbit AND !frame_cr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1268 { /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1269 * 3GPP 04.06, 5.5.7: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1270 * The timer recovery state is only cleared if the DL receives a valid | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1271 * supervisory frame response with the F bit set to 1. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1272 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1273 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1274 pcch_i->state = STATE_MULTIPLE_FRAME_ESTABLISHED; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1275 /* acknowledgement according to GSM 04.06, 5.5.3.1*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1276 free_sending_buffer (pcch->ch_type, pcch_i->sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1277 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1278 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1279 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1280 invoke_retransmission (pcch_i, frame_nr); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1281 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1282 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1283 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1284 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1285 nr_error_recovery (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1286 }/* endifelse com_check_nr */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1287 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1288 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1289 case REJ_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1290 #if defined(NEW_REJ_ACK) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1291 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1292 * in accordance with | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1293 * 3GPP 04.06, 5.5.3.1 "On receipt of a valid I frame or supervisory frame" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1294 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1295 if (com_check_nr (pcch->va, pcch->vs, frame_nr)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1296 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1297 /* N(R) check is successfull */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1298 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1299 TRACE_EVENT_WIN_P5 ("V(A)=%d =< N(R)=%d =< V(S)=%d check is successfull, pf=%u cr=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1300 pcch->va, frame_nr, pcch->vs, frame_pollbit, frame_cr); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1301 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1302 /* acknowledgement according to GSM 04.06, 5.5.3.1*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1303 free_sending_buffer (pcch->ch_type, pcch_i->sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1304 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1305 pcch->va = frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1306 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1307 #endif /* NEW_REJ_ACK */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1308 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1309 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1310 * in accordance with GSM 04.06; chapter 5.5.4.1 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1311 * Receipt of a valid REJ frame [ii) and iii)] | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1312 * | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1313 * clear existing peer receiver busy condition (not applicable in GSM) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1314 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1315 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1316 if (frame_pollbit AND !frame_cr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1317 {/* REJ response with F bit set to 1 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1318 /* clear the timer recovery state */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1319 pcch_i->state = STATE_MULTIPLE_FRAME_ESTABLISHED; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1320 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1321 /* reset timer T200 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1322 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1323 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1324 #if defined(NEW_REJ_ACK) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1325 /* transmit the corresponding I frame asap */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1326 if (pcch->va NEQ frame_nr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1327 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1328 TRACE_EVENT_WIN_P2 ("REJ: V(A)=%d != N(R)=%d => invoke retransmission", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1329 pcch->va, frame_nr); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1330 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1331 invoke_retransmission (pcch_i, frame_nr); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1332 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1333 #else /* NEW_REJ_ACK */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1334 /* transmit the corresponding I frame asap */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1335 invoke_retransmission (pcch_i, frame_nr); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1336 #endif /* NEW_REJ_ACK */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1337 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1338 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1339 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1340 * set its send state variable V(S) and its acknowledge state | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1341 * variable V(A) to the value of the N(R) contained in the REJ frame | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1342 * control field | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1343 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1344 pcch->vs = pcch->va = frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1345 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1346 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1347 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1348 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1349 * set its its acknowledge state variable V(A) to the value | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1350 * of the N(R) contained in the REJ frame control field | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1351 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1352 pcch->va = frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1353 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1354 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1355 * if REJ command with P bit set to 1, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1356 * transmit an appropiate supervisory response frame with F bit set to 1 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1357 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1358 if (frame_pollbit AND frame_cr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1359 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1360 enquiry_response (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1361 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1362 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1363 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1364 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1365 case RNR_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1366 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1367 * ignore RNR frame without notification | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1368 * (ETSI GSM 04.06, section 6. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1369 * "Special protocol operation on SAPI=0 and SAPI=3", page 53) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1370 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1371 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1372 /* frame not implemented, */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1373 TRACE_EVENT_WIN ("invalid S frame"); /* GSM 04.06 Annex G.3.1 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1374 return; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1375 }/* endswitch frame_type */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1376 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1377 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1378 }/* endfunc downlink_tr_supervisory */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1379 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1380 static void downlink_tr_information ( T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1381 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1382 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1383 UBYTE frame_nr; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1384 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1385 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1386 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1387 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1388 TRACE_EVENT_WIN ("downlink_tr_information()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1389 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1390 if (!GET_CR (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1391 { /* GSM 04.06 Annex G.2.2 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1392 TRACE_EVENT_WIN ("invalid I response (C=0)"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1393 return; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1394 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1395 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1396 /* in accordance with CCITT Q.921 figure B.8 (sheet 7 of 9) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1397 downlink_i_frame (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1398 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1399 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1400 * in accordance with CCITT Q.921 figure B.8 (sheet 8 of 9) and | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1401 * 3GPP 04.06, 5.5.3.1 "On receipt of a valid I frame or supervisory frame" | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1402 * and 5.5.7 "Waiting acknowledgement". | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1403 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1404 frame_nr = GET_RECEIVE_NUMBER (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1405 if (com_check_nr (pcch->va, pcch->vs, frame_nr)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1406 pcch->va = frame_nr;/* N(R) check is successfull */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1407 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1408 nr_error_recovery (pcch_i, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1409 }/* endfunc downlink_tr_information */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1410 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1411 static int downlink_awaiting_release(T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1412 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1413 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1414 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1415 CHECK_PCCH_Ir(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1416 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1417 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1418 TRACE_FUNCTION ("downlink_awaiting_release()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1419 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1420 if (GET_FORMAT_TYPE (frame) EQ U_FORMAT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1421 { /* U frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1422 if (GET_CR (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1423 { /* command */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1424 switch (GET_U_TYPE (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1425 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1426 case SABM_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1427 if (pcch_i->sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1428 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1429 pcch->vtx = DM_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1430 pcch_i->pf_bit_flag = GET_P_BIT (frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1431 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1432 pcch_i->state = STATE_IDLE_DL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1433 drr_dl_release_cnf (pcch->ch_type, PS_SAPI_0, FALSE); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1434 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1435 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1436 case UI_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1437 /* drr_dl_unitdata_ind() was called in the main downlink function */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1438 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1439 case DISC_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1440 pcch->vtx = UA_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1441 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1442 #if !defined(LATE_LEAVING_DEDICATED) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1443 com_leave_dedicated (pcch->ch_type); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1444 #endif /* LATE_LEAVING_DEDICATED */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1445 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1446 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1447 /* GSM 04.06 Annex G.2.2, G.3.2 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1448 TRACE_EVENT_WIN_P1 ("invalid command U frame (%02x)", GET_U_TYPE (frame)); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1449 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1450 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1451 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1452 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1453 { /* response */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1454 switch (GET_U_TYPE (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1455 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1456 case DM_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1457 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1458 * PATCH LE 14.09.99 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1459 * Ignore DM(F=0) frames | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1460 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1461 if (!GET_P_BIT (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1462 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1463 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1464 /* the same as UA_FRAME */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1465 /*lint -fallthrough*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1466 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1467 case UA_FRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1468 pcch_i->T200_Stop = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1469 #if defined(LATE_LEAVING_DEDICATED) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1470 com_leave_dedicated (pcch->ch_type); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1471 #endif /* LATE_LEAVING_DEDICATED */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1472 pcch_i->state = STATE_IDLE_DL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1473 drr_dl_release_cnf (pcch->ch_type, pcch_i->sapi, TRUE); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1474 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1475 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1476 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1477 TRACE_EVENT_WIN_P1 ("invalid response U frame (%02x)", GET_U_TYPE (frame)); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1478 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1479 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1480 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1481 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1482 return 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1483 }/* endfunc downlink_awaiting_release */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1484 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1485 static void invoke_retransmission (T_CCH_INTERN* pcch_i, UBYTE frame_nr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1486 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1487 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1488 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1489 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1490 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1491 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1492 if (pcch->vs NEQ frame_nr) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1493 { /* decrement V(S) and recover queue for retransmission */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1494 TRACE_EVENT_WIN ("invoke retransmission"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1495 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1496 pcch->vs--; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1497 pcch->vs &= 7; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1498 com_recover_queue (pcch_i->sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1499 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1500 }/* endfunc invoke_retransmission */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1501 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1502 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1503 static void enquiry_response (T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1504 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1505 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1506 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1507 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1508 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1509 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1510 TRACE_EVENT_WIN ("enquiry_response()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1511 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1512 * in accordance with ETSI GSM 04.06, 5.5.3.2 Receiving supervisory | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1513 * commands with the P bit set to "1" and ETSI GSM 04.06, 5.5.4.1 iii | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1514 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1515 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1516 pcch_i->pf_bit_flag = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1517 pcch->acknowledge_pending = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1518 pcch->vtx = RR_RSP; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1519 }/* endfunc enquiry_response */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1520 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1521 #if defined(_SIMULATION_) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1522 LOCAL const char * const _str_error_ind_cause[] = | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1523 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1524 "T200_EXPIRED_N200_PLUS_1_TIMES, \"T200 expired (N200 + 1 times)\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1525 "CS_REEST_REQ, \"re-establishment request\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1526 "UNSOLICITED_UA_RESPONSE, \"unsolicited UA response\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1527 "UNSOLICITED_DM_RESPONSE, \"unsolicited DM response\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1528 "UNSOLICITED_DM_RESPONSE_ABNORMAL_REL, \"unsolicited DM response, multiple frame established state\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1529 "UNSOLICITED_SUPERVISORY_RESPONSE, \"unsolicited supervisory response\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1530 "SEQUENCE_ERROR, \"sequence error\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1531 "U_FRAME_WITH_INCORRECT_PARAMETERS, \"U frame with incorrect parameters\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1532 "S_FRAME_WITH_INCORRECT_PARAMETERS, \"S frame with incorrect parameters\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1533 "I_FRAME_WITH_INCORRECT_USE_OF_M_BIT, \"I frame with incorrect use of M bit\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1534 "I_FRAME_WITH_INCORRECT_LENGTH, \"I frame with incorrect length\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1535 "FRAME_NOT_IMPLEMENTED, \"frame not implemented\"", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1536 }; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1537 #endif /* _SIMULATION_ */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1538 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1539 static void mdl_error_ind (UBYTE cause, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1540 UBYTE channel_type, UBYTE sapi) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1541 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1542 TRACE_EVENT_WIN_P2 ("mdl_error_ind(%u %s)", cause, _str_error_ind_cause[cause]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1543 switch(cause) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1544 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1545 case T200_EXPIRED_N200_PLUS_1_TIMES: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1546 case UNSOLICITED_DM_RESPONSE: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1547 case UNSOLICITED_DM_RESPONSE_ABNORMAL_REL: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1548 case SEQUENCE_ERROR: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1549 drr_error_ind (channel_type, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1550 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1551 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1552 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1553 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1554 }/* endfunc mdl_error_ind */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1555 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1556 static void nr_error_recovery (T_CCH_INTERN* pcch_i, UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1557 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1558 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1559 T_CCH* pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1560 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1561 CHECK_PCCH_I(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1562 pcch = pcch_i->pcch; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1563 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1564 TRACE_EVENT_WIN ("nr_error_recovery()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1565 DL_OFFLINE_TRACE (TRACE_DL_EVENT, TRACE_CH_UNKNOWN, pcch->ch_type, "N(R) sequence error"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1566 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1567 switch (pcch->ch_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1568 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1569 case L2_CHANNEL_SDCCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1570 if (pcch_i->sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1571 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1572 /*lint -fallthrough*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1573 case L2_CHANNEL_SACCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1574 case L2_CHANNEL_FACCH_F: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1575 case L2_CHANNEL_FACCH_H: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1576 if ((GET_P_BIT (frame) EQ 1) AND !GET_M_BIT (frame)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1577 pcch_i->dl_data_ind = TRUE; /* indicate a complete message to layer 3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1578 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1579 pcch_i->dl_data_ind = FALSE;/* no indication if P bit set to "0" or message is incomplete */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1580 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1581 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1582 * GSM 04.06, 5.7.4 The data link shall remain in current state | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1583 * until it´s release by layer 3 ??? | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1584 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1585 pcch_i->mdl_error_ind = SEQUENCE_ERROR; /* send mdl error ind after sequence error */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1586 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1587 DL_EM_CHANNEL_FAILURE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1588 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1589 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1590 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1591 pcch->vtx = EMPTY_CMD;/* no answer after N(R) sequence error */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1592 }/* endfunc nr_error_recovery */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1593 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1594 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1595 static void concatenate (UBYTE ch_type, UBYTE sapi,UBYTE *frame) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1596 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1597 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1598 switch (ch_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1599 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1600 case L2_CHANNEL_SDCCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1601 if (sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1602 com_concatenate (&dl_data->dcch0_in_msg, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1603 else if (sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1604 com_concatenate (&dl_data->dcch3_in_msg, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1605 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1606 case L2_CHANNEL_SACCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1607 if (sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1608 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1609 com_concatenate (&dl_data->dcch3_in_msg, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1610 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1611 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1612 case L2_CHANNEL_FACCH_F: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1613 case L2_CHANNEL_FACCH_H: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1614 if (sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1615 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1616 com_concatenate (&dl_data->dcch0_in_msg, frame); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1617 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1618 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1619 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1620 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1621 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1622 }/* endfunc concatenate */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1623 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1624 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1625 +--------------------------------------------------------------------+ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1626 | PROJECT : GSM-PS (6147) MODULE : DL_COM | | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1627 | STATE : code ROUTINE : free_sending_buffer | | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1628 +--------------------------------------------------------------------+ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1629 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1630 PURPOSE : After confirmation of an I frame the sending buffer is | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1631 released if it was the last segment. This avoids | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1632 resending of I frames after resumption. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1633 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1634 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1635 static void free_sending_buffer ( UBYTE ch_type, UBYTE sapi) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1636 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1637 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1638 T_QUEUE *queue = NULL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1639 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1640 TRACE_EVENT_WIN_P2 ("free_sending_buffer():%s SAPI=%u", CH_TYPE_NAME[ch_type], sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1641 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1642 switch (ch_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1643 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1644 case L2_CHANNEL_SDCCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1645 if (sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1646 queue = &dl_data->dcch0_queue; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1647 else if (sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1648 queue = &dl_data->dcch3_queue; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1649 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1650 case L2_CHANNEL_SACCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1651 if (sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1652 queue = &dl_data->dcch3_queue; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1653 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1654 case L2_CHANNEL_FACCH_F: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1655 case L2_CHANNEL_FACCH_H: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1656 if (sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1657 queue = &dl_data->dcch0_queue; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1658 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1659 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1660 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1661 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1662 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1663 if (queue) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1664 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1665 if (queue->switch_buffer) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1666 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1667 TRACE_EVENT_WIN_P3 ("CNF on %s SAPI=%u %s (switch_buffer)", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1668 CH_TYPE_NAME[queue->switch_buffer->ch_type], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1669 queue->switch_buffer->sapi, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1670 queue->switch_buffer->cnf ? "CNF required" : ""); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1671 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1672 com_l3trace (TRACE_UPLINK, queue->switch_buffer->ch_type, (UBYTE *)queue->switch_buffer); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1673 COM_FREE_QUEUE_BUFFER ( queue, INDEX_SWITCH_BUFFER); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1674 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1675 else if (queue->sending_buffer) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1676 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1677 TRACE_EVENT_WIN_P4 ("CNF on %s SAPI=%u %s (sending_buffer) act_length=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1678 CH_TYPE_NAME[queue->sending_buffer->ch_type], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1679 queue->sending_buffer->sapi, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1680 queue->sending_buffer->cnf ? "CNF required" : "", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1681 queue->act_length); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1682 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1683 if (queue->act_length EQ 0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1684 { /* entire message has been sent */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1685 com_l3trace (TRACE_UPLINK, queue->sending_buffer->ch_type, (UBYTE *)queue->sending_buffer); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1686 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1687 if (queue->sending_buffer->cnf) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1688 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1689 drr_dl_data_cnf (sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1690 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1691 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1692 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1693 COM_FREE_QUEUE_BUFFER (queue, INDEX_SENDING_BUFFER); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1694 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1695 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1696 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1697 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1698 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1699 TRACE_EVENT_WIN_P2 ("%s SAPI=%u: sending_buffer and switch_buffer=NULL !!!", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1700 CH_TYPE_NAME[ch_type], sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1701 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1702 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1703 }/* endfunc concatenate */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1704 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1705 static void T200_expiry ( UBYTE channel, UBYTE sapi) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1706 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1707 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1708 UBYTE old_state; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1709 UBYTE new_state; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1710 T_CCH * pcch = &dl_data->cch[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1711 UBYTE N200_counter; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1712 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1713 TRACE_FUNCTION ("T200_expiry()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1714 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1715 switch (pcch->ch_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1716 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1717 case L2_CHANNEL_SACCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1718 N200_counter = SACCH_N200; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1719 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1720 case L2_CHANNEL_SDCCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1721 N200_counter = SDCCH_N200; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1722 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1723 case L2_CHANNEL_FACCH_F: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1724 N200_counter = FACCH_N200_FR; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1725 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1726 case L2_CHANNEL_FACCH_H: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1727 N200_counter = FACCH_N200_HR; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1728 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1729 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1730 N200_counter = NOT_PRESENT_8BIT; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1731 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1732 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1733 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1734 new_state = old_state = dl_data->state[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1735 switch (old_state) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1736 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1737 case STATE_CONTENTION_RESOLUTION: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1738 repeat_sabm (channel, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1739 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1740 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1741 case STATE_MULTIPLE_FRAME_ESTABLISHED: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1742 pcch->rc = 1; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1743 pcch->p_bit_flag= 1; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1744 pcch->time_flag = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1745 new_state = STATE_TIMER_RECOVERY; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1746 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1747 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1748 case STATE_TIMER_RECOVERY: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1749 if (N200_counter EQ NOT_PRESENT_8BIT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1750 break; /* invalid channel */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1751 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1752 if (pcch->rc >= N200_counter) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1753 { /* release connection due to T200 expired N200 plus 1 times */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1754 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1755 TRACE_EVENT_WIN_P1 ("T200 expired, N200=%u", N200_counter); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1756 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1757 /* New! Called now by mdl_error_ind(). | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1758 * drr_dl_release_ind (dl_data, pcch->ch_type, sapi, NOT_PRESENT_8BIT); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1759 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1760 mdl_error_ind (T200_EXPIRED_N200_PLUS_1_TIMES, pcch->ch_type, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1761 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1762 if (sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1763 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1764 dcch3_init_dl_data(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1765 pcch->T200_counter = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1766 pcch->time_flag = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1767 pcch->contention_resolution = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1768 pcch->vtx = EMPTY_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1769 new_state = STATE_IDLE_DL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1770 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1771 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1772 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1773 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1774 pcch->rc++; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1775 pcch->p_bit_flag = 1; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1776 pcch->time_flag = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1777 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1778 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1779 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1780 case STATE_AWAITING_RELEASE: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1781 if (pcch->rc >= N200_ESTABLISHMENT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1782 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1783 TRACE_EVENT_WIN_P1 ("T200 expired, N200=%u", N200_ESTABLISHMENT); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1784 drr_dl_release_cnf (pcch->ch_type, sapi, TRUE); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1785 new_state = STATE_IDLE_DL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1786 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1787 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1788 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1789 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1790 pcch->rc++; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1791 pcch->vtx = DISC_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1792 pcch->time_flag = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1793 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1794 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1795 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1796 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1797 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1798 }/* endswitch old_state */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1799 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1800 if (new_state NEQ old_state) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1801 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1802 set_channel_state (channel, new_state); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1803 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1804 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1805 }/* endfunc T200_expiry */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1806 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1807 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1808 +--------------------------------------------------------------------+ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1809 | PROJECT : GSM-PS (6147) MODULE : state | | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1810 | STATE : code ROUTINE : repeat_sabm | | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1811 +--------------------------------------------------------------------+ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1812 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1813 PURPOSE : Repeat if possible the SABM command. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1814 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1815 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1816 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1817 static void repeat_sabm (UBYTE channel, UBYTE sapi) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1818 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1819 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1820 T_CCH* pcch = &dl_data->cch[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1821 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1822 TRACE_FUNCTION ("repeat_sabm()"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1823 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1824 if (pcch->rc >= N200_ESTABLISHMENT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1825 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1826 if (sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1827 pcch->contention_resolution = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1828 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1829 DL_OFFLINE_TRACE (TRACE_DL_EVENT, channel, pcch->ch_type, ">N200_EST"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1830 SYST_TRACE_P ((SYST, "DL: >N200 of SABM")); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1831 TRACE_ERROR ("DL: >N200 of SABM"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1832 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1833 DL_EM_CHANNEL_ESTABLISHMENT_FAILED; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1834 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1835 mdl_error_ind(T200_EXPIRED_N200_PLUS_1_TIMES, pcch->ch_type, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1836 set_channel_state (channel, STATE_IDLE_DL); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1837 /* New! Called now by mdl_error_ind(). | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1838 * drr_dl_release_ind (dl_data, pcch->ch_type, sapi, NOT_PRESENT_8BIT); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1839 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1840 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1841 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1842 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1843 pcch->rc++; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1844 pcch->vtx = SABM_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1845 pcch->time_flag = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1846 TRACE_EVENT_P1 ("DL: T200 %u. repeat of SABM", pcch->rc); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1847 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1848 }/* endfunc repeat_sabm */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1849 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1850 GLOBAL void set_channel_state (UBYTE channel, UBYTE state) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1851 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1852 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1853 if (dl_data->state[channel] NEQ state) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1854 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1855 #ifdef TRACE_STATE | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1856 vsi_o_state_ttrace ("STATE_%s:%s -> %s", PROCESS_NAME[channel], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1857 channel EQ C_DCCH3 ? STATE_DCCH3_NAME[dl_data->state[channel]]: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1858 STATE_DCCH0_NAME[dl_data->state[channel]], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1859 channel EQ C_DCCH3 ? STATE_DCCH3_NAME[state] : | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1860 STATE_DCCH0_NAME[state]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1861 #endif /* TRACE_STATE */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1862 dl_data->state[channel] = state; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1863 DL_OFFLINE_TRACE (TRACE_CHSTATE, channel, dl_data->cch[channel].ch_type, NULL); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1864 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1865 }/* endfunc set_channel_state */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1866 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1867 static void set_T200_counter (T_CCH* pcch, UBYTE sapi) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1868 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1869 switch (pcch->ch_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1870 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1871 case L2_CHANNEL_SACCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1872 pcch->T200_counter = sapi EQ PS_SAPI_0 ? | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1873 T200_SDCCH_SAPI_0_CNT : T200_SACCH_SAPI_3_CNT; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1874 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1875 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1876 TRACE_EVENT_WIN_P1 ("set_T200_counter: unknown ch_type=%u -> use SDCCH", pcch->ch_type); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1877 /*lint -fallthrough*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1878 case L2_CHANNEL_SDCCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1879 pcch->T200_counter = sapi EQ PS_SAPI_0 ? | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1880 T200_SDCCH_SAPI_0_CNT : T200_SDCCH_SAPI_3_CNT; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1881 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1882 case L2_CHANNEL_FACCH_F: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1883 pcch->T200_counter = T200_FACCH_SAPI_0_CNT_FR; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1884 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1885 case L2_CHANNEL_FACCH_H: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1886 pcch->T200_counter = T200_FACCH_SAPI_0_CNT_HR; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1887 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1888 }/* endswitch ch_type */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1889 pcch->time_flag = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1890 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1891 TRACE_EVENT_WIN_P3 ("set_T200_counter: %s, SAPI=%u: %u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1892 CH_TYPE_NAME[pcch->ch_type], sapi, pcch->T200_counter); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1893 }/* endfunc set_T200_counter */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1894 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1895 #if defined(DELAYED_RELEASE_IND) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1896 static void delayed_release_ind( UBYTE channel) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1897 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1898 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1899 /* delay DL RELEASE IND to RR for FTA 25.2.3 *********** */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1900 if (dl_data->release_ind_ch_type NEQ NOT_PRESENT_8BIT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1901 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1902 if (dl_data->release_ind_delay > 0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1903 dl_data->release_ind_delay--; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1904 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1905 if (dl_data->release_ind_delay EQ 0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1906 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1907 DL_OFFLINE_TRACE (TRACE_DL_EVENT, TRACE_CH_UNKNOWN, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1908 dl_data->release_ind_ch_type, "UL:send delayed REL IND"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1909 drr_dl_release_ind (dl_data->release_ind_ch_type, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1910 dl_data->release_ind_sapi, NOT_PRESENT_8BIT, TRUE); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1911 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1912 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1913 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1914 DL_OFFLINE_TRACE (TRACE_DL_EVENT, TRACE_CH_UNKNOWN, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1915 dl_data->release_ind_ch_type, "UL:pend. delay REL IND"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1916 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1917 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1918 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1919 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1920 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1921 #endif /* DELAYED_RELEASE_IND */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1922 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1923 T_RADIO_FRAME* dl_uplink(UBYTE channel, UBYTE sapi, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1924 UBYTE no_signalling_mode, BOOL recursive) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1925 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1926 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1927 T_CCH* pcch = &dl_data->cch[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1928 T_RADIO_FRAME* p_l2_frame = &dl_data->l2_frame; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1929 int send = UPLINK_NULL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1930 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1931 TRACE_EVENT_WIN_P3 ("uplink(): %s dcch0_ch_type:%s dedi=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1932 CH_TYPE_NAME[pcch->ch_type], CH_TYPE_NAME[dl_data->dcch0_ch_type], dl_data->RR_dedicated); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1933 TRACE_EVENT_WIN_P6 ("UL: DCCH0=%s,%s vr=%u vs=%u va=%u T200=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1934 CH_TYPE_NAME[dl_data->cch[C_DCCH0].ch_type], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1935 STATE_DCCH0_NAME[dl_data->state[C_DCCH0]], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1936 dl_data->cch[C_DCCH0].vr, dl_data->cch[C_DCCH0].vs, dl_data->cch[C_DCCH0].va, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1937 dl_data->cch[C_DCCH0].T200_counter); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1938 TRACE_EVENT_WIN_P6 ("UL: DCCH3=%s,%s vr=%u vs=%u va=%u T200=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1939 CH_TYPE_NAME[dl_data->cch[C_DCCH3].ch_type], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1940 STATE_DCCH3_NAME[dl_data->state[C_DCCH3]], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1941 dl_data->cch[C_DCCH3].vr, dl_data->cch[C_DCCH3].vs, dl_data->cch[C_DCCH3].va, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1942 dl_data->cch[C_DCCH3].T200_counter); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1943 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1944 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1945 /* check SACCH SAPI and channel */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1946 if (pcch->ch_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1947 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1948 if (!dl_data->RR_dedicated) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1949 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1950 sapi = PS_SAPI_0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1951 send = UPLINK_EMPTY; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1952 TRACE_EVENT_WIN ("SACCH without dedicated channel: change SAPI->0, UPLINK_EMPTY"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1953 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1954 else if (dl_data->state[C_DCCH0] EQ STATE_SUSPENDED) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1955 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1956 sapi = PS_SAPI_0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1957 send = UPLINK_REPORT; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1958 TRACE_EVENT_WIN ("SACCH during suspended dedicated channel: change SAPI->0, UPLINK_REPORT"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1959 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1960 else if (sapi EQ PS_SAPI_3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1961 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1962 if ((dl_data->state[C_DCCH0] <= STATE_IDLE_DL) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1963 OR | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1964 (dl_data->dcch0_ch_type EQ L2_CHANNEL_SDCCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1965 OR | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1966 ((dl_data->cch[C_DCCH3].vtx EQ EMPTY_CMD) AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1967 (!com_queue_awaiting_transmission (PS_SAPI_3)) AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1968 (dl_data->state[C_DCCH3] NEQ STATE_AWAITING_ESTABLISHMENT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1969 ) ) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1970 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1971 sapi = PS_SAPI_0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1972 TRACE_EVENT_WIN ("SACCH with SAPI=3 only together with FACCH and frame is awaiting tx: change SAPI->0"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1973 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1974 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1975 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1976 channel = C_DCCH3; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1977 pcch = &dl_data->cch[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1978 TRACE_EVENT_WIN ("SACCH with SAPI=3 together with FACCH: change channel->C_DCCH3"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1979 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1980 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1981 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1982 else if ((dl_data->RR_dedicated) AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1983 (dl_data->dcch0_ch_type NEQ pcch->ch_type)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1984 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1985 TRACE_EVENT_WIN_P2 ("dcch0_ch_type (%s) NEQ %s -> unexpected,unsolicited,invalid channel => UPLINK_EMPTY", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1986 CH_TYPE_NAME[dl_data->dcch0_ch_type], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1987 CH_TYPE_NAME[dl_data->cch[C_DCCH0].ch_type]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1988 send = UPLINK_EMPTY; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1989 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1990 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1991 /* decrease T200 counter ************************************ */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1992 if (channel EQ C_DCCH3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1993 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1994 if (dl_data->cch[C_DCCH3].T200_counter >= T200_ACTIVE) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1995 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1996 dl_data->cch[C_DCCH3].T200_counter--; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1997 TRACE_EVENT_WIN_P2 ("T200(SAPI_0)=%u T200(SAPI_3)=%u*", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1998 dl_data->cch[C_DCCH0].T200_counter, dl_data->cch[C_DCCH3].T200_counter); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1999 /*DL_OFFLINE_TRACE (TRACE_DL_EVENT, channel, pcch->ch_type, "dec T200(SAPI_3)");*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2000 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2001 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2002 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2003 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2004 if (pcch->ch_type NEQ L2_CHANNEL_SACCH) /* no T200 for SACCH with SAPI=0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2005 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2006 if (dl_data->cch[C_DCCH0].T200_counter >= T200_ACTIVE) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2007 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2008 dl_data->cch[C_DCCH0].T200_counter--; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2009 TRACE_EVENT_WIN_P2 ("T200(SAPI_0)=%u* T200(SAPI_3)=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2010 dl_data->cch[C_DCCH0].T200_counter, dl_data->cch[C_DCCH3].T200_counter); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2011 /*DL_OFFLINE_TRACE (TRACE_DL_EVENT, channel, pcch->ch_type, "dec T200(SAPI_0)");*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2012 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2013 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2014 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2015 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2016 /* check activity of DL ************************************* */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2017 if (dl_data->dl_active AND dl_data->state[channel] EQ STATE_MULTIPLE_FRAME_ESTABLISHED) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2018 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2019 TRACE_EVENT_WIN_P1 ("uplink(): %s dl_active", PROCESS_NAME[channel]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2020 DL_OFFLINE_TRACE (TRACE_DL_EVENT, channel, pcch->ch_type, "UL:&dl_active"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2021 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2022 /* signalling only */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2023 send = UPLINK_EMPTY; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2024 }/* endif dl_active */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2025 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2026 #if defined(DELAYED_SABM) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2027 /* delay uplink SABM to PL for FTA 26.6.6.1 and 25.2.3 *********** */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2028 if ((channel EQ C_DCCH0) AND (dl_data->dcch0_sabm_flag NEQ NOT_PRESENT_8BIT)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2029 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2030 dcch0_delay_sabm (pcch); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2031 if (dl_data->dcch0_sabm_flag NEQ NOT_PRESENT_8BIT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2032 send = UPLINK_EMPTY; /* send dummy only */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2033 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2034 #endif /* DELAYED_SABM */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2035 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2036 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2037 #if defined(DELAYED_RELEASE_IND) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2038 delayed_release_ind (channel); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2039 #endif /* DELAYED_RELEASE_IND */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2040 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2041 if ((send EQ UPLINK_NULL) OR (send EQ UPLINK_EMPTY)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2042 { /* After a L3 release at the last downlink DL should send a DISC */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2043 TRACE_EVENT_WIN_P6 ("uplink():%s %s SAPI=%u vtx=%s %s (#%u)", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2044 PROCESS_NAME[channel], CH_TYPE_NAME[pcch->ch_type], sapi, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2045 VTX_NAME[pcch->vtx], SEND_NAME[send], __LINE__); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2046 switch (channel) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2047 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2048 case C_DCCH0: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2049 send = dcch0_check_disc (send); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2050 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2051 case C_DCCH3: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2052 send = dcch3_check_disc (send); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2053 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2054 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2055 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2056 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2057 TRACE_EVENT_WIN_P6 ("uplink():%s %s SAPI=%u vtx=%s %s (#%u)", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2058 PROCESS_NAME[channel], CH_TYPE_NAME[pcch->ch_type], sapi, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2059 VTX_NAME[pcch->vtx], SEND_NAME[send], __LINE__); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2060 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2061 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2062 if (send EQ UPLINK_NULL) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2063 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2064 TRACE_EVENT_WIN_P5 ("uplink():%s %s SAPI=%u vtx=%s %s", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2065 PROCESS_NAME[channel], CH_TYPE_NAME[pcch->ch_type], sapi, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2066 VTX_NAME[pcch->vtx], recursive ? "RECURSIVE" : ""); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2067 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2068 TRACE_EVENT_WIN_P8 ("UL: DCCH%u=%s,%s vr=%u vs=%u va=%u T200=%u (#%u)", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2069 sapi, CH_TYPE_NAME[dl_data->cch[channel].ch_type], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2070 STATE_DCCH3_NAME[dl_data->state[channel]], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2071 dl_data->cch[channel].vr, dl_data->cch[channel].vs, dl_data->cch[channel].va, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2072 dl_data->cch[channel].T200_counter, __LINE__); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2073 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2074 /* check timer T200 expiry ****************************** */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2075 if ((channel EQ C_DCCH0) AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2076 (dl_data->cch[C_DCCH0].T200_counter EQ T200_EXPIRED)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2077 T200_expiry (C_DCCH0, PS_SAPI_0); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2078 if ((channel EQ C_DCCH3) AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2079 (dl_data->cch[C_DCCH3].T200_counter EQ T200_EXPIRED)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2080 T200_expiry (C_DCCH3, PS_SAPI_3); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2081 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2082 TRACE_EVENT_WIN_P8 ("UL: DCCH%u=%s,%s vr=%u vs=%u va=%u T200=%u (#%u)", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2083 sapi, CH_TYPE_NAME[dl_data->cch[channel].ch_type], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2084 STATE_DCCH3_NAME[dl_data->state[channel]], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2085 dl_data->cch[channel].vr, dl_data->cch[channel].vs, dl_data->cch[channel].va, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2086 dl_data->cch[channel].T200_counter, __LINE__); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2087 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2088 /* state machine **************************************** */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2089 switch (dl_data->state[channel]) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2090 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2091 case STATE_IDLE_DL: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2092 if (pcch->vtx EQ EMPTY_CMD AND !dl_data->RR_dedicated) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2093 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2094 send = uplink_idle (channel, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2095 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2096 case STATE_CONTENTION_RESOLUTION: /* the same as STATE_AWAITING_ESTABLISHMENT */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2097 send = uplink_awaiting_establishment (channel, sapi, no_signalling_mode); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2098 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2099 case STATE_MULTIPLE_FRAME_ESTABLISHED: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2100 send = uplink_mfe (channel, sapi, no_signalling_mode); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2101 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2102 case STATE_TIMER_RECOVERY: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2103 send = uplink_timer_recovery (channel, sapi, no_signalling_mode); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2104 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2105 case STATE_AWAITING_RELEASE: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2106 send = uplink_awaiting_release ( channel, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2107 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2108 case STATE_SUSPENDED: /* only DCCH0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2109 send = UPLINK_NULL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2110 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2111 case STATE_DISABLED: /* only SABM/UA or SACCH and SDCCH (SAPI 3) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2112 if (channel EQ C_DCCH3) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2113 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2114 if (pcch->vtx EQ UA_CMD) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2115 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2116 send = uplink_idle (channel, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2117 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2118 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2119 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2120 send = UPLINK_EMPTY; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2121 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2122 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2123 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2124 }/* endswitch channel_state */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2125 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2126 }/* endif send == NULL */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2127 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2128 TRACE_EVENT_WIN_P8 ("UL: DCCH%u=%s,%s vr=%u vs=%u va=%u T200=%u (#%u)", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2129 sapi, CH_TYPE_NAME[dl_data->cch[channel].ch_type], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2130 STATE_DCCH3_NAME[dl_data->state[channel]], | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2131 dl_data->cch[channel].vr, dl_data->cch[channel].vs, dl_data->cch[channel].va, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2132 dl_data->cch[channel].T200_counter, __LINE__); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2133 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2134 if (pcch->ch_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2135 { /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2136 * According to 3GPP TS 04.05, 4.2.2 Priority: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2137 * The priority arrangement on the SACCH must ensure that if a SAPI = 3 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2138 * frame is awaiting transmission, two SAPI = 0 frames are not sent in | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2139 * consecutive SACCH frames. In addition, for the mobile to network | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2140 * direction it must also be ensured that any SAPI = 3 frame is followed | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2141 * by at least one SAPI = 0 frame. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2142 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2143 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2144 TRACE_EVENT_WIN_P3 ("sacch_last_uplink_sapi=%u SAPI=%u send=%s", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2145 dl_data->sacch_last_uplink_sapi, sapi, SEND_NAME[send]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2146 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2147 if ((dl_data->sacch_last_uplink_sapi EQ PS_SAPI_3) OR | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2148 ((sapi EQ PS_SAPI_3 ) AND (send EQ UPLINK_EMPTY))) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2149 {/* last uplinked SACCH frame was one with SAPI=3 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2150 * or | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2151 * no SACCH SAPI=3 frame is awaiting transmission | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2152 * -> uplink of a SACCH SAPI=0 frame | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2153 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2154 sapi = PS_SAPI_0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2155 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2156 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2157 if (send EQ UPLINK_EMPTY) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2158 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2159 sapi = PS_SAPI_0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2160 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2161 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2162 if ((sapi EQ PS_SAPI_0) AND (dl_data->state[C_DCCH0] >= STATE_SUSPENDED)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2163 { /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2164 * uplink measurement reports only if SAPI=0 is suspended, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2165 * on contention resolution procedure, established or awaiting release | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2166 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2167 send = UPLINK_REPORT; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2168 TRACE_EVENT_WIN ("uplink(): SACCH REPORT now"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2169 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2170 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2171 TRACE_EVENT_WIN_P2 ("sacch_last_uplink_sapi:=%u->%u", dl_data->sacch_last_uplink_sapi, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2172 dl_data->sacch_last_uplink_sapi = sapi; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2173 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2174 else if ((pcch->ch_type EQ L2_CHANNEL_SDCCH) AND (channel NEQ C_DCCH3)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2175 { /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2176 * According to 3GPP TS 04.05, 4.2.2 Priority: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2177 * The priority between data links on SDCCH shall be as follows: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2178 * Highest priority : SAPI = 0, Lowest priority : SAPI = 3. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2179 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2180 if ((sapi EQ PS_SAPI_0) AND (send <= UPLINK_EMPTY)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2181 { /* special case: nothing is awaiting transmission for SAPI=0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2182 if ((dl_data->cch[C_DCCH3].vtx NEQ EMPTY_CMD) OR | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2183 com_queue_awaiting_transmission(PS_SAPI_3) OR | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2184 (dl_data->cch[C_DCCH3].T200_counter NEQ T200_STOPPED)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2185 {/* something is awaiting transmission for SAPI=3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2186 if (dl_data->state[C_DCCH0] >= STATE_CONTENTION_RESOLUTION) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2187 { /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2188 * uplink SAPI=3 only if SAPI=0 is on contention resolution procedure | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2189 * or established or awaiting release | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2190 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2191 send = UPLINK_DCCH3; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2192 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2193 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2194 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2195 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2196 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2197 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2198 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2199 /* no special treatment of FACCH */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2200 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2201 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2202 /* return uplink frame buffer pointer dependent on the value of send */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2203 TRACE_EVENT_WIN_P4 ("%s on %s SAPI=%u RR_dedicated=%u", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2204 SEND_NAME[send], CH_TYPE_NAME[pcch->ch_type], sapi, dl_data->RR_dedicated); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2205 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2206 switch (send) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2207 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2208 case UPLINK_NORMAL: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2209 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2210 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2211 case UPLINK_UA: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2212 case UPLINK_UA_F: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2213 com_build_UA_response (pcch->ch_type, sapi, (UBYTE)((send EQ UPLINK_UA_F) ? 1 : 0)); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2214 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2215 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2216 case UPLINK_IFRAME: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2217 case UPLINK_IFRAME_P: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2218 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2219 UBYTE m_bit; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2220 UBYTE p_bit = (send EQ UPLINK_IFRAME_P) ? 1 : 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2221 T_QUEUE *queue; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2222 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2223 if (pcch->ch_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2224 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2225 sapi = PS_SAPI_3; /* acknowledged mode only for SAPI=3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2226 TRACE_EVENT_WIN ("SACCH with I frame: acknowledged mode only for SAPI=3"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2227 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2228 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2229 if (sapi EQ PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2230 queue = &dl_data->dcch0_queue; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2231 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2232 queue = &dl_data->dcch3_queue; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2233 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2234 if (send EQ UPLINK_IFRAME) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2235 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2236 com_read_queue (pcch->ch_type, sapi, &m_bit); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2237 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2238 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2239 {/* TIMER_RECOVERY state -> repetition of the last frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2240 pcch->vs--; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2241 pcch->vs &= 7; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2242 pcch->p_bit_flag = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2243 m_bit = queue->m_bit; /* remember last m bit */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2244 TRACE_EVENT_WIN_P2 ("TIMER_RECOVERY state: decrement vs to %u, remember m=%u", pcch->vs, m_bit); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2245 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2246 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2247 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2248 com_build_I_command (pcch->ch_type, sapi, pcch->vs, pcch->vr, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2249 p_bit, m_bit, queue); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2250 pcch->vs++; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2251 pcch->vs &= 7; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2252 TRACE_EVENT_WIN_P4 ("%s SAPI=%u new vs=%u (pcch=%08x)", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2253 CH_TYPE_NAME[pcch->ch_type], sapi, pcch->vs, pcch); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2254 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2255 set_T200_counter (pcch, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2256 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2257 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2258 case UPLINK_RR: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2259 case UPLINK_RR_F: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2260 if (pcch->ch_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2261 {/* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2262 * There are some tests at the start of dl_uplink() to determine the right | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2263 * SAPI value for SACCH. But the resulting value may be wrong because of | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2264 * the priority arrangement according to 3GPP TS 04.05, section 4.2.2. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2265 * In case the MS has to uplink a RR frame it is clear that | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2266 * L2 is in acknowledged mode and this can be done only with | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2267 * a SAPI value of 3 for SACCH. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2268 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2269 sapi = PS_SAPI_3; /* acknowledged mode only for SAPI=3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2270 TRACE_EVENT_WIN ("SACCH with supervisory frame: acknowledged mode only for SAPI=3"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2271 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2272 com_build_RR_response (pcch->ch_type, sapi, pcch->vr, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2273 (UBYTE)((send EQ UPLINK_RR_F) ? 1 : 0)); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2274 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2275 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2276 case UPLINK_REJ: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2277 case UPLINK_REJ_F: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2278 if (pcch->ch_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2279 {/* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2280 * There are some tests at the start of dl_uplink() to determine the right | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2281 * SAPI value for SACCH. But the resulting value may be wrong because of | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2282 * the priority arrangement according to 3GPP TS 04.05, section 4.2.2. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2283 * In case the MS has to uplink a REJ frame it is clear that | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2284 * L2 is in acknowledged mode and this can be done only with | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2285 * a SAPI value of 3 for SACCH. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2286 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2287 sapi = PS_SAPI_3; /* acknowledged mode only for SAPI=3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2288 TRACE_EVENT_WIN ("SACCH with supervisory frame: acknowledged mode only for SAPI=3"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2289 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2290 com_build_REJ_response (pcch->ch_type, sapi, pcch->vr, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2291 (UBYTE)((send EQ UPLINK_REJ_F) ? 1 : 0)); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2292 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2293 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2294 case UPLINK_REPORT: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2295 if (dl_data->RR_dedicated) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2296 {/* measurement report only in RR dedicated mode */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2297 sacch0_send_data (); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2298 com_l3trace (TRACE_UACK_UP, pcch->ch_type, (UBYTE *)p_l2_frame+5); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2299 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2300 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2301 /* no deleting of vtx!!! */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2302 return p_l2_frame; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2303 /* break; not necessary */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2304 }/* endif measurement report only in RR dedicated mode */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2305 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2306 /* else go through to UPLINK_EMPTY */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2307 /*lint -fallthrough*/ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2308 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2309 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2310 possible_reset_dcch0_ch_type(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2311 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2312 /* check RR message with short PD, short L2 header type 1, format Bter */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2313 if ((dl_data->state[C_DCCH0] >= STATE_SUSPENDED) AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2314 dl_data->rr_short_pd_buffer.l_buf AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2315 (dl_data->rr_short_pd_ch_type EQ pcch->ch_type)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2316 { /* RR message with short PD, short L2 header type 1, format Bter */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2317 com_build_UI_Bter (pcch->ch_type); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2318 return p_l2_frame; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2319 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2320 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2321 if (((pcch->ch_type EQ L2_CHANNEL_FACCH_F) OR | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2322 (pcch->ch_type EQ L2_CHANNEL_FACCH_H)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2323 AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2324 ((no_signalling_mode NEQ SIG_ONLY) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2325 #if defined(DELAYED_SABM) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2326 OR | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2327 /* suppress UI frames if delayed SABM is pending | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2328 * (independent from signalling mode) */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2329 (dl_data->dcch0_sabm_flag NEQ NOT_PRESENT_8BIT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2330 #endif /* DELAYED_SABM */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2331 #if defined(DELAYED_RELEASE_IND) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2332 OR | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2333 (dl_data->release_ind_ch_type NEQ NOT_PRESENT_8BIT) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2334 #endif /* DELAYED_RELEASE_IND */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2335 )) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2336 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2337 TRACE_EVENT_WIN ("UPLINK_NULL return"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2338 return NULL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2339 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2340 /* break; not necessary */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2341 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2342 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2343 T_RADIO_FRAME* empty_frame; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2344 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2345 TRACE_EVENT_WIN ("UPLINK_EMPTY return"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2346 /* The use of one byte array instead of two T_RADIO_FRAME structures | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2347 * saves 21 byte. Casting is in this case the better way then two calls | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2348 * of memcpy. | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2349 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2350 if (pcch->ch_type EQ L2_CHANNEL_SACCH) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2351 empty_frame = (T_RADIO_FRAME*)(&l2_empty_frame[0]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2352 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2353 empty_frame = (T_RADIO_FRAME*)(&l2_empty_frame[2]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2354 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2355 ATRC (empty_frame, 23); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2356 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2357 return empty_frame; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2358 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2359 /* break; not necessary */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2360 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2361 case UPLINK_DCCH3: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2362 return dl_uplink (C_DCCH3, PS_SAPI_3, no_signalling_mode, TRUE); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2363 /* break; not necessary */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2364 }/* endswitch send */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2365 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2366 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2367 /* | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2368 * UPLINK_NORMAL, UPLINK_IFRAME (_P), UPLINK_UA (_F), | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2369 * UPLINK_RR (_F), UPLINK_REJ (_F) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2370 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2371 TRACE_EVENT_WIN_P5 ("%s SAPI=%u delete vtx=%s ->EMPTY_CMD (%s#%u)", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2372 CH_TYPE_NAME[pcch->ch_type], sapi, VTX_NAME[pcch->vtx], __FILE10__, __LINE__); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2373 pcch->vtx = EMPTY_CMD; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2374 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2375 possible_reset_dcch0_ch_type(); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2376 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2377 return p_l2_frame; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2378 }/* endfunc dl_uplink */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2379 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2380 static int uplink_idle (UBYTE channel, UBYTE sapi) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2381 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2382 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2383 T_CCH* pcch = &dl_data->cch[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2384 int ret = UPLINK_NORMAL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2385 int ua_response = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2386 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2387 TRACE_EVENT_WIN_P3 ("uplink_idle(): %s %s SAPI=%d", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2388 PROCESS_NAME[channel], CH_TYPE_NAME[pcch->ch_type], sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2389 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2390 switch (channel) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2391 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2392 case C_DCCH0: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2393 switch (pcch->vtx) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2394 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2395 case UA_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2396 ret = pcch->f_bit ? UPLINK_UA_F : UPLINK_UA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2397 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2398 case DM_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2399 com_build_DM_response (pcch->ch_type, sapi, pcch->f_bit); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2400 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2401 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2402 ret = UPLINK_EMPTY;/* no SAPI=3 frame if DCCH0 is idle */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2403 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2404 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2405 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2406 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2407 case C_DCCH3: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2408 switch (pcch->vtx) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2409 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2410 case UA_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2411 ua_response = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2412 ret = pcch->f_bit ? UPLINK_UA_F : UPLINK_UA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2413 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2414 case DM_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2415 com_build_DM_response (pcch->ch_type, PS_SAPI_3, 1); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2416 ret = UPLINK_NORMAL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2417 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2418 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2419 ret = UPLINK_EMPTY; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2420 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2421 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2422 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2423 }/* endswitch channel */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2424 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2425 if (ua_response AND (ret EQ UPLINK_UA_F)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2426 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2427 drr_dl_establish_ind (pcch->ch_type, sapi, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2428 (UBYTE)(com_queue_awaiting_transmission (sapi) ? DL_UNSERVED : DL_ALL_DONE)); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2429 set_channel_state (channel, STATE_MULTIPLE_FRAME_ESTABLISHED); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2430 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2431 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2432 return ret; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2433 }/* endfunc uplink_idle */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2434 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2435 static int uplink_awaiting_establishment (UBYTE channel, UBYTE sapi, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2436 UBYTE no_signalling_mode) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2437 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2438 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2439 T_CCH* pcch = &dl_data->cch[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2440 int ret = UPLINK_NORMAL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2441 int ua_response = FALSE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2442 int sabm_command = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2443 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2444 TRACE_EVENT_WIN_P3 ("uplink_awaiting_establishment(): %s %s SAPI=%d", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2445 PROCESS_NAME[channel], CH_TYPE_NAME[pcch->ch_type], sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2446 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2447 if (pcch->time_flag) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2448 set_T200_counter (pcch, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2449 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2450 switch (channel) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2451 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2452 case C_DCCH0: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2453 if (pcch->vtx EQ SABM_CMD) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2454 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2455 if (pcch->contention_resolution) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2456 sabm_command = 2; /* com_build_SABM with L3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2457 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2458 sabm_command = 1; /* com_build_SABM without L3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2459 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2460 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2461 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2462 ret = UPLINK_EMPTY;/* no SAPI=0 frame is waiting transmission */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2463 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2464 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2465 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2466 case C_DCCH3: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2467 switch (pcch->vtx) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2468 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2469 case SABM_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2470 sabm_command = 1; /* com_build_SABM without L3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2471 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2472 case UA_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2473 ua_response = TRUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2474 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2475 case DM_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2476 com_build_DM_response (pcch->ch_type, sapi, pcch->f_bit); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2477 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2478 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2479 ret = UPLINK_EMPTY; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2480 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2481 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2482 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2483 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2484 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2485 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2486 if (ua_response) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2487 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2488 drr_dl_establish_cnf (pcch->ch_type, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2489 set_channel_state (channel, STATE_MULTIPLE_FRAME_ESTABLISHED); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2490 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2491 ret = pcch->f_bit ? UPLINK_UA_F : UPLINK_UA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2492 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2493 else if (sabm_command) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2494 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2495 com_build_SABM(pcch->ch_type, sapi, sabm_command EQ 2); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2496 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2497 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2498 return ret; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2499 }/* endfunc uplink_awaiting_establishment */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2500 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2501 static int uplink_mfe (UBYTE channel, UBYTE sapi, UBYTE no_signalling_mode) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2502 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2503 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2504 T_CCH* pcch = &dl_data->cch[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2505 int ret = UPLINK_NORMAL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2506 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2507 TRACE_EVENT_WIN_P6 ("uplink_mfe(): %s:%s SAPI=%d vtx=%s (vs=%u va+1=%u)", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2508 PROCESS_NAME[channel], CH_TYPE_NAME[pcch->ch_type], sapi, | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2509 VTX_NAME[pcch->vtx], pcch->vs, (pcch->va + 1)&7 ); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2510 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2511 if (pcch->time_flag) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2512 set_T200_counter (pcch, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2513 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2514 switch (pcch->vtx) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2515 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2516 case RR_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2517 if (pcch->f_bit_flag) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2518 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2519 ret = UPLINK_RR_F; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2520 pcch->f_bit_flag = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2521 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2522 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2523 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2524 if (!com_queue_awaiting_transmission (sapi)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2525 ret = UPLINK_RR; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2526 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2527 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2528 if (pcch->vs EQ ((pcch->va + 1)&7)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2529 ret = UPLINK_RR; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2530 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2531 ret = UPLINK_IFRAME; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2532 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2533 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2534 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2535 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2536 case UA_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2537 ret = pcch->f_bit ? UPLINK_UA_F : UPLINK_UA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2538 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2539 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2540 case RR_RSP: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2541 ret = pcch->f_bit ? UPLINK_RR_F : UPLINK_RR; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2542 pcch->f_bit_flag = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2543 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2544 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2545 case REJ_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2546 ret = pcch->f_bit ? UPLINK_REJ_F : UPLINK_REJ; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2547 pcch->f_bit_flag = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2548 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2549 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2550 default: /* vtx = ELSE */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2551 switch (channel) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2552 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2553 case C_DCCH0: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2554 if (com_queue_awaiting_transmission (PS_SAPI_0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2555 AND | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2556 (pcch->vs NEQ ((pcch->va + 1)&7))) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2557 ret = UPLINK_IFRAME; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2558 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2559 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2560 ret = UPLINK_EMPTY;/* no SAPI=0 frame is waiting transmission */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2561 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2562 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2563 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2564 case C_DCCH3: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2565 if (com_queue_awaiting_transmission (PS_SAPI_3)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2566 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2567 if (pcch->vs EQ ((pcch->va + 1)&7)) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2568 ret = UPLINK_EMPTY; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2569 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2570 ret = UPLINK_IFRAME; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2571 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2572 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2573 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2574 ret = dcch3_check_disc (UPLINK_EMPTY);/* no SAPI=3 frame is waiting transmission */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2575 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2576 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2577 }/* endswitch channel */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2578 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2579 }/* endswitch vtx */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2580 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2581 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2582 return ret; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2583 }/* endfunc uplink_mfe */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2584 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2585 static int uplink_timer_recovery (UBYTE channel, UBYTE sapi, UBYTE no_signalling_mode) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2586 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2587 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2588 T_CCH* pcch = &dl_data->cch[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2589 int ret = UPLINK_NORMAL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2590 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2591 TRACE_EVENT_WIN_P3 ("uplink_timer_recovery(): %s %s SAPI=%d", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2592 PROCESS_NAME[channel], CH_TYPE_NAME[pcch->ch_type], sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2593 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2594 if (pcch->time_flag) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2595 set_T200_counter (pcch, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2596 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2597 switch (pcch->vtx) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2598 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2599 case RR_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2600 if (pcch->f_bit_flag) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2601 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2602 ret = UPLINK_RR_F; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2603 pcch->f_bit_flag = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2604 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2605 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2606 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2607 if (pcch->p_bit_flag) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2608 ret = UPLINK_IFRAME_P; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2609 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2610 ret = UPLINK_RR; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2611 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2612 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2613 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2614 case UA_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2615 ret = pcch->f_bit ? UPLINK_UA_F : UPLINK_UA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2616 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2617 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2618 case RR_RSP: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2619 ret = pcch->f_bit ? UPLINK_RR_F : UPLINK_RR; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2620 pcch->f_bit_flag = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2621 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2622 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2623 case REJ_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2624 ret = pcch->f_bit ? UPLINK_REJ_F : UPLINK_REJ; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2625 pcch->f_bit_flag = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2626 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2627 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2628 default: /* vtx = ELSE */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2629 TRACE_EVENT_WIN_P3 ("%s SAPI=%u vtx=%s", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2630 CH_TYPE_NAME[pcch->ch_type], sapi, VTX_NAME[pcch->vtx]); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2631 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2632 if (pcch->p_bit_flag) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2633 ret = UPLINK_IFRAME_P; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2634 else | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2635 switch (channel) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2636 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2637 case C_DCCH0: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2638 ret = UPLINK_EMPTY;/* no SAPI=0 frame is waiting transmission */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2639 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2640 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2641 case C_DCCH3: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2642 ret = dcch3_check_disc (UPLINK_EMPTY);/* no SAPI=3 frame is waiting transmission */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2643 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2644 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2645 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2646 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2647 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2648 #if 0 /* decrement first short before sending the frame */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2649 if (ret EQ UPLINK_IFRAME_P) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2650 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2651 pcch->vs--; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2652 pcch->vs &= 7; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2653 pcch->p_bit_flag = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2654 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2655 #endif /* 0 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2656 return ret; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2657 }/* endfunc uplink_timer_recovery */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2658 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2659 GLOBAL int uplink_awaiting_release (UBYTE channel, UBYTE sapi) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2660 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2661 GET_INSTANCE_DATA; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2662 T_CCH* pcch = &dl_data->cch[channel]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2663 int ret = UPLINK_NORMAL; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2664 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2665 TRACE_EVENT_WIN_P3 ("uplink_awaiting_release(): %s %s SAPI=%d", | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2666 PROCESS_NAME[channel], CH_TYPE_NAME[pcch->ch_type], sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2667 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2668 if (pcch->time_flag) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2669 set_T200_counter (pcch, sapi); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2670 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2671 switch (pcch->vtx) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2672 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2673 case DISC_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2674 /* DL_OFFLINE_TRACE (TRACE_DL_EVENT, channel, pcch->ch_type, "UL:Send DISC"); */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2675 com_build_DISC_command (pcch->ch_type, sapi, 1); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2676 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2677 case UA_CMD: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2678 set_channel_state (channel, STATE_IDLE_DL); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2679 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2680 #if defined(DELAYED_RELEASE_IND) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2681 switch (pcch->ch_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2682 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2683 #if defined(DL_FACCH_RELEASE_DELAY_VALUE) && (DL_FACCH_RELEASE_DELAY_VALUE > 0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2684 case L2_CHANNEL_FACCH_F: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2685 case L2_CHANNEL_FACCH_H: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2686 /* delay DL RELEASE IND to RR for testcase 25.2.3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2687 dl_data->release_ind_ch_type = pcch->ch_type; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2688 dl_data->release_ind_sapi = sapi; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2689 if (dl_data->release_ind_delay EQ 0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2690 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2691 dl_data->release_ind_delay = DL_FACCH_RELEASE_DELAY_VALUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2692 DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH0, pcch->ch_type, "delay REL IND on FACCH"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2693 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2694 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2695 #endif /* DL_FACCH_RELEASE_DELAY_VALUE */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2696 #if defined(DL_SDCCH_RELEASE_DELAY_VALUE) && (DL_SDCCH_RELEASE_DELAY_VALUE > 0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2697 case L2_CHANNEL_SDCCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2698 /* delay DL RELEASE IND to RR for testcase 25.2.3 */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2699 dl_data->release_ind_ch_type = pcch->ch_type; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2700 dl_data->release_ind_sapi = sapi; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2701 if (dl_data->release_ind_delay EQ 0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2702 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2703 dl_data->release_ind_delay = DL_SDCCH_RELEASE_DELAY_VALUE; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2704 DL_OFFLINE_TRACE (TRACE_DL_EVENT, channel, pcch->ch_type, "delay REL IND on SDCCH"); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2705 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2706 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2707 #endif /* DL_SDCCH_RELEASE_DELAY_VALUE */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2708 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2709 drr_dl_release_ind (pcch->ch_type, sapi, NOT_PRESENT_8BIT, TRUE); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2710 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2711 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2712 #else /* DELAYED_RELEASE_IND */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2713 drr_dl_release_ind (pcch->ch_type, sapi, NOT_PRESENT_8BIT, TRUE); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2714 #endif /* DELAYED_RELEASE_IND */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2715 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2716 #if defined(LATE_LEAVING_DEDICATED) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2717 com_leave_dedicated (pcch->ch_type); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2718 #endif /* LATE_LEAVING_DEDICATED */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2719 ret = UPLINK_UA_F; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2720 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2721 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2722 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2723 switch (pcch->ch_type) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2724 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2725 case L2_CHANNEL_SACCH: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2726 if (channel EQ C_DCCH0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2727 ret = UPLINK_REPORT; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2728 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2729 default: | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2730 if (channel EQ C_DCCH0) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2731 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2732 pcch = &dl_data->cch[C_DCCH3]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2733 if (pcch->time_flag) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2734 set_T200_counter (pcch, PS_SAPI_3); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2735 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2736 ret = UPLINK_EMPTY; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2737 break; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2738 }/* endswitch channel */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2739 }/* endswitch vtx */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2740 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2741 return ret; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2742 }/* endfunc uplink_awaiting_release */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2743 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2744 #if defined(CHECK_PCCHI) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2745 static void check_pcch_i (T_CCH_INTERN* pcch_i, int line) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2746 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2747 char buf[23]; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2748 int ret = 0; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2749 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2750 if (pcch_i EQ NULL) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2751 ret = -1; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2752 else if (pcch_i->pcch EQ NULL) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2753 ret = -2; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2754 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2755 if (ret) | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2756 { | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2757 sprintf (buf, "#%d pcch=NULL %d", line, -ret); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2758 DL_OFFLINE_TRACE (TRACE_DL_EVENT, TRACE_CH_UNKNOWN, 0,buf); | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2759 } | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2760 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2761 return ret; | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2762 }/* endfunc check_pcch_i */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2763 #endif /* CHECK_PCCHI */ | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2764 | 
| 
27a4235405c6
src/g23m-gsm: import from LoCosto source
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2765 #endif /* DL_C */ | 
