view src/aci2/aci/gaci_srcc.c @ 701:35e7f9d0379f

targets: add TARGET_HAS_BUZZER to c11x, c139 and dsample This new target config preprocessor symbol was introduced in Tourmaline in connection with the new approach to playing buzzer melodies via PWT, properly omitting the responsible code on targets where BU output controls the vibrator instead. That code is not present in Magnetite and we have no plans to backport it here, but target header files should be kept consistent between the two trees, especially given that we plan to support FC Venus target in Magnetite.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 26 Mar 2022 19:51:34 +0000
parents 93999a60b835
children
line wrap: on
line source

/* 
+----------------------------------------------------------------------------- 
|  Project :  
|  Modul   :  
+----------------------------------------------------------------------------- 
|  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 module implements the source control management for GACI.
+----------------------------------------------------------------------------- 
*/ 


#ifdef GPRS

#include "aci_all.h"

/*==== INCLUDES ===================================================*/
#include "dti.h"      /* functionality of the dti library */
#include "aci_cmh.h"

#include "dti_conn_mng.h"
#include "dti_cntrl_mng.h"

#include "gaci.h"
#include "gaci_cmh.h"
#include "psa.h"
#include "psa_sm.h"
#include "psa_gppp.h"
#include "psa_gmm.h"

#include "cmh.h"
#include "cmh_sm.h"
#include "cmh_gppp.h"
#include "cmh_gmm.h"
#include "gaci_srcc.h"

/*===== PRIVATE VARIABLES ==========================================*/
static UBYTE entity_counter[SRRC_MAX_ENTITY];

/*===== FUNCTIONS DECLARATIONS =====================================*/

/*
+--------------------------------------------------------------------+
| PROJECT :                       MODULE  : ACI_DTI                  |
| STATE   : finished              ROUTINE : srcc_init                |
+--------------------------------------------------------------------+

  PURPOSE : init of source control management
*/
GLOBAL void srcc_init (void)
{
  SHORT i = 0;

  for (i = 0; i < SRRC_MAX_ENTITY; i++)
    entity_counter[i] = 0;
}

/*
+--------------------------------------------------------------------+
| PROJECT :                       MODULE  : ACI_DTI                  |
| STATE   : finished              ROUTINE : srcc_new_count           |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL void srcc_new_count ( SRCC_LINK_NO link_no )
{
  if ( srcc_reserve_sources( link_no, 1) )
  {
    switch( link_no )
    {
      case SRCC_PPPS_SNDCP_LINK:
        entity_counter[SRRC_PPPS_ENTITY]++;
        break;
#if defined (FF_PKTIO) OR defined (FF_TCP_IP) OR defined (FF_PSI)
      case SRCC_PKTIO_SNDCP_LINK:
        break;
#endif /* FF_PKTIO OR FF_TCP_IP OR FF_PSI */
      case SRCC_NULL_SNDCP_LINK:
        break;
#ifdef FF_SAT_E        
      case SRCC_SIM_SNDCP_LINK:
        entity_counter[SRRC_SIM_ENTITY]++;
        break;
#endif 
#ifdef CO_UDP_IP
      case SRCC_IP_SNDCP_LINK:
        entity_counter[SRRC_IP_ENTITY]++;
        break;
#endif
#ifdef FF_GPF_TCPIP
      case SRCC_TCPIP_SNDCP_LINK:
        entity_counter[SRRC_TCPIP_ENTITY]++;
        break;
#endif
       
      default:
        TRACE_EVENT_P1("ERROR: srcc_new_count: link_no unknown: %d",link_no);
        return;
    }
    if( CS_ACTIVATED NEQ pdp_context[work_cids[cid_pointer] - 1].state )
    {
      entity_counter[SRRC_SNDCP_ENTITY]++;
    }
  }
  else
  {
    TRACE_EVENT_P1("ERROR: srcc_reserve_sources(%d,1) returns fail",link_no);
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT :                       MODULE  : ACI_DTI                  |
| STATE   : finished              ROUTINE : srcc_delete_count        |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL void srcc_delete_count ( SRCC_LINK_NO link_no )
{
  switch( link_no )
  {
    case SRCC_PPPS_SNDCP_LINK:
      entity_counter[SRRC_PPPS_ENTITY]--;
      entity_counter[SRRC_SNDCP_ENTITY]--;
      return;
#if defined (FF_PKTIO) OR defined (FF_TCP_IP) OR defined (FF_PSI)
    case SRCC_PKTIO_SNDCP_LINK:
      entity_counter[SRRC_SNDCP_ENTITY]--;
      return;
#endif /* FF_PKTIO OR FF_TCP_IP OR FF_PSI */
    case SRCC_NULL_SNDCP_LINK:
      entity_counter[SRRC_SNDCP_ENTITY]--;
      break;
#ifdef FF_SAT_E      
    case SRCC_SIM_SNDCP_LINK:
      entity_counter[SRRC_SIM_ENTITY]--;
      entity_counter[SRRC_SNDCP_ENTITY]--;
      break;
#endif 
    case SRCC_IP_SNDCP_LINK:
#ifdef CO_UDP_IP
      entity_counter[SRRC_IP_ENTITY]--;
#endif
      entity_counter[SRRC_SNDCP_ENTITY]--;
      break;

#ifdef FF_GPF_TCPIP
    case SRCC_TCPIP_SNDCP_LINK:
      entity_counter[SRRC_TCPIP_ENTITY]--;  
      entity_counter[SRRC_SNDCP_ENTITY]--;
      return;
#endif

    default:
      return;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT :                       MODULE  : ACI_DTI                  |
| STATE   : finished              ROUTINE : srcc_reserve_sources     |
+--------------------------------------------------------------------+

  PURPOSE : check the possibility of creation a number of dti connections
*/
GLOBAL BOOL srcc_reserve_sources( SRCC_LINK_NO link_no, SHORT no )
{
  switch( link_no )
  {
    case SRCC_PPPS_SNDCP_LINK:
      if ( entity_counter[SRRC_PPPS_ENTITY] >= MAX_PPPS_INSTANCES ||
           entity_counter[SRRC_SNDCP_ENTITY] >= MAX_SNDCP_INSTANCES  )
        return FALSE;
      break;

#if defined (FF_PKTIO) OR defined (FF_TCP_IP) OR defined (FF_PSI)
    case SRCC_PKTIO_SNDCP_LINK:
#endif /* FF_PKTIO OR FF_TCP_IP OR FF_PSI */

    case SRCC_NULL_SNDCP_LINK:
      if ( entity_counter[SRRC_SNDCP_ENTITY] >= MAX_SNDCP_INSTANCES )
        return FALSE;
      break;
#ifdef FF_SAT_E      
    case SRCC_SIM_SNDCP_LINK:
      if ( entity_counter[SRRC_SIM_ENTITY] >= MAX_SIM_INSTANCES ||
           entity_counter[SRRC_SNDCP_ENTITY] >= MAX_SNDCP_INSTANCES  )
        return FALSE;
      break;
#endif /* FF_SAT_E */      
    case SRCC_IP_SNDCP_LINK:
      if ( entity_counter[SRRC_SNDCP_ENTITY] >= MAX_SNDCP_INSTANCES
#ifdef CO_UDP_IP
                    ||
           entity_counter[SRRC_IP_ENTITY] >= MAX_IP_INSTANCES
#endif
          )
        return FALSE;
      break;
    #ifdef FF_GPF_TCPIP
    case SRCC_TCPIP_SNDCP_LINK:
         if ( entity_counter[SRRC_SNDCP_ENTITY] >= MAX_SNDCP_INSTANCES
            || entity_counter[SRRC_TCPIP_ENTITY] >= MAX_TCPIP_INSTANCES  )
        return FALSE;
       break;

    #endif /* FF_GPF_TCPIP */
    default:
      return FALSE;
  }

  return TRUE;
}

#endif