19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savillepackage com.android.internal.telephony;
1804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
1904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.RILConstants;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide}
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
2604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savillepublic class CommandException extends RuntimeException {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Error e;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public enum Error {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        INVALID_RESPONSE,
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RADIO_NOT_AVAILABLE,
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        GENERIC_FAILURE,
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        PASSWORD_INCORRECT,
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SIM_PIN2,
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SIM_PUK2,
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        REQUEST_NOT_SUPPORTED,
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        OP_NOT_ALLOWED_DURING_VOICE_CALL,
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        OP_NOT_ALLOWED_BEFORE_REG_NW,
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SMS_FAIL_RETRY,
4018573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla        SIM_ABSENT,
4118573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla        SUBSCRIPTION_NOT_AVAILABLE,
4218573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla        MODE_NOT_SUPPORTED,
4318573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla        FDN_CHECK_FAILURE,
447fb4b8455ccccde4698bed1a1906434a14a611a6John Wang        ILLEGAL_SIM_OR_ME,
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public CommandException(Error e) {
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(e.toString());
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.e = e;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static CommandException
5304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    fromRilErrno(int ril_errno) {
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch(ril_errno) {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RILConstants.SUCCESS:                       return null;
5604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            case RILConstants.RIL_ERRNO_INVALID_RESPONSE:
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.INVALID_RESPONSE);
5804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            case RILConstants.RADIO_NOT_AVAILABLE:
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.RADIO_NOT_AVAILABLE);
6004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            case RILConstants.GENERIC_FAILURE:
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.GENERIC_FAILURE);
6204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            case RILConstants.PASSWORD_INCORRECT:
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.PASSWORD_INCORRECT);
6404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            case RILConstants.SIM_PIN2:
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.SIM_PIN2);
6604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            case RILConstants.SIM_PUK2:
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.SIM_PUK2);
6804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            case RILConstants.REQUEST_NOT_SUPPORTED:
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.REQUEST_NOT_SUPPORTED);
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RILConstants.OP_NOT_ALLOWED_DURING_VOICE_CALL:
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.OP_NOT_ALLOWED_DURING_VOICE_CALL);
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RILConstants.OP_NOT_ALLOWED_BEFORE_REG_NW:
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.OP_NOT_ALLOWED_BEFORE_REG_NW);
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case RILConstants.SMS_SEND_FAIL_RETRY:
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.SMS_FAIL_RETRY);
7618573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla            case RILConstants.SIM_ABSENT:
7718573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla                return new CommandException(Error.SIM_ABSENT);
7818573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla            case RILConstants.SUBSCRIPTION_NOT_AVAILABLE:
7918573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla                return new CommandException(Error.SUBSCRIPTION_NOT_AVAILABLE);
8018573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla            case RILConstants.MODE_NOT_SUPPORTED:
8118573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla                return new CommandException(Error.MODE_NOT_SUPPORTED);
8218573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla            case RILConstants.FDN_CHECK_FAILURE:
8318573e9281d6e5621fa1663dac29b558291913d7Naveen Kalla                return new CommandException(Error.FDN_CHECK_FAILURE);
847fb4b8455ccccde4698bed1a1906434a14a611a6John Wang            case RILConstants.ILLEGAL_SIM_OR_ME:
857fb4b8455ccccde4698bed1a1906434a14a611a6John Wang                return new CommandException(Error.ILLEGAL_SIM_OR_ME);
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default:
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.e("GSM", "Unrecognized RIL errno " + ril_errno);
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new CommandException(Error.INVALID_RESPONSE);
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public Error getCommandError() {
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return e;
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
99