FreeCalypso > hg > fc-tourmaline
diff src/g23m-gsm/dl/dl_dcch3.c @ 1:fa8dc04885d8
src/g23m-*: import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:25:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-gsm/dl/dl_dcch3.c Fri Oct 16 06:25:50 2020 +0000 @@ -0,0 +1,307 @@ +/* ++----------------------------------------------------------------------------- +| Project : GSM-PS +| Modul : DL_DCCH3 ++----------------------------------------------------------------------------- +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : This Modul defines the functions for the slow +| dedicated control channel (SAPI 3) of the component DL ++----------------------------------------------------------------------------- +*/ + +#ifndef DL_DCCH3_C +#define DL_DCCH3_C + +#define ENTITY_DL + +/*==== INCLUDES ===================================================*/ + +#include "typedefs.h" +#include <string.h> +#include "pconst.cdg" +#include "vsi.h" +#include "custom.h" +#include "gsm.h" +#include "mon_dl.h" +#include "prim.h" +#include "pei.h" +#include "tok.h" +#include "ccdapi.h" +#include "dl.h" +#include "dl_trc.h" + + +/*==== EXPORT =====================================================*/ + +/*==== PRIVAT =====================================================*/ + +/*==== VARIABLES ==================================================*/ + +/*==== FUNCTIONS ==================================================*/ +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : DL_DCCH3 | +| STATE : code ROUTINE : dcch3_init_dl_data | ++--------------------------------------------------------------------+ + + PURPOSE : Initialisation of SDCCH data (SAPI 3) for an instance. + +*/ + +GLOBAL void dcch3_init_dl_data (void) +{ + GET_INSTANCE_DATA; + T_CCH *pcch = &dl_data->cch[C_DCCH3]; + + TRACE_FUNCTION ("dcch3_init_dl_data()"); + + memset (pcch, 0, sizeof (T_CCH)); + com_clear_queue (PS_SAPI_3); + + if (dl_data->dcch3_in_msg) + { + COM_FREE_POINTER (dl_data->dcch3_in_msg); + dl_data->dcch3_in_msg = NULL; + } + + dl_data->dcch3_disc_request = FALSE; + set_channel_state(C_DCCH3, STATE_DISABLED); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : DL_DCCH3 | +| STATE : code ROUTINE : dcch3_enable | ++--------------------------------------------------------------------+ + + PURPOSE : Enabling SAPI 3 connections. + +*/ + +GLOBAL void dcch3_enable (UBYTE ch_type) +{ + GET_INSTANCE_DATA; + TRACE_FUNCTION ("dcch3_enable()"); + + switch (dl_data->state[C_DCCH3]) + { + case STATE_DISABLED: + set_channel_state (C_DCCH3, STATE_IDLE_DL); + dl_data->cch[C_DCCH3].ch_type = ch_type; + break; + default: + break; + } +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : DL_DCCH3 | +| STATE : code ROUTINE : dcch3_establish_req | ++--------------------------------------------------------------------+ + + PURPOSE : Establish Request for SDCCH (SAPI 3). + +*/ + +GLOBAL void dcch3_establish_req (T_DL_ESTABLISH_REQ * est_req) +{ + GET_INSTANCE_DATA; + TRACE_FUNCTION ("dcch3_establish_req()"); + + DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH3, est_req->ch_type, "est req"); + + + switch (dl_data->state[C_DCCH3]) + { + case STATE_IDLE_DL: + case STATE_DISABLED: + case STATE_MULTIPLE_FRAME_ESTABLISHED: + case STATE_TIMER_RECOVERY: + { + T_CCH *pcch = &dl_data->cch[C_DCCH3]; + + pcch->ch_type = est_req->ch_type; + + dl_data->dcch3_disc_request = FALSE; + dl_data->dcch3_unserved = com_queue_awaiting_transmission (PS_SAPI_3) ? + DL_UNSERVED : DL_ALL_DONE; + + com_clear_queue (PS_SAPI_3); + pcch->vtx = SABM_CMD; + pcch->time_flag = TRUE; + pcch->rc = 0; + set_channel_state (C_DCCH3, STATE_AWAITING_ESTABLISHMENT); + TRACE_EVENT_WIN_P5 ("EST_REQ: %s SAPI=%u vtx=%s (%s#%u)", CH_TYPE_NAME[pcch->ch_type], + est_req->sapi, VTX_NAME[pcch->vtx], + __FILE10__, __LINE__); + } + + break; + default: + break; + } + COM_FREE_POINTER (est_req); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : DL_SDCCH | +| STATE : code ROUTINE : sdcch3_release_req | ++--------------------------------------------------------------------+ + + PURPOSE : Release Request for SDCCH (SAPI 3). + +*/ + +GLOBAL BOOL dcch3_release_req (T_DL_RELEASE_REQ * release_req) +{ + GET_INSTANCE_DATA; + BOOL bFree = TRUE; + + TRACE_FUNCTION ("dcch3_release_req()"); + + if (release_req->mode EQ DL_LOCAL_END_RELEASE) + { + DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH3, release_req->ch_type, "local end release req"); + bFree = FALSE; + } + else + { + DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH3, release_req->ch_type, "normal release req"); + dl_data->cch[C_DCCH3].ch_type = release_req->ch_type; + switch (dl_data->state[C_DCCH3]) + { + default: + bFree = FALSE; + break; + + case STATE_AWAITING_ESTABLISHMENT: + case STATE_MULTIPLE_FRAME_ESTABLISHED: + case STATE_TIMER_RECOVERY: + if (!dl_data->dcch3_disc_request AND (dl_data->cch[C_DCCH3].vtx EQ RR_CMD)) + { + dl_data->dcch3_disc_request = TRUE; + } + else + { + com_prepare_DISC (C_DCCH3, release_req->sapi); + } + break; + + case STATE_AWAITING_RELEASE: + dl_data->cch[C_DCCH3].T200_counter = 0; + break; + } + } + + if (bFree EQ FALSE) + { + PREUSE (release_req, release_cnf, DL_RELEASE_CNF); + release_cnf->indication = + com_queue_awaiting_transmission (PS_SAPI_3) ? DL_UNSERVED : DL_ALL_DONE; + PSENDX (RR, release_cnf); + dcch3_init_dl_data (); + } + + return bFree; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : DL_DCCH3 | +| STATE : code ROUTINE : dcch3_mdl_release_req | ++--------------------------------------------------------------------+ + + PURPOSE : Release Request from Mobility Management for SDCCH (SAPI 3). + +*/ + +GLOBAL void dcch3_mdl_release_req (void) +{ + GET_INSTANCE_DATA; + TRACE_FUNCTION ("dcch3_mdl_release_req()"); + + DL_OFFLINE_TRACE (TRACE_DL_EVENT, C_DCCH3, dl_data->cch[C_DCCH3].ch_type, "mdl rel req"); + + switch (dl_data->state[C_DCCH3]) + { + case STATE_AWAITING_ESTABLISHMENT: + case STATE_TIMER_RECOVERY: + case STATE_AWAITING_RELEASE: + drr_dl_release_cnf (dl_data->cch[C_DCCH3].ch_type, PS_SAPI_3, TRUE); + break; + + case STATE_MULTIPLE_FRAME_ESTABLISHED: + drr_dl_release_ind (dl_data->cch[C_DCCH3].ch_type, PS_SAPI_3, NOT_PRESENT_8BIT, TRUE); + break; + + default: + break; + } +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : DL_DCCH3 | +| STATE : code ROUTINE : dcch3_data_req | ++--------------------------------------------------------------------+ + + PURPOSE : Data Request on SDCCH (SAPI 3). + +*/ + +GLOBAL void dcch3_data_req (T_DL_DATA_REQ * data_req) +{ + GET_INSTANCE_DATA; + TRACE_FUNCTION ("dcch3_data_req()"); + + switch (dl_data->state[C_DCCH3]) + { + case STATE_MULTIPLE_FRAME_ESTABLISHED: + case STATE_TIMER_RECOVERY: + com_store_queue (PS_SAPI_3, data_req); + break; + + default: + COM_FREE_POINTER (data_req); + break; + } +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : DL_SDCCH | +| STATE : code ROUTINE : dcch3_check_disc | ++--------------------------------------------------------------------+ + + PURPOSE : DISC command frame on DCCH3. + +*/ + +GLOBAL int dcch3_check_disc (int send) +{ + GET_INSTANCE_DATA; + TRACE_FUNCTION ("dcch3_check_disc()"); + + if (dl_data->dcch3_disc_request AND !(dl_data->cch[C_DCCH3].vtx EQ RR_CMD)) + { + com_prepare_DISC (C_DCCH3, PS_SAPI_3); + return uplink_awaiting_release (C_DCCH3, PS_SAPI_3); + } + else + return send; +} +#endif /* DL_DCCH3_C */ +