content: /*
   * Copyright (C) 2007 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.android.internal.telephony;
  
  import android.annotation.UnsupportedAppUsage;
  import android.telephony.Rlog;
  
  /**
   * {@hide}
   */
  public class CommandException extends RuntimeException {
      @UnsupportedAppUsage
      private Error mError;
  
      public enum Error {
          INVALID_RESPONSE,
          @UnsupportedAppUsage
          RADIO_NOT_AVAILABLE,
          @UnsupportedAppUsage
          GENERIC_FAILURE,
          @UnsupportedAppUsage
          PASSWORD_INCORRECT,
          SIM_PIN2,
          @UnsupportedAppUsage
          SIM_PUK2,
          @UnsupportedAppUsage
          REQUEST_NOT_SUPPORTED,
          OP_NOT_ALLOWED_DURING_VOICE_CALL,
          OP_NOT_ALLOWED_BEFORE_REG_NW,
          @UnsupportedAppUsage
          SMS_FAIL_RETRY,
          SIM_ABSENT,
          SUBSCRIPTION_NOT_AVAILABLE,
          MODE_NOT_SUPPORTED,
          FDN_CHECK_FAILURE,
          ILLEGAL_SIM_OR_ME,
          MISSING_RESOURCE,
          NO_SUCH_ELEMENT,
          SUBSCRIPTION_NOT_SUPPORTED,
          DIAL_MODIFIED_TO_USSD,
          DIAL_MODIFIED_TO_SS,
          DIAL_MODIFIED_TO_DIAL,
          USSD_MODIFIED_TO_DIAL,
          USSD_MODIFIED_TO_SS,
          USSD_MODIFIED_TO_USSD,
          SS_MODIFIED_TO_DIAL,
          SS_MODIFIED_TO_DIAL_VIDEO,
          SS_MODIFIED_TO_USSD,
          SS_MODIFIED_TO_SS,
          SIM_ALREADY_POWERED_OFF,
          SIM_ALREADY_POWERED_ON,
          SIM_DATA_NOT_AVAILABLE,
          SIM_SAP_CONNECT_FAILURE,
          SIM_SAP_MSG_SIZE_TOO_LARGE,
          SIM_SAP_MSG_SIZE_TOO_SMALL,
          SIM_SAP_CONNECT_OK_CALL_ONGOING,
          LCE_NOT_SUPPORTED,
          NO_MEMORY,
          INTERNAL_ERR,
          SYSTEM_ERR,
          MODEM_ERR,
          INVALID_STATE,
          NO_RESOURCES,
          SIM_ERR,
          INVALID_ARGUMENTS,
          INVALID_SIM_STATE,
          INVALID_MODEM_STATE,
          INVALID_CALL_ID,
          NO_SMS_TO_ACK,
          NETWORK_ERR,
          REQUEST_RATE_LIMITED,
          SIM_BUSY,
          SIM_FULL,
          NETWORK_REJECT,
          OPERATION_NOT_ALLOWED,
          EMPTY_RECORD,
          INVALID_SMS_FORMAT,
          ENCODING_ERR,
          INVALID_SMSC_ADDRESS,
          NO_SUCH_ENTRY,
          NETWORK_NOT_READY,
          NOT_PROVISIONED,
          NO_SUBSCRIPTION,
          NO_NETWORK_FOUND,
          DEVICE_IN_USE,
          ABORTED,
          OEM_ERROR_1,
          OEM_ERROR_2,
          OEM_ERROR_3,
          OEM_ERROR_4,
          OEM_ERROR_5,
          OEM_ERROR_6,
          OEM_ERROR_7,
          OEM_ERROR_8,
          OEM_ERROR_9,
          OEM_ERROR_10,
          OEM_ERROR_11,
          OEM_ERROR_12,
          OEM_ERROR_13,
          OEM_ERROR_14,
          OEM_ERROR_15,
          OEM_ERROR_16,
          OEM_ERROR_17,
          OEM_ERROR_18,
          OEM_ERROR_19,
          OEM_ERROR_20,
          OEM_ERROR_21,
          OEM_ERROR_22,
          OEM_ERROR_23,
          OEM_ERROR_24,
          OEM_ERROR_25,
      }
  
      @UnsupportedAppUsage
      public CommandException(Error e) {
          super(e.toString());
          mError = e;
      }
  
      public CommandException(Error e, String errString) {
          super(errString);
          mError = e;
      }
  
      @UnsupportedAppUsage
      public static CommandException
      fromRilErrno(int ril_errno) {
          switch(ril_errno) {
              case RILConstants.SUCCESS:                       return null;
              case RILConstants.RIL_ERRNO_INVALID_RESPONSE:
                  return new CommandException(Error.INVALID_RESPONSE);
              case RILConstants.RADIO_NOT_AVAILABLE:
                  return new CommandException(Error.RADIO_NOT_AVAILABLE);
              case RILConstants.GENERIC_FAILURE:
                  return new CommandException(Error.GENERIC_FAILURE);
              case RILConstants.PASSWORD_INCORRECT:
                  return new CommandException(Error.PASSWORD_INCORRECT);
              case RILConstants.SIM_PIN2:
                  return new CommandException(Error.SIM_PIN2);
              case RILConstants.SIM_PUK2:
                  return new CommandException(Error.SIM_PUK2);
              case RILConstants.REQUEST_NOT_SUPPORTED:
                  return new CommandException(Error.REQUEST_NOT_SUPPORTED);
              case RILConstants.OP_NOT_ALLOWED_DURING_VOICE_CALL:
                  return new CommandException(Error.OP_NOT_ALLOWED_DURING_VOICE_CALL);
              case RILConstants.OP_NOT_ALLOWED_BEFORE_REG_NW:
                  return new CommandException(Error.OP_NOT_ALLOWED_BEFORE_REG_NW);
              case RILConstants.SMS_SEND_FAIL_RETRY:
                  return new CommandException(Error.SMS_FAIL_RETRY);
              case RILConstants.SIM_ABSENT:
                  return new CommandException(Error.SIM_ABSENT);
              case RILConstants.SUBSCRIPTION_NOT_AVAILABLE:
                  return new CommandException(Error.SUBSCRIPTION_NOT_AVAILABLE);
              case RILConstants.MODE_NOT_SUPPORTED:
                  return new CommandException(Error.MODE_NOT_SUPPORTED);
              case RILConstants.FDN_CHECK_FAILURE:
                  return new CommandException(Error.FDN_CHECK_FAILURE);
              case RILConstants.ILLEGAL_SIM_OR_ME:
                  return new CommandException(Error.ILLEGAL_SIM_OR_ME);
              case RILConstants.MISSING_RESOURCE:
                  return new CommandException(Error.MISSING_RESOURCE);
              case RILConstants.NO_SUCH_ELEMENT:
                  return new CommandException(Error.NO_SUCH_ELEMENT);
              case RILConstants.SUBSCRIPTION_NOT_SUPPORTED:
                  return new CommandException(Error.SUBSCRIPTION_NOT_SUPPORTED);
              case RILConstants.DIAL_MODIFIED_TO_USSD:
                  return new CommandException(Error.DIAL_MODIFIED_TO_USSD);
              case RILConstants.DIAL_MODIFIED_TO_SS:
                  return new CommandException(Error.DIAL_MODIFIED_TO_SS);
              case RILConstants.DIAL_MODIFIED_TO_DIAL:
                  return new CommandException(Error.DIAL_MODIFIED_TO_DIAL);
              case RILConstants.USSD_MODIFIED_TO_DIAL:
                  return new CommandException(Error.USSD_MODIFIED_TO_DIAL);
              case RILConstants.USSD_MODIFIED_TO_SS:
                  return new CommandException(Error.USSD_MODIFIED_TO_SS);
              case RILConstants.USSD_MODIFIED_TO_USSD:
                  return new CommandException(Error.USSD_MODIFIED_TO_USSD);
              case RILConstants.SS_MODIFIED_TO_DIAL:
                  return new CommandException(Error.SS_MODIFIED_TO_DIAL);
              case RILConstants.SS_MODIFIED_TO_USSD:
                  return new CommandException(Error.SS_MODIFIED_TO_USSD);
              case RILConstants.SS_MODIFIED_TO_SS:
                  return new CommandException(Error.SS_MODIFIED_TO_SS);
              case RILConstants.SIM_ALREADY_POWERED_OFF:
                  return new CommandException(Error.SIM_ALREADY_POWERED_OFF);
              case RILConstants.SIM_ALREADY_POWERED_ON:
                  return new CommandException(Error.SIM_ALREADY_POWERED_ON);
              case RILConstants.SIM_DATA_NOT_AVAILABLE:
                  return new CommandException(Error.SIM_DATA_NOT_AVAILABLE);
              case RILConstants.SIM_SAP_CONNECT_FAILURE:
                  return new CommandException(Error.SIM_SAP_CONNECT_FAILURE);
              case RILConstants.SIM_SAP_MSG_SIZE_TOO_LARGE:
                  return new CommandException(Error.SIM_SAP_MSG_SIZE_TOO_LARGE);
              case RILConstants.SIM_SAP_MSG_SIZE_TOO_SMALL:
                  return new CommandException(Error.SIM_SAP_MSG_SIZE_TOO_SMALL);
              case RILConstants.SIM_SAP_CONNECT_OK_CALL_ONGOING:
                  return new CommandException(Error.SIM_SAP_CONNECT_OK_CALL_ONGOING);
              case RILConstants.LCE_NOT_SUPPORTED:
                  return new CommandException(Error.LCE_NOT_SUPPORTED);
              case RILConstants.NO_MEMORY:
                  return new CommandException(Error.NO_MEMORY);
              case RILConstants.INTERNAL_ERR:
                  return new CommandException(Error.INTERNAL_ERR);
              case RILConstants.SYSTEM_ERR:
                  return new CommandException(Error.SYSTEM_ERR);
              case RILConstants.MODEM_ERR:
                  return new CommandException(Error.MODEM_ERR);
              case RILConstants.INVALID_STATE:
                  return new CommandException(Error.INVALID_STATE);
              case RILConstants.NO_RESOURCES:
                  return new CommandException(Error.NO_RESOURCES);
              case RILConstants.SIM_ERR:
                  return new CommandException(Error.SIM_ERR);
              case RILConstants.INVALID_ARGUMENTS:
                  return new CommandException(Error.INVALID_ARGUMENTS);
              case RILConstants.INVALID_SIM_STATE:
                  return new CommandException(Error.INVALID_SIM_STATE);
              case RILConstants.INVALID_MODEM_STATE:
                  return new CommandException(Error.INVALID_MODEM_STATE);
              case RILConstants.INVALID_CALL_ID:
                  return new CommandException(Error.INVALID_CALL_ID);
              case RILConstants.NO_SMS_TO_ACK:
                  return new CommandException(Error.NO_SMS_TO_ACK);
              case RILConstants.NETWORK_ERR:
                  return new CommandException(Error.NETWORK_ERR);
              case RILConstants.REQUEST_RATE_LIMITED:
                  return new CommandException(Error.REQUEST_RATE_LIMITED);
              case RILConstants.SIM_BUSY:
                  return new CommandException(Error.SIM_BUSY);
              case RILConstants.SIM_FULL:
                  return new CommandException(Error.SIM_FULL);
              case RILConstants.NETWORK_REJECT:
                  return new CommandException(Error.NETWORK_REJECT);
              case RILConstants.OPERATION_NOT_ALLOWED:
                  return new CommandException(Error.OPERATION_NOT_ALLOWED);
              case RILConstants.EMPTY_RECORD:
                  return new CommandException(Error.EMPTY_RECORD);
              case RILConstants.INVALID_SMS_FORMAT:
                  return new CommandException(Error.INVALID_SMS_FORMAT);
              case RILConstants.ENCODING_ERR:
                  return new CommandException(Error.ENCODING_ERR);
              case RILConstants.INVALID_SMSC_ADDRESS:
                  return new CommandException(Error.INVALID_SMSC_ADDRESS);
              case RILConstants.NO_SUCH_ENTRY:
                  return new CommandException(Error.NO_SUCH_ENTRY);
              case RILConstants.NETWORK_NOT_READY:
                  return new CommandException(Error.NETWORK_NOT_READY);
              case RILConstants.NOT_PROVISIONED:
                  return new CommandException(Error.NOT_PROVISIONED);
              case RILConstants.NO_SUBSCRIPTION:
                  return new CommandException(Error.NO_SUBSCRIPTION);
              case RILConstants.NO_NETWORK_FOUND:
                  return new CommandException(Error.NO_NETWORK_FOUND);
              case RILConstants.DEVICE_IN_USE:
                  return new CommandException(Error.DEVICE_IN_USE);
              case RILConstants.ABORTED:
                  return new CommandException(Error.ABORTED);
              case RILConstants.INVALID_RESPONSE:
                  return new CommandException(Error.INVALID_RESPONSE);
              case RILConstants.OEM_ERROR_1:
                  return new CommandException(Error.OEM_ERROR_1);
              case RILConstants.OEM_ERROR_2:
                  return new CommandException(Error.OEM_ERROR_2);
              case RILConstants.OEM_ERROR_3:
                  return new CommandException(Error.OEM_ERROR_3);
              case RILConstants.OEM_ERROR_4:
                  return new CommandException(Error.OEM_ERROR_4);
              case RILConstants.OEM_ERROR_5:
                  return new CommandException(Error.OEM_ERROR_5);
              case RILConstants.OEM_ERROR_6:
                  return new CommandException(Error.OEM_ERROR_6);
              case RILConstants.OEM_ERROR_7:
                  return new CommandException(Error.OEM_ERROR_7);
              case RILConstants.OEM_ERROR_8:
                  return new CommandException(Error.OEM_ERROR_8);
              case RILConstants.OEM_ERROR_9:
                  return new CommandException(Error.OEM_ERROR_9);
              case RILConstants.OEM_ERROR_10:
                  return new CommandException(Error.OEM_ERROR_10);
              case RILConstants.OEM_ERROR_11:
                  return new CommandException(Error.OEM_ERROR_11);
              case RILConstants.OEM_ERROR_12:
                  return new CommandException(Error.OEM_ERROR_12);
              case RILConstants.OEM_ERROR_13:
                  return new CommandException(Error.OEM_ERROR_13);
              case RILConstants.OEM_ERROR_14:
                  return new CommandException(Error.OEM_ERROR_14);
              case RILConstants.OEM_ERROR_15:
                  return new CommandException(Error.OEM_ERROR_15);
              case RILConstants.OEM_ERROR_16:
                  return new CommandException(Error.OEM_ERROR_16);
              case RILConstants.OEM_ERROR_17:
                  return new CommandException(Error.OEM_ERROR_17);
              case RILConstants.OEM_ERROR_18:
                  return new CommandException(Error.OEM_ERROR_18);
              case RILConstants.OEM_ERROR_19:
                  return new CommandException(Error.OEM_ERROR_19);
              case RILConstants.OEM_ERROR_20:
                  return new CommandException(Error.OEM_ERROR_20);
              case RILConstants.OEM_ERROR_21:
                  return new CommandException(Error.OEM_ERROR_21);
              case RILConstants.OEM_ERROR_22:
                  return new CommandException(Error.OEM_ERROR_22);
              case RILConstants.OEM_ERROR_23:
                  return new CommandException(Error.OEM_ERROR_23);
              case RILConstants.OEM_ERROR_24:
                  return new CommandException(Error.OEM_ERROR_24);
              case RILConstants.OEM_ERROR_25:
                  return new CommandException(Error.OEM_ERROR_25);
  
              default:
                  Rlog.e("GSM", "Unrecognized RIL errno " + ril_errno);
                  return new CommandException(Error.INVALID_RESPONSE);
          }
      }
  
      @UnsupportedAppUsage
      public Error getCommandError() {
          return mError;
      }
  
  
  
  }
  