view src/condat/com/include/pcm.h @ 303:f76436d19a7a default tip

!GPRS config: fix long-standing AT+COPS chance hanging bug There has been a long-standing bug in FreeCalypso going back years: sometimes in the AT command bring-up sequence of an ACI-only MS, the AT+COPS command would produce only a power scan followed by cessation of protocol stack activity (only L1 ADC traces), instead of the expected network search sequence. This behaviour was seen in different FC firmware versions going back to Citrine, and seemed to follow some law of chance, not reliably repeatable. This bug has been tracked down and found to be specific to !GPRS configuration, stemming from our TCS2/TCS3 hybrid and reconstruction of !GPRS support that was bitrotten in TCS3.2/LoCosto version. ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3 version and had to be pulled from TCS2 - but as it turns out, there is a new field in the MMR_REG_REQ primitive that needs to be set correctly, and that psa_mms.c module is the place where this initialization needed to be added.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 08 Jun 2023 08:23:37 +0000
parents 4e78acac3d88
children
line wrap: on
line source

/* 
+----------------------------------------------------------------------------- 
|  Project :  GSM-MFW
|  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 :  Types definitions for the permanent memory configuration.
+----------------------------------------------------------------------------- 
*/ 
/********************************************************************************
 $History: pcm.h

	Jun 14, 2005 REF: MMI-FIX-30439 x0018858
   	Description: The homezone/cityzone tags were not being displayed properly.
   	Solution: Modified to save the tags properly in caches and also made the 
	appropriate modifications to update the same properly during mobility.

********************************************************************************/

#ifndef PCM_H
#define PCM_H

/********************************************************************
 *
 * Parameters written in flash memory
 *
 ********************************************************************/

#define PCM_SERIAL_CONFIG (0)

/********************************************************************
 *
 * Access functions to bit fields
 *
 ********************************************************************/

#ifndef __BF_FUNCCALL__
#define FldGet(f,n) ((((ULONG)f)&((ULONG)n##m))>>n##s)
#define FldSet(f,n,v) ((((ULONG)f)&(~((ULONG)n##m)))|(((ULONG)v)<<n##s))
#else
ULONG FldGet (ULONG f, ULONG m, int s)
{ return ((f&m)>>s); }
ULONG FldSet (ULONG f, ULONG m, int s, ULONG v)
{ return ((f&(~m))|((v<<s)&m)); }
#endif 

/********************************************************************
 *
 * Field Identitifer
 *
 ********************************************************************/

#define EF_MSCAP_ID     "MSCAP"         /* Mobile Capabilities      */
#define EF_IMEI_ID      "IMEI"          /* Int. Mobile Equipment Id */
#define EF_IMSI_ID      "IMSI"          /* Int. Mobile Subscriber Id */
#define EF_SMS_ID       "SMS"           /* Short Messages           */
#define EF_CLASS2_ID    "CLASS2"        /* MS Classmark 2           */
#define EF_CLASS3_ID    "CLASS3"        /* MS Classmark 3 (old def.)*/
#define EF_RFCAP_ID     "RFCAP"         /* RF Capabilities          */
#define EF_MSSUP_ID     "MSSUP"         /* Mobile Setup             */
#define EF_MSSET_ID     "MSSET"         /* Mobile Setting           */
//	Jun 14, 2005 REF: MMI-FIX-30439 x0018858
#define EF_HZCACHE_ID   "HZCACHE"     /* Homezone cache             */
#define EF_LDN_ID       "LDN"           /* Last Dialed Numbers      */
#define EF_LRN_ID       "LRN"           /* Last Received Numbers    */
#define EF_LMN_ID       "LMN"           /* Last Missed Numbers      */
#define EF_UPN_ID       "UPN"           /* User Personal Numbers    */
#define EF_MBN_ID       "MBN"           /* Mailbox Numbers          */
#define EF_VMN_ID       "VMN"           /* Voice Mail Number        */
#define EF_CLNG_ID      "CLNG"          /* Current LAnguage         */
#define EF_CTIM_ID      "CTIM"          /* Call Timer               */
#define EF_CCNT_ID      "CCNT"          /* Call Counter             */
#define EF_ECC_ID       "ECC"           /* Emergency Call Codes     */
#define EF_ORG_ID       "ORG"           /* Organizer and Alarm      */
#define EF_CCP_ID       "CCP"           /* Caps and Config Params   */
#define EF_EXT1_ID      "EXT1"          /* Extension 1              */
#define EF_SIMLCK_ID    "SIMLCK"        /* SIM Lock                 */
#define EF_SIMLCKEXT_ID "SIMLCKEXT"     /* SIM Lock Extended        */
#define EF_MAIN_ID      "MAIN"          /* Maintenance              */
#define EF_SFK_ID       "SFK"           /* Special Function Key     */
#define EF_FAULT_ID     "FAULT"         /* Fault Conditions         */
#define EF_DEBUG_ID     "DEBUG"         /* Debug Information        */
#define EF_POWER_ID     "POWER"         /* Power Management         */
#define EF_KEYB_ID      "KEYB"          /* Keyboard Mapping         */
#define EF_RADIO_ID     "RADIO"         /* Radio Parameter          */
#define EF_CGMI_ID      "CGMI"          /* Manufacturer             */
#define EF_INF0_ID      "INF0"          /* Manufacturer 1           */
#define EF_CGMM_ID      "CGMM"          /* Model                    */
#define EF_CGMR_ID      "CGMR"          /* Revision                 */
#define EF_CGSN_ID      "CGSN"          /* Product Serial Number    */
#define EF_SMSPRFL_ID   "SMSPRFL"       /* SMS Profile              */
#define EF_PLMN_ID      "PLMN"          /* PLMN Identifier          */
#define EF_BCCHINFO_ID  "BCCHINF"       /* BCCH Information         */
#define EF_ALS_ID       "ALS"           /* alternate line service   */
#define EF_LOCGPRS_ID   "LOCGPRS"       /* Location Inf. (GPRS)     */
#define EF_KCGPRS_ID    "KCGPRS"        /* Ciphering Key (GPRS)     */
#define EF_IMSIGPRS_ID  "IMSIGPRS"      /* IMSI check for GPRS      */

/********************************************************************
 *
 * Return Values
 *
 ********************************************************************/

#define drv_Return_Type      UBYTE

#define PCM_OK               0
#define PCM_INITIALIZED      1
#define PCM_INVALID_FILE     2
#define PCM_INVALID_SIZE     3
#define PCM_INVALID_CKSM     4
#define PCM_INVALID_RECORD   5
#define PCM_NVRAM_ACCS_FAIL  6
#define PCM_ERASE_ERROR	     7
#define PCM_WRITE_ERROR	     8
/*
 * Field Info Structure
 */
typedef struct pcm_FileInfo_Type
{
  UBYTE  * FileLocation;
  USHORT   FileSize;
  UBYTE    Version;
} pcm_FileInfo_Type;


/********************************************************************
 *
 * Field MOBILE CAPABILITIES
 *
 ********************************************************************/

typedef struct pcm_EFmscap_Type         /* Mobile Capabilities      */
{
  UBYTE chnMode;                        /* channel modes            */
  UBYTE datCap1;                        /* data capabilities        */
  UBYTE datCap2;                        /* data capabilities        */
  UBYTE featLst1;                       /* feature list             */
  UBYTE featLst2;                       /* feature list             */
  UBYTE featLst3;                       /* feature list             */
} EF_MSCAP;

#define SIZE_EF_MSCAP 6
#define NR_EF_MSCAP   1

/*
 * chnMode bits
 *  
 *  Octet 8     7     6     5     4     3     2     1
 *       L1    Tm   afs   ahs  spV3  efrV2   hr  spV1
 */
#define spchSupV1   0x00000001,0        /* speech support (vers. 1) */
#define spchSupV1m  0x00000001
#define spchSupV1s  0
#define hrSup       0x00000002,1        /* HR support               */
#define hrSupm      0x00000002
#define hrSups      1
#define HR_EFRSup   0x00000006,1        /* HR and EFR support       */
#define HR_EFRSupm  0x00000006
#define HR_EFRSups  1
#define EFRSupV2    0x00000004,2        /* enhanced FR support (v2) */
#define EFRSupV2m   0x00000004
#define EFRSupV2s   2
#define EFRSupV3    0x00000008,3        /* speech support (vers 3)  */
#define EFRSupV3m   0x00000008
#define EFRSupV3s   3
#define VocSup      0x0000000F,0        /* vocoder support          */
#define VocSupm     0x0000000F
#define VocSups     0
#define AHS         0x00000010,4        /* adaptive multirate half rate speech */
#define AHSm        0x00000010
#define AHSs        4
#define AFS         0x00000020,5        /* adaptive multirate full rate speech */
#define AFSm        0x00000020
#define AFSs        5
#define TestMobile  0x00000040,6        /* Test Mobile              */
#define TestMobilem 0x00000040
#define TestMobiles 6
#define L1Ver       0x00000080,7        /* Layer 1 Version          */
#define L1Verm      0x00000080
#define L1Vers      7
 
/* 
 * datCap bits
 */
#define datSup      0x00000001,0        /* Data support             */
#define datSupm     0x00000001
#define datSups     0
#define RLPSup      0x00000002,1        /* RLP data (NT Async)      */
#define RLPSupm     0x00000002
#define RLPSups     1
#define AsySup      0x00000004,2        /* T Async data support     */
#define AsySupm     0x00000004
#define AsySups     2
#define NTSynSup    0x00000008,3        /* NT Sync data support     */
#define NTSynSupm   0x00000008
#define NTSynSups   3
#define TSynSup     0x00000010,4        /* NT Sync data support     */
#define TSynSupm    0x00000010
#define TSynSups    4
#define NTFaxSup    0x00000020,5        /* NT Fax support           */
#define NTFaxSupm   0x00000020
#define NTFaxSups   5
#define TFaxSup     0x00000040,6        /* T Fax support            */
#define TFaxSupm    0x00000040
#define TFaxSups    6
#define Dr14_4Sup   0x00000080,7        /* Data rate 14.4 support   */
#define Dr14_4Supm  0x00000080
#define Dr14_4Sups  7

/*
 * datCap2 bits
 */
#define NTPackSup   0x00000001,0        /* NT Packet Service        */
#define NTPackSupm  0x00000001
#define NTPackSups  0
#define TPackSup    0x00000002,1        /* T Packet Service         */
#define TPackSupm   0x00000002
#define TPackSups   1
#define NTPadSup    0x00000004,2        /* NT PAD Access Service    */
#define NTPadSupm   0x00000004
#define NTPadSups   2
#define TPadSup     0x00000008,3        /* T PAD Access Service     */
#define TPadSupm    0x00000008
#define TPadSups    3
#define NAltSrvSup  0x00000010,4        /* No Alternate Services    */
#define NAltSrvSupm 0x00000010
#define NAltSrvSups 4
#define DHRSup      0x00000080,7        /* Data Halfrate support    */
#define DHRSupm     0x00000080
#define DHRSups     7

/********************************************************************
 *
 * Field IMEI
 *
 ********************************************************************/

typedef struct pcm_EFimei_Type          /* International ME Id      */
{
  UBYTE tac1;
  UBYTE tac2;
  UBYTE tac3;
  UBYTE fac;
  UBYTE snr1;
  UBYTE snr2;
  UBYTE snr3;
  UBYTE svn;
} EF_IMEI;

#define SIZE_EF_IMEI 8
#define NR_EF_IMEI 1

/********************************************************************
 *
 * Field IMSI
 *
 ********************************************************************/

typedef struct pcm_EFimsi_Type       /* International Subscriber Id */
{
  UBYTE len;
  UBYTE IMSI[8];
} EF_IMSI;

#define SIZE_EF_IMSI 9
#define NR_EF_IMSI   1

/********************************************************************
 *
 * Field SHORT MESSAGE SERVICES
 *
 ********************************************************************/

typedef struct pcm_EFsms_Type           /* Short Messages           */
{
  UBYTE stat;
  UBYTE rmd[175];
} EF_SMS;  

#define SIZE_EF_SMS 176
#ifdef _SIMULATION_
#define NR_EF_SMS     3
#else
#define NR_EF_SMS     1
#endif

/********************************************************************
 *
 * Field MOBILE STATION CLASSMARK 2
 *
 ********************************************************************/

typedef struct pcm_EFclass2_Type      /* Mobile Station Classmark 2 */
{
  UBYTE  byte1;
  UBYTE  byte2;
  UBYTE  byte3;
} EF_CLASS2; 

#define SIZE_EF_CLASS2  3
#define NR_EF_CLASS2    1

/* 
 * byte1
 */
#define rfPwrCap    0x00000007,0        /* rf power capability          */
#define rfPwrCapm   0x00000007
#define rfPwrCaps   0
#define a51         0x00000008,3        /* rf power capability          */
#define a51m        0x00000008
#define a51s        3
#define esInd       0x00000010,4        /* ES indicator                 */
#define esIndm      0x00000010
#define esInds      4
#define revLev      0x00000060,5        /* revision level               */
#define revLevm     0x00000060
#define revLevs     5

/* 
 * byte2
 */
#define freqCap     0x00000001,0        /* frequency capability         */
#define freqCapm    0x00000001
#define freqCaps    0
#define vgcsCap     0x00000002,1        /* VGCS notification reception  */
#define vgcsCapm    0x00000002
#define vgcsCaps    1
#define vbsCap      0x00000004,2        /* VBS  notification reception  */
#define vbsCapm     0x00000004
#define vbsCaps     2
#define smCap       0x00000008,3        /* SM capability                */
#define smCapm      0x00000008
#define smCaps      3
#define ssScrInd    0x00000030,4        /* SS Screen Indicator          */
#define ssScrIndm   0x00000030
#define ssScrInds   4
#define psCap       0x00000040,6        /* PS capability                */
#define psCapm      0x00000040
#define psCaps      6

/*
 * byte3
 */
#define a52         0x00000001,0        /* encryption algorithm A5/2    */
#define a52m        0x00000001
#define a52s        0
#define a53         0x00000002,1        /* encryption algorithm A5/3    */
#define a53m        0x00000002
#define a53s        1
#define cmspCap     0x00000004,2        /* CM service prompt            */
#define cmspCapm    0x00000004
#define cmspCaps    2
#define solsaCap    0x00000008,3        /* SoLSA                        */
#define solsaCapm   0x00000008
#define solsaCaps   3
#define ucs2Cap     0x00000010,4        /* UCS2 treatment               */
#define ucs2Capm    0x00000010
#define ucs2Caps    4
#define lcsvaCap    0x00000020,5        /* LCS VA capability            */
#define lcsvaCapm   0x00000020
#define lcsvaCaps   5
#define cm3bit      0x00000080,7        /* Classmark 3 available        */
#define cm3bitm     0x00000080
#define cm3bits     7


/********************************************************************
 *
 * Field MOBILE STATION CLASSMARK 3
 *
 ********************************************************************/

typedef struct pcm_EFclass3_Type    /* Mobile Station Classmark 3   */
{
    UBYTE byte1;
    UBYTE byte2;
    UBYTE byte3;
}EF_CLASS3;

#define SIZE_EF_CLASS3  3
#define NR_EF_CLASS3    1

/* 
 * byte1
 */
#define a54         0x00000001,0        /* encryption algorithm A5/4    */
#define a54m        0x00000001
#define a54s        0
#define a55         0x00000002,1        /* encryption algorithm A5/5    */
#define a55m        0x00000002
#define a55s        1
#define a56         0x00000004,2        /* encryption algorithm A5/6    */
#define a56m        0x00000004
#define a56s        2
#define a57         0x00000008,3        /* encryption algorithm A5/7    */
#define a57m        0x00000008
#define a57s        3
#define bnd1        0x00000010,4        /* Band 1                       */
#define bnd1m       0x00000010
#define bnd1s       4
#define bnd2        0x00000020,5        /* Band 2                       */
#define bnd2m       0x00000020
#define bnd2s       5
#define bnd3        0x00000040,6        /* Band 3                       */
#define bnd3m       0x00000040
#define bnd3s       6

/* 
 * byte2 
 */
#define rfCap1      0x0000000f,0        /* associated RF capability 1   */
#define rfCap1m     0x0000000f
#define rfCap1s     0
#define rfCap2      0x000000f0,4        /* associated RF capability 2   */
#define rfCap2m     0x000000f0
#define rfCap2s     4

/* 
 * byte2 
 */
#define ExtMeas     0x00000010,4        /* associated RF capability 1   */
#define ExtMeasm    0x00000010
#define ExtMeass    4

/********************************************************************
 *
 * Field RF Capabilities
 *
 ********************************************************************/

typedef struct pcm_EFrfcap_Type 
{
  UBYTE  setbands;        /* set frequency bands */
  UBYTE  bands;           /* supported frequency bands */
  UBYTE  power1;          /* power classes of GSM900 and DCS1800 */
  UBYTE  power2;          /* power classes of PCS1900 and GSM850 */
  UBYTE  power3;          /* power classes of GSM400 and EGDE */
  UBYTE  msGSM;           /* GSM multi slot capability and classes */
  UBYTE  msEDGE;          /* EDGE multi slot capability and classes */
  UBYTE  msHSCSD;         /* HSCSD multi slot capability and classes */
  UBYTE  msGPRS;          /* GPRS multi slot capability and classes */
  UBYTE  msECSD;          /* ECSD multi slot capability and classes */
  UBYTE  msEGPRS;         /* EGPRS multi slot capability and classes */
  UBYTE  capability1;      /* divers capabilities and options */
  UBYTE  capability2;      /* divers capabilities and options */
  UBYTE  switchmeasure;   /* switching time */
  UBYTE  encryption;      /* A5/n encryption algorithm availability */
  UBYTE  positioning;     /* supported positioning methods */
} EF_RFCAP;

#define SIZE_EF_RFCAP  16
#define NR_EF_RFCAP     1

/* 
 * setbands, bands
 */
#define rf_900        0x00000001,0  /* support of GSM 900   */
#define rf_900m       0x00000001
#define rf_900s       0
#define rf_1800       0x00000002,1  /* support of DCS 1800   */
#define rf_1800m      0x00000002
#define rf_1800s      1
#define rf_1900       0x00000004,2  /* support of PCS 1900   */
#define rf_1900m      0x00000004
#define rf_1900s      2
#define rf_EGSM       0x00000008,3  /* support of E-GSM     */
#define rf_EGSMm      0x00000008
#define rf_EGSMs      3
#define rf_850        0x00000010,4  /* support of GSM 850   */
#define rf_850m       0x00000010
#define rf_850s       4
#define rf_450        0x00000020,5  /* support of GSM 450   */
#define rf_450m       0x00000020
#define rf_450s       5
#define rf_480        0x00000040,6  /* support of GSM 480   */
#define rf_480m       0x00000040
#define rf_480s       6
#define rf_RGSM       0x00000080,7  /* support of R-GSM     */
#define rf_RGSMm      0x00000080
#define rf_RGSs       7

/* 
 * power1
 */
#define rfCap_1800    0x0000000f,0  /* associated RF capability of DCS 1800  */
#define rfCap_1800m   0x0000000f
#define rfCap_1800s   0
#define rfCap_900     0x000000f0,4  /* associated RF capability of GSM 900   */
#define rfCap_900m    0x000000f0
#define rfCap_900s    4
/* 
 * power2
 */
#define rfCap_850     0x0000000f,0  /* associated RF capability of GSM 850   */
#define rfCap_850m    0x0000000f
#define rfCap_850s    0
#define rfCap_1900    0x000000f0,4  /* associated RF capability of PCS 1900  */
#define rfCap_1900m   0x000000f0
#define rfCap_1900s   4
/* 
 * power3
 */
#define rfCap_EDGE2   0x00000003,0  /* associated RF capability 2 of EDGE    */
#define rfCap_EDGE2m  0x00000003
#define rfCap_EDGE2s  0
#define rfCap_EDGE1   0x0000000c,2  /* associated RF capability 1 of EDGE    */
#define rfCap_EDGE1m  0x0000000c
#define rfCap_EDGE1s  2
#define rfCap_400     0x000000f0,4  /* associated RF capability of GSM 450,480*/
#define rfCap_400m    0x000000f0
#define rfCap_400s    4
/* 
 * msGSM, msEDGE, msHSCSD, msGPRS, msECSD, msEGPRS
 */
#define rfCap_DTMSC     0x00000003,0  /* Multi Slot Sub-Class (only msGPRS+msEGPRS) */
#define rfCap_DTMSCm    0x00000003
#define rfCap_DTMSCs    0
#define rfCap_DTM       0x00000004,2  /* Support of DTM (only msGPRS+msEGPRS) */
#define rfCap_DTMm      0x00000004
#define rfCap_DTMs      2
#define rfCap_MSC       0x000000f8,3  /* Multi Slot Class */
#define rfCap_MSCm      0x000000f8
#define rfCap_MSCs      3
/* 
 * capability1
 */
#define rfCap_mac     0x00000001,0  /* Dynamic and fixed allocation */
#define rfCap_macm    0x00000001
#define rfCap_macs    0
#define rfCap_mod     0x00000002,1  /* EDGE modulation capability */
#define rfCap_modm    0x00000002
#define rfCap_mods    1
#define rfCap_cmsp    0x00000004,2  /* CM service prompt */
#define rfCap_cmspm   0x00000004
#define rfCap_cmsps   2
#define rfCap_solsa   0x00000008,3  /* SoLSA capability */
#define rfCap_solsam  0x00000008
#define rfCap_solsas  3
#define rfCap_lcsva   0x00000010,4  /* LCS value added location request noti. */
#define rfCap_lcsvam  0x00000010
#define rfCap_lcsvas  4
#define rfCap_ppsms   0x00000020,5  /* MT point to point SMS */
#define rfCap_ppsmsm  0x00000020
#define rfCap_ppsmss  5
#define rfCap_ps      0x00000040,6  /* pseudo synchronization capability */
#define rfCap_psm     0x00000040
#define rfCap_pss     6
#define rfCap_esind   0x00000080,7  /* controlled early class sending */
#define rfCap_esindm  0x00000080
#define rfCap_esinds  7
/* 
 * capability2
 */
#define rfCap_ssc     0x00000003,0  /* SS screening indicator */
#define rfCap_sscm    0x00000003
#define rfCap_sscs    0
#define rfCap_usc2    0x00000004,2  /* UCS2 encoded */
#define rfCap_usc2m   0x00000004
#define rfCap_usc2s   2
#define rfCap_vgcs    0x00000008,3  /* VGCS capability */
#define rfCap_vgcsm   0x00000008
#define rfCap_vgcss   3
#define rfCap_vbs     0x00000010,4  /* VBS capability */
#define rfCap_vbsm    0x00000010
#define rfCap_vbss    4
#define rfCap_compact   0x00000020,5  /* COMPACT interference measurement */
#define rfCap_compactm  0x00000020
#define rfCap_compacts  5
#define rfCap_extmeas   0x00000040,6  /* extendend measurement */
#define rfCap_extmeasm  0x00000040
#define rfCap_extmeass  6
#define rfCap_meas    0x00000080,7  /* values about measurement capability */
#define rfCap_measm   0x00000080
#define rfCap_meass   7
/* 
 * switchmeasure
 */
#define rfCap_smt     0x0000000f,0  /* time switch-power measurement */
#define rfCap_smtm    0x0000000f
#define rfCap_smts    0
#define rfCap_smst    0x000000f0,4  /* time switch-power measurement-switch */
#define rfCap_smstm   0x000000f0
#define rfCap_smsts   4
/* 
 * encryption
 */
#define rfCap_A5_7   0x00000002,1  /* encryption algorithm A5/7 */
#define rfCap_A5_7m  0x00000002
#define rfCap_A5_7s  1
#define rfCap_A5_6   0x00000004,2  /* encryption algorithm A5/6 */
#define rfCap_A5_6m  0x00000004
#define rfCap_A5_6s  2
#define rfCap_A5_5   0x00000008,3  /* encryption algorithm A5/5 */
#define rfCap_A5_5m  0x00000008
#define rfCap_A5_5s  3
#define rfCap_A5_4   0x00000010,4  /* encryption algorithm A5/4 */
#define rfCap_A5_4m  0x00000010
#define rfCap_A5_4s  4
#define rfCap_A5_3   0x00000020,5  /* encryption algorithm A5/3 */
#define rfCap_A5_3m  0x00000020
#define rfCap_A5_3s  5
#define rfCap_A5_2   0x00000040,6  /* encryption algorithm A5/2 */
#define rfCap_A5_2m  0x00000040
#define rfCap_A5_2s  6
#define rfCap_A5_1   0x00000080,7  /* encryption algorithm A5/1 */
#define rfCap_A5_1m  0x00000080
#define rfCap_A5_1s  7
/* 
 * positioning
 */
#define rfCap_eeda    0x00000002,1 /* EGPRS Extended Dynamic Allocation Capability */
#define rfCap_eedam   0x00000002
#define rfCap_eedas   1
#define rfCap_geda    0x00000004,2  /* GPRS Extended Dynamic Allocation Capability */
#define rfCap_gedam   0x00000004
#define rfCap_gedas   2
#define rfCap_cgps    0x00000008,3  /* conventional GPS */
#define rfCap_cgpsm   0x00000008
#define rfCap_cgpss   3
#define rfCap_bgps    0x00000010,4  /* based GPS */
#define rfCap_bgpsm   0x00000010
#define rfCap_bgpss   4
#define rfCap_agps    0x00000020,5  /* assisted GPS */
#define rfCap_agpsm   0x00000020
#define rfCap_agpss   5
#define rfCap_beotd   0x00000040,6  /* based E-OTD */
#define rfCap_beotdm  0x00000040
#define rfCap_beotds  6
#define rfCap_aeotd   0x00000080,7  /* assisted E-OTD */
#define rfCap_aeotdm  0x00000080
#define rfCap_aeotds  7


#ifdef TI_PS_CUSTOM_RFCAP_DEFAULT
EXTERN U8 custom_rfcap_default[SIZE_EF_RFCAP];
#endif /*  TI_PS_CUSTOM_RFCAP_DEFAULT */

/********************************************************************
 *
 * Field MOBILE SETUP
 *
 ********************************************************************/

typedef struct pcm_EFmssup_Type     /* Mobile Setup                 */
{
    UBYTE lng1;
    UBYTE lng2;
    UBYTE lng3;
    UBYTE feat1;
    UBYTE feat2;
}EF_MSSUP;

#define SIZE_EF_MSSUP 5
#define NR_EF_MSSUP   1

/* 
 * lng1
 */
#define eng         0x00000001,0        /* English                      */
#define engm        0x00000001
#define engs        0
#define fre         0x00000002,1        /* French                       */
#define frem        0x00000002
#define fres        1
#define ger         0x00000004,2        /* German                       */
#define germ        0x00000004
#define gers        2
#define dut         0x00000008,3        /* Dutch                        */
#define dutm        0x00000008
#define duts        3
#define ita         0x00000010,4        /* Italian                      */
#define itam        0x00000010
#define itas        4
#define spa         0x00000020,5        /* Spanish                      */
#define spam        0x00000020
#define spas        5
#define swe         0x00000040,6        /* Swedish                      */
#define swem        0x00000040
#define swes        6
#define por         0x00000080,7        /* Portuguese                   */
#define porm        0x00000080
#define pors        7

/* 
 * lng2
 */
#define fin         0x00000001,0        /* Finnish                      */
#define finm        0x00000001
#define fins        0
#define nor         0x00000002,1        /* Norwegian                    */
#define norm        0x00000002
#define nors        1
#define gre         0x00000004,2        /* Greek                        */
#define grem        0x00000004
#define gres        2
#define tur         0x00000008,3        /* Turkish                      */
#define turm        0x00000008
#define turs        3
#define hun         0x00000010,4        /* Hungarian                    */
#define hunm        0x00000010
#define huns        4
#define slo         0x00000020,5        /* Slovenian                    */
#define slom        0x00000020
#define slos        5
#define pol         0x00000040,6        /* Polish                       */
#define polm        0x00000040
#define pols        6
#define rus         0x00000080,7        /* Russian                      */
#define rusm        0x00000080
#define russ        7

/* 
 * lng3
 */
#define ind         0x00000001,0        /* Indonesian                   */
#define indm        0x00000001
#define inds        0
#define cze         0x00000002,1        /* Czech                        */
#define czem        0x00000002
#define czes        1
#define chi         0x00000004,2        /* Chinese                      */
#define chim        0x00000004
#define chis        2
#define can         0x00000008,3        /* Cantonese                    */
#define canm        0x00000008
#define cans        3
#define man         0x00000010,4        /* Mandarin                     */
#define manm        0x00000010
#define mans        4
#define tai         0x00000020,5        /* Taiwanese                    */
#define taim        0x00000020
#define tais        5
#define ara         0x00000040,6        /* Arabic                       */
#define aram        0x00000040
#define aras        6

/* 
 * feat
 */
#define AoC         0x00000001,0        /* Advice of Charge             */
#define AoCm        0x00000001
#define AoCs        0
#define DTMF        0x00000002,1        /* DTMF                         */
#define DTMFm       0x00000002
#define DTMFs       1
#define CF          0x00000004,2        /* Call Forwarding              */
#define CFm         0x00000004
#define CFs         2
#define CB          0x00000008,3        /* Call Barring                 */       
#define CBm         0x00000008
#define CBs         3
#define USSD        0x00000010,4        /* USSD                         */
#define USSDm       0x00000010
#define USSDs       4
#define ETC         0x00000020,5        /* ETC                          */
#define ETCm        0x00000020
#define ETCs        5
#define IRDA        0x00000040,6        /* IRDA                         */
#define IRDAm       0x00000040
#define IRDAs       6

/********************************************************************
 *
 *          Field Current language (CLNG)
 *
 ********************************************************************/

#define SIZE_EF_CLNG_DATA 2

typedef struct pcm_EFclng_Type
{
  UBYTE data[SIZE_EF_CLNG_DATA]; /* current language in ME */
} EF_CLNG;

#define SIZE_EF_CLNG SIZE_EF_CLNG_DATA
#define NR_EF_CLNG   1
 
/********************************************************************
 *
 * Field MOBILE STATION SETTTINGS
 *
 ********************************************************************/

typedef struct pcm_EFmsset_Type     /* Mobile Setting               */
{
    UBYTE buzzer1;
    UBYTE buzzer2;
    UBYTE buzzer3;
    UBYTE audio;
    UBYTE misc;
    UBYTE display;
    UBYTE language;
    UBYTE recent_ldn_ref;
    UBYTE recent_lrn_ref;
    UBYTE recent_upn_ref;
} EF_MSSET;
   
#define SIZE_EF_MSSET 10
#define NR_EF_MSSET    1

/* 
 * buzzer 1 
 */
#define calltype  0x00000007,0        /* ringer type incoming calls   */
#define calltypem 0x00000007
#define calltypes 0
#define callvol   0x00000038,3        /* ringer volume incoming calls */
#define callvolm  0x00000038
#define callvols  3
#define vib       0x000000c0,6        /* vibrator                     */
#define vibm      0x000000c0
#define vibs      6

/*
 * buzzer 2
 */
#define msgtype   0x00000007,0        /* ringer type messages         */
#define msgtypem  0x00000007
#define msgtypes  0
#define msgvol    0x00000038,3        /* ringer volume messages       */
#define msgvolm   0x00000038
#define msgvols   3

/*
 * buzzer 3
 */
#define keytone   0x00000003,0        /* key tone mode                */
#define keytonem  0x00000003
#define keytones  0
#define batw      0x00000004,2        /* low battery warning          */
#define batwm     0x00000004
#define batws     2

/*
 * audio
 */
#define lnamp     0x00000007,0        /* microphone amplification     */
#define lnampm    0x00000007
#define lnamps    0
#define outvol    0x00000038,3        /* output volume                */
#define outvolm   0x00000038
#define outvols   3
#define ext       0x00000040,6        /* external audio               */
#define extm      0x00000040
#define exts      6
#define voicerec  0x00000080,7        /* voice recording              */
#define voicerecm 0x00000080
#define voicerecs 7

/*
 * miscellenous
 */
#define pmod      0x00000001,0        /* PLMN selection mode          */
#define pmodm     0x00000001
#define pmods     0
#define clir      0x00000002,1        /* CLIR                         */
#define clirm     0x00000002
#define clirs     1
#define clip      0x00000004,2        /* CLIP                         */
#define clipm     0x00000004
#define clips     2
#define calinf    0x00000008,3        /* call information display     */
#define calinfm   0x00000008
#define calinfs   3
#define redial    0x00000030,4        /* redial mode                  */
#define redialm   0x00000030
#define redials   4

/*
 * display
 */
#define ctrt      0x00000007,0        /* contrast                     */
#define ctrtm     0x00000007
#define ctrts     0
#define brgt      0x00000018,3        /* brightness                   */
#define brgtm     0x00000018
#define brgts     3
#define bckdr     0x000000E0,5        /* duration for back light      */
#define bckdrm    0x000000E0
#define bckdrs    5

//	Jun 14, 2005 REF: MMI-FIX-30439 x0018858
//Begin 30439
/********************************************************************
 *
 * Field Homezone cache
 *
 ********************************************************************/

typedef struct pcm_EFhzcache_Type
{
    UBYTE 			cid[2];				
	UBYTE			zone;
} EF_HZCACHE;

#define SIZE_EF_HZCACHE 3
#define NR_EF_HZCACHE   5

/********************************************************************
 *
 * Field LAST MOC NUMBERS - LDN
 *
 ********************************************************************/
//end 30439

typedef struct pcm_EFldn_Type       /* Last Dialed Numbers          */
{
  UBYTE calDrMsb;
  UBYTE calDrLsb;
  UBYTE year;
  UBYTE month;
  UBYTE day;
  UBYTE hour;
  UBYTE minute;
  UBYTE second;
  UBYTE len;                        /* length of BCD number         */
  UBYTE numTp;
  UBYTE dldNum[10];                 /* dialed number                */
  UBYTE ccp;                        /* capability/configuration id  */
  UBYTE ext1;                       /* extension1 record identifier */
} EF_LDN;

#define SIZE_EF_LDN 22
#define NR_EF_LDN    1

/*
 * numTp
 */
#define numTp_npi   0x0000000F,0    /* numbering plan identification */
#define numTp_npim  0x0000000F
#define numTp_npis  0
#define numTp_ton   0x00000070,4    /* Type of number                */
#define numTp_tonm  0x00000070
#define numTp_tons  4

/********************************************************************
 *
 * Field LAST RECEIVED NUMBERS
 *
 ********************************************************************/

typedef struct pcm_EFlrn_Type       /* Last Received Numbers        */
{
  UBYTE calDrMsb;
  UBYTE calDrLsb;
  UBYTE year;
  UBYTE month;
  UBYTE day;
  UBYTE hour;
  UBYTE minute;
  UBYTE second;
  UBYTE id;
  UBYTE len;                            /* length of BCD number         */
  UBYTE numTp;
  UBYTE dldNum[10];                     /* dialed number                */
  UBYTE ccp;                            /* capability/configuration id  */
  UBYTE ext1;                           /* extension1 record identifier */
} EF_LRN;

#define SIZE_EF_LRN 23
#define NR_EF_LRN    1

/********************************************************************
 *
 * Field LAST MISSED NUMBERS
 *
 ********************************************************************/

typedef struct pcm_EFlmn_Type         /* Last Missed Numbers        */
{
  UBYTE year;
  UBYTE month;
  UBYTE day;
  UBYTE hour;
  UBYTE minute;
  UBYTE second;
  UBYTE id;
  UBYTE len;                            /* length of BCD number         */
  UBYTE numTp;
  UBYTE dldNum[10];                     /* dialed number                */
  UBYTE ccp;                            /* capability/configuration id  */
  UBYTE ext1;                           /* extension1 record identifier */
} EF_LMN;

#define SIZE_EF_LMN 21
#define NR_EF_LMN    1

/********************************************************************
 *
 * Field USER PERSONAL NUMBERS
 *
 ********************************************************************/

typedef struct pcm_EFupn_Type       /* User Personal Numbers        */
{
  UBYTE alphId[10];
  UBYTE len;
  UBYTE numTp;                      /* bitmap same as EF_LDN        */
  UBYTE usrNum[10];
  UBYTE ccp;
  UBYTE ext1;
} EF_UPN;

#define SIZE_EF_UPN 24
#define NR_EF_UPN    1

/********************************************************************
 *
 * Field MAILBOX NUMBERS
 *
 ********************************************************************/

typedef struct pcm_EFmbn_Type           /* Mailbox Numbers        */
{
  UBYTE alphId[10];
  UBYTE len;
  UBYTE numTp;                          /* bitmap same as EF_LDN        */
  UBYTE mbNum[10];
} EF_MBN;

#define SIZE_EF_MBN 22
#define NR_EF_MBN    4


/********************************************************************
 *
 * Field Voice Mail Number                                               
 *
 ********************************************************************/

/* 
 * note that with new 04.08 the called party bcd number of the CC
 * protocol can have up to 43 octets, 3 are used for other things 
 * than the BCD coded digits
 */
#define MAX_CALLED_PARTY_BCD_NO_OCTETS 40
typedef struct pcm_EFvmn_Type         /* Voice mail Number         */
{
  UBYTE vmNum[MAX_CALLED_PARTY_BCD_NO_OCTETS + 1];
  /* implementation uses delimiter of 0xFF */
  UBYTE numTp;

} EF_VMN;

#define SIZE_EF_VMN (MAX_CALLED_PARTY_BCD_NO_OCTETS + 1 + 1)
#define NR_EF_VMN    1


/********************************************************************
 *
 * Field CALL TIMER
 *
 ********************************************************************/

typedef struct pcm_EFctim_Type      /* Call Timer                   */
{
  UBYTE moVcDrHm[4];
  UBYTE mtVcDrHm[4];
  UBYTE moDtDrHm[4];
  UBYTE mtDtDrHm[4];
  UBYTE moFxDrHm[4];
  UBYTE mtFxDrHm[4];
  UBYTE moVcDrRm[4];
  UBYTE mtVcDrRm[4];
  UBYTE moDtDrRm[4];
  UBYTE mtDtDrRm[4];
  UBYTE moFxDrRm[4];
  UBYTE mtFxDrRm[4];
} EF_CTIM;

#define SIZE_EF_CTIM 48
#define NR_EF_CTIM    1

/********************************************************************
 *
 * Field CALL COUNTER
 *
 ********************************************************************/

typedef struct pcm_EFccnt_Type     /* Call Counter                  */
{
  UBYTE total[4];
  UBYTE moVcDrHm[4];
  UBYTE mtVcDrHm[4];
  UBYTE moDtDrHm[4];
  UBYTE mtDtDrHm[4];
  UBYTE moFxDrHm[4];
  UBYTE mtFxDrHm[4];
  UBYTE moVcDrRm[4];
  UBYTE mtVcDrRm[4];
  UBYTE moDtDrRm[4];
  UBYTE mtDtDrRm[4];
  UBYTE moFxDrRm[4];
  UBYTE mtFxDrRm[4];
} EF_CCNT;

#define SIZE_EF_CCNT 52
#define NR_EF_CCNT    1

/********************************************************************
 *
 * Field EMERGENCY CALL CODES
 *
 ********************************************************************/


typedef struct pcm_EFecc_Type           /* Emergency Call Codes         */
{
  UBYTE ecc1[3];                        /* emergency call code          */
  UBYTE ecc2[3];
  UBYTE ecc3[3];
  UBYTE ecc4[3];
  UBYTE ecc5[3];
} EF_ECC;

#define SIZE_EF_ECC 15
#define NR_EF_ECC    1

/********************************************************************
 *
 * Field ORGANIZER AND ALARM
 *
 ********************************************************************/


typedef struct pcm_EForg_Type           /* Organizer and Alarm          */
{
  UBYTE date[6];                        /* bitmap same as EF_LDN        */
  UBYTE alrm;
  UBYTE alphMem[16];                    /* alpha memo                   */
} EF_ORG;
                  
#define SIZE_EF_ORG 23
#define NR_EF_ORG    1

/*
 *  alrm
 */
#define alrm_stat        0x00000001,0
#define alrm_statm       0x00000001
#define alrm_stats       0
#define alrm_type        0x0000000E,1
#define alrm_typem       0x0000000E
#define alrm_types       1

/********************************************************************
 *
 * Field CAPABILITY AND CONFIGURATION PARAMETERS
 *
 ********************************************************************/

typedef struct pcm_EFccp_Type    /* Capability and Configuration Parameters */
{
  UBYTE usrRate;                        /* user rate                    */
  UBYTE bearServ;                       /* bearer service               */
  UBYTE conElem;                        /* connection element           */
  UBYTE stopBits;                       /* stop bits                    */
  UBYTE dataBits;                       /* data bits                    */
  UBYTE parity;                         /* parity                       */
  UBYTE flowCntrl;                      /* flow control                 */
} EF_CCP;

#define SIZE_EF_CCP 7
#define NR_EF_CCP   1

/********************************************************************
 *
 * Field EXTENSION 1
 *
 ********************************************************************/

typedef struct pcm_EFext1_Type        /* Extension 1                  */
{
  UBYTE recTp;                          /* record type                  */
  UBYTE extDat[11];                     /* extension data               */
  UBYTE id;                             /* identifier                   */
} EF_EXT1;

#define SIZE_EF_EXT1 13
#define NR_EF_EXT1    1

/********************************************************************
 *
 * Field SIM LOCK and Extended SIM LOCK (use alternativly)
 *
 ********************************************************************/

typedef struct pcm_EFsimlck_Type       /* SIM Lock                     */
{
  UBYTE locks1;                         /* lock status                  */
  UBYTE locks2;
  UBYTE cnt;                            /* lock counter                 */
  UBYTE maxcnt;                         /* lock counter                 */
  UBYTE PKey[8];                        /* SIM control key              */
  UBYTE SPKey[8];                       /* SP control key               */
  UBYTE NSKey[8];                       /* NS control key               */
  UBYTE CKey[8];                        /* corporate control key        */
  UBYTE NKey[8];                        /* network control key          */
  UBYTE len_imsi;                       /* bytes of IMSI               */
  UBYTE imsi[15];                       /* IMSI                         */
  UBYTE gidl1;                          /* Group Identifier Level 1     */
  UBYTE gidl2;                          /* Group Identifier Level 1     */
} EF_SIMLCK;

#define SIZE_EF_SIMLCK 62
#define NR_EF_SIMLCK    1

typedef struct pcm_EFsimlckext_Type     /* Extended SIM Lock            */
{
  UBYTE locks1;                         /* lock status                  */
  UBYTE locks2;
  UBYTE cnt;                            /* lock counter                 */
  UBYTE maxcnt;                         /* lock counter                 */
  UBYTE PKey[8];                        /* SIM control key              */
  UBYTE SPKey[8];                       /* SP control key               */
  UBYTE NSKey[8];                       /* NS control key               */
  UBYTE CKey[8];                        /* corporate control key        */
  UBYTE NKey[8];                        /* network control key          */
  UBYTE len_p_imsi;                     /* bytes of IMSI P-Lock         */
  UBYTE p_imsi[15];                     /* IMSI P-Lock                  */
  UBYTE len_sp_imsi;                    /* bytes of IMSI SP-Lock        */
  UBYTE sp_imsi[15];                    /* IMSI SP-Lock                 */
  UBYTE len_ns_imsi;                    /* bytes of IMSI NS-Lock        */
  UBYTE ns_imsi[15];                    /* IMSI NS-Lock                 */
  UBYTE len_c_imsi;                     /* bytes of IMSI C-Lock         */
  UBYTE c_imsi[15];                     /* IMSI C-Lock                  */
  UBYTE len_n_imsi;                     /* bytes of IMSI N-Lock         */
  UBYTE n_imsi[15];                     /* IMSI N-Lock                  */
  UBYTE len_u_imsi;                     /* bytes of IMSI U-Lock         */
  UBYTE u_imsi[15];                     /* IMSI U-Lock                  */
  UBYTE gidl1;                          /* Group Identifier Level 1     */
  UBYTE gidl2;                          /* Group Identifier Level 1     */
} EF_SIMLCKEXT;

#define SIZE_EF_SIMLCKEXT 142
#define NR_EF_SIMLCKEXT     1

/*
 *  locks1
 */
#define plock            0x00000003,0
#define plockm           0x00000003
#define plocks           0
#define nlock            0x0000000C,2
#define nlockm           0x0000000C
#define nlocks           2
#define nslock           0x00000030,4
#define nslockm          0x00000030
#define nslocks          4
#define spslock          0x000000C0,6
#define splockm          0x000000C0
#define splocks          6

/*
 *  locks2
 */
#define clock            0x00000003,0
#define clockm           0x00000003
#define clocks           0
#define flock            0x0000000C,2
#define flockm           0x0000000C
#define flocks           2
/*
#define reserved1        0x00000030,4
#define reserved1m       0x00000030
#define reserved1s       4
#define reserved2        0x000000C0,6
#define reserved2m       0x000000C0
#define reserved2s       6
*/

/********************************************************************
 *
 * Field MAINTENANCE INFORMATION
 *
 ********************************************************************/

/*
 *  T.B.D.
 */
#define SIZE_EF_MAIN  8
#define NR_EF_MAIN    1

/********************************************************************
 *
 * Field SPECIAL FUNCTION KEY
 *
 ********************************************************************/

/*
 *  T.B.D.
 */
#define SIZE_EF_SFK   8
#define NR_EF_SFK     1

/********************************************************************
 *
 * Field FAULT CONDITIONS
 *
 ********************************************************************/

/*
 *  T.B.D.
 */
#define SIZE_EF_FAULT 8
#define NR_EF_FAULT   1

/********************************************************************
 *
 * Field DEBUG INFORMATION
 *
 ********************************************************************/

/*
 *  T.B.D.
 */
#define SIZE_EF_DEBUG 8
#define NR_EF_DEBUG   1

/********************************************************************
 *
 * Field POWER MANAGEMENT
 *
 ********************************************************************/

/*
 *  T.B.D.
 */
#define SIZE_EF_POWER 8
#define NR_EF_POWER   1

 /********************************************************************
 *
 * Field KEYBOARD MAPPING
 *
 ********************************************************************/

typedef struct pcm_EFkbd_Type       /* Keyboard Mapping             */
{
  UBYTE logical_key [32];           /* logical key                  */
  UBYTE raw_key [32];               /* raw key                      */
} EF_KBD;

#define SIZE_EF_KEYB 64
#define NR_EF_KEYB    1

/********************************************************************
 *
 * Field RADIO PARAMETERS
 *
 ********************************************************************/

/*
 *  T.B.D.
 */
#define SIZE_EF_RADIO 8
#define NR_EF_RADIO   1

/********************************************************************
 *
 * Manufacturer
 *
 ********************************************************************/

#define SIZE_EF_CGMI_DATA 20

typedef struct pcm_EFcgmi_Type   /* Manufacturer                 */
{
  UBYTE data[SIZE_EF_CGMI_DATA]; /* Name of Manufacturer         */
} EF_CGMI;

#define SIZE_EF_CGMI SIZE_EF_CGMI_DATA
#define NR_EF_CGMI   1

/********************************************************************
 *
 *  Identification Information 
 *
 ********************************************************************/

#define SIZE_EF_INF0_DATA 20

typedef struct pcm_EFinf0_Type
{
  UBYTE data[SIZE_EF_INF0_DATA]; /*Identification Information*/
} EF_INF0;

#define SIZE_EF_INF0 SIZE_EF_INF0_DATA
#define NR_EF_INF0   2

/********************************************************************
 *
 * Model
 *
 ********************************************************************/

#define SIZE_EF_CGMM_DATA 20

typedef struct pcm_EFcgmm_Type   /* Model                        */
{
  UBYTE data[SIZE_EF_CGMM_DATA]; /* Name of Product              */
} EF_CGMM;

#define SIZE_EF_CGMM SIZE_EF_CGMM_DATA
#define NR_EF_CGMM   1

/********************************************************************
 *
 * Revision
 *
 ********************************************************************/

#define SIZE_EF_CGMR_DATA 20

typedef struct pcm_EFcgmr_Type   /* Revision                     */
{
  UBYTE data[SIZE_EF_CGMR_DATA]; /* Version of Product           */
} EF_CGMR;

#define SIZE_EF_CGMR SIZE_EF_CGMR_DATA
#define NR_EF_CGMR   1

/********************************************************************
 *
 * Product Serial Number
 *
 ********************************************************************/

#define SIZE_EF_CGSN_DATA 20

typedef struct pcm_EFcgsn_Type   /* Product Serial Number        */
{
  UBYTE data[SIZE_EF_CGSN_DATA]; /* Serial Number of Product     */
} EF_CGSN;

#define SIZE_EF_CGSN SIZE_EF_CGSN_DATA
#define NR_EF_CGSN   1

/********************************************************************
 *
 * SMS Profile
 *
 ********************************************************************/

#define SIZE_EF_SMSPRFL_SCA   20
#define SIZE_EF_SMSPRFL_MIDS  40
#define SIZE_EF_SMSPRFL_DCSS  20
#define SIZE_EF_SMSPRFL_VPABS 14

#define EF_SMSPRFL_VLD        0x00
#define EF_SMSPRFL_INVLD      0xFF

typedef struct pcm_EFsmsprfl_Type         /* SMS Profile                      */
{
  UBYTE vldFlag;                          /* Valid Flag                       */
  UBYTE CSCAsca[SIZE_EF_SMSPRFL_SCA];     /* Service Center Address           */  
  UBYTE CSCAlenSca;                       /* Length of Service Center Address */
  UBYTE CSCAton;                          /* Type of Number                   */
  UBYTE CSCAnpi;                          /* Numbering Plan Identification    */
  UBYTE CSCBmode;                         /* Mode                             */
  UBYTE CSCBmids[SIZE_EF_SMSPRFL_MIDS];   /* Message Identifier               */
  UBYTE CSCBdcss[SIZE_EF_SMSPRFL_DCSS];   /* Data Coding Schemes              */
  UBYTE CSMPfo;                           /* First Octet                      */
  UBYTE CSMPvprel;                        /* Validity Period Relative         */
  UBYTE CSMPvpabs[SIZE_EF_SMSPRFL_VPABS]; /* Validity Period Absolute         */
  UBYTE CSMPpid;                          /* Protocol Identifier              */
  UBYTE CSMPdcs;                          /* Data Coding Scheme               */
} EF_SMSPRFL;

#define SIZE_EF_SMSPRFL ( SIZE_EF_SMSPRFL_SCA   +   \
                          SIZE_EF_SMSPRFL_MIDS  +   \
                          SIZE_EF_SMSPRFL_DCSS  +   \
                          SIZE_EF_SMSPRFL_VPABS + 9   )
#define NR_EF_SMSPRFL   2

/********************************************************************
 *
 * PLMN Identifier
 *
 ********************************************************************/

#define SIZE_EF_PLMN_LONG 20
#define SIZE_EF_PLMN_SHRT 10
#define SIZE_EF_PLMN_MCC   2
#define SIZE_EF_PLMN_MNC   2

typedef struct pcm_EFplmn_Type      /* PLMN Identifier              */
{
  UBYTE mcc[SIZE_EF_PLMN_MCC];      /* Mobile country code          */
  UBYTE mnc[SIZE_EF_PLMN_MNC];      /* Mobile network code          */
  UBYTE lngNam[SIZE_EF_PLMN_LONG];  /* Long operator name           */
  UBYTE shrtNam[SIZE_EF_PLMN_SHRT]; /* Short operator name          */
} EF_PLMN;

#define SIZE_EF_PLMN ( SIZE_EF_PLMN_MCC  + SIZE_EF_PLMN_MCC +   \
                       SIZE_EF_PLMN_LONG + SIZE_EF_PLMN_SHRT )
#define NR_EF_PLMN   2

/********************************************************************
 *
 * Field BCCH Information
 *
 ********************************************************************/

typedef struct pcm_EFbcchinfo_Type  /* BCCH information             */
{
  UBYTE bcch_info[54];              /* content                      */
} EF_BCCHINFO;

#define SIZE_EF_BCCHINFO 54
#define NR_EF_BCCHINFO    1

/********************************************************************
 *
 * Field alternate line service
 *
 ********************************************************************/

typedef struct pcm_EFals_Type  /* alternate line service            */
{
  UBYTE selLine;
  UBYTE statLine;
} EF_ALS;

#define SIZE_EF_ALS 2
#define NR_EF_ALS   1

/********************************************************************
 *
 * Field Location Information (GPRS)
 *
 ********************************************************************/

typedef struct pcm_EFlocgprs_Type   /* GPRS Location information    */
{
  UBYTE ptmsi[4];
  UBYTE ptmsi_signature[3];
  UBYTE rai[6];
  UBYTE ra_status;
} EF_LOCGPRS;

#define SIZE_EF_LOCGPRS sizeof (EF_LOCGPRS)
#define NR_EF_LOCGPRS   1

/********************************************************************
 *
 * Field Ciphering Key (GPRS)
 *
 ********************************************************************/

typedef struct pcm_EFkcgprs_Type         /* GPRS Ciphering key      */
{
  UBYTE kc[8];
  UBYTE cksn;
} EF_KCGPRS;

#define SIZE_EF_KCGPRS sizeof (EF_KCGPRS)
#define NR_EF_KCGPRS   1

/********************************************************************
 *
 * Field IMSI (GPRS, only for validation of GPRS related fields)
 *
 ********************************************************************/

typedef struct pcm_EFimsigprs_Type    /* International Subscriber Id */
{
  UBYTE len;
  UBYTE IMSI[8];
} EF_IMSIGPRS;

#define SIZE_EF_IMSIGPRS sizeof (EF_IMSIGPRS)
#define NR_EF_IMSIGPRS   1

/********************************************************************
 *
 * Prototypes
 *
 ********************************************************************/

#if defined (NEW_FRAME)
/*
 * to achieve backward compatibility with older definitions
 */
#define drv_SignalCB_Type           T_DRV_CB_FUNC
#define drv_SignalID_Type           T_DRV_SIGNAL
#define T_VSI_THANDLE               USHORT
#endif

EXTERN drv_Return_Type pcm_Init         (void);
EXTERN void pcm_Exit                    (void);
EXTERN drv_Return_Type pcm_ReadFile     (UBYTE  * in_FileName,
                                         USHORT   in_BufferSize,
                                         UBYTE  * out_BufferPtr,
                                         UBYTE  * out_VersionPtr);
EXTERN drv_Return_Type pcm_GetFileInfo  (UBYTE  * in_FileName,
                                         pcm_FileInfo_Type * out_FileInfoPtr);
EXTERN drv_Return_Type pcm_ReadRecord   (UBYTE  * in_FileName,
                                         USHORT   in_Record,
                                         USHORT   in_BufferSize,
                                         UBYTE  * out_BufferPtr,
                                         UBYTE  * out_VersionPtr,
                                         USHORT * out_MaxRecordsPtr);
EXTERN drv_Return_Type pcm_WriteFile    (UBYTE  * in_FileName,
                                         USHORT   in_BufferSize,
                                         UBYTE  * in_BufferPtr);
EXTERN drv_Return_Type pcm_WriteRecord  (UBYTE  * in_FileName,
                                         USHORT   in_Record,
                                         USHORT   in_BufferSize,
                                         UBYTE  * in_BufferPtr);
EXTERN drv_Return_Type pcm_Flush        (void);


#endif