R2D C139 C-Sample emulation: fixed off-by-one error
that was causing the garbage in the upper left corner of the display
and also caused everything to be shifted by one pixel
line source
+ − /*
+ − +-----------------------------------------------------------------------------
+ − | 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
+ −