1767a662ecde33c3979bf02b793d392aca0403162Wink Saville/* 2767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Copyright (C) 2008 The Android Open Source Project 3767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 4767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5767a662ecde33c3979bf02b793d392aca0403162Wink Saville * you may not use this file except in compliance with the License. 6767a662ecde33c3979bf02b793d392aca0403162Wink Saville * You may obtain a copy of the License at 7767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 8767a662ecde33c3979bf02b793d392aca0403162Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 9767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 10767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Unless required by applicable law or agreed to in writing, software 11767a662ecde33c3979bf02b793d392aca0403162Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12767a662ecde33c3979bf02b793d392aca0403162Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13767a662ecde33c3979bf02b793d392aca0403162Wink Saville * See the License for the specific language governing permissions and 14767a662ecde33c3979bf02b793d392aca0403162Wink Saville * limitations under the License. 15767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 16767a662ecde33c3979bf02b793d392aca0403162Wink Saville 17767a662ecde33c3979bf02b793d392aca0403162Wink Savillepackage com.android.internal.telephony; 18767a662ecde33c3979bf02b793d392aca0403162Wink Saville 19767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.*; 20767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.util.Log; 21767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.util.ArrayList; 22767a662ecde33c3979bf02b793d392aca0403162Wink Saville 23767a662ecde33c3979bf02b793d392aca0403162Wink Saville/** 24767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@hide} 25767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 26469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganeshpublic abstract class IccFileHandler extends Handler implements IccConstants { 27767a662ecde33c3979bf02b793d392aca0403162Wink Saville 28767a662ecde33c3979bf02b793d392aca0403162Wink Saville //from TS 11.11 9.1 or elsewhere 29767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int COMMAND_READ_BINARY = 0xb0; 30767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int COMMAND_UPDATE_BINARY = 0xd6; 31767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int COMMAND_READ_RECORD = 0xb2; 32767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int COMMAND_UPDATE_RECORD = 0xdc; 33767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int COMMAND_SEEK = 0xa2; 34767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int COMMAND_GET_RESPONSE = 0xc0; 35767a662ecde33c3979bf02b793d392aca0403162Wink Saville 36767a662ecde33c3979bf02b793d392aca0403162Wink Saville // from TS 11.11 9.2.5 37767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int READ_RECORD_MODE_ABSOLUTE = 4; 38767a662ecde33c3979bf02b793d392aca0403162Wink Saville 39767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** types of files TS 11.11 9.3 40767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int EF_TYPE_TRANSPARENT = 0; 41767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int EF_TYPE_LINEAR_FIXED = 1; 42767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int EF_TYPE_CYCLIC = 3; 43767a662ecde33c3979bf02b793d392aca0403162Wink Saville 44767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** types of files TS 11.11 9.3 45767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int TYPE_RFU = 0; 46767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int TYPE_MF = 1; 47767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int TYPE_DF = 2; 48767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int TYPE_EF = 4; 49767a662ecde33c3979bf02b793d392aca0403162Wink Saville 50767a662ecde33c3979bf02b793d392aca0403162Wink Saville // size of GET_RESPONSE for EF's 51767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int GET_RESPONSE_EF_SIZE_BYTES = 15; 52767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int GET_RESPONSE_EF_IMG_SIZE_BYTES = 10; 53767a662ecde33c3979bf02b793d392aca0403162Wink Saville 54767a662ecde33c3979bf02b793d392aca0403162Wink Saville // Byte order received in response to COMMAND_GET_RESPONSE 55767a662ecde33c3979bf02b793d392aca0403162Wink Saville // Refer TS 51.011 Section 9.2.1 56767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_RFU_1 = 0; 57767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_RFU_2 = 1; 58767a662ecde33c3979bf02b793d392aca0403162Wink Saville 59767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_FILE_SIZE_1 = 2; 60767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_FILE_SIZE_2 = 3; 61767a662ecde33c3979bf02b793d392aca0403162Wink Saville 62767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_FILE_ID_1 = 4; 63767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_FILE_ID_2 = 5; 64767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_FILE_TYPE = 6; 65767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_RFU_3 = 7; 66767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_ACCESS_CONDITION_1 = 8; 67767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_ACCESS_CONDITION_2 = 9; 68767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_ACCESS_CONDITION_3 = 10; 69767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_FILE_STATUS = 11; 70767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_LENGTH = 12; 71767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_STRUCTURE = 13; 72767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int RESPONSE_DATA_RECORD_LENGTH = 14; 73767a662ecde33c3979bf02b793d392aca0403162Wink Saville 74767a662ecde33c3979bf02b793d392aca0403162Wink Saville 75767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Events 76767a662ecde33c3979bf02b793d392aca0403162Wink Saville 77767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Finished retrieving size of transparent EF; start loading. */ 78767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int EVENT_GET_BINARY_SIZE_DONE = 4; 79767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Finished loading contents of transparent EF; post result. */ 80767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int EVENT_READ_BINARY_DONE = 5; 81767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Finished retrieving size of records for linear-fixed EF; now load. */ 82767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int EVENT_GET_RECORD_SIZE_DONE = 6; 83767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Finished loading single record from a linear-fixed EF; post result. */ 84767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int EVENT_READ_RECORD_DONE = 7; 85767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Finished retrieving record size; post result. */ 86767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int EVENT_GET_EF_LINEAR_RECORD_SIZE_DONE = 8; 87767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Finished retrieving image instance record; post result. */ 88767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int EVENT_READ_IMG_DONE = 9; 89767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** Finished retrieving icon data; post result. */ 90767a662ecde33c3979bf02b793d392aca0403162Wink Saville static protected final int EVENT_READ_ICON_DONE = 10; 91767a662ecde33c3979bf02b793d392aca0403162Wink Saville 92767a662ecde33c3979bf02b793d392aca0403162Wink Saville // member variables 93767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected PhoneBase phone; 94767a662ecde33c3979bf02b793d392aca0403162Wink Saville 95767a662ecde33c3979bf02b793d392aca0403162Wink Saville static class LoadLinearFixedContext { 96767a662ecde33c3979bf02b793d392aca0403162Wink Saville 97767a662ecde33c3979bf02b793d392aca0403162Wink Saville int efid; 98767a662ecde33c3979bf02b793d392aca0403162Wink Saville int recordNum, recordSize, countRecords; 99767a662ecde33c3979bf02b793d392aca0403162Wink Saville boolean loadAll; 100767a662ecde33c3979bf02b793d392aca0403162Wink Saville 101767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onLoaded; 102767a662ecde33c3979bf02b793d392aca0403162Wink Saville 103767a662ecde33c3979bf02b793d392aca0403162Wink Saville ArrayList<byte[]> results; 104767a662ecde33c3979bf02b793d392aca0403162Wink Saville 105767a662ecde33c3979bf02b793d392aca0403162Wink Saville LoadLinearFixedContext(int efid, int recordNum, Message onLoaded) { 106767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.efid = efid; 107767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.recordNum = recordNum; 108767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.onLoaded = onLoaded; 109767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.loadAll = false; 110767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 111767a662ecde33c3979bf02b793d392aca0403162Wink Saville 112767a662ecde33c3979bf02b793d392aca0403162Wink Saville LoadLinearFixedContext(int efid, Message onLoaded) { 113767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.efid = efid; 114767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.recordNum = 1; 115767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.loadAll = true; 116767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.onLoaded = onLoaded; 117767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 118767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 119767a662ecde33c3979bf02b793d392aca0403162Wink Saville 120767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 121767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Default constructor 122767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 123767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected IccFileHandler(PhoneBase phone) { 124767a662ecde33c3979bf02b793d392aca0403162Wink Saville super(); 125767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.phone = phone; 126767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 127767a662ecde33c3979bf02b793d392aca0403162Wink Saville 128767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void dispose() { 129767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 130767a662ecde33c3979bf02b793d392aca0403162Wink Saville 131767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Public Methods 132767a662ecde33c3979bf02b793d392aca0403162Wink Saville 133767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 134767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Load a record from a SIM Linear Fixed EF 135767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 136767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param fileid EF id 137767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param recordNum 1-based (not 0-based) record number 138767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param onLoaded 139767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 140767a662ecde33c3979bf02b793d392aca0403162Wink Saville * ((AsyncResult)(onLoaded.obj)).result is the byte[] 141767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 142767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 143767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void loadEFLinearFixed(int fileid, int recordNum, Message onLoaded) { 144767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response 145767a662ecde33c3979bf02b793d392aca0403162Wink Saville = obtainMessage(EVENT_GET_RECORD_SIZE_DONE, 146767a662ecde33c3979bf02b793d392aca0403162Wink Saville new LoadLinearFixedContext(fileid, recordNum, onLoaded)); 147767a662ecde33c3979bf02b793d392aca0403162Wink Saville 148469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh phone.mCM.iccIO(COMMAND_GET_RESPONSE, fileid, getEFPath(fileid), 149767a662ecde33c3979bf02b793d392aca0403162Wink Saville 0, 0, GET_RESPONSE_EF_SIZE_BYTES, null, null, response); 150767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 151767a662ecde33c3979bf02b793d392aca0403162Wink Saville 152767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 153767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Load a image instance record from a SIM Linear Fixed EF-IMG 154767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 155767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param recordNum 1-based (not 0-based) record number 156767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param onLoaded 157767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 158767a662ecde33c3979bf02b793d392aca0403162Wink Saville * ((AsyncResult)(onLoaded.obj)).result is the byte[] 159767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 160767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 161767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void loadEFImgLinearFixed(int recordNum, Message onLoaded) { 162767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response = obtainMessage(EVENT_READ_IMG_DONE, 163767a662ecde33c3979bf02b793d392aca0403162Wink Saville new LoadLinearFixedContext(IccConstants.EF_IMG, recordNum, 164767a662ecde33c3979bf02b793d392aca0403162Wink Saville onLoaded)); 165767a662ecde33c3979bf02b793d392aca0403162Wink Saville 166469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh // TODO(): Verify when path changes are done. 167767a662ecde33c3979bf02b793d392aca0403162Wink Saville phone.mCM.iccIO(COMMAND_GET_RESPONSE, IccConstants.EF_IMG, "img", 168767a662ecde33c3979bf02b793d392aca0403162Wink Saville recordNum, READ_RECORD_MODE_ABSOLUTE, 169767a662ecde33c3979bf02b793d392aca0403162Wink Saville GET_RESPONSE_EF_IMG_SIZE_BYTES, null, null, response); 170767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 171767a662ecde33c3979bf02b793d392aca0403162Wink Saville 172767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 173767a662ecde33c3979bf02b793d392aca0403162Wink Saville * get record size for a linear fixed EF 174767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 175767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param fileid EF id 176767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param onLoaded ((AsnyncResult)(onLoaded.obj)).result is the recordSize[] 177767a662ecde33c3979bf02b793d392aca0403162Wink Saville * int[0] is the record length int[1] is the total length of the EF 178767a662ecde33c3979bf02b793d392aca0403162Wink Saville * file int[3] is the number of records in the EF file So int[0] * 179767a662ecde33c3979bf02b793d392aca0403162Wink Saville * int[3] = int[1] 180767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 181767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getEFLinearRecordSize(int fileid, Message onLoaded) { 182767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response 183767a662ecde33c3979bf02b793d392aca0403162Wink Saville = obtainMessage(EVENT_GET_EF_LINEAR_RECORD_SIZE_DONE, 184767a662ecde33c3979bf02b793d392aca0403162Wink Saville new LoadLinearFixedContext(fileid, onLoaded)); 185469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh phone.mCM.iccIO(COMMAND_GET_RESPONSE, fileid, getEFPath(fileid), 186767a662ecde33c3979bf02b793d392aca0403162Wink Saville 0, 0, GET_RESPONSE_EF_SIZE_BYTES, null, null, response); 187767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 188767a662ecde33c3979bf02b793d392aca0403162Wink Saville 189767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 190767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Load all records from a SIM Linear Fixed EF 191767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 192767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param fileid EF id 193767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param onLoaded 194767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 195767a662ecde33c3979bf02b793d392aca0403162Wink Saville * ((AsyncResult)(onLoaded.obj)).result is an ArrayList<byte[]> 196767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 197767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 198767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void loadEFLinearFixedAll(int fileid, Message onLoaded) { 199767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response = obtainMessage(EVENT_GET_RECORD_SIZE_DONE, 200767a662ecde33c3979bf02b793d392aca0403162Wink Saville new LoadLinearFixedContext(fileid,onLoaded)); 201767a662ecde33c3979bf02b793d392aca0403162Wink Saville 202469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh phone.mCM.iccIO(COMMAND_GET_RESPONSE, fileid, getEFPath(fileid), 203767a662ecde33c3979bf02b793d392aca0403162Wink Saville 0, 0, GET_RESPONSE_EF_SIZE_BYTES, null, null, response); 204767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 205767a662ecde33c3979bf02b793d392aca0403162Wink Saville 206767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 207767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Load a SIM Transparent EF 208767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 209767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param fileid EF id 210767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param onLoaded 211767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 212767a662ecde33c3979bf02b793d392aca0403162Wink Saville * ((AsyncResult)(onLoaded.obj)).result is the byte[] 213767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 214767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 215767a662ecde33c3979bf02b793d392aca0403162Wink Saville 216767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void loadEFTransparent(int fileid, Message onLoaded) { 217767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response = obtainMessage(EVENT_GET_BINARY_SIZE_DONE, 218767a662ecde33c3979bf02b793d392aca0403162Wink Saville fileid, 0, onLoaded); 219767a662ecde33c3979bf02b793d392aca0403162Wink Saville 220469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh phone.mCM.iccIO(COMMAND_GET_RESPONSE, fileid, getEFPath(fileid), 221767a662ecde33c3979bf02b793d392aca0403162Wink Saville 0, 0, GET_RESPONSE_EF_SIZE_BYTES, null, null, response); 222767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 223767a662ecde33c3979bf02b793d392aca0403162Wink Saville 224767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 225767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Load a SIM Transparent EF-IMG. Used right after loadEFImgLinearFixed to 226767a662ecde33c3979bf02b793d392aca0403162Wink Saville * retrive STK's icon data. 227767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 228767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param fileid EF id 229767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param onLoaded 230767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 231767a662ecde33c3979bf02b793d392aca0403162Wink Saville * ((AsyncResult)(onLoaded.obj)).result is the byte[] 232767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 233767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 234767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void loadEFImgTransparent(int fileid, int highOffset, int lowOffset, 235767a662ecde33c3979bf02b793d392aca0403162Wink Saville int length, Message onLoaded) { 236767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response = obtainMessage(EVENT_READ_ICON_DONE, fileid, 0, 237767a662ecde33c3979bf02b793d392aca0403162Wink Saville onLoaded); 238767a662ecde33c3979bf02b793d392aca0403162Wink Saville 239767a662ecde33c3979bf02b793d392aca0403162Wink Saville phone.mCM.iccIO(COMMAND_READ_BINARY, fileid, "img", highOffset, lowOffset, 240767a662ecde33c3979bf02b793d392aca0403162Wink Saville length, null, null, response); 241767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 242767a662ecde33c3979bf02b793d392aca0403162Wink Saville 243767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 244767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Update a record in a linear fixed EF 245767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param fileid EF id 246767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param recordNum 1-based (not 0-based) record number 247767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param data must be exactly as long as the record in the EF 248767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param pin2 for CHV2 operations, otherwist must be null 249767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param onComplete onComplete.obj will be an AsyncResult 250767a662ecde33c3979bf02b793d392aca0403162Wink Saville * onComplete.obj.userObj will be a IccIoResult on success 251767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 252767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void updateEFLinearFixed(int fileid, int recordNum, byte[] data, 253767a662ecde33c3979bf02b793d392aca0403162Wink Saville String pin2, Message onComplete) { 254469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh phone.mCM.iccIO(COMMAND_UPDATE_RECORD, fileid, getEFPath(fileid), 255767a662ecde33c3979bf02b793d392aca0403162Wink Saville recordNum, READ_RECORD_MODE_ABSOLUTE, data.length, 256767a662ecde33c3979bf02b793d392aca0403162Wink Saville IccUtils.bytesToHexString(data), pin2, onComplete); 257767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 258767a662ecde33c3979bf02b793d392aca0403162Wink Saville 259767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 260767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Update a transparent EF 261767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param fileid EF id 262767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param data must be exactly as long as the EF 263767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 264767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void updateEFTransparent(int fileid, byte[] data, Message onComplete) { 265469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh phone.mCM.iccIO(COMMAND_UPDATE_BINARY, fileid, getEFPath(fileid), 266767a662ecde33c3979bf02b793d392aca0403162Wink Saville 0, 0, data.length, 267767a662ecde33c3979bf02b793d392aca0403162Wink Saville IccUtils.bytesToHexString(data), null, onComplete); 268767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 269767a662ecde33c3979bf02b793d392aca0403162Wink Saville 270767a662ecde33c3979bf02b793d392aca0403162Wink Saville 271767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Abstract Methods 272767a662ecde33c3979bf02b793d392aca0403162Wink Saville 273767a662ecde33c3979bf02b793d392aca0403162Wink Saville 274767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Private Methods 275767a662ecde33c3979bf02b793d392aca0403162Wink Saville 276767a662ecde33c3979bf02b793d392aca0403162Wink Saville private void sendResult(Message response, Object result, Throwable ex) { 277767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (response == null) { 278767a662ecde33c3979bf02b793d392aca0403162Wink Saville return; 279767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 280767a662ecde33c3979bf02b793d392aca0403162Wink Saville 281767a662ecde33c3979bf02b793d392aca0403162Wink Saville AsyncResult.forMessage(response, result, ex); 282767a662ecde33c3979bf02b793d392aca0403162Wink Saville 283767a662ecde33c3979bf02b793d392aca0403162Wink Saville response.sendToTarget(); 284767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 285767a662ecde33c3979bf02b793d392aca0403162Wink Saville 286767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Overridden from Handler 287767a662ecde33c3979bf02b793d392aca0403162Wink Saville 288767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void handleMessage(Message msg) { 289767a662ecde33c3979bf02b793d392aca0403162Wink Saville AsyncResult ar; 290767a662ecde33c3979bf02b793d392aca0403162Wink Saville IccIoResult result; 291767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response = null; 292767a662ecde33c3979bf02b793d392aca0403162Wink Saville String str; 293767a662ecde33c3979bf02b793d392aca0403162Wink Saville LoadLinearFixedContext lc; 294767a662ecde33c3979bf02b793d392aca0403162Wink Saville 295767a662ecde33c3979bf02b793d392aca0403162Wink Saville IccException iccException; 296767a662ecde33c3979bf02b793d392aca0403162Wink Saville byte data[]; 297767a662ecde33c3979bf02b793d392aca0403162Wink Saville int size; 298767a662ecde33c3979bf02b793d392aca0403162Wink Saville int fileid; 299767a662ecde33c3979bf02b793d392aca0403162Wink Saville int recordNum; 300767a662ecde33c3979bf02b793d392aca0403162Wink Saville int recordSize[]; 301767a662ecde33c3979bf02b793d392aca0403162Wink Saville 302767a662ecde33c3979bf02b793d392aca0403162Wink Saville try { 303767a662ecde33c3979bf02b793d392aca0403162Wink Saville switch (msg.what) { 304767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_READ_IMG_DONE: 305767a662ecde33c3979bf02b793d392aca0403162Wink Saville ar = (AsyncResult) msg.obj; 306767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc = (LoadLinearFixedContext) ar.userObj; 307767a662ecde33c3979bf02b793d392aca0403162Wink Saville result = (IccIoResult) ar.result; 308767a662ecde33c3979bf02b793d392aca0403162Wink Saville response = lc.onLoaded; 309767a662ecde33c3979bf02b793d392aca0403162Wink Saville 310767a662ecde33c3979bf02b793d392aca0403162Wink Saville iccException = result.getException(); 311767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (iccException != null) { 312767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, result.payload, ar.exception); 313767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 314767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 315767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_READ_ICON_DONE: 316767a662ecde33c3979bf02b793d392aca0403162Wink Saville ar = (AsyncResult) msg.obj; 317767a662ecde33c3979bf02b793d392aca0403162Wink Saville response = (Message) ar.userObj; 318767a662ecde33c3979bf02b793d392aca0403162Wink Saville result = (IccIoResult) ar.result; 319767a662ecde33c3979bf02b793d392aca0403162Wink Saville 320767a662ecde33c3979bf02b793d392aca0403162Wink Saville iccException = result.getException(); 321767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (iccException != null) { 322767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, result.payload, ar.exception); 323767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 324767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 325767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_GET_EF_LINEAR_RECORD_SIZE_DONE: 326767a662ecde33c3979bf02b793d392aca0403162Wink Saville ar = (AsyncResult)msg.obj; 327767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc = (LoadLinearFixedContext) ar.userObj; 328767a662ecde33c3979bf02b793d392aca0403162Wink Saville result = (IccIoResult) ar.result; 329767a662ecde33c3979bf02b793d392aca0403162Wink Saville response = lc.onLoaded; 330767a662ecde33c3979bf02b793d392aca0403162Wink Saville 331767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ar.exception != null) { 332767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, ar.exception); 333767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 334767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 335767a662ecde33c3979bf02b793d392aca0403162Wink Saville 336767a662ecde33c3979bf02b793d392aca0403162Wink Saville iccException = result.getException(); 337767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (iccException != null) { 338767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, iccException); 339767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 340767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 341767a662ecde33c3979bf02b793d392aca0403162Wink Saville 342767a662ecde33c3979bf02b793d392aca0403162Wink Saville data = result.payload; 343767a662ecde33c3979bf02b793d392aca0403162Wink Saville 344767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (TYPE_EF != data[RESPONSE_DATA_FILE_TYPE] || 345767a662ecde33c3979bf02b793d392aca0403162Wink Saville EF_TYPE_LINEAR_FIXED != data[RESPONSE_DATA_STRUCTURE]) { 346767a662ecde33c3979bf02b793d392aca0403162Wink Saville throw new IccFileTypeMismatch(); 347767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 348767a662ecde33c3979bf02b793d392aca0403162Wink Saville 349767a662ecde33c3979bf02b793d392aca0403162Wink Saville recordSize = new int[3]; 350767a662ecde33c3979bf02b793d392aca0403162Wink Saville recordSize[0] = data[RESPONSE_DATA_RECORD_LENGTH] & 0xFF; 351767a662ecde33c3979bf02b793d392aca0403162Wink Saville recordSize[1] = ((data[RESPONSE_DATA_FILE_SIZE_1] & 0xff) << 8) 352767a662ecde33c3979bf02b793d392aca0403162Wink Saville + (data[RESPONSE_DATA_FILE_SIZE_2] & 0xff); 353767a662ecde33c3979bf02b793d392aca0403162Wink Saville recordSize[2] = recordSize[1] / recordSize[0]; 354767a662ecde33c3979bf02b793d392aca0403162Wink Saville 355767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, recordSize, null); 356767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 357767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_GET_RECORD_SIZE_DONE: 358767a662ecde33c3979bf02b793d392aca0403162Wink Saville ar = (AsyncResult)msg.obj; 359767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc = (LoadLinearFixedContext) ar.userObj; 360767a662ecde33c3979bf02b793d392aca0403162Wink Saville result = (IccIoResult) ar.result; 361767a662ecde33c3979bf02b793d392aca0403162Wink Saville response = lc.onLoaded; 362767a662ecde33c3979bf02b793d392aca0403162Wink Saville 363767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ar.exception != null) { 364767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, ar.exception); 365767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 366767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 367767a662ecde33c3979bf02b793d392aca0403162Wink Saville 368767a662ecde33c3979bf02b793d392aca0403162Wink Saville iccException = result.getException(); 369767a662ecde33c3979bf02b793d392aca0403162Wink Saville 370767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (iccException != null) { 371767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, iccException); 372767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 373767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 374767a662ecde33c3979bf02b793d392aca0403162Wink Saville 375767a662ecde33c3979bf02b793d392aca0403162Wink Saville data = result.payload; 376767a662ecde33c3979bf02b793d392aca0403162Wink Saville fileid = lc.efid; 377767a662ecde33c3979bf02b793d392aca0403162Wink Saville recordNum = lc.recordNum; 378767a662ecde33c3979bf02b793d392aca0403162Wink Saville 379767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (TYPE_EF != data[RESPONSE_DATA_FILE_TYPE]) { 380767a662ecde33c3979bf02b793d392aca0403162Wink Saville throw new IccFileTypeMismatch(); 381767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 382767a662ecde33c3979bf02b793d392aca0403162Wink Saville 383767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (EF_TYPE_LINEAR_FIXED != data[RESPONSE_DATA_STRUCTURE]) { 384767a662ecde33c3979bf02b793d392aca0403162Wink Saville throw new IccFileTypeMismatch(); 385767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 386767a662ecde33c3979bf02b793d392aca0403162Wink Saville 387767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc.recordSize = data[RESPONSE_DATA_RECORD_LENGTH] & 0xFF; 388767a662ecde33c3979bf02b793d392aca0403162Wink Saville 389767a662ecde33c3979bf02b793d392aca0403162Wink Saville size = ((data[RESPONSE_DATA_FILE_SIZE_1] & 0xff) << 8) 390767a662ecde33c3979bf02b793d392aca0403162Wink Saville + (data[RESPONSE_DATA_FILE_SIZE_2] & 0xff); 391767a662ecde33c3979bf02b793d392aca0403162Wink Saville 392767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc.countRecords = size / lc.recordSize; 393767a662ecde33c3979bf02b793d392aca0403162Wink Saville 394767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (lc.loadAll) { 395767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc.results = new ArrayList<byte[]>(lc.countRecords); 396767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 397767a662ecde33c3979bf02b793d392aca0403162Wink Saville 398469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh phone.mCM.iccIO(COMMAND_READ_RECORD, lc.efid, getEFPath(lc.efid), 399767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc.recordNum, 400767a662ecde33c3979bf02b793d392aca0403162Wink Saville READ_RECORD_MODE_ABSOLUTE, 401767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc.recordSize, null, null, 402767a662ecde33c3979bf02b793d392aca0403162Wink Saville obtainMessage(EVENT_READ_RECORD_DONE, lc)); 403767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 404767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_GET_BINARY_SIZE_DONE: 405767a662ecde33c3979bf02b793d392aca0403162Wink Saville ar = (AsyncResult)msg.obj; 406767a662ecde33c3979bf02b793d392aca0403162Wink Saville response = (Message) ar.userObj; 407767a662ecde33c3979bf02b793d392aca0403162Wink Saville result = (IccIoResult) ar.result; 408767a662ecde33c3979bf02b793d392aca0403162Wink Saville 409767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ar.exception != null) { 410767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, ar.exception); 411767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 412767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 413767a662ecde33c3979bf02b793d392aca0403162Wink Saville 414767a662ecde33c3979bf02b793d392aca0403162Wink Saville iccException = result.getException(); 415767a662ecde33c3979bf02b793d392aca0403162Wink Saville 416767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (iccException != null) { 417767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, iccException); 418767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 419767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 420767a662ecde33c3979bf02b793d392aca0403162Wink Saville 421767a662ecde33c3979bf02b793d392aca0403162Wink Saville data = result.payload; 422767a662ecde33c3979bf02b793d392aca0403162Wink Saville 423767a662ecde33c3979bf02b793d392aca0403162Wink Saville fileid = msg.arg1; 424767a662ecde33c3979bf02b793d392aca0403162Wink Saville 425767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (TYPE_EF != data[RESPONSE_DATA_FILE_TYPE]) { 426767a662ecde33c3979bf02b793d392aca0403162Wink Saville throw new IccFileTypeMismatch(); 427767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 428767a662ecde33c3979bf02b793d392aca0403162Wink Saville 429767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (EF_TYPE_TRANSPARENT != data[RESPONSE_DATA_STRUCTURE]) { 430767a662ecde33c3979bf02b793d392aca0403162Wink Saville throw new IccFileTypeMismatch(); 431767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 432767a662ecde33c3979bf02b793d392aca0403162Wink Saville 433767a662ecde33c3979bf02b793d392aca0403162Wink Saville size = ((data[RESPONSE_DATA_FILE_SIZE_1] & 0xff) << 8) 434767a662ecde33c3979bf02b793d392aca0403162Wink Saville + (data[RESPONSE_DATA_FILE_SIZE_2] & 0xff); 435767a662ecde33c3979bf02b793d392aca0403162Wink Saville 436469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh phone.mCM.iccIO(COMMAND_READ_BINARY, fileid, getEFPath(fileid), 437767a662ecde33c3979bf02b793d392aca0403162Wink Saville 0, 0, size, null, null, 438767a662ecde33c3979bf02b793d392aca0403162Wink Saville obtainMessage(EVENT_READ_BINARY_DONE, 439767a662ecde33c3979bf02b793d392aca0403162Wink Saville fileid, 0, response)); 440767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 441767a662ecde33c3979bf02b793d392aca0403162Wink Saville 442767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_READ_RECORD_DONE: 443767a662ecde33c3979bf02b793d392aca0403162Wink Saville 444767a662ecde33c3979bf02b793d392aca0403162Wink Saville ar = (AsyncResult)msg.obj; 445767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc = (LoadLinearFixedContext) ar.userObj; 446767a662ecde33c3979bf02b793d392aca0403162Wink Saville result = (IccIoResult) ar.result; 447767a662ecde33c3979bf02b793d392aca0403162Wink Saville response = lc.onLoaded; 448767a662ecde33c3979bf02b793d392aca0403162Wink Saville 449767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ar.exception != null) { 450767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, ar.exception); 451767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 452767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 453767a662ecde33c3979bf02b793d392aca0403162Wink Saville 454767a662ecde33c3979bf02b793d392aca0403162Wink Saville iccException = result.getException(); 455767a662ecde33c3979bf02b793d392aca0403162Wink Saville 456767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (iccException != null) { 457767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, iccException); 458767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 459767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 460767a662ecde33c3979bf02b793d392aca0403162Wink Saville 461767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (!lc.loadAll) { 462767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, result.payload, null); 463767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 464767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc.results.add(result.payload); 465767a662ecde33c3979bf02b793d392aca0403162Wink Saville 466767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc.recordNum++; 467767a662ecde33c3979bf02b793d392aca0403162Wink Saville 468767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (lc.recordNum > lc.countRecords) { 469767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, lc.results, null); 470767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 471469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh phone.mCM.iccIO(COMMAND_READ_RECORD, lc.efid, getEFPath(lc.efid), 472767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc.recordNum, 473767a662ecde33c3979bf02b793d392aca0403162Wink Saville READ_RECORD_MODE_ABSOLUTE, 474767a662ecde33c3979bf02b793d392aca0403162Wink Saville lc.recordSize, null, null, 475767a662ecde33c3979bf02b793d392aca0403162Wink Saville obtainMessage(EVENT_READ_RECORD_DONE, lc)); 476767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 477767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 478767a662ecde33c3979bf02b793d392aca0403162Wink Saville 479767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 480767a662ecde33c3979bf02b793d392aca0403162Wink Saville 481767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_READ_BINARY_DONE: 482767a662ecde33c3979bf02b793d392aca0403162Wink Saville ar = (AsyncResult)msg.obj; 483767a662ecde33c3979bf02b793d392aca0403162Wink Saville response = (Message) ar.userObj; 484767a662ecde33c3979bf02b793d392aca0403162Wink Saville result = (IccIoResult) ar.result; 485767a662ecde33c3979bf02b793d392aca0403162Wink Saville 486767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ar.exception != null) { 487767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, ar.exception); 488767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 489767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 490767a662ecde33c3979bf02b793d392aca0403162Wink Saville 491767a662ecde33c3979bf02b793d392aca0403162Wink Saville iccException = result.getException(); 492767a662ecde33c3979bf02b793d392aca0403162Wink Saville 493767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (iccException != null) { 494767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, iccException); 495767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 496767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 497767a662ecde33c3979bf02b793d392aca0403162Wink Saville 498767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, result.payload, null); 499767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 500767a662ecde33c3979bf02b793d392aca0403162Wink Saville 501767a662ecde33c3979bf02b793d392aca0403162Wink Saville }} catch (Exception exc) { 502767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (response != null) { 503767a662ecde33c3979bf02b793d392aca0403162Wink Saville sendResult(response, null, exc); 504767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 505767a662ecde33c3979bf02b793d392aca0403162Wink Saville loge("uncaught exception" + exc); 506767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 507767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 508767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 509767a662ecde33c3979bf02b793d392aca0403162Wink Saville 510469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh /** 511469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh * Returns the root path of the EF file. 512469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh * i.e returns MasterFile + DFfile as a string. 513469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh * Ex: For EF_ADN on a SIM, it will return "3F007F10" 514469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh * This function handles only EFids that are common to 515469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh * RUIM, SIM, USIM and other types of Icc cards. 516469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh * 517469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh * @param efId 518469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh * @return root path of the file. 519469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh */ 520469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh protected String getCommonIccEFPath(int efid) { 521469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh switch(efid) { 522469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh case EF_ADN: 523469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh case EF_FDN: 524469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh case EF_MSISDN: 525469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh case EF_SDN: 526469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh case EF_EXT1: 527469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh case EF_EXT2: 528469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh case EF_EXT3: 529469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh return MF_SIM + DF_TELECOM; 530469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh 531469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh case EF_ICCID: 532469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh return MF_SIM; 533469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh case EF_IMG: 534469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh return MF_SIM + DF_TELECOM + DF_GRAPHICS; 535469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh } 536469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh return null; 537469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh } 538469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh 539469d5ba4cd963e9a6b39bb0514f7cf54ea503b30Jaikumar Ganesh protected abstract String getEFPath(int efid); 540767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected abstract void logd(String s); 541767a662ecde33c3979bf02b793d392aca0403162Wink Saville 542767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected abstract void loge(String s); 543767a662ecde33c3979bf02b793d392aca0403162Wink Saville 544767a662ecde33c3979bf02b793d392aca0403162Wink Saville} 545