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