FreeCalypso > hg > fc-magnetite
diff src/g23m-gprs/grlc/grlc_tpcg.c @ 183:219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 13 Oct 2016 04:24:13 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-gprs/grlc/grlc_tpcg.c Thu Oct 13 04:24:13 2016 +0000 @@ -0,0 +1,250 @@ +/* ++----------------------------------------------------------------------------- +| Project : GPRS (8441) +| Modul : GRLC ++----------------------------------------------------------------------------- +| 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 local functions for service +| TPC of entity GRLC. ++----------------------------------------------------------------------------- +*/ + +/* + * !!!ATTENTION!!!ATTENTION!!!ATTENTION!!!ATTENTION!!!ATTENTION!!!ATTENTION!!! + * + * This file was previously named grlc_tpcf.c. + * + * A renaming was necessary due to an ClearCase evil twin problem across the + * TCS2/TCS3/TCS4 and the TCS5 programs. + * + * The same applied for the file grlc_tpcf.h. + * + * !!!ATTENTION!!!ATTENTION!!!ATTENTION!!!ATTENTION!!!ATTENTION!!!ATTENTION!!! + */ + +#ifndef GRLC_TPCG_C +#define GRLC_TPCG_C +#endif /* #ifndef GRLC_TPCG_C */ + +#define ENTITY_GRLC + +/*==== INCLUDES =============================================================*/ + +#include <string.h> +#include "typedefs.h" +#include "vsi.h" +#include "macdef.h" +#include "gprs.h" +#include "gsm.h" +#include "ccdapi.h" +#include "prim.h" +#include "message.h" +#include "grlc.h" + +/*==== CONST ================================================================*/ + +#define MIN_PCL_GSM900 31 /* minimum power control level GSM 900 */ +#define MAX_PCL_GSM900 0 /* maximum power control level GSM 900 */ +#define MIN_PCL_DCS1800 28 /* minimum power control level DCS 1800 */ +#define MAX_PCL_DCS1800 29 /* maximum power control level DCS 1800 */ +#define MIN_PCL_PCS1900 21 /* minimum power control level PCS 1900 */ +#define MAX_PCL_PCS1900 22 /* maximum power control level PCS 1900 */ + +#define GAMMA_0_GSM900 39 +#define GAMMA_0_DCS1800 36 +#define GAMMA_0_PCS1900 36 + +#define MAX_PCL 32 + +/*==== DIAGNOSTICS ==========================================================*/ + +/*==== LOCAL VARS ===========================================================*/ +/* + * The following tables converts the air-interface coding of + * the system information parameter MAX_TXPWR_CCCH to a value + * in dBm depending on the frequency standard (GSM, DCS or PCS). + */ +const UBYTE pcl_to_dbm_gsm [MAX_PCL] = +{ 39, /* 0 -> 39 dBm */ + 39, /* 1 -> 39 dBm */ + 39, /* 2 -> 39 dBm */ + 37, /* 3 -> 37 dBm */ + 35, /* 4 -> 35 dBm */ + 33, /* 5 -> 33 dBm */ + 31, /* 6 -> 31 dBm */ + 29, /* 7 -> 29 dBm */ + 27, /* 8 -> 27 dBm */ + 25, /* 9 -> 25 dBm */ + 23, /* 10 -> 23 dBm */ + 21, /* 11 -> 21 dBm */ + 19, /* 12 -> 19 dBm */ + 17, /* 13 -> 17 dBm */ + 15, /* 14 -> 15 dBm */ + 13, /* 15 -> 13 dBm */ + 11, /* 16 -> 11 dBm */ + 9, /* 17 -> 9 dBm */ + 7, /* 18 -> 7 dBm */ + 5, /* 19 -> 5 dBm */ + 5, /* 20 -> 5 dBm */ + 5, /* 21 -> 5 dBm */ + 5, /* 22 -> 5 dBm */ + 5, /* 23 -> 5 dBm */ + 5, /* 24 -> 5 dBm */ + 5, /* 25 -> 5 dBm */ + 5, /* 26 -> 5 dBm */ + 5, /* 27 -> 5 dBm */ + 5, /* 28 -> 5 dBm */ + 5, /* 29 -> 5 dBm */ + 5, /* 30 -> 5 dBm */ + 5 /* 31 -> 5 dBm */ +}; + +const UBYTE pcl_to_dbm_dcs [MAX_PCL] = +{ 30, /* 0 -> 30 dBm */ + 28, /* 1 -> 28 dBm */ + 26, /* 2 -> 26 dBm */ + 24, /* 3 -> 24 dBm */ + 22, /* 4 -> 22 dBm */ + 20, /* 5 -> 20 dBm */ + 18, /* 6 -> 18 dBm */ + 16, /* 7 -> 16 dBm */ + 14, /* 8 -> 14 dBm */ + 12, /* 9 -> 12 dBm */ + 10, /* 10 -> 10 dBm */ + 8, /* 11 -> 8 dBm */ + 6, /* 12 -> 6 dBm */ + 4, /* 13 -> 4 dBm */ + 2, /* 14 -> 2 dBm */ + 0, /* 15 -> 0 dBm */ + 0, /* 16 -> 0 dBm */ + 0, /* 17 -> 0 dBm */ + 0, /* 18 -> 0 dBm */ + 0, /* 19 -> 0 dBm */ + 0, /* 20 -> 0 dBm */ + 0, /* 21 -> 0 dBm */ + 0, /* 22 -> 0 dBm */ + 0, /* 23 -> 0 dBm */ + 0, /* 24 -> 0 dBm */ + 0, /* 25 -> 0 dBm */ + 0, /* 26 -> 0 dBm */ + 0, /* 27 -> 0 dBm */ + 0, /* 28 -> 0 dBm */ + 36, /* 29 -> 36 dBm */ + 34, /* 30 -> 34 dBm */ + 32 /* 31 -> 32 dBm */ +}; + +const UBYTE pcl_to_dbm_pcs [MAX_PCL] = +{ 30, /* 0 -> 30 dBm */ + 28, /* 1 -> 28 dBm */ + 26, /* 2 -> 26 dBm */ + 24, /* 3 -> 24 dBm */ + 22, /* 4 -> 22 dBm */ + 20, /* 5 -> 20 dBm */ + 18, /* 6 -> 18 dBm */ + 16, /* 7 -> 16 dBm */ + 14, /* 8 -> 14 dBm */ + 12, /* 9 -> 12 dBm */ + 10, /* 10 -> 10 dBm */ + 8, /* 11 -> 8 dBm */ + 6, /* 12 -> 6 dBm */ + 4, /* 13 -> 4 dBm */ + 2, /* 14 -> 2 dBm */ + 0, /* 15 -> 0 dBm */ + 0, /* 16 -> 0 dBm */ + 0, /* 17 -> 0 dBm */ + 0, /* 18 -> 0 dBm */ + 0, /* 19 -> 0 dBm */ + 0, /* 20 -> 0 dBm */ + 0, /* 21 -> 0 dBm */ + 33, /* 22 -> 33 dBm */ + 33, /* 23 -> 33 dBm */ + 33, /* 24 -> 33 dBm */ + 33, /* 25 -> 33 dBm */ + 33, /* 26 -> 33 dBm */ + 33, /* 27 -> 33 dBm */ + 33, /* 28 -> 33 dBm */ + 33, /* 29 -> 33 dBm */ + 33, /* 30 -> 33 dBm */ + 32 /* 31 -> 32 dBm */ +}; + +/*==== PRIVATE FUNCTIONS ====================================================*/ + +/*==== PUBLIC FUNCTIONS =====================================================*/ +/* ++------------------------------------------------------------------------------ +| Function : tpc_get_ms_pwr_cap ++------------------------------------------------------------------------------ +| Description : +| +| Parameters : +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void tpc_get_ms_pwr_cap ( UBYTE band_indicator, + T_MS_PWR_CAP *ms_pwr_cap ) +{ + TRACE_FUNCTION( "tpc_get_ms_pwr_cap" ); + + switch( band_indicator ) + { + default: + case CGRLC_GSM_400: + case CGRLC_GSM_850: + case CGRLC_GSM_900: + ms_pwr_cap->p_control = pcl_to_dbm_gsm; + ms_pwr_cap->pwr_min = pcl_to_dbm_gsm[MIN_PCL_GSM900]; + ms_pwr_cap->gamma_0 = GAMMA_0_GSM900; + break; + + case CGRLC_DCS_1800: + ms_pwr_cap->p_control = pcl_to_dbm_dcs; + ms_pwr_cap->pwr_min = pcl_to_dbm_dcs[MIN_PCL_DCS1800]; + ms_pwr_cap->gamma_0 = GAMMA_0_DCS1800; + break; + + case CGRLC_PCS_1900: + ms_pwr_cap->p_control = pcl_to_dbm_pcs; + ms_pwr_cap->pwr_min = pcl_to_dbm_pcs[MIN_PCL_PCS1900]; + ms_pwr_cap->gamma_0 = GAMMA_0_PCS1900; + break; + } + +} /* tpc_get_ms_pwr_cap() */ + +/* ++------------------------------------------------------------------------------ +| Function : tpc_get_pcl ++------------------------------------------------------------------------------ +| Description : This function is used to convert the nominal output power to +| the power control level +| +| Parameters : p_ctrl - pointer to table of power control levels +| nop - nominal output power +| ++------------------------------------------------------------------------------ +*/ +GLOBAL UBYTE tpc_get_pcl ( UBYTE const *p_ctrl, SHORT nop ) +{ + UBYTE pcl = 0; /* power control level */ + + TRACE_FUNCTION( "tpc_get_pcl" ); + + /* get power control level */ + while( nop < (SHORT)p_ctrl[pcl] - 1 OR nop >= (SHORT)p_ctrl[pcl] + 1 ) pcl++; + + return( pcl ); + +} /* tpc_get_pcl() */ +