FreeCalypso > hg > freecalypso-sw
diff gsm-fw/g23m-gsm/mm/mm_csf.c @ 673:2f7df7a314f8
gsm-fw/g23m-gsm subtree: initial import from LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 28 Sep 2014 23:20:04 +0000 |
parents | |
children | 470f87d36741 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gsm-fw/g23m-gsm/mm/mm_csf.c Sun Sep 28 23:20:04 2014 +0000 @@ -0,0 +1,250 @@ +/* ++----------------------------------------------------------------------------- +| Project : GSM-PS (8410) +| Modul : MM_CSF ++----------------------------------------------------------------------------- +| 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 csf +| capability of the module Mobility Management. ++----------------------------------------------------------------------------- +*/ + +#ifndef MM_CSF_C +#define MM_CSF_C + +#define ENTITY_MM + +/*==== INCLUDES ===================================================*/ +#if defined (NEW_FRAME) + +#include <string.h> +#include <stdlib.h> +#include <stddef.h> +#include "typedefs.h" +#include "pcm.h" +#include "pconst.cdg" +#include "mconst.cdg" +#include "message.h" +#include "ccdapi.h" +#include "vsi.h" +#include "custom.h" +#include "gsm.h" +#include "prim.h" +#include "cnf_mm.h" +#include "mon_mm.h" +#include "pei.h" +#include "tok.h" +#include "mm.h" +#include "cl_imei.h" /* IMEI common library */ + +#else + +#include <string.h> +#include <stdlib.h> +#include <stddef.h> +#include "stddefs.h" +#include "pcm.h" +#include "pconst.cdg" +#include "mconst.cdg" +#include "message.h" +#include "ccdapi.h" +#include "custom.h" +#include "gsm.h" +#include "prim.h" +#include "cnf_mm.h" +#include "mon_mm.h" +#include "vsi.h" +#include "pei.h" +#include "tok.h" +#include "mm.h" +#include "cl_imei.h" /* IMEI common library */ + +#endif + +/*==== EXPORT =====================================================*/ + +/*==== PRIVAT =====================================================*/ + +/*==== VARIABLES ==================================================*/ + +/*==== FUNCTIONS ==================================================*/ + +/* + * ------------------------------------------------------------------- + * Procedures + * ------------------------------------------------------------------- + */ + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : MM_CSF | +| STATE : code ROUTINE : csf_read_imei | ++--------------------------------------------------------------------+ + + PURPOSE : + +*/ + +GLOBAL void csf_read_imei (T_imsi_struct *imei_struct) +{ + UBYTE buf[CL_IMEI_SIZE]; + + TRACE_FUNCTION ("csf_read_imei()"); + + imei_struct->v_mid = V_MID_PRES; + imei_struct->id_type = 2; /*TYPE_IMEI*/ + imei_struct->tmsi_dig = 0L; + + /* + * Get IMEISV from IMEI common library + */ + cl_get_imeisv(CL_IMEI_SIZE, buf, CL_IMEI_GET_SECURE_IMEI); + imei_struct->id[0] = (buf [0] >> 4) & 0x0F; /* TAC 8 byte */ + imei_struct->id[1] = buf [0] & 0x0F; + imei_struct->id[2] = (buf [1] >> 4) & 0x0F; + imei_struct->id[3] = buf [1] & 0x0F; + imei_struct->id[4] = (buf [2] >> 4) & 0x0F; + imei_struct->id[5] = buf [2] & 0x0F; + imei_struct->id[6] = (buf [3] >> 4) & 0x0F; + imei_struct->id[7] = buf [3] & 0x0F; + imei_struct->id[8] = (buf [4] >> 4) & 0x0F; /* SNR 6 byte */ + imei_struct->id[9] = buf [4] & 0x0F; + imei_struct->id[10] = (buf [5] >> 4) & 0x0F; + imei_struct->id[11] = buf [5] & 0x0F; + imei_struct->id[12] = (buf [6] >> 4) & 0x0F; + imei_struct->id[13] = buf [6] & 0x0F; + imei_struct->id[14] = (buf [7] >> 4) & 0x0F; /* SV 2 byte */ + imei_struct->id[15] = buf [7] & 0x0F; + TRACE_EVENT_P8("MM INFO IMEI: TAC %1x%1x%1x%1x%1x%1x%1x%1x", + imei_struct->id[0], imei_struct->id[1], + imei_struct->id[2], imei_struct->id[3], + imei_struct->id[4], imei_struct->id[5], + imei_struct->id[6], imei_struct->id[7]); + TRACE_EVENT_P6("MM INFO IMEI: SNR %1x%1x%1x%1x%1x%1x", + imei_struct->id[8], imei_struct->id[9], + imei_struct->id[10], imei_struct->id[11], + imei_struct->id[12], imei_struct->id[13]); + TRACE_EVENT_P2("MM INFO IMEI: SV %1x%1x", imei_struct->id[14], + imei_struct->id[15]); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : MM_CSF | +| STATE : code ROUTINE : csf_read_mobile_class_1 | ++--------------------------------------------------------------------+ + + PURPOSE : Read classmark 1. + +*/ + +GLOBAL void csf_read_mobile_class_1 (T_mob_class_1 *mob_class_1) +{ + /* + * The classmarks got from RR are valid after RR becomes active. + * That applies to the case of simulation too, because RR checks the existence + * and validity of the RF capabilities before filling the structure and read + * it as necessary. + */ +#if 1 + EXTERN UBYTE rr_csf_get_classmark1 (T_mob_class_1 *mob_class_1); + rr_csf_get_classmark1 (mob_class_1); +#else + UBYTE version; + UBYTE buf[SIZE_EF_CLASS2]; + int result; + + TRACE_FUNCTION ("csf_read_mobile_class_1()"); + + memset (mob_class_1, 0, sizeof (T_mob_class_1)); + + result = pcm_ReadFile ((UBYTE *)EF_CLASS2_ID, SIZE_EF_CLASS2, buf, &version); + + TRACE_EVENT_P1 ("Mobile Class 1: %02X", buf[0]); + TRACE_EVENT_P1 ("Result = %d", result); + + /* mob_class_1->spare_1 = GET_BITS (buf[0], 7, 1); */ + mob_class_1->rev_lev = GET_BITS (buf[0], 5, 2); + mob_class_1->es_ind = GET_BITS (buf[0], 4, 1); + mob_class_1->a5_1 = GET_BITS (buf[0], 3, 1); + mob_class_1->rf_pow_cap = GET_BITS (buf[0], 0, 3); +#endif /* else, #ifndef WIN32 */ +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : MM_CSF | +| STATE : code ROUTINE : csf_read_mobile_class_2 | ++--------------------------------------------------------------------+ + + PURPOSE : Read classmark 2. Power may not be valid as this is + delivered by RR after cell selection appropriately for + the selected band. + +*/ + +GLOBAL void csf_read_mobile_class_2 (T_mob_class_2 *mob_class_2) +{ + /* + * The classmarks got from RR are valid after RR becomes active. + * That applies to the case of simulation too, because RR checks the existence + * and validity of the RF capabilities before filling the structure and read + * it as necessary. + */ +#if 1 + EXTERN UBYTE rr_csf_get_classmark2 (T_mob_class_2 *mob_class_2); + rr_csf_get_classmark2 (mob_class_2); +#else + UBYTE version; + UBYTE buf[SIZE_EF_CLASS2]; + int result; + + TRACE_FUNCTION ("csf_read_mobile_class_2()"); + + memset (mob_class_2, 0, sizeof (T_mob_class_2)); + + result = pcm_ReadFile ((UBYTE *)EF_CLASS2_ID, SIZE_EF_CLASS2, buf, &version); + + TRACE_EVENT_P3 ("Mobile Class 2: %02X %02X %02X", buf[0], buf[1], buf[2]); + TRACE_EVENT_P1 ("Result = %d", result); + + /* mob_class_2->spare_1 = GET_BITS (buf[0], 7, 1); */ + mob_class_2->rev_lev = GET_BITS (buf[0], 5, 2); + mob_class_2->es_ind = GET_BITS (buf[0], 4, 1); + mob_class_2->a5_1 = GET_BITS (buf[0], 3, 1); + mob_class_2->rf_pow_cap = GET_BITS (buf[0], 0, 3); + + /* mob_class_2->spare_2 = GET_BITS (buf[1], 7, 1); */ + mob_class_2->ps = GET_BITS (buf[1], 6, 1); + mob_class_2->ss_screen = GET_BITS (buf[1], 4, 2); + mob_class_2->mt_pp_sms = GET_BITS (buf[1], 3, 1); + mob_class_2->vbs = GET_BITS (buf[1], 2, 1); + mob_class_2->vgcs = GET_BITS (buf[1], 1, 1); + mob_class_2->egsm = GET_BITS (buf[1], 0, 1); + + /* mob_class_2->class3 = GET_BITS (buf[2], 7, 1); */ + mob_class_2->class3 = SUPPORTED; + /* mob_class_2->spare_3 = GET_BITS (buf[2], 6, 1); */ + mob_class_2->lcsva = GET_BITS (buf[2], 5, 1); + mob_class_2->ucs2_treat = GET_BITS (buf[2], 4, 1); + mob_class_2->solsa = GET_BITS (buf[2], 3, 1); + mob_class_2->cmsp = GET_BITS (buf[2], 2, 1); + mob_class_2->a5_3 = GET_BITS (buf[2], 1, 1); + mob_class_2->a5_2 = GET_BITS (buf[2], 0, 1); +#endif /* else, #ifndef WIN32 */ +} + +/* N950 Memory Optimization - Implements Measure #39*/ +/* Removed unused Function*/ +#endif +