10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkapackage com.android.internal.telephony.uicc; 18d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenka 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class 240825495a331bb44df395a0cdb79fab85e68db5d5Wink SavilleIccIoResult { 250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int sw1; 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int sw2; 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public byte[] payload; 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccIoResult(int sw1, int sw2, byte[] payload) { 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this.sw1 = sw1; 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this.sw2 = sw2; 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this.payload = payload; 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccIoResult(int sw1, int sw2, String hexString) { 370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this(sw1, sw2, IccUtils.hexStringToBytes(hexString)); 380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 40cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String toString() { 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return "IccIoResponse sw1:0x" + Integer.toHexString(sw1) + " sw2:0x" 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + Integer.toHexString(sw2); 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * true if this operation was successful 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See GSM 11.11 Section 9.4 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (the fun stuff is absent in 51.011) 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean success() { 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return sw1 == 0x90 || sw1 == 0x91 || sw1 == 0x9e || sw1 == 0x9f; 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns exception on error or null if success 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccException getException() { 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (success()) return null; 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (sw1) { 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case 0x94: 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (sw2 == 0x08) { 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return new IccFileTypeMismatch(); 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return new IccFileNotFound(); 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return new IccException("sw1:" + sw1 + " sw2:" + sw2); 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 73