view src/g23m-gsm/dl/dl_sacch0.c @ 632:d968a3216ba0

new tangomdm build target TCS211/Magnetite built for target leonardo runs just fine on the Tango-based Caramel board, but a more proper tangomdm build target is preferable in order to better market these Tango modems to prospective commercial customers. The only differences are in GPIO and MCSI config: * MCSI is enabled in the tangomdm build config. * GPIO 1 is loudspeaker amplifier control on Leonardo, but on Tango platforms it can be used for anything. On Caramel boards this GPIO should be configured as an output driving high. * GPIO 2 needs to be configured as Calypso input on Leonardo, but on Tango platforms it can be used for anything. On Caramel boards this GPIO should be configured as an output, either high or low is OK.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 04 Jan 2020 19:27:41 +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