FreeCalypso > hg > freecalypso-sw
view gsm-fw/g23m-gsm/dl/dl_sacch0.c @ 871:a5c8f48003cd
rvinterf: client programs can now selectively stop receiving packets of a
particular RVTMUX type
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Fri, 29 May 2015 06:29:38 +0000 |
parents | bf58458efda0 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GSM-PS | Modul : DL_SACCH0 +----------------------------------------------------------------------------- | 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 associated | control channel SACCH (only SAPI=0) of the component DL +----------------------------------------------------------------------------- */ #ifndef DL_SACCH0_C #define DL_SACCH0_C #include "config.h" #include "fixedconf.h" #include "condat-features.h" #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 ==================================================*/ GLOBAL const T_FRAME meas_report_no_nc = { N201_SACCH*8, 24, { 0x00, 0x00, 0x00, 0x06, 0x15, 0x1E, 0x1E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }; LOCAL const T_FRAME meas_report_invalid = { N201_SACCH*8, 24, { 0x00, 0x00, 0x00, 0x06, 0x15, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }; /*==== FUNCTIONS ==================================================*/ /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : DL_SACCH0 | | STATE : code ROUTINE : sacch_init_dl_data | +--------------------------------------------------------------------+ PURPOSE : Initialisation of SACCH data for an instance. */ GLOBAL void sacch0_init_dl_data (void) { GET_INSTANCE_DATA; T_CCH *pcch = &dl_data->cch[C_SACCH0]; TRACE_FUNCTION ("sacch_init_dl_data()"); memset (pcch, 0, sizeof (T_CCH)); pcch->ch_type = L2_CHANNEL_SACCH; if (dl_data->dcch3_in_msg) { COM_FREE_POINTER (dl_data->dcch3_in_msg); dl_data->dcch3_in_msg = NULL; } sacch0_reset_meas (); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : DL_SACCH0 | | STATE : code ROUTINE : sacch0_reset_meas | +--------------------------------------------------------------------+ PURPOSE : Reset measurement reports and sacch_mode. */ GLOBAL void sacch0_reset_meas (void) { GET_INSTANCE_DATA; dl_data->sacch_act_buffer = meas_report_no_nc; dl_data->sacch_last_buffer= meas_report_no_nc; dl_data->sacch_mode = 2; } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : DL_SACCH0 | | STATE : code ROUTINE : sacch_send_data | +--------------------------------------------------------------------+ PURPOSE : Send unacknowledged data on SACCH, SAPI=0. */ GLOBAL void sacch0_send_data (void) { GET_INSTANCE_DATA; TRACE_FUNCTION ("sacch_send_data()"); TRACE_EVENT_WIN_P2 ("SACCH0 MODE = %d, %s", dl_data->sacch_mode, (dl_data->rr_short_pd_buffer.l_buf AND dl_data->rr_short_pd_ch_type EQ L2_CHANNEL_SACCH) ? "RR short PD" : "normal"); if (dl_data->rr_short_pd_buffer.l_buf AND dl_data->rr_short_pd_ch_type EQ L2_CHANNEL_SACCH) { /* RR message with short PD, short L2 header type 1, format Bter */ com_build_UI_Bter (L2_CHANNEL_SACCH); } else { /* format A or B */ if (dl_data->sacch_mode EQ 2) { com_build_UI_command (L2_CHANNEL_SACCH, PS_SAPI_0, &meas_report_invalid); } else { if (dl_data->dl_active EQ FALSE) dl_data->sacch_last_buffer = dl_data->sacch_act_buffer; com_build_UI_command (L2_CHANNEL_SACCH, PS_SAPI_0, &dl_data->sacch_last_buffer); } if (dl_data->sacch_mode) dl_data->sacch_mode--; } } #endif