FreeCalypso > hg > tcs211-c139
diff g23m/condat/com/src/driver/pcm.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/com/src/driver/pcm.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,3459 @@ +/* ++----------------------------------------------------------------------------- +| Project : GSM-PS +| Modul : PCM ++----------------------------------------------------------------------------- +| 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 permanent +| memory configuration driver. ++----------------------------------------------------------------------------- +*/ +/******************************************************************************** + $History: pcm.c + + 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_C +#define PCM_C + +#ifdef WIN32 + +/* + * SIMULATION VERSION (Windows) + */ +/*==== INCLUDES ===================================================*/ +#define ENTITY_CST + +#if defined (NEW_FRAME) + +#include <string.h> +#include "typedefs.h" +#include "vsi.h" +#include "custom.h" +#include "gdi.h" +#include "pcm.h" +#include "gsm.h" + +#else + +#include <string.h> +#include "stddefs.h" +#include "custom.h" +#include "gdi.h" +#include "pcm.h" +#include "gsm.h" +#include "vsi.h" + +#endif +/*==== EXPORT =====================================================*/ +#if defined (NEW_FRAME) +EXTERN USHORT cst_handle; +#endif +/*==== VARIABLES ==================================================*/ + +/* + * Flag whether the 'e2prom content' is read + */ +UBYTE pcm_read = FALSE; + +UBYTE std = 1; /* default is GSM 900 using windows */ +static UBYTE act_std = 0; /* to check for changes */ +// set treshold for initial power measurements (= -106 dBm) +USHORT min_rxlev = 20; + +/*==== FUNCTIONS ==================================================*/ + +/*==== CONSTANTS ==================================================*/ + +/* + * GSM 900 Variant + */ +static UBYTE pcm_content_gsm_900 [] = +{ + /* MSCAP */ 0xAA, 0x01, /* checksum & version */ + /*actual values supported by the MS*/ + /*0xB7, 0xC7, 0x00,*/ + 0x31, 0x00, 0x00, + 0x00, 0x00, 0x00, + /* IMEI */ 0xAA, 0x01, /* checksum & version */ + 0x31, 0x75, 0x09, + 0x42, 0x86, 0x11, + 0x22, 0x87, + /* RFCAP */ 0xAA, 0x01, /* checksum & version */ + /* set frequency bands */ + 0x01, /* 900 */ + /* supported frequency bands */ + 0x1F, /*850/EGSM/PCS1900/DCS1800/GSM900*/ + /* power 1 900/1800 */ + 0x41, /* 4 1 */ + /* power 2 1900/850 */ + 0x14, /* 1 4 */ + /* power 3 400/Edge */ + 0x00, /* 0 0*/ + /* Multislot cap and classes GSM */ + 0x00, + /* Multislot cap and classes EDGE */ + 0x00, + /* Multislot cap and classes HSCSD */ + 0x00, + /* Multislot cap and classes GPRS */ + 0x50, + /* Multislot cap and classes ECSD */ + 0x00, + /* Multislot cap and classes EGPRS */ + 0x00, + /*capablities 1*/ + 0xa5, /* ES_IND | MT_PP_SMS | CMSP | MAC_SUPPORT*/ + /*capablities 1*/ + 0x05, /* UCS2_TREAT | SS_SCREEN */ + /* switch measure value*/ + 0x00, + /* A5/n */ + 0x80, /*A5_1 | A5_2 (A5_1 only here) */ + /* positioning */ + 0x00, + /* MSSUP */ 0xAA, 0x01, /* checksum & version */ + 0xB7, 0x46, + 0x47, 0x1E, 0x00, + + + /* EFcgmi */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '>', 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 1 */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '1', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 2 */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '2', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /* MBN */ 0xAA, 0x01, /* checksum & version */ + /* EFmbn (record 1) */ + 0x4c, 0x49, 0x4e, 0x31, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x03, 0xff, + 0x12, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 2) */ + 0x4c, 0x49, 0x4e, 0x32, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x04, 0xff, + 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 3) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 4) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + /* VMN */ 0xAA, 0x01, /* checksum & version */ + 0x30, 0x33, 0x30, 0x33, 0x39, 0x30, 0x39, 0x34, //EFvmn + 0x33, 0x33, 0x36, 0x37, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x81, + + //EFclng + /* CLNG */ 0xAA, 0x01, /* checksum & version */ + 'a', 'u', + + + /* SMSPRFL */ 0xAA, 0x01, /* checksum & version */ + /* EFsmsprfl record 1 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* EFsmsprfl record 2 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* PLMN */ 0xAA, 0x01, /* checksum & version */ + 0x02, 0x2B, + 0x00, 0x37, + 0x5A, 0x57, + 0x41, 0x4E, + 0x5A, 0x49, + 0x47, 0x20, + 0x54, 0x45, + 0x4C, 0x45, + 0x4B, 0x4F, + 0x4D, 0x20, + 0x00, 0x43, + 0x4F, 0x4D, + 0x5A, 0x45, + 0x48, 0x4E, + 0x20, 0x20, + 0x00, 0x43, + 0x4F, 0x4D, + 0x01, 0x06, + 0x00, 0x02, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x20, 0x50, + 0x52, 0x49, + 0x56, 0x41, + 0x54, 0xff, + 0xff, 0xff, + 0xff, 0xff, + 0xff, 0xff, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0xff, 0xff, + 0xff, 0xff, + /* BCCHINFO */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* MSSET */ 0xAA, 0x01, /* checksum & version */ + 0x20, 0x20, 0x05, /* buzzer */ + 0x24, /* audio */ + 0x00, /* miscellaneous */ + 0x89, /* display */ + 0x00, /* language */ + 0xFF, 0xFF, 0xFF, /* recentLdxRef */ + /* simlck */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x0f, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x21, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0x0f, + 0x22, 0x00, 0x22, 0x01, 0x23, 0x15, 0x22, 0x35, + 0x24, 0x25, 0x11, 0x22, 0x46, 0x55, 0x66, + 0x00, 0x00, + /* ALS */ 0xAA, 0x01, /* checksum & version */ + 0x01, 0x00, + /* locGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, /* P-TMSI */ + 0xFF, 0xFF, 0xFF, /* P-TMSI Signature */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, /* RAI */ + 0xFF, /* Update Status */ + /* KcGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Kc */ + 0x07, /* CKSN */ + /* IMSI-GPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, /* IMSI length */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* IMSI */ +}; + +/* + * DCS 1800 Variant + */ +static UBYTE pcm_content_dcs_1800 [] = +{ + /* MSCAP */ 0xAA, 0x01, /* checksum & version */ + /*actual values supported by the MS*/ + /*0xB7, 0xC7, 0x00,*/ + 0x03, 0x03, 0x00, + 0x00, 0x00, 0x00, + /* IMEI */ 0xAA, 0x01, /* checksum & version */ + 0x31, 0x75, 0x09, + 0x42, 0x86, 0x11, + 0x22, 0x87, + /* RFCAP */ 0xAA, 0x01, /* checksum & version */ + 0x02, 0x1F, 0x41, 0x14, + 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0xa5, + 0x05, 0x00, 0x80, 0x00, + /* MSSUP */ 0xAA, 0x01, /* checksum & version */ + 0xB7, 0x46, + 0x47, 0x1E, 0x00, + + + /* EFcgmi */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '>', 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 1 */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '1', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 2 */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '2', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /* MBN */ 0xAA, 0x01, /* checksum & version */ + /* EFmbn (record 1) */ + 0x4c, 0x49, 0x4e, 0x31, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x03, 0xff, + 0x12, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 2) */ + 0x4c, 0x49, 0x4e, 0x32, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x04, 0xff, + 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 3) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 4) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + /* VMN */ 0xAA, 0x01, /* checksum & version */ + 0x30, 0x33, 0x30, 0x33, 0x39, 0x30, 0x39, 0x34, //EFvmn + 0x33, 0x33, 0x36, 0x37, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x81, + + //EFclng + /* CLNG */ 0xAA, 0x01, /* checksum & version */ + 'a', 'u', + + /* SMSPRFL */ 0xAA, 0x01, /* checksum & version */ + /* EFsmsprfl record 1 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* EFsmsprfl record 2 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* PLMN */ 0xAA, 0x01, /* checksum & version */ + 0xff, 0xff, + 0xff, 0xff, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x01, 0x06, + 0x00, 0x02, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x20, 0x50, + 0x52, 0x49, + 0x56, 0x41, + 0x54, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x00, 0x00, + 0x00, 0x00, + /* BCCHINFO */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* MSSET */ 0xAA, 0x01, /* checksum & version */ + 0x20, 0x20, 0x05, /* buzzer */ + 0x24, /* audio */ + 0x00, /* miscellaneous */ + 0x89, /* display */ + 0x00, /* language */ + 0xFF, 0xFF, 0xFF, /* recentLdxRef */ + /* simlck */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x0f, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x21, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0x0f, + 0x22, 0x00, 0x22, 0x01, 0x23, 0x15, 0x22, 0x35, + 0x24, 0x25, 0x11, 0x22, 0x46, 0x55, 0x66, + 0x00, 0x00, + /* ALS */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, + /* locGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, /* P-TMSI */ + 0xFF, 0xFF, 0xFF, /* P-TMSI Signature */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, /* RAI */ + 0xFF, /* Update Status */ + /* KcGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Kc */ + 0x07, /* CKSN */ + /* IMSI-GPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, /* IMSI length */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* IMSI */ + /* SMS */ 0xAA, 0x01, /* checksum & version */ + 0x03, /* record 1: MT, unread */ + 0x04, 0x91, 0x21, 0x43, 0xF5, 0x04, 0x06, /* DELIVER_7CL1 of SMS TCs */ + 0x81, 0x89, 0x67, 0x45, 0x40, 0xF1, 0x89, 0x10, + 0x70, 0x21, 0x43, 0x65, 0x40, 0x09, 0x41, 0xE1, + 0x90, 0x58, 0x34, 0x1E, 0x91, 0x49, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x05, /* record 2: MO, sent */ + 0x04, 0x91, 0x21, 0x43, 0xF5, 0x01, 0xFF, /* MO_INIT of SMS TCs */ + 0x06, 0x91, 0x56, 0x34, 0x12, 0x40, 0xF2, 0x09, + 0x41, 0xE1, 0x90, 0x58, 0x34, 0x1E, 0x91, 0x49, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, /* record 3: empty */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +/* + * PCS 1900 Variant + */ +static UBYTE pcm_content_pcs_1900 [] = +{ + /* MSCAP */ 0xAA, 0x01, /* checksum & version */ + /*actual values supported by the MS*/ + /*0xB7, 0xC7, 0x00,*/ + 0x07, 0x47, 0x00, + 0x00, 0x00, 0x00, + /* IMEI */ 0xAA, 0x01, /* checksum & version */ + 0x31, 0x75, 0x09, + 0x42, 0x86, 0x11, + 0x22, 0x87, + /* RFCAP */ 0xAA, 0x01, /* checksum & version */ + 0x04, 0x1F, 0x41, 0x14, + 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0xa5, + 0x05, 0x00, 0x80, 0x00, + /* MSSUP */ 0xAA, 0x01, /* checksum & version */ + 0xB7, 0x46, + 0x47, 0x1F, 0x00, + + + /* EFcgmi */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '>', 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 1 */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '1', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 2 */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '2', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /* MBN */ 0xAA, 0x01, /* checksum & version */ + /* EFmbn (record 1) */ + 0x4c, 0x49, 0x4e, 0x31, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x03, 0xff, + 0x12, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 2) */ + 0x4c, 0x49, 0x4e, 0x32, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x04, 0xff, + 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 3) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 4) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + /* VMN */ 0xAA, 0x01, /* checksum & version */ + 0x30, 0x33, 0x30, 0x33, 0x39, 0x30, 0x39, 0x34, //EFvmn + 0x33, 0x33, 0x36, 0x37, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x81, + + //EFclng + /* CLNG */ 0xAA, 0x01, /* checksum & version */ + 'a', 'u', + + /* SMSPRFL */ 0xAA, 0x01, /* checksum & version */ + /* EFsmsprfl record 1 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* EFsmsprfl record 2 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* PLMN */ 0xAA, 0x01, /* checksum & version */ + 0xff, 0xff, + 0xff, 0xff, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x01, 0x06, + 0x00, 0x02, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x20, 0x50, + 0x52, 0x49, + 0x56, 0x41, + 0x54, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x00, 0x00, + 0x00, 0x00, + /* BCCHINFO */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* MSSET */ 0xAA, 0x01, /* checksum & version */ + 0x20, 0x20, 0x05, /* buzzer */ + 0x24, /* audio */ + 0x00, /* miscellaneous */ + 0x89, /* display */ + 0x00, /* language */ + 0xFF, 0xFF, 0xFF, /* recentLdxRef */ + /* simlck */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x0f, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x21, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0x0f, + 0x22, 0x00, 0x22, 0x01, 0x23, 0x15, 0x22, 0x35, + 0x24, 0x25, 0x11, 0x22, 0x46, 0x55, 0x66, + 0x00, 0x00, + /* ALS */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, + /* locGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, /* P-TMSI */ + 0xFF, 0xFF, 0xFF, /* P-TMSI Signature */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, /* RAI */ + 0xFF, /* Update Status */ + /* KcGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Kc */ + 0x07, /* CKSN */ + /* IMSI-GPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, /* IMSI length */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* IMSI */ + /* SMS */ 0xAA, 0x01, /* checksum & version */ + 0x00, /* record 1: empty */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, /* record 2: empty */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, /* record 3: empty */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +/* + * Dualband Version + */ +static UBYTE pcm_content_dualband [] = +{ + /* MSCAP */ 0xAA, 0x01, /* checksum & version */ + /*actual values supported by the MS*/ + /*0xB7, 0xC7, 0x00,*/ + 0x05, 0x45, 0x00, + 0x00, 0x00, 0x00, + /* IMEI */ 0xAA, 0x01, /* checksum & version */ + 0x31, 0x75, 0x09, + 0x42, 0x86, 0x11, + 0x22, 0x87, + /* RFCAP */ 0xAA, 0x01, /* checksum & version */ + 0x03, 0x1F, 0x41, 0x14, + 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0xa5, + 0x05, 0x00, 0x80, 0x00, + /* MSSUP */ 0xAA, 0x01, /* checksum & version */ + 0xB7, 0x46, + 0x47, 0x1F, 0x00, + + + /* EFcgmi */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '>', 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 1 */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '1', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 2 */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '2', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /* MBN */ 0xAA, 0x01, /* checksum & version */ + /* EFmbn (record 1) */ + 0x4c, 0x49, 0x4e, 0x31, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x03, 0xff, + 0x12, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 2) */ + 0x4c, 0x49, 0x4e, 0x32, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x04, 0xff, + 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 3) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 4) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + /* VMN */ 0xAA, 0x01, /* checksum & version */ + 0x30, 0x33, 0x30, 0x33, 0x39, 0x30, 0x39, 0x34, //EFvmn + 0x33, 0x33, 0x36, 0x37, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x81, + + //EFclng + /* CLNG */ 0xAA, 0x01, /* checksum & version */ + 'a', 'u', + + /* SMSPRFL */ 0xAA, 0x01, /* checksum & version */ + /* EFsmsprfl record 1 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* EFsmsprfl record 2 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* PLMN */ 0xAA, 0x01, /* checksum & version */ + 0xff, 0xff, + 0xff, 0xff, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x01, 0x06, + 0x00, 0x02, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x20, 0x50, + 0x52, 0x49, + 0x56, 0x41, + 0x54, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x00, 0x00, + 0x00, 0x00, + /* BCCHINFO */ 0xAA, 0x01, /* checksum & version */ + /*EGSM*/ + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x00, + /* MSSET */ 0xAA, 0x01, /* checksum & version */ + 0x20, 0x20, 0x05, /* buzzer */ + 0x24, /* audio */ + 0x00, /* miscellaneous */ + 0x89, /* display */ + 0x00, /* language */ + 0xFF, 0xFF, 0xFF, /* recentLdxRef */ + /* simlck */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x0f, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x21, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0x0f, + 0x22, 0x00, 0x22, 0x01, 0x23, 0x15, 0x22, 0x35, + 0x24, 0x25, 0x11, 0x22, 0x46, 0x55, 0x66, + 0x00, 0x00, + /* ALS */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, + /* locGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, /* P-TMSI */ + 0xFF, 0xFF, 0xFF, /* P-TMSI Signature */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, /* RAI */ + 0xFF, /* Update Status */ + /* KcGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Kc */ + 0x07, /* CKSN */ + /* IMSI-GPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, /* IMSI length */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* IMSI */ + /* SMS */ 0xAA, 0x01, /* checksum & version */ + 0x03, /* record 1: MT, unread */ + 0x04, 0x91, 0x21, 0x43, 0xF5, 0x04, 0x06, /* DELIVER_7CL1 of SMS TCs */ + 0x81, 0x89, 0x67, 0x45, 0x40, 0xF1, 0x89, 0x10, + 0x70, 0x21, 0x43, 0x65, 0x40, 0x09, 0x41, 0xE1, + 0x90, 0x58, 0x34, 0x1E, 0x91, 0x49, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x05, /* record 2: MO, sent */ + 0x04, 0x91, 0x21, 0x43, 0xF5, 0x01, 0xFF, /* MO_INIT of SMS TCs */ + 0x06, 0x91, 0x56, 0x34, 0x12, 0x40, 0xF2, 0x09, + 0x41, 0xE1, 0x90, 0x58, 0x34, 0x1E, 0x91, 0x49, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x07, /* record 3: MO, unsent */ + 0x04, 0x91, 0x21, 0x43, 0xF5, 0x19, 0x08, /* MO_ABS of SMS TCs */ + 0x05, 0xA1, 0x89, 0x67, 0xF5, 0x40, 0xF0, 0x89, + 0x10, 0x70, 0x21, 0x43, 0x65, 0x40, 0x09, 0xD2, + 0x29, 0xB5, 0x6A, 0xBD, 0x62, 0xB3, 0x5A, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +/* + * AMR Version + */ +static UBYTE pcm_content_amr [] = +{ + /* MSCAP */ 0xAA, 0x01, /* checksum & version */ + /*actual values supported by the MS*/ + /*0xB7, 0xC7, 0x00,*/ + 0x37, 0x47, 0x00, + 0x00, 0x00, 0x00, + /* IMEI */ 0xAA, 0x01, /* checksum & version */ + 0x31, 0x75, 0x09, + 0x42, 0x86, 0x11, + 0x22, 0x87, + /* RFCAP */ 0xAA, 0x01, /* checksum & version */ + 0x0B, 0x1F, 0x41, 0x14, + 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0xa5, + 0x05, 0x00, 0x80, 0x00, + /* MSSUP */ 0xAA, 0x01, /* checksum & version */ + 0xB7, 0x46, + 0x47, 0x1F, 0x00, + + + /* EFcgmi */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '>', 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 1 */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '1', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 2 */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '2', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /* MBN */ 0xAA, 0x01, /* checksum & version */ + /* EFmbn (record 1) */ + 0x4c, 0x49, 0x4e, 0x31, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x03, 0xff, + 0x12, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 2) */ + 0x4c, 0x49, 0x4e, 0x32, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x04, 0xff, + 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 3) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 4) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + /* VMN */ 0xAA, 0x01, /* checksum & version */ + 0x30, 0x33, 0x30, 0x33, 0x39, 0x30, 0x39, 0x34, //EFvmn + 0x33, 0x33, 0x36, 0x37, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x81, + + //EFclng + /* CLNG */ 0xAA, 0x01, /* checksum & version */ + 'a', 'u', + + /* SMSPRFL */ 0xAA, 0x01, /* checksum & version */ + /* EFsmsprfl record 1 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* EFsmsprfl record 2 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* PLMN */ 0xAA, 0x01, /* checksum & version */ + 0xff, 0xff, + 0xff, 0xff, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x01, 0x06, + 0x00, 0x02, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x20, 0x50, + 0x52, 0x49, + 0x56, 0x41, + 0x54, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x00, 0x00, + 0x00, 0x00, + /* BCCHINFO */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* MSSET */ 0xAA, 0x01, /* checksum & version */ + 0x20, 0x20, 0x05, /* buzzer */ + 0x24, /* audio */ + 0x00, /* miscellaneous */ + 0x89, /* display */ + 0x00, /* language */ + 0xFF, 0xFF, 0xFF, /* recentLdxRef */ + /* simlck */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x0f, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x21, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0x0f, + 0x22, 0x00, 0x22, 0x01, 0x23, 0x15, 0x22, 0x35, + 0x24, 0x25, 0x11, 0x22, 0x46, 0x55, 0x66, + 0x00, 0x00, + /* ALS */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, + /* locGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, /* P-TMSI */ + 0xFF, 0xFF, 0xFF, /* P-TMSI Signature */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, /* RAI */ + 0xFF, /* Update Status */ + /* KcGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Kc */ + 0x07, /* CKSN */ + /* IMSI-GPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, /* IMSI length */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* IMSI */ +}; + +/* + * Dualband Extended Version (GSM 900 + E-GSM + DCS 1800) + */ +static UBYTE pcm_content_dualband_ext [] = +{ + /* MSCAP */ 0xAA, 0x01, /* checksum & version */ + /*actual values supported by the MS*/ + /*0xB7, 0xC7, 0x00,*/ + 0x05, 0xC7, 0x80, + 0x00, 0x00, 0x00, + /* IMEI */ 0xAA, 0x01, /* checksum & version */ + 0x31, 0x75, 0x09, + 0x42, 0x86, 0x11, + 0x22, 0x87, + /* RFCAP */ 0xAA, 0x01, /* checksum & version */ + 0x0B, 0x1F, 0x41, 0x14, + 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0xa5, + 0x05, 0x00, 0x80, 0x00, + /* MSSUP */ 0xAA, 0x01, /* checksum & version */ + 0xB7, 0x46, + 0x47, 0x1E, 0x00, + + + /* EFcgmi */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '>', 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 1 */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '1', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 2 */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '2', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /* MBN */ 0xAA, 0x01, /* checksum & version */ + /* EFmbn (record 1) */ + 0x4c, 0x49, 0x4e, 0x31, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x03, 0xff, + 0x12, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 2) */ + 0x4c, 0x49, 0x4e, 0x32, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x04, 0xff, + 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 3) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 4) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + /* VMN */ 0xAA, 0x01, /* checksum & version */ + 0x30, 0x33, 0x30, 0x33, 0x39, 0x30, 0x39, 0x34, //EFvmn + 0x33, 0x33, 0x36, 0x37, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x81, + + //EFclng + /* CLNG */ 0xAA, 0x01, /* checksum & version */ + 'a', 'u', + + /* SMSPRFL */ 0xAA, 0x01, /* checksum & version */ + /* EFsmsprfl record 1 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* EFsmsprfl record 2 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* PLMN */ 0xAA, 0x01, /* checksum & version */ + 0xff, 0xff, + 0xff, 0xff, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x01, 0x06, + 0x00, 0x02, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x20, 0x50, + 0x52, 0x49, + 0x56, 0x41, + 0x54, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x00, 0x00, + 0x00, 0x00, +#define NEW_STORED_BCCHINFO +#if defined(NEW_STORED_BCCHINFO) + /* BCCHINFO */ 0xAA, 0x01, /* checksum & version */ + /*EGSM*/ + 0x8f, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, /* 527 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x43, 0x43, 0x48, /* MAGIC_WORD_BCCHINFO (new format) */ + 0x00, 0x00, /* superfluous */ +#else /* NEW_STORED_BCCHINFO */ + /* BCCHINFO */ 0xAA, 0x01, /* checksum & version */ + /*EGSM*/ + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x00, +#endif /* NEW_STORED_BCCHINFO */ + /* MSSET */ 0xAA, 0x01, /* checksum & version */ + 0x20, 0x20, 0x05, /* buzzer */ + 0x24, /* audio */ + 0x00, /* miscellaneous */ + 0x89, /* display */ + 0x00, /* language */ + 0xFF, 0xFF, 0xFF, /* recentLdxRef */ + /* simlck */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x0f, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x21, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0x0f, + 0x22, 0x00, 0x22, 0x01, 0x23, 0x15, 0x22, 0x35, + 0x24, 0x25, 0x11, 0x22, 0x46, 0x55, 0x66, + 0x00, 0x00, + /* ALS */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, + /* locGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, /* P-TMSI */ + 0xFF, 0xFF, 0xFF, /* P-TMSI Signature */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, /* RAI */ + 0xFF, /* Update Status */ + /* KcGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Kc */ + 0x07, /* CKSN */ + /* IMSI-GPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, /* IMSI length */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* IMSI */ +}; + + /* + * Single band GSm 850 US Version + */ +static UBYTE pcm_content_gsm_850 [] = +{ + /* MSCAP */ 0xAA, 0x01, /* checksum & version */ + /*actual values supported by the MS*/ + /*0xB7, 0xC7, 0x00,*/ + 0x07, 0x45, 0x00, + 0x00, 0x00, 0x00, + /* IMEI */ 0xAA, 0x01, /* checksum & version */ + 0x31, 0x75, 0x09, + 0x42, 0x86, 0x11, + 0x22, 0x87, + /* RFCAP */ 0xAA, 0x01, /* checksum & version */ + 0x10, 0x1F, 0x41, 0x14, + 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0xa5, + 0x05, 0x00, 0x80, 0x00, + /* MSSUP */ 0xAA, 0x01, /* checksum & version */ + 0xB7, 0x46, + 0x47, 0x1F, 0x00, + + + /* EFcgmi */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '>', 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 1 */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '1', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 2 */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '2', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /* MBN */ 0xAA, 0x01, /* checksum & version */ + /* EFmbn (record 1) */ + 0x4c, 0x49, 0x4e, 0x31, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x03, 0xff, + 0x12, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 2) */ + 0x4c, 0x49, 0x4e, 0x32, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x04, 0xff, + 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 3) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 4) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + /* VMN */ 0xAA, 0x01, /* checksum & version */ + 0x30, 0x33, 0x30, 0x33, 0x39, 0x30, 0x39, 0x34, //EFvmn + 0x33, 0x33, 0x36, 0x37, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x81, + + /* EFclng */ + /* CLNG */ 0xAA, 0x01, /* checksum & version */ + 'a', 'u', + + /* SMSPRFL */ 0xAA, 0x01, /* checksum & version */ + /* EFsmsprfl record 1 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* EFsmsprfl record 2 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* PLMN */ 0xAA, 0x01, /* checksum & version */ + 0x02, 0x2B, + 0x00, 0x37, + 0x54, 0x52, + 0x49, 0x50, + 0x4c, 0x45, + 0x2d, 0x20, + 0x54, 0x45, + 0x4C, 0x45, + 0x4B, 0x4F, + 0x4D, 0x20, + 0x00, 0x00, + 0x00, 0x00, + 0x54, 0x52, + 0x49, 0x50, + 0x4c, 0x45, + 0x00, 0x00, + 0x00, 0x00, + 0x01, 0x06, + 0x00, 0x02, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x20, 0x50, + 0x52, 0x49, + 0x56, 0x41, + 0x54, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x00, 0x00, + 0x00, 0x00, + /* BCCHINFO */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , + /* MSSET */ 0xAA, 0x01, /* checksum & version */ + 0x20, 0x20, 0x05, /* buzzer */ + 0x24, /* audio */ + 0x00, /* miscellaneous */ + 0x89, /* display */ + 0x00, /* language */ + 0xFF, 0xFF, 0xFF, /* recentLdxRef */ + /* simlck */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x0f, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x21, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0x0f, + 0x22, 0x00, 0x22, 0x01, 0x23, 0x15, 0x22, 0x35, + 0x24, 0x25, 0x11, 0x22, 0x46, 0x55, 0x66, + 0x00, 0x00, + /* ALS */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, + /* locGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, /* P-TMSI */ + 0xFF, 0xFF, 0xFF, /* P-TMSI Signature */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, /* RAI */ + 0xFF, /* Update Status */ + /* KcGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Kc */ + 0x07, /* CKSN */ + /* IMSI-GPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, /* IMSI length */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* IMSI */ +}; + /* + * Dualband US Version + */ +static UBYTE pcm_content_dual_us [] = +{ + /* MSCAP */ 0xAA, 0x01, /* checksum & version */ + /*actual values supported by the MS*/ + /*0xB7, 0xC7, 0x00,*/ + 0x07, 0x45, 0x00, + 0x00, 0x00, 0x00, + /* IMEI */ 0xAA, 0x01, /* checksum & version */ + 0x31, 0x75, 0x09, + 0x42, 0x86, 0x11, + 0x22, 0x87, + /* RFCAP */ 0xAA, 0x01, /* checksum & version */ + 0x14, 0x1F, 0x41, 0x14, + 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0xa5, + 0x05, 0x00, 0x80, 0x00, + /* MSSUP */ 0xAA, 0x01, /* checksum & version */ + 0xB7, 0x46, + 0x47, 0x1F, 0x00, + + + /* EFcgmi */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '>', 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 1 */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '1', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 2 */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '2', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /* MBN */ 0xAA, 0x01, /* checksum & version */ + /* EFmbn (record 1) */ + 0x4c, 0x49, 0x4e, 0x31, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x03, 0xff, + 0x12, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 2) */ + 0x4c, 0x49, 0x4e, 0x32, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x04, 0xff, + 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 3) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 4) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + /* VMN */ 0xAA, 0x01, /* checksum & version */ + 0x30, 0x33, 0x30, 0x33, 0x39, 0x30, 0x39, 0x34, //EFvmn + 0x33, 0x33, 0x36, 0x37, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x81, + + /* EFclng */ + /* CLNG */ 0xAA, 0x01, /* checksum & version */ + 'a', 'u', + + /* SMSPRFL */ 0xAA, 0x01, /* checksum & version */ + /* EFsmsprfl record 1 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* EFsmsprfl record 2 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* PLMN */ 0xAA, 0x01, /* checksum & version */ + 0x02, 0x2B, + 0x00, 0x37, + 0x54, 0x52, + 0x49, 0x50, + 0x4c, 0x45, + 0x2d, 0x20, + 0x54, 0x45, + 0x4C, 0x45, + 0x4B, 0x4F, + 0x4D, 0x20, + 0x00, 0x00, + 0x00, 0x00, + 0x54, 0x52, + 0x49, 0x50, + 0x4c, 0x45, + 0x00, 0x00, + 0x00, 0x00, + 0x01, 0x06, + 0x00, 0x02, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x20, 0x50, + 0x52, 0x49, + 0x56, 0x41, + 0x54, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x00, 0x00, + 0x00, 0x00, + /* BCCHINFO */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , + /* MSSET */ 0xAA, 0x01, /* checksum & version */ + 0x20, 0x20, 0x05, /* buzzer */ + 0x24, /* audio */ + 0x00, /* miscellaneous */ + 0x89, /* display */ + 0x00, /* language */ + 0xFF, 0xFF, 0xFF, /* recentLdxRef */ + /* simlck */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x0f, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x21, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0x0f, + 0x22, 0x00, 0x22, 0x01, 0x23, 0x15, 0x22, 0x35, + 0x24, 0x25, 0x11, 0x22, 0x46, 0x55, 0x66, + 0x00, 0x00, + /* ALS */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, + /* locGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, /* P-TMSI */ + 0xFF, 0xFF, 0xFF, /* P-TMSI Signature */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, /* RAI */ + 0xFF, /* Update Status */ + /* KcGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Kc */ + 0x07, /* CKSN */ + /* IMSI-GPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, /* IMSI length */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* IMSI */ +}; +/* + * Quadband Version + */ +static UBYTE pcm_content_quadband [] = +{ + /* MSCAP */ 0xAA, 0x01, /* checksum & version */ + /*actual values supported by the MS*/ + /*0xB7, 0xC7, 0x00,*/ + 0x07, 0x45, 0x00, + 0x00, 0x00, 0x00, + /* IMEI */ 0xAA, 0x01, /* checksum & version */ + 0x31, 0x75, 0x09, + 0x42, 0x86, 0x11, + 0x22, 0x87, + /* RFCAP */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x1F, 0x41, 0x14, + 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0xa5, + 0x05, 0x00, 0x80, 0x00, + /* MSSUP */ 0xAA, 0x01, /* checksum & version */ + 0xB7, 0x46, + 0x47, 0x1F, 0x00, + + + /* EFcgmi */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '>', 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 1 */ 0xAA, 0x01, /* checksum & version */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '1', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /*Iden. Information 2 */ + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', + 't', 'u', 'r', 'e', 'r', '2', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + /* MBN */ 0xAA, 0x01, /* checksum & version */ + /* EFmbn (record 1) */ + 0x4c, 0x49, 0x4e, 0x31, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x03, 0xff, + 0x12, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 2) */ + 0x4c, 0x49, 0x4e, 0x32, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x04, 0xff, + 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 3) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + /* EFmbn (record 4) */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + /* VMN */ 0xAA, 0x01, /* checksum & version */ + 0x30, 0x33, 0x30, 0x33, 0x39, 0x30, 0x39, 0x34, //EFvmn + 0x33, 0x33, 0x36, 0x37, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x81, + + /* EFclng */ + /* CLNG */ 0xAA, 0x01, /* checksum & version */ + 'a', 'u', + + /* SMSPRFL */ 0xAA, 0x01, /* checksum & version */ + /* EFsmsprfl record 1 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* EFsmsprfl record 2 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* PLMN */ 0xAA, 0x01, /* checksum & version */ + 0x02, 0x2B, + 0x00, 0x37, + 0x54, 0x52, + 0x49, 0x50, + 0x4c, 0x45, + 0x2d, 0x20, + 0x54, 0x45, + 0x4C, 0x45, + 0x4B, 0x4F, + 0x4D, 0x20, + 0x00, 0x00, + 0x00, 0x00, + 0x54, 0x52, + 0x49, 0x50, + 0x4c, 0x45, + 0x00, 0x00, + 0x00, 0x00, + 0x01, 0x06, + 0x00, 0x02, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x20, 0x50, + 0x52, 0x49, + 0x56, 0x41, + 0x54, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x44, 0x2D, + 0x5A, 0x57, + 0x45, 0x49, + 0x00, 0x00, + 0x00, 0x00, + /* BCCHINFO */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , + /* MSSET */ 0xAA, 0x01, /* checksum & version */ + 0x20, 0x20, 0x05, /* buzzer */ + 0x24, /* audio */ + 0x00, /* miscellaneous */ + 0x89, /* display */ + 0x00, /* language */ + 0xFF, 0xFF, 0xFF, /* recentLdxRef */ + /* simlck */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, 0x00, 0x0f, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x21, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, + 0x0f, + 0x22, 0x00, 0x22, 0x01, 0x23, 0x15, 0x22, 0x35, + 0x24, 0x25, 0x11, 0x22, 0x46, 0x55, 0x66, + 0x00, 0x00, + /* ALS */ 0xAA, 0x01, /* checksum & version */ + 0x00, 0x00, + /* locGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, /* P-TMSI */ + 0xFF, 0xFF, 0xFF, /* P-TMSI Signature */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, /* RAI */ + 0xFF, /* Update Status */ + /* KcGPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Kc */ + 0x07, /* CKSN */ + /* IMSI-GPRS */ 0xAA, 0x01, /* checksum & version */ + 0xFF, /* IMSI length */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* IMSI */ +}; + + +typedef struct +{ + char * identifier; + USHORT start; + USHORT length; + USHORT records; +} T_PCM_DESCRIPTION; + +#define LEN_MSCAP (SIZE_EF_MSCAP * NR_EF_MSCAP + 2) +#define LEN_IMEI (SIZE_EF_IMEI * NR_EF_IMEI + 2) +#define LEN_RFCAP (SIZE_EF_RFCAP * NR_EF_RFCAP + 2) +#define LEN_MSSUP (SIZE_EF_MSSUP * NR_EF_MSSUP + 2) +#define LEN_CGMI (SIZE_EF_CGMI * NR_EF_CGMI + 2) +#define LEN_INF0 (SIZE_EF_INF0 * NR_EF_INF0 + 2) +#define LEN_MBN (SIZE_EF_MBN * NR_EF_MBN + 2) +#define LEN_VMN (SIZE_EF_VMN * NR_EF_VMN + 2) +#define LEN_CLNG (SIZE_EF_CLNG * NR_EF_CLNG + 2) + +#define LEN_SMSPRFL (SIZE_EF_SMSPRFL * NR_EF_SMSPRFL+ 2) +#define LEN_PLMN (SIZE_EF_PLMN * NR_EF_PLMN + 2) +#define LEN_BCCHINFO (SIZE_EF_BCCHINFO * NR_EF_BCCHINFO+ 2) +#define LEN_MSSET (SIZE_EF_MSSET * NR_EF_MSSET + 2) +#define LEN_SIMLCK (SIZE_EF_SIMLCK * NR_EF_SIMLCK + 2) // VO +#define LEN_ALS (SIZE_EF_ALS * NR_EF_ALS + 2) +#define LEN_LOCGPRS (SIZE_EF_LOCGPRS * NR_EF_LOCGPRS + 2) +#define LEN_KCGPRS (SIZE_EF_KCGPRS * NR_EF_KCGPRS + 2) +#define LEN_IMSIGPRS (SIZE_EF_IMSIGPRS * NR_EF_IMSIGPRS + 2) +/* only present for STD = 3 and 4 */ +#define LEN_EF_SMS (SIZE_EF_SMS * NR_EF_SMS + 2) + +#define START_MSCAP 0 +#define START_IMEI (START_MSCAP + LEN_MSCAP) +#define START_RFCAP (START_IMEI + LEN_IMEI) +#define START_MSSUP (START_RFCAP + LEN_RFCAP) +#define START_CGMI (START_MSSUP + LEN_MSSUP) +#define START_INF0 (START_CGMI + LEN_CGMI) +#define START_MBN (START_INF0 + LEN_INF0) +#define START_VMN (START_MBN + LEN_MBN) +#define START_CLNG (START_VMN + LEN_VMN) +#define START_SMSPRFL (START_CLNG + LEN_CLNG) +#define START_PLMN (START_SMSPRFL + LEN_SMSPRFL) +#define START_BCCHINFO (START_PLMN + LEN_PLMN) +#define START_MSSET (START_BCCHINFO + LEN_BCCHINFO) +#define START_SIMLCK (START_MSSET + LEN_MSSET) // VO +#define START_ALS (START_SIMLCK + LEN_SIMLCK) +#define START_LOCGPRS (START_ALS + LEN_ALS) +#define START_KCGPRS (START_LOCGPRS + LEN_LOCGPRS) +#define START_IMSIGPRS (START_KCGPRS + LEN_KCGPRS) + +#define PCM_SIZE (START_IMSIGPRS + LEN_IMSIGPRS) +/* only present for STD = 3 and 4 */ +#define START_SMS (START_IMSIGPRS + LEN_IMSIGPRS) +#define PCM_SIZE_SMS (START_SMS + LEN_EF_SMS) + +#define PCM_SIZE_MAX (PCM_SIZE_SMS) + +/* + * RAM for the copy of PCM data + */ +static UBYTE pcm_mem [PCM_SIZE_MAX]; + +/* + * Default description table + */ +static const T_PCM_DESCRIPTION pcm_table_def[] = +{ +{ "MSCAP" , START_MSCAP, SIZE_EF_MSCAP +2, NR_EF_MSCAP }, +{ "IMEI" , START_IMEI, SIZE_EF_IMEI +2, NR_EF_IMEI }, +{ "RFCAP" , START_RFCAP, SIZE_EF_RFCAP +2, NR_EF_RFCAP }, +{ "MSSUP" , START_MSSUP, SIZE_EF_MSSUP +2, NR_EF_MSSUP }, +{ "CGMI" , START_CGMI, SIZE_EF_CGMI +2, NR_EF_CGMI }, +{ "INF0" , START_INF0, SIZE_EF_INF0 +2, NR_EF_INF0 }, +{ "MBN" , START_MBN, SIZE_EF_MBN +2, NR_EF_MBN }, +{ "VMN" , START_VMN, SIZE_EF_VMN +2, NR_EF_VMN }, +{ "CLNG" , START_CLNG, SIZE_EF_CLNG +2, NR_EF_CLNG }, + +{ "SMSPRFL" , START_SMSPRFL, SIZE_EF_SMSPRFL +2, NR_EF_SMSPRFL }, +{ "PLMN" , START_PLMN, SIZE_EF_PLMN +2, NR_EF_PLMN }, +{ "BCCHINF" , START_BCCHINFO, SIZE_EF_BCCHINFO+2, NR_EF_BCCHINFO }, +{ "MSSET" , START_MSSET, SIZE_EF_MSSET +2, NR_EF_MSSET }, +{ "SIMLCK" , START_SIMLCK, SIZE_EF_SIMLCK +2, NR_EF_SIMLCK }, // VO +{ "ALS" , START_ALS, SIZE_EF_ALS +2, NR_EF_ALS }, +{ "LOCGPRS" , START_LOCGPRS, SIZE_EF_LOCGPRS +2, NR_EF_LOCGPRS }, +{ "KCGPRS" , START_KCGPRS, SIZE_EF_KCGPRS +2, NR_EF_KCGPRS }, +{ "IMSIGPRS", START_IMSIGPRS, SIZE_EF_IMSIGPRS+2, NR_EF_IMSIGPRS }, +{ NULL , 0, 0, 0 } +}; + +/* + * Description table with SMS memory + */ +static const T_PCM_DESCRIPTION pcm_table_sms[] = +{ +{ "MSCAP" , START_MSCAP, SIZE_EF_MSCAP +2, NR_EF_MSCAP }, +{ "IMEI" , START_IMEI, SIZE_EF_IMEI +2, NR_EF_IMEI }, +{ "RFCAP" , START_RFCAP, SIZE_EF_RFCAP +2, NR_EF_RFCAP }, +{ "MSSUP" , START_MSSUP, SIZE_EF_MSSUP +2, NR_EF_MSSUP }, +{ "CGMI" , START_CGMI, SIZE_EF_CGMI +2, NR_EF_CGMI }, +{ "INF0" , START_INF0, SIZE_EF_INF0 +2, NR_EF_INF0 }, +{ "MBN" , START_MBN, SIZE_EF_MBN +2, NR_EF_MBN }, +{ "VMN" , START_VMN, SIZE_EF_VMN +2, NR_EF_VMN }, +{ "CLNG" , START_CLNG, SIZE_EF_CLNG +2, NR_EF_CLNG }, + +{ "SMSPRFL" , START_SMSPRFL, SIZE_EF_SMSPRFL +2, NR_EF_SMSPRFL }, +{ "PLMN" , START_PLMN, SIZE_EF_PLMN +2, NR_EF_PLMN }, +{ "BCCHINF" , START_BCCHINFO, SIZE_EF_BCCHINFO+2, NR_EF_BCCHINFO }, +{ "MSSET" , START_MSSET, SIZE_EF_MSSET +2, NR_EF_MSSET }, +{ "SIMLCK" , START_SIMLCK, SIZE_EF_SIMLCK +2, NR_EF_SIMLCK }, // VO +{ "ALS" , START_ALS, SIZE_EF_ALS +2, NR_EF_ALS }, +{ "LOCGPRS" , START_LOCGPRS, SIZE_EF_LOCGPRS +2, NR_EF_LOCGPRS }, +{ "KCGPRS" , START_KCGPRS, SIZE_EF_KCGPRS +2, NR_EF_KCGPRS }, +{ "IMSIGPRS", START_IMSIGPRS, SIZE_EF_IMSIGPRS+2, NR_EF_IMSIGPRS }, +{ EF_SMS_ID , START_SMS, SIZE_EF_SMS +2, NR_EF_SMS }, +{ NULL , 0, 0, 0 } +}; + +static const T_PCM_DESCRIPTION *pcm_table; + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_PCM | +| STATE : code ROUTINE : pcm_Init | ++--------------------------------------------------------------------+ + + PURPOSE : Open the permanent configuration memory + +*/ + +GLOBAL UBYTE pcm_Init (void) +{ + if (!pcm_read OR std NEQ act_std) + { + switch (std) + { + case 1: /* GSM 900 */ + TRACE_EVENT ("std=1: GSM 900"); + memcpy (pcm_mem, pcm_content_gsm_900, sizeof (pcm_content_gsm_900)); + pcm_table = pcm_table_def; + break; + case 3: /* PCS 1900 */ + TRACE_EVENT ("std=3: PCS 1900"); + memcpy (pcm_mem, pcm_content_pcs_1900, sizeof (pcm_content_pcs_1900)); + pcm_table = pcm_table_sms; + break; + case 4: /* DCS 1800 */ + TRACE_EVENT ("std=4: DCS 1800"); + memcpy (pcm_mem, pcm_content_dcs_1800, sizeof (pcm_content_dcs_1800)); + pcm_table = pcm_table_sms; + break; + case 5: /* Dualband */ + TRACE_EVENT ("std=5: DUALBAND"); + memcpy (pcm_mem, pcm_content_dualband, sizeof (pcm_content_dualband)); + pcm_table = pcm_table_sms; + break; + case 6: /* Dualband Extended*/ + TRACE_EVENT ("std=6: DUALBAND EXTENDED"); + memcpy (pcm_mem, pcm_content_dualband_ext, sizeof (pcm_content_dualband_ext)); + pcm_table = pcm_table_def; + break; + case 7: /* GSM 850 */ + TRACE_EVENT ("std=7: GSM 850 (same as GSM 900)"); + memcpy (pcm_mem, pcm_content_gsm_850, sizeof (pcm_content_gsm_850)); + pcm_table = pcm_table_def; + break; + case 8: /* DUALBAND US (GSM 850 + PCS 1900) */ + TRACE_EVENT ("std=8: DUALBAND US (GSM 850 + PCS 1900)"); + memcpy (pcm_mem, pcm_content_dual_us, sizeof (pcm_content_dual_us)); + pcm_table = pcm_table_def; + break; + case 30: /* AMR*/ + TRACE_EVENT ("std=30: AMR"); + memcpy (pcm_mem, pcm_content_amr, sizeof (pcm_content_amr)); + pcm_table = pcm_table_def; + break; + case 33: /* QUADBAND (GSM 850, GSM 900, E-GSM, DCS 1800, PCS 1900) */ + TRACE_EVENT ("std=33: QUADBAND"); + memcpy (pcm_mem, pcm_content_quadband, sizeof (pcm_content_quadband)); + pcm_table = pcm_table_def; + break; + default: + TRACE_EVENT_P1 ("std=%d: unknown configuration", std); + TRACE_ERROR ("NO valid PCM configuration!"); + break; + } + pcm_read = TRUE; + act_std = std; + return DRV_OK; + } + return DRV_INITIALIZED; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_PCM | +| STATE : code ROUTINE : pcm_Exit | ++--------------------------------------------------------------------+ + + PURPOSE : Closes the permanent configuration memory + +*/ + +GLOBAL void pcm_Exit (void) +{ + pcm_Flush (); + pcm_read = FALSE; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_PCM | +| STATE : code ROUTINE : pcm_ReadFile | ++--------------------------------------------------------------------+ + + PURPOSE : Read a transparent elementary field + +*/ + +GLOBAL UBYTE pcm_ReadFile (UBYTE * in_FileName, + USHORT in_BufferSize, + UBYTE * out_BufferPtr, + UBYTE * out_VersionPtr) +{ + UBYTE i; + + pcm_Init (); + + i = 0; + while (pcm_table[i].identifier NEQ NULL) + { + /* + * Check all available entries + */ + if (!strcmp ((char *)in_FileName, pcm_table[i].identifier)) + { + /* + * entry is available, check size + * buffer size + version + checksum must be equal entry length + */ + if (in_BufferSize+2 NEQ pcm_table[i].length) + return PCM_INVALID_SIZE; + /* + * Checksum is not checked + * copy buffer and version + */ + memcpy (out_BufferPtr, &pcm_mem [pcm_table[i].start+2], + in_BufferSize); + *out_VersionPtr = pcm_mem[pcm_table[i].start+1]; + return DRV_OK; + } + i++; + } + return PCM_INVALID_FILE; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_PCM | +| STATE : code ROUTINE : pcm_GetFileInfo | ++--------------------------------------------------------------------+ + + PURPOSE : Get information about a dedicated file. + +*/ + +GLOBAL UBYTE pcm_GetFileInfo (UBYTE * in_FileName, + pcm_FileInfo_Type * out_FileInfoPtr) +{ + UBYTE i; + + pcm_Init (); + + i = 0; + while (pcm_table[i].identifier NEQ NULL) + { + /* + * Check all available entries + */ + if (!strcmp ((char *)in_FileName, pcm_table[i].identifier)) + { + /* + * entry is available, + * fill file info + */ + out_FileInfoPtr->FileLocation = &pcm_mem [pcm_table[i].start+2]; + out_FileInfoPtr->FileSize = pcm_table[i].length-2; + out_FileInfoPtr->Version = pcm_mem [pcm_table[i].start+1]; + return DRV_OK; + } + i++; + } + return PCM_INVALID_FILE; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_PCM | +| STATE : code ROUTINE : pcm_ReadRecord | ++--------------------------------------------------------------------+ + + PURPOSE : Read a linear fixed elementary field + +*/ + +GLOBAL UBYTE pcm_ReadRecord (UBYTE * in_FileName, + USHORT in_Record, + USHORT in_BufferSize, + UBYTE * out_BufferPtr, + UBYTE * out_VersionPtr, + USHORT * out_MaxRecordsPtr) +{ + UBYTE i; + + pcm_Init (); + + i = 0; + while (pcm_table[i].identifier NEQ NULL) + { + /* + * check whether entry is available + */ + if (!strcmp ((char *)in_FileName, pcm_table[i].identifier)) + { + /* + * entry is available, check size + */ + if (in_BufferSize+2 NEQ pcm_table[i].length) + return PCM_INVALID_SIZE; + /* + * check record number + */ + if (in_Record EQ 0 OR + in_Record > pcm_table[i].records) + return PCM_INVALID_RECORD; + + /* + * copy record content + * read version number and max records + */ + memcpy (out_BufferPtr, &pcm_mem [pcm_table[i].start+2+(in_Record-1) * in_BufferSize], + in_BufferSize); + * out_MaxRecordsPtr = pcm_table[i].records; + * out_VersionPtr = pcm_mem [pcm_table[i].start+1]; + return DRV_OK; + } + i++; + } + return PCM_INVALID_FILE; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_PCM | +| STATE : code ROUTINE : pcm_WriteFile | ++--------------------------------------------------------------------+ + + PURPOSE : Write a transparent elementary field + +*/ + +GLOBAL UBYTE pcm_WriteFile (UBYTE * in_FileName, + USHORT in_FileSize, + UBYTE * in_BufferPtr) +{ + UBYTE i; + + pcm_Init (); + + i = 0; + while (pcm_table[i].identifier NEQ NULL) + { + /* + * check whether entry is available + */ + if (!strcmp ((char *)in_FileName, pcm_table[i].identifier)) + { + /* + * check file size + */ + if (in_FileSize+2 NEQ pcm_table[i].length) + return PCM_INVALID_SIZE; + /* + * store new buffer content + */ + memcpy (&pcm_mem [pcm_table[i].start+2], in_BufferPtr, + in_FileSize); + return DRV_OK; + } + i++; + } + return PCM_INVALID_FILE; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_PCM | +| STATE : code ROUTINE : pcm_WriteRecord | ++--------------------------------------------------------------------+ + + PURPOSE : Write a linear fixed elementary field + +*/ + +GLOBAL UBYTE pcm_WriteRecord (UBYTE * in_FileName, + USHORT in_Record, + USHORT in_BufferSize, + UBYTE * in_BufferPtr) +{ + UBYTE i; + + pcm_Init (); + + i = 0; + while (pcm_table[i].identifier NEQ NULL) + { + /* + * check all available entries + */ + if (!strcmp ((char *)in_FileName, pcm_table[i].identifier)) + { + /* + * entry is available, + * check entry size + */ + if (in_BufferSize+2 NEQ pcm_table[i].length) + return PCM_INVALID_SIZE; + /* + * check record number + */ + if (in_Record EQ 0 OR + in_Record > pcm_table[i].records) + return PCM_INVALID_RECORD; + + /* + * store data in record + */ + memcpy (&pcm_mem [pcm_table[i].start+2+ + (in_Record-1) * in_BufferSize], + in_BufferPtr, + in_BufferSize); + return DRV_OK; + } + i++; + } + return PCM_INVALID_FILE; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_PCM | +| STATE : code ROUTINE : pcm_Flush | ++--------------------------------------------------------------------+ + + PURPOSE : Transfer changes to the PCM of the non volatile RAM. + +*/ + +GLOBAL UBYTE pcm_Flush (void) +{ + if (pcm_read) + { + TRACE_EVENT_P1 ("pcm_flush: std=%d", std); + switch (std) + { + case 1: /* GSM 900 */ + memcpy (pcm_content_gsm_900, pcm_mem, sizeof (pcm_content_gsm_900)); + break; + case 3: /* PCS 1900 */ + memcpy (pcm_content_pcs_1900, pcm_mem, sizeof (pcm_content_pcs_1900)); + break; + case 4: /* DCS 1800 */ + memcpy (pcm_content_dcs_1800, pcm_mem, sizeof (pcm_content_dcs_1800)); + break; + case 5: /* Dualband */ + memcpy (pcm_content_dualband, pcm_mem, sizeof (pcm_content_dualband)); + break; + case 6: /* Dualband Extended */ + memcpy (pcm_content_dualband_ext, pcm_mem, sizeof (pcm_content_dualband_ext)); + break; + case 7: /* GSM 850 */ + memcpy (pcm_content_gsm_900, pcm_mem, sizeof (pcm_content_gsm_900)); + break; + case 8: /* DUALBAND US (GSM 850 + PCS 1900) */ + memcpy (pcm_content_dual_us, pcm_mem, sizeof (pcm_content_dual_us)); + break; + case 30: /* AMR*/ + memcpy (pcm_content_amr, pcm_mem, sizeof (pcm_content_amr)); + break; + case 33: /* QUADBAND (GSM 850, GSM 900, E-GSM, DCS 1800, PCS 1900) */ + memcpy (pcm_content_quadband, pcm_mem, sizeof (pcm_content_quadband)); + break; + default: + TRACE_EVENT_P1 ("std=%d: unknown configuration", std); + TRACE_ERROR ("NO valid PCM configuration!"); + break; + } + } + return DRV_OK; +} + +#else /* ifdef win32*/ + + +/*==== INCLUDES ===================================================*/ + +#include <string.h> +#include "stddefs.h" +#include "gdi.h" +#include "pcm.h" +#include "pcm_amd.h" + + + +/*==== VARIABLES ==================================================*/ + +/* + * Flag whether the 'flash content' is read + */ +static UBYTE pcm_read; + +UBYTE std; +// set treshold for initial power measurements (= -106 dBm) +USHORT min_rxlev = 20; + +typedef struct +{ + char * identifier; + USHORT start; + USHORT length; + USHORT records; +} T_PCM_DESCRIPTION; + +#define LEN_MSCAP (NR_EF_MSCAP * SIZE_EF_MSCAP) + 2 +#define LEN_IMEI (NR_EF_IMEI * SIZE_EF_IMEI) + 2 +#define LEN_IMSI (NR_EF_IMSI * SIZE_EF_IMSI) + 2 +#define LEN_SMS (NR_EF_SMS * SIZE_EF_SMS) + 2 +#define LEN_CLASS2 (NR_EF_CLASS2 * SIZE_EF_CLASS2) + 2 +#define LEN_CLASS3 (NR_EF_CLASS3 * SIZE_EF_CLASS3) + 2 +#define LEN_MSSUP (NR_EF_MSSUP * SIZE_EF_MSSUP) + 2 +#define LEN_MSSET (NR_EF_MSSET * SIZE_EF_MSSET) + 2 +// Jun 14, 2005 REF: MMI-FIX-30439 x0018858 +#define LEN_HZCACHE (NR_EF_HZCACHE * SIZE_EF_HZCACHE) + 2 +#define LEN_LDN (NR_EF_LDN * SIZE_EF_LDN) + 2 +#define LEN_LRN (NR_EF_LRN * SIZE_EF_LRN) + 2 +#define LEN_LMN (NR_EF_LMN * SIZE_EF_LMN) + 2 +#define LEN_UPN (NR_EF_UPN * SIZE_EF_UPN) + 2 +#define LEN_MBN (NR_EF_MBN * SIZE_EF_MBN) + 2 +#define LEN_VMN (NR_EF_VMN * SIZE_EF_VMN) + 2 +#define LEN_CLNG (NR_EF_CLNG * SIZE_EF_CLNG) + 2 +#define LEN_CTIM (NR_EF_CTIM * SIZE_EF_CTIM) + 2 +#define LEN_CCNT (NR_EF_CCNT * SIZE_EF_CCNT) + 2 +#define LEN_ECC (NR_EF_ECC * SIZE_EF_ECC) + 2 +#define LEN_ORG (NR_EF_ORG * SIZE_EF_ORG) + 2 +#define LEN_CCP (NR_EF_CCP * SIZE_EF_CCP) + 2 +#define LEN_EXT1 (NR_EF_EXT1 * SIZE_EF_EXT1) + 2 +#define LEN_SIMLCK (NR_EF_SIMLCK * SIZE_EF_SIMLCK) + 2 +#define LEN_MAIN (NR_EF_MAIN * SIZE_EF_MAIN) + 2 +#define LEN_SFK (NR_EF_SFK * SIZE_EF_SFK) + 2 +#define LEN_FAULT (NR_EF_FAULT * SIZE_EF_FAULT) + 2 +#define LEN_DEBUG (NR_EF_DEBUG * SIZE_EF_DEBUG) + 2 +#define LEN_POWER (NR_EF_POWER * SIZE_EF_POWER) + 2 +#define LEN_KEYB (NR_EF_KEYB * SIZE_EF_KEYB) + 2 +#define LEN_RADIO (NR_EF_RADIO * SIZE_EF_RADIO) + 2 +#define LEN_CGMI (NR_EF_CGMI * SIZE_EF_CGMI) + 2 +#define LEN_CGMM (NR_EF_CGMM * SIZE_EF_CGMM) + 2 +#define LEN_CGMR (NR_EF_CGMR * SIZE_EF_CGMR) + 2 +#define LEN_CGSN (NR_EF_CGSN * SIZE_EF_CGSN) + 2 +#define LEN_SMSPRFL (NR_EF_SMSPRFL * SIZE_EF_SMSPRFL) + 2 +#define LEN_PLMN (NR_EF_PLMN * SIZE_EF_PLMN) + 2 +#define LEN_ALS (NR_EF_ALS * SIZE_EF_ALS) + 2 +#define LEN_BCCHINFO (NR_EF_BCCHINFO * SIZE_EF_BCCHINFO) + 2 +#define LEN_LOCGPRS (NR_EF_LOCGPRS * SIZE_EF_LOCGPRS) + 2 +#define LEN_KCGPRS (NR_EF_KCGPRS * SIZE_EF_KCGPRS) + 2 +#define LEN_IMSIGPRS (NR_EF_IMSIGPRS * SIZE_EF_IMSIGPRS) + 2 + +#define START_MSCAP 0 +#define START_IMEI START_MSCAP + LEN_MSCAP +#define START_IMSI START_IMEI + LEN_IMEI +#define START_SMS START_IMSI + LEN_IMSI +#define START_CLASS2 START_SMS + LEN_SMS +#define START_CLASS3 START_CLASS2 + LEN_CLASS2 +#define START_MSSUP START_CLASS3 + LEN_CLASS3 +#define START_MSSET START_MSSUP + LEN_MSSUP +// Jun 14, 2005 REF: MMI-FIX-30439 x0018858 +#define START_HZCACHE START_MSSET + LEN_MSSET +#define START_LDN START_HZCACHE + LEN_HZCACHE +#define START_LRN START_LDN + LEN_LDN +#define START_LMN START_LRN + LEN_LRN +#define START_UPN START_LMN + LEN_LMN +#define START_MBN START_UPN + LEN_UPN +#define START_VMN START_MBN + LEN_MBN +#define START_CLNG START_VMN + LEN_VMN +#define START_CTIM START_CLNG + LEN_CLNG +#define START_CCNT START_CTIM + LEN_CTIM +#define START_ECC START_CCNT + LEN_CCNT +#define START_ORG START_ECC + LEN_ECC +#define START_CCP START_ORG + LEN_ORG +#define START_EXT1 START_CCP + LEN_CCP +#define START_SIMLCK START_EXT1 + LEN_EXT1 +#define START_MAIN START_SIMLCK + LEN_SIMLCK +#define START_SFK START_MAIN + LEN_MAIN +#define START_FAULT START_SFK + LEN_SFK +#define START_DEBUG START_FAULT + LEN_FAULT +#define START_POWER START_DEBUG + LEN_DEBUG +#define START_KEYB START_POWER + LEN_POWER +#define START_RADIO START_KEYB + LEN_KEYB +#define START_CGMI START_RADIO + LEN_RADIO +#define START_CGMM START_CGMI + LEN_CGMI +#define START_CGMR START_CGMM + LEN_CGMM +#define START_CGSN START_CGMR + LEN_CGMR +#define START_SMSPRFL START_CGSN + LEN_CGSN +#define START_PLMN START_SMSPRFL + LEN_SMSPRFL +#define START_ALS START_PLMN + LEN_PLMN +#define START_BCCHINFO START_ALS + LEN_ALS +#define START_LOCGPRS START_BCCHINFO + LEN_BCCHINFO +#define START_KCGPRS START_LOCGPRS + LEN_LOCGPRS +#define START_IMSIGPRS START_KCGPRS + LEN_KCGPRS + + +#define PCM_SIZE (START_IMSIGPRS + LEN_IMSIGPRS) + +/* + * RAM for the copy of PCM data + */ +UBYTE pcm_mem [PCM_SIZE]; + +static const T_PCM_DESCRIPTION pcm_table[] = +{ + { "MSCAP" , START_MSCAP, SIZE_EF_MSCAP +2, NR_EF_MSCAP }, + { "IMEI" , START_IMEI, SIZE_EF_IMEI +2, NR_EF_IMEI }, + { "IMSI" , START_IMSI, SIZE_EF_IMSI +2, NR_EF_IMSI }, + { "SMS " , START_SMS, SIZE_EF_SMS +2, NR_EF_SMS }, + { "CLASS2" , START_CLASS2, SIZE_EF_CLASS2 +2, NR_EF_CLASS2 }, + { "CLASS3" , START_CLASS3, SIZE_EF_CLASS3 +2, NR_EF_CLASS3 }, + { "MSSUP" , START_MSSUP, SIZE_EF_MSSUP +2, NR_EF_MSSUP }, + { "MSSET" , START_MSSET, SIZE_EF_MSSET +2, NR_EF_MSSET }, + { "HZCACHE" , START_HZCACHE, SIZE_EF_HZCACHE +2, NR_EF_HZCACHE }, //Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + { "LDN" , START_LDN, SIZE_EF_LDN +2, NR_EF_LDN }, + { "LRN" , START_LRN, SIZE_EF_LRN +2, NR_EF_LRN }, + { "LMN" , START_LMN, SIZE_EF_LMN +2, NR_EF_LMN }, + { "UPN" , START_UPN, SIZE_EF_UPN +2, NR_EF_UPN }, + { "MBN" , START_MBN, SIZE_EF_MBN +2, NR_EF_MBN }, + { "VMN" , START_VMN, SIZE_EF_VMN +2, NR_EF_VMN }, + { "CLNG" , START_CLNG, SIZE_EF_CLNG +2, NR_EF_CLNG }, + { "CTIM" , START_CTIM, SIZE_EF_CTIM +2, NR_EF_CTIM }, + { "CCNT" , START_CCNT, SIZE_EF_CCNT +2, NR_EF_CCNT }, + { "ECC" , START_ECC, SIZE_EF_ECC +2, NR_EF_ECC }, + { "ORG" , START_ORG, SIZE_EF_ORG +2, NR_EF_ORG }, + { "CCP" , START_CCP, SIZE_EF_CCP +2, NR_EF_CCP }, + { "EXT1" , START_EXT1, SIZE_EF_EXT1 +2, NR_EF_EXT1 }, + { "SIMLCK" , START_SIMLCK, SIZE_EF_SIMLCK +2, NR_EF_SIMLCK }, + { "MAIN" , START_MAIN, SIZE_EF_MAIN +2, NR_EF_MAIN }, + { "SFK" , START_SFK, SIZE_EF_SFK +2, NR_EF_SFK }, + { "FAULT" , START_FAULT, SIZE_EF_FAULT +2, NR_EF_FAULT }, + { "DEBUG" , START_DEBUG, SIZE_EF_DEBUG +2, NR_EF_DEBUG }, + { "POWER" , START_POWER, SIZE_EF_POWER +2, NR_EF_POWER }, + { "KEYB" , START_KEYB, SIZE_EF_KEYB +2, NR_EF_KEYB }, + { "RADIO" , START_RADIO, SIZE_EF_RADIO +2, NR_EF_RADIO }, + { "CGMI" , START_CGMI, SIZE_EF_CGMI +2, NR_EF_CGMI }, + { "CGMM" , START_CGMM, SIZE_EF_CGMM +2, NR_EF_CGMM }, + { "CGMR" , START_CGMR, SIZE_EF_CGMR +2, NR_EF_CGMR }, + { "CGSN" , START_CGSN, SIZE_EF_CGSN +2, NR_EF_CGSN }, + { "SMSPRFL" , START_SMSPRFL, SIZE_EF_SMSPRFL +2, NR_EF_SMSPRFL }, + { "PLMN" , START_PLMN, SIZE_EF_PLMN +2, NR_EF_PLMN }, + { "ALS" , START_ALS, SIZE_EF_ALS +2, NR_EF_ALS }, + { "BCCHINF" , START_BCCHINFO, SIZE_EF_BCCHINFO +2, NR_EF_BCCHINFO }, + { "LOCGPRS" , START_LOCGPRS, SIZE_EF_LOCGPRS +2, NR_EF_LOCGPRS }, + { "KCGPRS" , START_KCGPRS, SIZE_EF_KCGPRS +2, NR_EF_KCGPRS }, + { "IMSIGPRS" , START_IMSIGPRS, SIZE_EF_IMSIGPRS +2, NR_EF_IMSIGPRS }, + { NULL , 0, 0 , 0 } +}; + +static const UBYTE pcm_default_values[] = +{ +#if STD==1 // GSM 900 variant +#if defined (FAX_AND_DATA) + 0x81, 0xC7, 0x00, +#else + 0x01, 0x00, 0x00, +#endif +#endif + +#if STD==3 || STD==4 // DCS 1800, PCS 1900 +#if defined (FAX_AND_DATA) + 0x81, 0xC7, 0x00, +#else +#if defined (TM_SPECIAL) + 0x01, 0x00, 0x00, +#else + 0x07, 0x00, 0x00, +#endif +#endif +#endif + +#if STD==5 // Dualband GSM 900 / DCS 1800 +#if defined (FAX_AND_DATA) + 0x81, 0xC7, 0x00, +#else + 0x07, 0x00, 0x00, +#endif +#endif + +#if STD==6 // Dualband GSM 900 / E-GSM / DCS 1800 +#if defined (FAX_AND_DATA) + 0x81, 0xC7, 0x00, +#else + 0x07, 0x00, 0x00, +#endif +#endif + + 0x00, 0x00, 0x00, + + 0x44, 0x06, 0x91, 0x91, 0x57, 0x70, 0x95, 0x00, // EFimei + + 0x0f, // EFimsi + 0x44, 0x06, 0x91, 0x91, 0x57, 0x70, 0x95, 0xf0, + + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, // EFsms + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + + +#if STD==1 + 0x33, 0x18, 0x04, // EFclass2 + 0x00, 0x00, 0x10, // EFclass3 +#endif +#if STD==3 || STD==4 + 0x30, 0x18, 0x04, // EFclass2 + 0x00, 0x00, 0x10, // EFclass3 +#endif +#if STD==5 + 0x30, 0x18, 0x84, // EFclass2 + 0x50, 0x14, 0x10, // EFclass3 +#endif +#if STD==6 + 0x30, 0x19, 0x84, // EFclass2 + 0x60, 0x14, 0x10, // EFclass3 +#endif + + 0xB7, 0x46, 0x47, 0x1F, 0x00, // EFmssup + + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // MSSET + 0x38, 0x39, +// Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + + 0xFF, 0xFF, 0xFF, // homezone record 1 + 0xFF, 0xFF, 0xFF, // homezone record 2 + 0xFF, 0xFF, 0xFF, // homezone record 3 + 0xFF, 0xFF, 0xFF, // homezone record 4 + 0xFF, 0xFF, 0xFF, // homezone record 5 + + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, //EFldn + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x4f, 0x4f, 0x4f, 0x4f, 0x00, 0x00, + + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, //EFlrn + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x00, 0x00, + + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, //EFlmn + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x4f, 0x4f, 0x4f, 0x4f, 0x00, + + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, //EFupn + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //EFmbn (record 1) + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //EFmbn (record 2) + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //EFmbn (record 3) + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //EFmbn (record 4) + 0xff, 0xff, + 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //EFvmn (default is no number) + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x91, /* default is international: 145: 0x91 */ + + //EFclng + /* CLNG */ 'a', 'u', /* checksum & version */ + + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, //EFctim + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, //EFccnt + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, + 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, + 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, + 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, + 0x8f, 0x8f, 0x8f, 0x8f, + + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, //EFecc + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, + + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, //EForg + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0x00, 0x00, + + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, //EFccp + + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, //EFext1 + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, + + 0x00, 0x00, 0xd2, 0xd3, //EFsimlck + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x21, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x0f, + 0x22, 0x24, 0x24, 0x24, 0x44, 0x15, 0x12, 0x45, + 0x22, 0x22, 0x22, 0x22, 0x44, 0x15, 0x66, + 0xff, 0xff, + + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, //EFmnt + + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, //EFsfk + + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, //EFflt + + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, //EFdbg + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //EFbat + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //EFkbd + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //EFrdio + + '<', 'm', 'a', 'n', 'u', 'f', 'a', 'c', /* EFcgmi */ + 't', 'u', 'r', 'e', 'r', '>', 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + '<', 'm', 'o', 'd', 'e', 'l', '>', 0xff, /* EFcgmm */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + '<', 'r', 'e', 'v', 'i', 's', 'i', 'o', /* EFcgmr */ + 'n', '>', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + + '<', 's', 'e', 'r', 'i', 'a', 'l', ' ', /* EFcgsn */ + 'n', 'u', 'm', 'b', 'e', 'r', '>', 0xff, + 0xff, 0xff, 0xff, 0xff, + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* EFsmsprfl record 1 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* EFsmsprfl record 2 */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* EFplmn record 1 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* EFplmn record 2 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + + 0x00, 0x00, /* alternate line service */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* EFbcch */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0xFF, 0xFF, 0xFF, 0xFF, /* locGPRS: P-TMSI */ + 0xFF, 0xFF, 0xFF, /* P-TMSI Signature */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, /* RAI */ + 0xFF, /* Update Status */ + + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* KcGPRS: Kc */ + 0x07, /* CKSN */ + + 0xFF, /* IMSI-GPRS:IMSI length */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* IMSI */ +}; + +/******************************************************************************* + * + * compute_checksum + * Purpose : Calculate the checksum + * + * Arguments: In : Start adresse of the record (checksum is the first + * byte of the record) + * Length of the record (bytes) + * Out: none + * + * Returns : Checksum + * + * + ******************************************************************************/ + +UBYTE compute_checksum (UBYTE *record_start, USHORT length) +{ + UBYTE Sum; + int i=1; /* exclude checksum */ + + Sum=0; + if (length > 0) + { + while (i < length) + { + Sum += (UBYTE)*(record_start+i); + i ++; + } + Sum = (UBYTE)(0xFF - Sum); + return (Sum); + } + else + return 0xFF; +} + + + +/******************************************************************************* + * + * pcm_Init + * Purpose : Open the permanent configuration memory + * + * Arguments: In : none + * Out: none + * + * Returns : DRV_OK + * DRV_INITIALIZED + * + ******************************************************************************/ + +UBYTE pcm_Init (void) +{ + int i; + + if (pcm_read == FALSE) + { + pcm_read = TRUE; + + std = STD; /* target standard is defined by constant STD */ +#if defined(_TARGET_) + TRACE_EVENT_P1 ("pcm_init() std%d", std); +#endif /* _TARGET_ */ + + /* + * A-Sample: The flash memory may be at address 0 or at address 0x100000. + */ + + /* unprotect flash */ + pcm_unprotect_flash (); + + pcm_init_flash_device (); + + /* + * read flash memory and transfert data to RAM + */ + pcm_read_flash(pcm_mem, PCM_SIZE); + + /* + * verify checksums, if one is wrong write default values in RAM and + * compute checksums again + */ + i=0; + while ((pcm_table[i].identifier NEQ NULL) + && (pcm_mem[pcm_table[i].start] EQ compute_checksum (&pcm_mem[pcm_table[i].start], + (pcm_table[i].length - 2)*pcm_table[i].records + 2) )) + { + i++; + } + if (pcm_table[i].identifier NEQ NULL) /* at least one checksum is wrong */ + { + i = 0; + while (pcm_table[i].identifier NEQ NULL) + { + memcpy ((&pcm_mem[pcm_table[i].start]+2), + &pcm_default_values[pcm_table[i].start - 2*i], + (pcm_table[i].length - 2)*pcm_table[i].records); + + pcm_mem[pcm_table[i].start + 1] = 1; /* version */ + + pcm_mem[pcm_table[i].start] = + compute_checksum (&pcm_mem[pcm_table[i].start], + ((pcm_table[i].length - 2)*pcm_table[i].records + 2)); + + i++; + } + } + + return (DRV_OK); + } + else + return (DRV_INITIALIZED); + +} + + /******************************************************************************* + * + * pcm_Exit + * Purpose : Closes the permanent configuration memory + * + * Arguments: In : none + * Out: none + * + * Returns : none + * + ******************************************************************************/ +void pcm_Exit (void) +{ + pcm_read = FALSE; +} + + + +/******************************************************************************* + * + * pcm_ReadFile + * Purpose : Read a transparent elementary field + * + * Arguments: In : Filename (string) + * Size of the file + * + * Out: Buffer for file content + * Pointer to File version + * + * Returns : DRV_OK read ok + * PCM_INVALID_SIZE invalid size of file + * PCM_INVALID_CKSM invalid checksum + * PCM_INVALID_FILE invalid name of file + * PCM_SUCCESS read OK + * + ******************************************************************************/ + +UBYTE pcm_ReadFile (UBYTE * in_FileName, + USHORT in_BufferSize, + UBYTE * out_BufferPtr, + UBYTE * out_VersionPtr) +{ + UBYTE i; + int return_value; + + i=0; + while (pcm_table[i].identifier NEQ NULL) + { + /* + * Check all available entries + */ + if (!strcmp ((char *)in_FileName, pcm_table[i].identifier)) + { + /* + * entry is available, check size + * buffer size + version + checksum must be equal entry length + */ + if (in_BufferSize+2 NEQ pcm_table[i].length) + return PCM_INVALID_SIZE; + + return_value = DRV_OK; + if (compute_checksum(&pcm_mem[pcm_table[i].start],pcm_table[i].length) + != pcm_mem[pcm_table[i].start]) + { + memcpy ((&pcm_mem[pcm_table[i].start]+2), + &pcm_default_values[pcm_table[i].start - 2*i], + (pcm_table[i].length -2)); + pcm_mem[pcm_table[i].start + 1] = 1; //version + pcm_mem[pcm_table[i].start] = + compute_checksum(&pcm_mem[pcm_table[i].start] , + pcm_table[i].length); + return_value = PCM_INVALID_CKSM; + } + + memcpy (out_BufferPtr, &pcm_mem [pcm_table[i].start+2],in_BufferSize); + *out_VersionPtr = pcm_mem[pcm_table[i].start+1]; + return return_value; + } + i++; + } + return PCM_INVALID_FILE; +} + +/******************************************************************************* + * + * pcm_GetFileInfo + * Purpose : Get information about a dedicated file. + * + * Arguments: In : Name of the file + * Out: Structure of informations about the file + * + * Returns : PCM_INVALID_FILE invalid name of file + * DRV_OK read OK + * + ******************************************************************************/ + +UBYTE pcm_GetFileInfo (UBYTE * in_FileName, + pcm_FileInfo_Type * out_FileInfoPtr) +{ + UBYTE i; + + i=0; + while (pcm_table[i].identifier NEQ NULL) + { + /* + * Check all available entries + */ + if (!strcmp ((char *)in_FileName, pcm_table[i].identifier)) + { + /* + * entry is available, + * fill file info + */ + out_FileInfoPtr->FileLocation = &pcm_mem [pcm_table[i].start+2]; + out_FileInfoPtr->FileSize = pcm_table[i].length-2; + out_FileInfoPtr->Version = pcm_mem [pcm_table[i].start+1]; + return DRV_OK; + } + i++; + } + return PCM_INVALID_FILE; +} + +/******************************************************************************* + * + * pcm_ReadRecord + * Purpose : Read a linear fixed elementary field. + * + * Arguments: In : Name of the file + * Record number + * Size of the record + * Out: Buffer for the record + * Buffer for the file version + * Number of records in the file + * + * Returns : PCM_INVALID_SIZE invalid size of file + * PCM_INVALID_RECORD invalid record number + * PCM_INVALID_CKSM invalid checksum + * DRV_OK read OK + * + ******************************************************************************/ + +UBYTE pcm_ReadRecord (UBYTE * in_FileName, + USHORT in_Record, + USHORT in_BufferSize, + UBYTE * out_BufferPtr, + UBYTE * out_VersionPtr, + USHORT * out_MaxRecordsPtr) +{ + UBYTE i; + int return_value; + + i=0; + while (pcm_table[i].identifier NEQ NULL) + { + /* + * check whether entry is available + */ + if (!strcmp ((char *)in_FileName, pcm_table[i].identifier)) + { + /* + * entry is available, check size + */ + if (in_BufferSize+2 NEQ pcm_table[i].length) + return PCM_INVALID_SIZE; + /* + * check record number + */ + if (in_Record EQ 0 OR in_Record > pcm_table[i].records) + return PCM_INVALID_RECORD; + + return_value = DRV_OK; + if (compute_checksum(&pcm_mem[pcm_table[i].start] , + in_BufferSize*pcm_table[i].records + 2) + != pcm_mem[pcm_table[i].start]) + { + memcpy ((&pcm_mem[pcm_table[i].start]+2), + &pcm_default_values[pcm_table[i].start - 2*i], + (in_BufferSize*pcm_table[i].records)); + + pcm_mem[pcm_table[i].start + 1] = 1; //version + pcm_mem[pcm_table[i].start] = + compute_checksum(&pcm_mem[pcm_table[i].start] , + in_BufferSize*pcm_table[i].records+2); + + return_value = PCM_INVALID_CKSM; + } + + /* + * copy record content + * read version number and max records + */ + memcpy (out_BufferPtr, + &pcm_mem [pcm_table[i].start+2+(in_Record-1) * in_BufferSize], + in_BufferSize); + * out_MaxRecordsPtr = pcm_table[i].records; + * out_VersionPtr = pcm_mem [pcm_table[i].start+1]; + return return_value; + } + i++; + } + return PCM_INVALID_FILE; + +} + +/******************************************************************************* + * + * pcm_WriteFile + * Purpose : Write a transparent elementary field in RAM + * + * Arguments: In : Name of the file to write + * Size of the file + * Pointer to the file content + * Out: none + * + * Returns : PCM_INVALID_SIZE invalid size of file + * DRV_OK write ok + * PCM_INVALID_FILE invalid name of file + * + ******************************************************************************/ + +UBYTE pcm_WriteFile (UBYTE * in_FileName, + USHORT in_FileSize, + UBYTE * in_BufferPtr) +{ + UBYTE i; + i=0; + while (pcm_table[i].identifier NEQ NULL) + { + /* + * check whether entry is available + */ + if (!strcmp ((char *)in_FileName, pcm_table[i].identifier)) + { + /* + * check file size + */ + if (in_FileSize+2 NEQ pcm_table[i].length) + return PCM_INVALID_SIZE; + /* + * store new buffer content + * checksum calc + */ + memcpy (&pcm_mem [pcm_table[i].start+2], in_BufferPtr,in_FileSize); + pcm_mem [pcm_table[i].start] = + compute_checksum(&pcm_mem [pcm_table[i].start], + pcm_table[i].length); + + return DRV_OK; + } + i++; + } + return PCM_INVALID_FILE; +} + +/******************************************************************************* + * + * pcm_WriteRecord + * Purpose : Write a linear fixed elementary field in RAM + * + * Arguments: In : Name of the file to write + * Record number + * Size of the record + * Pointer to the record content + * Out: none + * + * Returns : PCM_INVALID_SIZE invalid size of record + * PCM_INVALID_RECORD invalid record number + * PCM_INVALID_FILE invalid name of file + * DRV_OK write OK + * + ******************************************************************************/ + +UBYTE pcm_WriteRecord (UBYTE * in_FileName, + USHORT in_Record, + USHORT in_BufferSize, + UBYTE * in_BufferPtr) +{ + UBYTE i; + i=0; + while (pcm_table[i].identifier NEQ NULL) + { + /* + * check all available entries + */ + if (!strcmp ((char *)in_FileName, pcm_table[i].identifier)) + { + /* + * entry is available, + * check entry size + */ + if (in_BufferSize+2 NEQ pcm_table[i].length) + return PCM_INVALID_SIZE; + /* + * check record number + */ + if (in_Record EQ 0 OR in_Record > pcm_table[i].records) + return PCM_INVALID_RECORD; + + /* + * store data in record + */ + memcpy (&pcm_mem [pcm_table[i].start+2+(in_Record-1) * in_BufferSize], + in_BufferPtr, + in_BufferSize); + + /* + * calculate checksum + */ + pcm_mem [pcm_table[i].start] = + compute_checksum(&pcm_mem [pcm_table[i].start], + in_BufferSize*pcm_table[i].records+2); + + return DRV_OK; + } + i++; + } + return PCM_INVALID_FILE; +} + +/******************************************************************************* + * + * pcm_Flush + * Purpose : Transfer changes to the PCM of the non volatile RAM. + * This fonction can only be called while interrupts + * are disabled + * + * Arguments: In : none + * Out: none + * + * Returns : PCM_ERASE_ERROR erase failed + * DRV_OK erase and write read OK + * PCM_WRITE_ERROR write failed + * + ******************************************************************************/ + +UBYTE pcm_Flush (void) +{ + long write_result,erase_result; + + UBYTE status; + + erase_result = pcm_erase_flash_sector(); + if (erase_result != PCM_ERASE_ERROR) + { + write_result = pcm_write_flash (pcm_mem, PCM_SIZE); + return (write_result); + } + else + return (erase_result); +} +/******************************************************************************* + * + * pcm_ReadParameter + * + * Purpose : Reads a parameter specified by an index. + * + * Arguments: In : parameter: parameter index + * Out: none + * + * Returns : The parameter + * + * Warning! If the parameter is wrong 0 is returned. + * + ******************************************************************************/ + +UINT16 pcm_ReadParameter (UBYTE parameter) +{ + UINT16 parameter_value; + + switch (parameter) { + + case PCM_SERIAL_CONFIG: + + parameter_value = pcm_read_parameter (PCM_FLASH_SERIAL_CONFIG); + break; + + default: + + parameter_value = 0; + break; + } + + return (parameter_value); +} + +#endif /* else, #ifdef WIN32 */ +#endif /* #ifndef PCM_C */ +