@Override
  public void dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
    if (!dialCode) {
      super.dial(address, clirMode, uusInfo, result);
      return;
    }
    RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);

    rr.mParcel.writeString(address);
    rr.mParcel.writeInt(clirMode);
    rr.mParcel.writeInt(0);
    rr.mParcel.writeInt(1);
    rr.mParcel.writeString("");

    if (uusInfo == null) {
      rr.mParcel.writeInt(0); // UUS information is absent
    } else {
      rr.mParcel.writeInt(1); // UUS information is present
      rr.mParcel.writeInt(uusInfo.getType());
      rr.mParcel.writeInt(uusInfo.getDcs());
      rr.mParcel.writeByteArray(uusInfo.getUserData());
    }

    if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));

    send(rr);
  }
  @Override
  public void dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
    RILRequest rr;
    if (PhoneNumberUtils.isEmergencyNumber(address)) {
      Log.v(LOG_TAG, "Emergency dial: " + address);
      rr = RILRequest.obtain(RIL_REQUEST_DIAL_EMERGENCY, result);
      rr.mp.writeString(address + "/");
    } else {
      rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
      rr.mp.writeString(address);
    }

    rr.mp.writeInt(clirMode);
    rr.mp.writeInt(0); // UUS information is absent

    if (uusInfo == null) {
      rr.mp.writeInt(0); // UUS information is absent
    } else {
      rr.mp.writeInt(1); // UUS information is present
      rr.mp.writeInt(uusInfo.getType());
      rr.mp.writeInt(uusInfo.getDcs());
      rr.mp.writeByteArray(uusInfo.getUserData());
    }

    if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));

    send(rr);
  }
  @Override
  public void getCdmaSubscriptionSource(Message response) {
    RILRequest rr =
        RILRequest.obtain(RILConstants.RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, response);

    if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
    Log.d(LOG_TAG, "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE blocked!!!");
    // send(rr);
  }
  @Override
  public void getVoiceRadioTechnology(Message result) {
    RILRequest rr = RILRequest.obtain(RIL_REQUEST_VOICE_RADIO_TECH, result);

    if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));

    // RIL versions below 7 do not support this request
    if (mRilVersion >= 7) send(rr);
    else Log.d(LOG_TAG, "RIL_REQUEST_VOICE_RADIO_TECH blocked!!!");
  }
  // Sends the real RIL request to the modem.
  private void sendPreferedNetworktype(int networkType, Message response) {
    RILRequest rr =
        RILRequest.obtain(RILConstants.RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, response);

    rr.mp.writeInt(1);
    rr.mp.writeInt(networkType);

    if (RILJ_LOGD)
      riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " : " + networkType);

    send(rr);
  }
  public void dialEmergencyCall(String address, int clirMode, Message result) {
    RILRequest rr;
    Log.v(LOG_TAG, "Emergency dial: " + address);

    rr = RILRequest.obtain(RIL_REQUEST_DIAL_EMERGENCY, result);
    rr.mp.writeString(address + "/");
    rr.mp.writeInt(clirMode);
    rr.mp.writeInt(0);
    rr.mp.writeInt(0);

    if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));

    send(rr);
  }
  @Override
  public void setRadioPower(boolean on, Message result) {
    RILRequest rr = RILRequest.obtain(RIL_REQUEST_RADIO_POWER, result);

    // samsung crap for airplane mode
    if (on) {
      rr.mp.writeInt(1);
      rr.mp.writeInt(1);
    } else {
      rr.mp.writeInt(2);
      rr.mp.writeInt(0);
      rr.mp.writeInt(0);
    }
    if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
    send(rr);
  }
  @Override
  protected void processSolicited(Parcel p) {
    int serial, error;
    boolean found = false;

    serial = p.readInt();
    error = p.readInt();

    Log.d(LOG_TAG, "Serial: " + serial);
    Log.d(LOG_TAG, "Error: " + error);

    RILRequest rr;

    rr = findAndRemoveRequestFromList(serial);

    if (rr == null) {
      Log.w(LOG_TAG, "Unexpected solicited response! sn: " + serial + " error: " + error);
      return;
    }

    Object ret = null;

    if (error == 0 || p.dataAvail() > 0) {
      // either command succeeds or command fails but with data payload
      try {
        switch (rr.mRequest) {
            /*
            cat libs/telephony/ril_commands.h \
            | egrep "^ *{RIL_" \
            | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/'
             */
          case RIL_REQUEST_GET_SIM_STATUS:
            ret = responseIccCardStatus(p);
            break;
          case RIL_REQUEST_ENTER_SIM_PIN:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_ENTER_SIM_PUK:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_ENTER_SIM_PIN2:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_ENTER_SIM_PUK2:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CHANGE_SIM_PIN:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CHANGE_SIM_PIN2:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_GET_CURRENT_CALLS:
            ret = responseCallList(p);
            break;
          case RIL_REQUEST_DIAL:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GET_IMSI:
            ret = responseString(p);
            break;
          case RIL_REQUEST_HANGUP:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CONFERENCE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_UDUB:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_LAST_CALL_FAIL_CAUSE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SIGNAL_STRENGTH:
            ret = responseSignalStrength(p);
            break;
          case RIL_REQUEST_VOICE_REGISTRATION_STATE:
            ret = responseStrings(p);
            break;
          case RIL_REQUEST_DATA_REGISTRATION_STATE:
            ret = responseStrings(p);
            break;
          case RIL_REQUEST_OPERATOR:
            ret = responseStrings(p);
            break;
          case RIL_REQUEST_RADIO_POWER:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_DTMF:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SEND_SMS:
            ret = responseSMS(p);
            break;
          case RIL_REQUEST_SEND_SMS_EXPECT_MORE:
            ret = responseSMS(p);
            break;
          case RIL_REQUEST_SETUP_DATA_CALL:
            ret = responseSetupDataCall(p);
            break;
          case RIL_REQUEST_SIM_IO:
            ret = responseICC_IO(p);
            break;
          case RIL_REQUEST_SEND_USSD:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CANCEL_USSD:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GET_CLIR:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SET_CLIR:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS:
            ret = responseCallForward(p);
            break;
          case RIL_REQUEST_SET_CALL_FORWARD:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_CALL_WAITING:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SET_CALL_WAITING:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SMS_ACKNOWLEDGE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GET_IMEI:
            ret = responseString(p);
            break;
          case RIL_REQUEST_GET_IMEISV:
            ret = responseString(p);
            break;
          case RIL_REQUEST_ANSWER:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_DEACTIVATE_DATA_CALL:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_FACILITY_LOCK:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SET_FACILITY_LOCK:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CHANGE_BARRING_PASSWORD:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS:
            ret = responseOperatorInfos(p);
            break;
          case RIL_REQUEST_DTMF_START:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_DTMF_STOP:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_BASEBAND_VERSION:
            ret = responseString(p);
            break;
          case RIL_REQUEST_SEPARATE_CONNECTION:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_MUTE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GET_MUTE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_QUERY_CLIP:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_DATA_CALL_LIST:
            ret = responseDataCallList(p);
            break;
          case RIL_REQUEST_RESET_RADIO:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_OEM_HOOK_RAW:
            ret = responseRaw(p);
            break;
          case RIL_REQUEST_OEM_HOOK_STRINGS:
            ret = responseStrings(p);
            break;
          case RIL_REQUEST_SCREEN_STATE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_WRITE_SMS_TO_SIM:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_DELETE_SMS_ON_SIM:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_BAND_MODE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_STK_GET_PROFILE:
            ret = responseString(p);
            break;
          case RIL_REQUEST_STK_SET_PROFILE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND:
            ret = responseString(p);
            break;
          case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_EXPLICIT_CALL_TRANSFER:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE:
            ret = responseNetworkType(p);
            break;
          case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS:
            ret = responseCellList(p);
            break;
          case RIL_REQUEST_SET_LOCATION_UPDATES:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SET_TTY_MODE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_TTY_MODE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CDMA_FLASH:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_BURST_DTMF:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_SEND_SMS:
            ret = responseSMS(p);
            break;
          case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG:
            ret = responseGmsBroadcastConfig(p);
            break;
          case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GSM_BROADCAST_ACTIVATION:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG:
            ret = responseCdmaBroadcastConfig(p);
            break;
          case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_SUBSCRIPTION:
            ret = responseStrings(p);
            break;
          case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_DEVICE_IDENTITY:
            ret = responseStrings(p);
            break;
          case RIL_REQUEST_GET_SMSC_ADDRESS:
            ret = responseString(p);
            break;
          case RIL_REQUEST_SET_SMSC_ADDRESS:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING:
            ret = responseVoid(p);
            break;
          default:
            throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
            // break;
        }
      } catch (Throwable tr) {
        // Exceptions here usually mean invalid RIL responses

        Log.w(
            LOG_TAG,
            rr.serialString()
                + "< "
                + requestToString(rr.mRequest)
                + " exception, possible invalid RIL response",
            tr);

        if (rr.mResult != null) {
          AsyncResult.forMessage(rr.mResult, null, tr);
          rr.mResult.sendToTarget();
        }
        rr.release();
        return;
      }
    }

    if (error != 0) {
      // ugly fix for Samsung messing up SMS_SEND request fail in binary RIL
      if (!(error == -1 && rr.mRequest == RIL_REQUEST_SEND_SMS)) {
        rr.onError(error, ret);
        rr.release();
        return;
      } else {
        try {
          ret = responseSMS(p);
        } catch (Throwable tr) {
          Log.w(
              LOG_TAG,
              rr.serialString()
                  + "< "
                  + requestToString(rr.mRequest)
                  + " exception, Processing Samsung SMS fix ",
              tr);
          rr.onError(error, ret);
          rr.release();
          return;
        }
      }
    }

    if (RILJ_LOGD)
      riljLog(
          rr.serialString()
              + "< "
              + requestToString(rr.mRequest)
              + " "
              + retToString(rr.mRequest, ret));

    if (rr.mResult != null) {
      AsyncResult.forMessage(rr.mResult, ret, null);
      rr.mResult.sendToTarget();
    }

    rr.release();
  }
  @Override
  protected RILRequest processSolicited(Parcel p) {
    int serial, error;
    boolean found = false;

    serial = p.readInt();
    error = p.readInt();

    RILRequest rr;

    rr = findAndRemoveRequestFromList(serial);

    if (rr == null) {
      Rlog.w(RILJ_LOG_TAG, "Unexpected solicited response! sn: " + serial + " error: " + error);
      return null;
    }

    Object ret = null;

    if (error == 0 || p.dataAvail() > 0) {
      // either command succeeds or command fails but with data payload
      try {
        switch (rr.mRequest) {
            /*
            cat libs/telephony/ril_commands.h \
            | egrep "^ *{RIL_" \
            | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/'
                        */
          case RIL_REQUEST_GET_SIM_STATUS:
            ret = responseIccCardStatus(p);
            break;
          case RIL_REQUEST_ENTER_SIM_PIN:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_ENTER_SIM_PUK:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_ENTER_SIM_PIN2:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_ENTER_SIM_PUK2:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CHANGE_SIM_PIN:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CHANGE_SIM_PIN2:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_GET_CURRENT_CALLS:
            ret = responseCallList(p);
            break;
          case RIL_REQUEST_DIAL:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GET_IMSI:
            ret = responseString(p);
            break;
          case RIL_REQUEST_HANGUP:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND:
            {
              if (mTestingEmergencyCall.getAndSet(false)) {
                if (mEmergencyCallbackModeRegistrant != null) {
                  riljLog("testing emergency call, notify ECM Registrants");
                  mEmergencyCallbackModeRegistrant.notifyRegistrant();
                }
              }
              ret = responseVoid(p);
              break;
            }
          case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CONFERENCE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_UDUB:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_LAST_CALL_FAIL_CAUSE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SIGNAL_STRENGTH:
            ret = responseSignalStrength(p);
            break;
            // modification start
            // prevent exceptions from happenimg because the null value is null or a hexadecimel. so
            // convert if it is not null
          case RIL_REQUEST_VOICE_REGISTRATION_STATE:
            ret = responseVoiceDataRegistrationState(p);
            break;
          case RIL_REQUEST_DATA_REGISTRATION_STATE:
            ret = responseVoiceDataRegistrationState(p);
            break;
            // this fixes bogus values the modem creates
            // sometimes the  ril may print out
            // (always on sprint)
            // sprint: (empty,empty,31000)
            // this problemaic on sprint, lte won't start, response is slow
            // speeds up response time on eherpderpd/lte networks
          case RIL_REQUEST_OPERATOR:
            ret = operatorCheck(p);
            break;
            // end modification
          case RIL_REQUEST_RADIO_POWER:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_DTMF:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SEND_SMS:
            ret = responseSMS(p);
            break;
          case RIL_REQUEST_SEND_SMS_EXPECT_MORE:
            ret = responseSMS(p);
            break;
          case RIL_REQUEST_SETUP_DATA_CALL:
            ret = responseSetupDataCall(p);
            break;
          case RIL_REQUEST_SIM_IO:
            ret = responseICC_IO(p);
            break;
          case RIL_REQUEST_SEND_USSD:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CANCEL_USSD:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GET_CLIR:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SET_CLIR:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS:
            ret = responseCallForward(p);
            break;
          case RIL_REQUEST_SET_CALL_FORWARD:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_CALL_WAITING:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SET_CALL_WAITING:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SMS_ACKNOWLEDGE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GET_IMEI:
            ret = responseString(p);
            break;
          case RIL_REQUEST_GET_IMEISV:
            ret = responseString(p);
            break;
          case RIL_REQUEST_ANSWER:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_DEACTIVATE_DATA_CALL:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_FACILITY_LOCK:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SET_FACILITY_LOCK:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CHANGE_BARRING_PASSWORD:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS:
            ret = responseOperatorInfos(p);
            break;
          case RIL_REQUEST_DTMF_START:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_DTMF_STOP:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_BASEBAND_VERSION:
            ret = responseString(p);
            break;
          case RIL_REQUEST_SEPARATE_CONNECTION:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_MUTE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GET_MUTE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_QUERY_CLIP:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_DATA_CALL_LIST:
            ret = responseDataCallList(p);
            break;
          case RIL_REQUEST_RESET_RADIO:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_OEM_HOOK_RAW:
            ret = responseRaw(p);
            break;
          case RIL_REQUEST_OEM_HOOK_STRINGS:
            ret = responseStrings(p);
            break;
          case RIL_REQUEST_SCREEN_STATE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_WRITE_SMS_TO_SIM:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_DELETE_SMS_ON_SIM:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_BAND_MODE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_STK_GET_PROFILE:
            ret = responseString(p);
            break;
          case RIL_REQUEST_STK_SET_PROFILE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND:
            ret = responseString(p);
            break;
          case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_EXPLICIT_CALL_TRANSFER:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE:
            ret = responseGetPreferredNetworkType(p);
            break;
          case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS:
            ret = responseCellList(p);
            break;
          case RIL_REQUEST_SET_LOCATION_UPDATES:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_SET_TTY_MODE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_QUERY_TTY_MODE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CDMA_FLASH:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_BURST_DTMF:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_SEND_SMS:
            ret = responseSMS(p);
            break;
          case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG:
            ret = responseGmsBroadcastConfig(p);
            break;
          case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_GSM_BROADCAST_ACTIVATION:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG:
            ret = responseCdmaBroadcastConfig(p);
            break;
          case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_SUBSCRIPTION:
            ret = responseStrings(p);
            break;
          case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_DEVICE_IDENTITY:
            ret = responseStrings(p);
            break;
          case RIL_REQUEST_GET_SMSC_ADDRESS:
            ret = responseString(p);
            break;
          case RIL_REQUEST_SET_SMSC_ADDRESS:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_ISIM_AUTHENTICATION:
            ret = responseString(p);
            break;
          case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS:
            ret = responseICC_IO(p);
            break;
          case RIL_REQUEST_VOICE_RADIO_TECH:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_GET_CELL_INFO_LIST:
            ret = responseCellInfoList(p);
            break;
          case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_SET_INITIAL_ATTACH_APN:
            ret = responseVoid(p);
            break;
          case RIL_REQUEST_IMS_REGISTRATION_STATE:
            ret = responseInts(p);
            break;
          case RIL_REQUEST_IMS_SEND_SMS:
            ret = responseSMS(p);
            break;
          default:
            throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
            // break;
        }
      } catch (Throwable tr) {
        // Exceptions here usually mean invalid RIL responses

        Rlog.w(
            RILJ_LOG_TAG,
            rr.serialString()
                + "< "
                + requestToString(rr.mRequest)
                + " exception, possible invalid RIL response",
            tr);

        if (rr.mResult != null) {
          AsyncResult.forMessage(rr.mResult, null, tr);
          rr.mResult.sendToTarget();
        }
        return rr;
      }
    }

    // Here and below fake RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, see b/7255789.
    // This is needed otherwise we don't automatically transition to the main lock
    // screen when the pin or puk is entered incorrectly.
    switch (rr.mRequest) {
      case RIL_REQUEST_ENTER_SIM_PUK:
      case RIL_REQUEST_ENTER_SIM_PUK2:
        if (mIccStatusChangedRegistrants != null) {
          if (RILJ_LOGD) {
            riljLog(
                "ON enter sim puk fakeSimStatusChanged: reg count="
                    + mIccStatusChangedRegistrants.size());
          }
          mIccStatusChangedRegistrants.notifyRegistrants();
        }
        break;
    }

    if (error != 0) {
      switch (rr.mRequest) {
        case RIL_REQUEST_ENTER_SIM_PIN:
        case RIL_REQUEST_ENTER_SIM_PIN2:
        case RIL_REQUEST_CHANGE_SIM_PIN:
        case RIL_REQUEST_CHANGE_SIM_PIN2:
        case RIL_REQUEST_SET_FACILITY_LOCK:
          if (mIccStatusChangedRegistrants != null) {
            if (RILJ_LOGD) {
              riljLog(
                  "ON some errors fakeSimStatusChanged: reg count="
                      + mIccStatusChangedRegistrants.size());
            }
            mIccStatusChangedRegistrants.notifyRegistrants();
          }
          break;
      }

      rr.onError(error, ret);
    } else {

      if (RILJ_LOGD)
        riljLog(
            rr.serialString()
                + "< "
                + requestToString(rr.mRequest)
                + " "
                + retToString(rr.mRequest, ret));

      if (rr.mResult != null) {
        AsyncResult.forMessage(rr.mResult, ret, null);
        rr.mResult.sendToTarget();
      }
    }
    return rr;
  }