view src/g23m-gsm/dl/dl_sacch0.c @ 550:a1da09e02973

doc/Config-vars: TRACEMASK_IN_FFS addition documented
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 18 Nov 2018 08:59:50 +0000
parents 27a4235405c6
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

#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