-
-
Save javelinanddart/91e6568b2650c3262c6ba1b80ee7db1e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.android.internal.telephony; | |
import android.content.BroadcastReceiver; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.content.IntentFilter; | |
import android.hardware.display.DisplayManager; | |
import android.hardware.display.DisplayManager.DisplayListener; | |
import android.net.ConnectivityManager; | |
import android.net.LocalSocket; | |
import android.net.LocalSocketAddress; | |
import android.net.LocalSocketAddress.Namespace; | |
import android.os.AsyncResult; | |
import android.os.Build; | |
import android.os.Bundle; | |
import android.os.Handler; | |
import android.os.HandlerThread; | |
import android.os.Looper; | |
import android.os.Message; | |
import android.os.Parcel; | |
import android.os.PowerManager; | |
import android.os.PowerManager.WakeLock; | |
import android.os.SystemClock; | |
import android.os.SystemProperties; | |
import android.preference.PreferenceManager; | |
import android.provider.Settings.Global; | |
import android.provider.Settings.Secure; | |
import android.provider.Settings.System; | |
import android.provider.Telephony.Threads; | |
import android.telephony.CellInfo; | |
import android.telephony.ModemActivityInfo; | |
import android.telephony.NeighboringCellInfo; | |
import android.telephony.PhoneNumberUtils; | |
import android.telephony.RadioAccessFamily; | |
import android.telephony.Rlog; | |
import android.telephony.SignalStrength; | |
import android.telephony.SmsMessage; | |
import android.telephony.SubscriptionManager; | |
import android.telephony.TelephonyManager; | |
import android.telephony.gsm.CbConfig; | |
import android.text.TextUtils; | |
import android.util.Base64; | |
import android.util.SparseArray; | |
import android.view.Display; | |
import com.android.internal.telephony.CommandsInterface.RadioState; | |
import com.android.internal.telephony.DriverCall.State; | |
import com.android.internal.telephony.cdma.CdmaCallWaitingNotification; | |
import com.android.internal.telephony.cdma.CdmaInformationRecords; | |
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaDisplayInfoRec; | |
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaLineControlInfoRec; | |
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaNumberInfoRec; | |
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaRedirectingNumberInfoRec; | |
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaSignalInfoRec; | |
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaT53AudioControlInfoRec; | |
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaT53ClirInfoRec; | |
import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo; | |
import com.android.internal.telephony.dataconnection.DataCallResponse; | |
import com.android.internal.telephony.dataconnection.DataProfile; | |
import com.android.internal.telephony.dataconnection.DcFailCause; | |
import com.android.internal.telephony.gsm.CallFailCause; | |
import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; | |
import com.android.internal.telephony.gsm.SsData; | |
import com.android.internal.telephony.gsm.SuppServiceNotification; | |
import com.android.internal.telephony.uicc.AdnRecord; | |
import com.android.internal.telephony.uicc.IccCardApplicationStatus; | |
import com.android.internal.telephony.uicc.IccCardStatus; | |
import com.android.internal.telephony.uicc.IccIoResult; | |
import com.android.internal.telephony.uicc.IccRefreshResponse; | |
import com.android.internal.telephony.uicc.IccUtils; | |
import com.android.internal.telephony.uicc.SimLockInfoResult; | |
import com.android.internal.telephony.uicc.SimPBEntryResult; | |
import com.google.android.mms.pdu.CharacterSets; | |
import com.google.android.mms.pdu.PduPart; | |
import com.samsung.android.feature.FloatingFeature; | |
import com.sec.android.app.CscFeature; | |
import com.sec.android.emergencymode.EmergencyManager; | |
import java.io.ByteArrayInputStream; | |
import java.io.DataInputStream; | |
import java.io.FileDescriptor; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.io.PrintWriter; | |
import java.io.UnsupportedEncodingException; | |
import java.util.ArrayList; | |
import java.util.Arrays; | |
import java.util.Collections; | |
import java.util.HashSet; | |
import java.util.Iterator; | |
import java.util.Set; | |
import java.util.concurrent.atomic.AtomicBoolean; | |
public class RIL extends BaseCommands implements CommandsInterface { | |
private static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31; | |
private static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3; | |
public static final boolean CELL_BROADCAST_ENABLE = true; | |
private static final int DEFAULT_WAKE_LOCK_TIMEOUT = 60000; | |
static final String ETWS_TEST = "jp.co.android.softbankCBM.ETWS"; | |
static final int EVENT_SEND = 1; | |
static final int EVENT_WAKE_LOCK_TIMEOUT = 2; | |
static final String LOG_LEVEL_PROP = "ro.debug_level"; | |
static final String LOG_LEVEL_PROP_HIGH = "0x4948"; | |
static final String LOG_LEVEL_PROP_LOW = "0x4f4c"; | |
static final String LOG_LEVEL_PROP_MID = "0x494d"; | |
static final int NETTEXT_GSM_SMS_CBMI_LIST_SIZE_MAX = 100; | |
private static final int OEM_FUNCTION_ID_NETWORK = 2; | |
private static final int OEM_HIDDEN_MAIN_CMD = 81; | |
private static final int OEM_NET_GET_MODEM_CAP = 97; | |
private static final int OEM_NET_UPDATE_SUB_BINDING = 98; | |
private static final int OEM_SUB_SIM_LOCK_GET = 66; | |
private static final int OEM_SUB_SIM_LOCK_SET = 65; | |
static final int RADIO_SCREEN_OFF = 0; | |
static final int RADIO_SCREEN_ON = 1; | |
static final int RADIO_SCREEN_UNSET = -1; | |
static final int RESPONSE_SOLICITED = 0; | |
static final int RESPONSE_UNSOLICITED = 1; | |
static final boolean RILJ_LOGD = true; | |
static final boolean RILJ_LOGV = false; | |
static final String RILJ_LOG_TAG = "RILJ"; | |
static final int RIL_MAX_COMMAND_BYTES = 8192; | |
static final boolean SHIP_BUILD = "true".equals(SystemProperties.get("ro.product_ship", "false")); | |
static final String[] SOCKET_NAME_RIL = new String[]{"rild", "rild2", "rild3"}; | |
static final int SOCKET_OPEN_RETRY_MILLIS = 4000; | |
static final int USSD_DCS_KS5601 = 148; | |
static final String WAPPUSH_TEST = "jp.co.android.ETWS_WAPPUSH"; | |
private int initPhoneType; | |
private final BroadcastReceiver mBatteryStateListener; | |
Display mDefaultDisplay; | |
int mDefaultDisplayState; | |
private final DisplayListener mDisplayListener; | |
private int mDtmfProgress; | |
private Integer mInstanceId; | |
BroadcastReceiver mIntentReceiver; | |
boolean mIsDevicePlugged; | |
Object mLastNITZTimeInfo; | |
int mRadioScreenState; | |
RILReceiver mReceiver; | |
Thread mReceiverThread; | |
SparseArray<RILRequest> mRequestList; | |
RILSender mSender; | |
HandlerThread mSenderThread; | |
LocalSocket mSocket; | |
AtomicBoolean mTestingEmergencyCall; | |
WakeLock mWakeLock; | |
int mWakeLockCount; | |
final int mWakeLockTimeout; | |
class C00281 extends BroadcastReceiver { | |
C00281() { | |
} | |
public void onReceive(Context context, Intent intent) { | |
if (intent.getAction().equals("com.samsung.intent.action.EMERGENCY_STATE_CHANGED")) { | |
int state = intent.getIntExtra("reason", 0); | |
int enterType = intent.getIntExtra("enterType", 0); | |
if (state == 2 && enterType != 512) { | |
RIL.this.sendSafemode(true); | |
} else if (state == 4 && enterType != 512) { | |
RIL.this.sendSafemode(false); | |
} | |
} else if (!intent.getAction().equals(RIL.ETWS_TEST) && !intent.getAction().equals(RIL.WAPPUSH_TEST)) { | |
Rlog.w(RIL.RILJ_LOG_TAG, "RIL received unexpected Intent: " + intent.getAction()); | |
} else if ("eng".equals(Build.TYPE) && SystemProperties.getBoolean("persist.EarthquakeTestmode", false)) { | |
Bundle extras = intent.getExtras(); | |
if (extras == null) { | |
Rlog.d(RIL.RILJ_LOG_TAG, "intent.getExtras() = null"); | |
} else if (intent.getAction().equals(RIL.ETWS_TEST) && RIL.this.mGsmBroadcastSmsRegistrant != null) { | |
Rlog.d(RIL.RILJ_LOG_TAG, "ETWS_TEST receive"); | |
RIL.this.mGsmBroadcastSmsRegistrant.notifyRegistrant(new AsyncResult(null, extras.get("pdus"), null)); | |
} else if (intent.getAction().equals(RIL.WAPPUSH_TEST) && RIL.this.mGsmSmsRegistrant != null) { | |
Rlog.d(RIL.RILJ_LOG_TAG, "WAPPUSH_TEST receive"); | |
String[] a = new String[2]; | |
a[1] = (String) extras.get("pdus"); | |
Rlog.d(RIL.RILJ_LOG_TAG, "call newFromCMT"); | |
SmsMessage sms = SmsMessage.newFromCMT(a); | |
Rlog.d(RIL.RILJ_LOG_TAG, "call mGsmSmsRegistrant notifyRegistrant"); | |
RIL.this.mGsmSmsRegistrant.notifyRegistrant(new AsyncResult(null, sms, null)); | |
} | |
} | |
} | |
} | |
class C00292 implements DisplayListener { | |
C00292() { | |
} | |
public void onDisplayAdded(int displayId) { | |
} | |
public void onDisplayRemoved(int displayId) { | |
} | |
public void onDisplayChanged(int displayId) { | |
if (displayId == 0) { | |
int oldState = RIL.this.mDefaultDisplayState; | |
if (RIL.this.mDefaultDisplay == null) { | |
Rlog.e(RIL.RILJ_LOG_TAG, "There is no default display"); | |
return; | |
} | |
RIL.this.mDefaultDisplayState = RIL.this.mDefaultDisplay.getState(); | |
if (RIL.this.mDefaultDisplayState != oldState) { | |
RIL.this.updateScreenState(); | |
} | |
} | |
} | |
} | |
class C00303 extends BroadcastReceiver { | |
C00303() { | |
} | |
public void onReceive(Context context, Intent intent) { | |
boolean z = false; | |
boolean oldState = RIL.this.mIsDevicePlugged; | |
RIL ril = RIL.this; | |
if (intent.getIntExtra("plugged", 0) != 0) { | |
z = true; | |
} | |
ril.mIsDevicePlugged = z; | |
if (RIL.this.mIsDevicePlugged != oldState) { | |
RIL.this.updateScreenState(); | |
} | |
} | |
} | |
class RILReceiver implements Runnable { | |
byte[] buffer = new byte[9216]; | |
RILReceiver() { | |
} | |
public void run() { | |
Throwable tr; | |
int retryCount = 0; | |
String rilSocket = "rild"; | |
while (true) { | |
LocalSocket s = null; | |
try { | |
if (RIL.this.mInstanceId == null || RIL.this.mInstanceId.intValue() == 0) { | |
rilSocket = RIL.SOCKET_NAME_RIL[0]; | |
} else { | |
rilSocket = RIL.SOCKET_NAME_RIL[RIL.this.mInstanceId.intValue()]; | |
} | |
try { | |
LocalSocket s2 = new LocalSocket(); | |
try { | |
s2.connect(new LocalSocketAddress(rilSocket, Namespace.RESERVED)); | |
retryCount = 0; | |
RIL.this.mSocket = s2; | |
Rlog.i(RIL.RILJ_LOG_TAG, "(" + RIL.this.mInstanceId + ") Connected to '" + rilSocket + "' socket"); | |
int length = 0; | |
try { | |
InputStream is = RIL.this.mSocket.getInputStream(); | |
while (true) { | |
length = RIL.readRilMessage(is, this.buffer); | |
if (length >= 0) { | |
Parcel p = Parcel.obtain(); | |
p.unmarshall(this.buffer, 0, length); | |
p.setDataPosition(0); | |
RIL.this.processResponse(p); | |
p.recycle(); | |
} | |
break; | |
} | |
} catch (IOException ex) { | |
Rlog.i(RIL.RILJ_LOG_TAG, "'" + rilSocket + "' socket closed", ex); | |
} catch (Throwable th) { | |
tr = th; | |
s = s2; | |
} | |
Rlog.i(RIL.RILJ_LOG_TAG, "(" + RIL.this.mInstanceId + ") Disconnected from '" + rilSocket + "' socket"); | |
RIL.this.setRadioState(RadioState.RADIO_UNAVAILABLE); | |
try { | |
RIL.this.mSocket.close(); | |
} catch (IOException e) { | |
} | |
RIL.this.mSocket = null; | |
RILRequest.resetSerial(); | |
RIL.this.clearRequestList(1, false); | |
} catch (IOException e2) { | |
s = s2; | |
if (s != null) { | |
try { | |
s.close(); | |
} catch (IOException e3) { | |
} | |
} | |
if (retryCount != 8) { | |
Rlog.e(RIL.RILJ_LOG_TAG, "Couldn't find '" + rilSocket + "' socket after " + retryCount + " times, continuing to retry silently"); | |
} else if (retryCount >= 0 && retryCount < 8) { | |
Rlog.i(RIL.RILJ_LOG_TAG, "Couldn't find '" + rilSocket + "' socket; retrying after timeout"); | |
} | |
try { | |
Thread.sleep(4000); | |
} catch (InterruptedException e4) { | |
} | |
retryCount++; | |
} | |
} catch (IOException e5) { | |
if (s != null) { | |
s.close(); | |
} | |
if (retryCount != 8) { | |
Rlog.i(RIL.RILJ_LOG_TAG, "Couldn't find '" + rilSocket + "' socket; retrying after timeout"); | |
} else { | |
Rlog.e(RIL.RILJ_LOG_TAG, "Couldn't find '" + rilSocket + "' socket after " + retryCount + " times, continuing to retry silently"); | |
} | |
Thread.sleep(4000); | |
retryCount++; | |
} | |
} catch (Throwable th2) { | |
tr = th2; | |
} | |
} | |
Rlog.e(RIL.RILJ_LOG_TAG, "Uncaught exception", tr); | |
RIL.this.notifyRegistrantsRilConnectionChanged(-1); | |
} | |
} | |
class RILSender extends Handler implements Runnable { | |
byte[] dataLength = new byte[4]; | |
public RILSender(Looper looper) { | |
super(looper); | |
} | |
public void run() { | |
} | |
public void handleMessage(Message msg) { | |
RILRequest rr = (RILRequest) msg.obj; | |
switch (msg.what) { | |
case 1: | |
try { | |
LocalSocket s = RIL.this.mSocket; | |
if (s == null) { | |
rr.onError(1, null); | |
rr.release(); | |
RIL.this.decrementWakeLock(); | |
return; | |
} | |
synchronized (RIL.this.mRequestList) { | |
RIL.this.mRequestList.append(rr.mSerial, rr); | |
} | |
byte[] data = rr.mParcel.marshall(); | |
rr.mParcel.recycle(); | |
rr.mParcel = null; | |
if (data.length > 8192) { | |
throw new RuntimeException("Parcel larger than max bytes allowed! " + data.length); | |
} | |
byte[] bArr = this.dataLength; | |
this.dataLength[1] = (byte) 0; | |
bArr[0] = (byte) 0; | |
this.dataLength[2] = (byte) ((data.length >> 8) & 255); | |
this.dataLength[3] = (byte) (data.length & 255); | |
s.getOutputStream().write(this.dataLength); | |
s.getOutputStream().write(data); | |
return; | |
} catch (IOException ex) { | |
Rlog.e(RIL.RILJ_LOG_TAG, "IOException", ex); | |
if (RIL.this.findAndRemoveRequestFromList(rr.mSerial) != null) { | |
rr.onError(1, null); | |
rr.release(); | |
RIL.this.decrementWakeLock(); | |
return; | |
} | |
return; | |
} catch (RuntimeException exc) { | |
Rlog.e(RIL.RILJ_LOG_TAG, "Uncaught exception ", exc); | |
if (RIL.this.findAndRemoveRequestFromList(rr.mSerial) != null) { | |
rr.onError(2, null); | |
rr.release(); | |
RIL.this.decrementWakeLock(); | |
return; | |
} | |
return; | |
} | |
case 2: | |
synchronized (RIL.this.mRequestList) { | |
if (RIL.this.clearWakeLock()) { | |
int count = RIL.this.mRequestList.size(); | |
Rlog.d(RIL.RILJ_LOG_TAG, "WAKE_LOCK_TIMEOUT mRequestList=" + count); | |
for (int i = 0; i < count; i++) { | |
rr = (RILRequest) RIL.this.mRequestList.valueAt(i); | |
Rlog.d(RIL.RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] " + RIL.requestToString(rr.mRequest)); | |
} | |
} | |
} | |
return; | |
default: | |
return; | |
} | |
} | |
} | |
public final class UnsolOemHookBuffer { | |
private byte[] mData; | |
private int mRilInstance; | |
public UnsolOemHookBuffer(int rilInstance, byte[] data) { | |
this.mRilInstance = rilInstance; | |
this.mData = data; | |
} | |
public int getRilInstance() { | |
return this.mRilInstance; | |
} | |
public byte[] getUnsolOemHookBuffer() { | |
return this.mData; | |
} | |
} | |
private static int readRilMessage(InputStream is, byte[] buffer) throws IOException { | |
int offset = 0; | |
int remaining = 4; | |
do { | |
int countRead = is.read(buffer, offset, remaining); | |
if (countRead < 0) { | |
Rlog.e(RILJ_LOG_TAG, "Hit EOS reading message length"); | |
return -1; | |
} | |
offset += countRead; | |
remaining -= countRead; | |
} while (remaining > 0); | |
int messageLength = ((((buffer[0] & 255) << 24) | ((buffer[1] & 255) << 16)) | ((buffer[2] & 255) << 8)) | (buffer[3] & 255); | |
offset = 0; | |
remaining = messageLength; | |
do { | |
countRead = is.read(buffer, offset, remaining); | |
if (countRead < 0) { | |
Rlog.e(RILJ_LOG_TAG, "Hit EOS reading message. messageLength=" + messageLength + " remaining=" + remaining); | |
return -1; | |
} | |
offset += countRead; | |
remaining -= countRead; | |
} while (remaining > 0); | |
return messageLength; | |
} | |
public RIL(Context context, int preferredNetworkType, int cdmaSubscription) { | |
this(context, preferredNetworkType, cdmaSubscription, null); | |
} | |
public RIL(Context context, int preferredNetworkType, int cdmaSubscription, Integer instanceId) { | |
super(context); | |
this.mDefaultDisplayState = 0; | |
this.mRadioScreenState = -1; | |
this.mIsDevicePlugged = false; | |
this.mRequestList = new SparseArray(); | |
this.initPhoneType = 0; | |
this.mTestingEmergencyCall = new AtomicBoolean(false); | |
this.mIntentReceiver = new C00281(); | |
this.mDisplayListener = new C00292(); | |
this.mBatteryStateListener = new C00303(); | |
riljLog("RIL(context, preferredNetworkType=" + preferredNetworkType + " cdmaSubscription=" + cdmaSubscription + " instanceId=" + instanceId + ")"); | |
this.mContext = context; | |
this.mCdmaSubscription = cdmaSubscription; | |
this.mPreferredNetworkType = preferredNetworkType; | |
this.mDtmfProgress = 0; | |
this.mPhoneType = 0; | |
this.mInstanceId = instanceId; | |
this.mWakeLock = ((PowerManager) context.getSystemService("power")).newWakeLock(1, RILJ_LOG_TAG + (this.mInstanceId == null ? "" : this.mInstanceId)); | |
this.mWakeLock.setReferenceCounted(false); | |
this.mWakeLockTimeout = SystemProperties.getInt("ro.ril.wake_lock_timeout", 60000); | |
this.mWakeLockCount = 0; | |
this.mSenderThread = new HandlerThread("RILSender" + this.mInstanceId); | |
this.mSenderThread.start(); | |
this.mSender = new RILSender(this.mSenderThread.getLooper()); | |
if (((ConnectivityManager) context.getSystemService("connectivity")).isNetworkSupported(0)) { | |
riljLog("Starting RILReceiver" + this.mInstanceId); | |
this.mReceiver = new RILReceiver(); | |
this.mReceiverThread = new Thread(this.mReceiver, "RILReceiver" + this.mInstanceId); | |
this.mReceiverThread.start(); | |
IntentFilter sbmExtendFilter = new IntentFilter(); | |
sbmExtendFilter.addAction(ETWS_TEST); | |
sbmExtendFilter.addAction(WAPPUSH_TEST); | |
context.registerReceiver(this.mIntentReceiver, sbmExtendFilter); | |
DisplayManager dm = (DisplayManager) context.getSystemService("display"); | |
this.mDefaultDisplay = dm.getDisplay(0); | |
dm.registerDisplayListener(this.mDisplayListener, null); | |
this.mDefaultDisplayState = this.mDefaultDisplay.getState(); | |
Intent batteryStatus = context.registerReceiver(this.mBatteryStateListener, new IntentFilter("android.intent.action.BATTERY_CHANGED")); | |
if (batteryStatus != null) { | |
this.mIsDevicePlugged = batteryStatus.getIntExtra("plugged", 0) != 0; | |
} | |
} else { | |
riljLog("Not starting RILReceiver: wifi-only"); | |
} | |
TelephonyDevController tdc = TelephonyDevController.getInstance(); | |
TelephonyDevController.registerRIL(this); | |
if (FloatingFeature.getInstance().getEnableStatus("SEC_FLOATING_FEATURE_COMMON_SUPPORT_SAFETYCARE")) { | |
IntentFilter safetycareFilter = new IntentFilter(); | |
safetycareFilter.addAction("com.samsung.intent.action.EMERGENCY_STATE_CHANGED"); | |
context.registerReceiver(this.mIntentReceiver, safetycareFilter); | |
} | |
} | |
public void getVoiceRadioTechnology(Message result) { | |
RILRequest rr = RILRequest.obtain(108, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getImsRegistrationState(Message result) { | |
RILRequest rr = RILRequest.obtain(112, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setOnNITZTime(Handler h, int what, Object obj) { | |
super.setOnNITZTime(h, what, obj); | |
if (this.mLastNITZTimeInfo != null) { | |
this.mNITZTimeRegistrant.notifyRegistrant(new AsyncResult(null, this.mLastNITZTimeInfo, null)); | |
} | |
} | |
public void getIccCardStatus(Message result) { | |
RILRequest rr = RILRequest.obtain(1, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setUiccSubscription(int slotId, int appIndex, int subId, int subStatus, Message result) { | |
RILRequest rr = RILRequest.obtain(122, result); | |
Rlog.i(RILJ_LOG_TAG, "!@Boot_SVC : setUiccSubscription"); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " slot: " + slotId + " appIndex: " + appIndex + " subId: " + subId + " subStatus: " + subStatus); | |
rr.mParcel.writeInt(slotId); | |
rr.mParcel.writeInt(appIndex); | |
rr.mParcel.writeInt(subId); | |
rr.mParcel.writeInt(subStatus); | |
send(rr); | |
} | |
public void setDataAllowed(boolean allowed, Message result) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(123, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " allowed: " + allowed); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (!allowed) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
send(rr); | |
} | |
public void supplyIccPin(String pin, Message result) { | |
supplyIccPinForApp(pin, null, result); | |
} | |
public void supplyIccPinForApp(String pin, String aid, Message result) { | |
RILRequest rr = RILRequest.obtain(2, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeString(pin); | |
rr.mParcel.writeString(aid); | |
send(rr); | |
} | |
public void supplyIccPuk(String puk, String newPin, Message result) { | |
supplyIccPukForApp(puk, newPin, null, result); | |
} | |
public void supplyIccPukForApp(String puk, String newPin, String aid, Message result) { | |
RILRequest rr = RILRequest.obtain(3, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(3); | |
rr.mParcel.writeString(puk); | |
rr.mParcel.writeString(newPin); | |
rr.mParcel.writeString(aid); | |
send(rr); | |
} | |
public void supplyIccPin2(String pin, Message result) { | |
supplyIccPin2ForApp(pin, null, result); | |
} | |
public void supplyIccPin2ForApp(String pin, String aid, Message result) { | |
RILRequest rr = RILRequest.obtain(4, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeString(pin); | |
rr.mParcel.writeString(aid); | |
send(rr); | |
} | |
public void supplyIccPuk2(String puk2, String newPin2, Message result) { | |
supplyIccPuk2ForApp(puk2, newPin2, null, result); | |
} | |
public void supplyIccPuk2ForApp(String puk, String newPin2, String aid, Message result) { | |
RILRequest rr = RILRequest.obtain(5, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(3); | |
rr.mParcel.writeString(puk); | |
rr.mParcel.writeString(newPin2); | |
rr.mParcel.writeString(aid); | |
send(rr); | |
} | |
public void changeIccPin(String oldPin, String newPin, Message result) { | |
changeIccPinForApp(oldPin, newPin, null, result); | |
} | |
public void changeIccPinForApp(String oldPin, String newPin, String aid, Message result) { | |
RILRequest rr = RILRequest.obtain(6, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(3); | |
rr.mParcel.writeString(oldPin); | |
rr.mParcel.writeString(newPin); | |
rr.mParcel.writeString(aid); | |
send(rr); | |
} | |
public void changeIccPin2(String oldPin2, String newPin2, Message result) { | |
changeIccPin2ForApp(oldPin2, newPin2, null, result); | |
} | |
public void changeIccPin2ForApp(String oldPin2, String newPin2, String aid, Message result) { | |
RILRequest rr = RILRequest.obtain(7, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(3); | |
rr.mParcel.writeString(oldPin2); | |
rr.mParcel.writeString(newPin2); | |
rr.mParcel.writeString(aid); | |
send(rr); | |
} | |
public void changeBarringPassword(String facility, String oldPwd, String newPwd, Message result) { | |
RILRequest rr = RILRequest.obtain(44, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(3); | |
rr.mParcel.writeString(facility); | |
rr.mParcel.writeString(oldPwd); | |
rr.mParcel.writeString(newPwd); | |
send(rr); | |
} | |
public void supplyNetworkDepersonalization(String netpin, Message result) { | |
RILRequest rr = RILRequest.obtain(8, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeString(netpin); | |
send(rr); | |
} | |
public void supplyNetworkDepersonalization(String netpin, int lockState, Message result) { | |
RILRequest rr = RILRequest.obtain(8, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " Type:" + "PERSOSUBSTATE_SIM_NETWORK"); | |
rr.mParcel.writeInt(lockState); | |
rr.mParcel.writeString(netpin); | |
send(rr); | |
} | |
public void getCurrentCalls(Message result) { | |
RILRequest rr = RILRequest.obtain(9, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
@Deprecated | |
public void getPDPContextList(Message result) { | |
getDataCallList(result); | |
} | |
public void getDataCallList(Message result) { | |
RILRequest rr = RILRequest.obtain(57, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void dial(String address, int clirMode, Message result) { | |
dial(address, clirMode, null, result); | |
} | |
public void dial(String address, int clirMode, UUSInfo uusInfo, Message result) { | |
dial(address, clirMode, uusInfo, null, result); | |
} | |
public void dial(String address, int clirMode, UUSInfo uusInfo, CallDetails callDetails, Message result) { | |
RILRequest rr = RILRequest.obtain(10, result); | |
rr.mParcel.writeString(address); | |
rr.mParcel.writeInt(clirMode); | |
if (callDetails != null) { | |
rr.mParcel.writeInt(callDetails.call_type); | |
rr.mParcel.writeInt(callDetails.call_domain); | |
rr.mParcel.writeString(callDetails.getCsvFromExtras()); | |
} else { | |
rr.mParcel.writeInt(0); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeString(""); | |
} | |
if (uusInfo == null) { | |
rr.mParcel.writeInt(0); | |
} else { | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(uusInfo.getType()); | |
rr.mParcel.writeInt(uusInfo.getDcs()); | |
rr.mParcel.writeByteArray(uusInfo.getUserData()); | |
} | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + callDetails); | |
send(rr); | |
} | |
public void dialEmergencyCall(String address, int clirMode, Message result) { | |
dialEmergencyCall(address, clirMode, null, result); | |
} | |
public void dialEmergencyCall(String address, int clirMode, CallDetails callDetails, Message result) { | |
RILRequest rr = RILRequest.obtain(10001, result); | |
rr.mParcel.writeString(address); | |
rr.mParcel.writeInt(clirMode); | |
if (callDetails != null) { | |
rr.mParcel.writeInt(callDetails.call_type); | |
rr.mParcel.writeInt(callDetails.call_domain); | |
rr.mParcel.writeString(""); | |
} else { | |
rr.mParcel.writeInt(0); | |
rr.mParcel.writeInt(3); | |
rr.mParcel.writeString(""); | |
} | |
rr.mParcel.writeInt(0); | |
if (callDetails != null) { | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + callDetails); | |
} else { | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
} | |
send(rr); | |
} | |
public void deflect(String address, Message result) { | |
RILRequest rr = RILRequest.obtain(10002, result); | |
rr.mParcel.writeString(address); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getPreferredNetworkList(Message response) { | |
RILRequest rr = RILRequest.obtain(10016, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setPreferredNetworkList(int index, String operator, String plmn, int gsmAct, int gsmCompactAct, int utranAct, int mode, Message response) { | |
RILRequest rr = RILRequest.obtain(10015, response); | |
rr.mParcel.writeInt(index); | |
rr.mParcel.writeString(operator); | |
rr.mParcel.writeString(plmn); | |
rr.mParcel.writeInt(gsmAct); | |
rr.mParcel.writeInt(gsmCompactAct); | |
rr.mParcel.writeInt(utranAct); | |
rr.mParcel.writeInt(mode); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + ", " + index + ", " + operator + ", " + plmn + ", " + gsmAct + "," + gsmCompactAct + ", " + utranAct + ", " + mode); | |
send(rr); | |
} | |
public void modifyCallInitiate(CallModify callModify, Message result) { | |
RILRequest rr = RILRequest.obtain(10003, result); | |
rr.mParcel.writeInt(callModify.call_index); | |
rr.mParcel.writeInt(callModify.call_details.call_type); | |
rr.mParcel.writeInt(callModify.call_details.call_domain); | |
rr.mParcel.writeString(callModify.call_details.getCsvFromExtras()); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + callModify); | |
send(rr); | |
} | |
public void modifyCallConfirm(CallModify callModify, Message result) { | |
RILRequest rr = RILRequest.obtain(10004, result); | |
rr.mParcel.writeInt(callModify.call_index); | |
rr.mParcel.writeInt(callModify.call_details.call_type); | |
rr.mParcel.writeInt(callModify.call_details.call_domain); | |
rr.mParcel.writeString(callModify.call_details.getCsvFromExtras()); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + callModify); | |
send(rr); | |
} | |
public void setVoiceDomainPref(int pref, Message result) { | |
RILRequest rr = RILRequest.obtain(10005, result); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(pref); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + pref); | |
send(rr); | |
} | |
private void sendSafemode(boolean on) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(10006, null); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (!on) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
rr.mParcel.writeInt(0); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + on); | |
send(rr); | |
} | |
public void setTransmitPower(int powerLevel, Message result) { | |
RILRequest rr = RILRequest.obtain(10007, result); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(powerLevel); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + powerLevel); | |
send(rr); | |
} | |
public void getCbConfig(Message response) { | |
RILRequest rr = RILRequest.obtain(10008, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setSimPower(int on, Message result) { | |
RILRequest rr = RILRequest.obtain(10023, result); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(on); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " int : " + on); | |
send(rr); | |
} | |
public void getIMSI(Message result) { | |
getIMSIForApp(null, result); | |
} | |
public void getIMSIForApp(String aid, Message result) { | |
RILRequest rr = RILRequest.obtain(11, result); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeString(aid); | |
String dbgMsg = rr.serialString() + "> getIMSI: " + requestToString(rr.mRequest) + " aid: "; | |
if (SHIP_BUILD) { | |
dbgMsg = dbgMsg + "xxx"; | |
} else { | |
dbgMsg = dbgMsg + aid; | |
} | |
riljLog(dbgMsg); | |
send(rr); | |
} | |
public void getIMEI(Message result) { | |
RILRequest rr = RILRequest.obtain(38, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getIMEISV(Message result) { | |
RILRequest rr = RILRequest.obtain(39, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void hangupConnection(int gsmIndex, Message result) { | |
riljLog("hangupConnection: gsmIndex=" + gsmIndex); | |
RILRequest rr = RILRequest.obtain(12, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + gsmIndex); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(gsmIndex); | |
send(rr); | |
} | |
public void hangupWaitingOrBackground(Message result) { | |
RILRequest rr = RILRequest.obtain(13, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void hangupForegroundResumeBackground(Message result) { | |
RILRequest rr = RILRequest.obtain(14, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void switchWaitingOrHoldingAndActive(Message result) { | |
RILRequest rr = RILRequest.obtain(15, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void conference(Message result) { | |
RILRequest rr = RILRequest.obtain(16, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setPreferredVoicePrivacy(boolean enable, Message result) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(82, result); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (!enable) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + enable); | |
send(rr); | |
} | |
public void getPreferredVoicePrivacy(Message result) { | |
RILRequest rr = RILRequest.obtain(83, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void separateConnection(int gsmIndex, Message result) { | |
RILRequest rr = RILRequest.obtain(52, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + gsmIndex); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(gsmIndex); | |
send(rr); | |
} | |
public void acceptCall(Message result) { | |
acceptCall(0, result); | |
} | |
public void acceptCall(int type, Message result) { | |
RILRequest rr = RILRequest.obtain(40, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + type); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(type); | |
send(rr); | |
} | |
public void rejectCall(Message result) { | |
RILRequest rr = RILRequest.obtain(17, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void explicitCallTransfer(Message result) { | |
RILRequest rr = RILRequest.obtain(72, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void explicitCallTransfer(String number, Message result) { | |
RILRequest rr = RILRequest.obtain(72, result); | |
rr.mParcel.writeString(number); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " BLIND"); | |
send(rr); | |
} | |
public void getLastCallFailCause(Message result) { | |
RILRequest rr = RILRequest.obtain(18, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
@Deprecated | |
public void getLastPdpFailCause(Message result) { | |
getLastDataCallFailCause(result); | |
} | |
public void getLastDataCallFailCause(Message result) { | |
RILRequest rr = RILRequest.obtain(56, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setMute(boolean enableMute, Message response) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(53, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + enableMute); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (!enableMute) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
send(rr); | |
} | |
public void getMute(Message response) { | |
RILRequest rr = RILRequest.obtain(54, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getSignalStrength(Message result) { | |
RILRequest rr = RILRequest.obtain(19, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getVoiceRegistrationState(Message result) { | |
RILRequest rr = RILRequest.obtain(20, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getDataRegistrationState(Message result) { | |
RILRequest rr = RILRequest.obtain(21, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getOperator(Message result) { | |
RILRequest rr = RILRequest.obtain(22, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getHardwareConfig(Message result) { | |
RILRequest rr = RILRequest.obtain(124, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void sendDtmf(char c, Message result) { | |
RILRequest rr = RILRequest.obtain(24, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeString(Character.toString(c)); | |
send(rr); | |
} | |
public void startDtmf(char c, Message result) { | |
if (this.mDtmfProgress >= PduPart.P_CONTENT_TRANSFER_ENCODING) { | |
riljLog("DTMF request warning.Fixed Count=" + this.mDtmfProgress); | |
this.mContext.sendBroadcast(new Intent("com.samsung.intent.action.ACTION_DTMF_BUSY")); | |
return; | |
} | |
RILRequest rr = RILRequest.obtain(49, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeString(Character.toString(c)); | |
send(rr); | |
this.mDtmfProgress++; | |
} | |
public void stopDtmf(Message result) { | |
RILRequest rr = RILRequest.obtain(50, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
this.mDtmfProgress++; | |
} | |
public void sendBurstDtmf(String dtmfString, int on, int off, Message result) { | |
RILRequest rr = RILRequest.obtain(85, result); | |
rr.mParcel.writeInt(3); | |
rr.mParcel.writeString(dtmfString); | |
rr.mParcel.writeString(Integer.toString(on)); | |
rr.mParcel.writeString(Integer.toString(off)); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " : " + dtmfString); | |
send(rr); | |
} | |
private void constructGsmSendSmsRilRequest(RILRequest rr, String smscPDU, String pdu) { | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeString(smscPDU); | |
rr.mParcel.writeString(pdu); | |
} | |
public void sendSMS(String smscPDU, String pdu, Message result) { | |
RILRequest rr = RILRequest.obtain(25, result); | |
constructGsmSendSmsRilRequest(rr, smscPDU, pdu); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void sendSMSExpectMore(String smscPDU, String pdu, Message result) { | |
RILRequest rr = RILRequest.obtain(26, result); | |
constructGsmSendSmsRilRequest(rr, smscPDU, pdu); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
private void constructCdmaSendSmsRilRequest(RILRequest rr, byte[] pdu) { | |
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(pdu)); | |
try { | |
int i; | |
rr.mParcel.writeInt(dis.readInt()); | |
rr.mParcel.writeByte((byte) dis.readInt()); | |
rr.mParcel.writeInt(dis.readInt()); | |
rr.mParcel.writeInt(dis.read()); | |
rr.mParcel.writeInt(dis.read()); | |
rr.mParcel.writeInt(dis.read()); | |
rr.mParcel.writeInt(dis.read()); | |
int address_nbr_of_digits = (byte) dis.read(); | |
rr.mParcel.writeByte((byte) address_nbr_of_digits); | |
for (i = 0; i < address_nbr_of_digits; i++) { | |
rr.mParcel.writeByte(dis.readByte()); | |
} | |
rr.mParcel.writeInt(dis.read()); | |
rr.mParcel.writeByte((byte) dis.read()); | |
int subaddr_nbr_of_digits = (byte) dis.read(); | |
rr.mParcel.writeByte((byte) subaddr_nbr_of_digits); | |
for (i = 0; i < subaddr_nbr_of_digits; i++) { | |
rr.mParcel.writeByte(dis.readByte()); | |
} | |
int bearerDataLength = dis.read(); | |
rr.mParcel.writeInt(bearerDataLength); | |
for (i = 0; i < bearerDataLength; i++) { | |
rr.mParcel.writeByte(dis.readByte()); | |
} | |
} catch (IOException ex) { | |
riljLog("sendSmsCdma: conversion from input stream to object failed: " + ex); | |
} | |
} | |
public void sendCdmaSms(byte[] pdu, Message result) { | |
RILRequest rr = RILRequest.obtain(87, result); | |
constructCdmaSendSmsRilRequest(rr, pdu); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void sendImsGsmSms(String smscPDU, String pdu, int retry, int messageRef, Message result) { | |
RILRequest rr = RILRequest.obtain(113, result); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeByte((byte) retry); | |
rr.mParcel.writeInt(messageRef); | |
constructGsmSendSmsRilRequest(rr, smscPDU, pdu); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void sendImsCdmaSms(byte[] pdu, int retry, int messageRef, Message result) { | |
RILRequest rr = RILRequest.obtain(113, result); | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeByte((byte) retry); | |
rr.mParcel.writeInt(messageRef); | |
constructCdmaSendSmsRilRequest(rr, pdu); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void deleteSmsOnSim(int index, Message response) { | |
RILRequest rr = RILRequest.obtain(64, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(index); | |
send(rr); | |
} | |
public void deleteSmsOnRuim(int index, Message response) { | |
RILRequest rr = RILRequest.obtain(OEM_NET_GET_MODEM_CAP, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(index); | |
send(rr); | |
} | |
public void writeSmsToSim(int status, String smsc, String pdu, Message response) { | |
status = translateStatus(status); | |
RILRequest rr = RILRequest.obtain(63, response); | |
rr.mParcel.writeInt(status); | |
rr.mParcel.writeString(pdu); | |
rr.mParcel.writeString(smsc); | |
send(rr); | |
} | |
public void writeSmsToRuim(int status, String pdu, Message response) { | |
status = translateStatus(status); | |
RILRequest rr = RILRequest.obtain(96, response); | |
rr.mParcel.writeInt(status); | |
if (CscFeature.getInstance().getEnableStatus("CscFeature_RIL_SmsCdmaCopyToRuim")) { | |
constructCdmaSendSmsRilRequest(rr, IccUtils.hexStringToBytes(pdu)); | |
} else { | |
rr.mParcel.writeString(pdu); | |
} | |
send(rr); | |
} | |
private int translateStatus(int status) { | |
switch (status & 7) { | |
case 3: | |
return 0; | |
case 5: | |
return 3; | |
case 7: | |
return 2; | |
default: | |
return 1; | |
} | |
} | |
public void setupDataCall(String radioTechnology, String profile, String apn, String user, String password, String authType, String protocol, Message result) { | |
RILRequest rr = RILRequest.obtain(27, result); | |
rr.mParcel.writeInt(7); | |
rr.mParcel.writeString(radioTechnology); | |
rr.mParcel.writeString(profile); | |
rr.mParcel.writeString(apn); | |
rr.mParcel.writeString(user); | |
rr.mParcel.writeString(password); | |
rr.mParcel.writeString(authType); | |
rr.mParcel.writeString(protocol); | |
Rlog.i(RILJ_LOG_TAG, "!@Boot_SVC : setupDataCall"); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + radioTechnology + " " + profile + " " + apn + " " + user + " " + password + " " + authType + " " + protocol); | |
send(rr); | |
} | |
public void deactivateDataCall(int cid, int reason, Message result) { | |
RILRequest rr = RILRequest.obtain(41, result); | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeString(Integer.toString(cid)); | |
rr.mParcel.writeString(Integer.toString(reason)); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + cid + " " + reason); | |
send(rr); | |
} | |
public void setRadioPower(boolean on, Message result) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(23, result); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (!on) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
if (on) { | |
Rlog.i(RILJ_LOG_TAG, "!@Boot_SVC : setRadioPower on"); | |
} | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + (on ? " on" : " off")); | |
send(rr); | |
} | |
public void requestShutdown(Message result) { | |
RILRequest rr = RILRequest.obtain(129, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setSuppServiceNotifications(boolean enable, Message result) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(62, result); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (!enable) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) { | |
RILRequest rr = RILRequest.obtain(37, result); | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeInt(success ? 1 : 0); | |
rr.mParcel.writeInt(cause); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + success + " " + cause); | |
send(rr); | |
} | |
public void acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) { | |
RILRequest rr = RILRequest.obtain(88, result); | |
rr.mParcel.writeInt(success ? 0 : 1); | |
rr.mParcel.writeInt(cause); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + success + " " + cause); | |
send(rr); | |
} | |
public void acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) { | |
RILRequest rr = RILRequest.obtain(106, result); | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeString(success ? "1" : "0"); | |
rr.mParcel.writeString(ackPdu); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + ' ' + success + " [" + ackPdu + ']'); | |
send(rr); | |
} | |
public void iccIO(int command, int fileid, String path, int p1, int p2, int p3, String data, String pin2, Message result) { | |
iccIOForApp(command, fileid, path, p1, p2, p3, data, pin2, null, result); | |
} | |
public void iccIOForApp(int command, int fileid, String path, int p1, int p2, int p3, String data, String pin2, String aid, Message result) { | |
RILRequest rr = RILRequest.obtain(28, result); | |
rr.mParcel.writeInt(command); | |
rr.mParcel.writeInt(fileid); | |
rr.mParcel.writeString(path); | |
rr.mParcel.writeInt(p1); | |
rr.mParcel.writeInt(p2); | |
rr.mParcel.writeInt(p3); | |
rr.mParcel.writeString(data); | |
rr.mParcel.writeString(pin2); | |
rr.mParcel.writeString(aid); | |
String dbgMsg = rr.serialString() + "> iccIO: " + requestToString(rr.mRequest) + " 0x" + Integer.toHexString(command) + " 0x" + Integer.toHexString(fileid) + " " + " path: " + path + "," + p1 + "," + p2 + "," + p3 + " aid: "; | |
if (SHIP_BUILD) { | |
dbgMsg = dbgMsg + "xxx"; | |
} else { | |
dbgMsg = dbgMsg + aid; | |
} | |
riljLog(dbgMsg); | |
send(rr); | |
} | |
public void getCLIR(Message result) { | |
RILRequest rr = RILRequest.obtain(31, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setCLIR(int clirMode, Message result) { | |
RILRequest rr = RILRequest.obtain(32, result); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(clirMode); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + clirMode); | |
send(rr); | |
} | |
public void queryCallWaiting(int serviceClass, Message response) { | |
RILRequest rr = RILRequest.obtain(35, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(serviceClass); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + serviceClass); | |
send(rr); | |
} | |
public void setCallWaiting(boolean enable, int serviceClass, Message response) { | |
RILRequest rr = RILRequest.obtain(36, response); | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeInt(enable ? 1 : 0); | |
rr.mParcel.writeInt(serviceClass); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + enable + ", " + serviceClass); | |
send(rr); | |
} | |
public void setNetworkSelectionModeAutomatic(Message response) { | |
RILRequest rr = RILRequest.obtain(46, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setNetworkSelectionModeManual(String operatorNumeric, Message response) { | |
RILRequest rr = RILRequest.obtain(47, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + operatorNumeric); | |
rr.mParcel.writeString(operatorNumeric); | |
send(rr); | |
} | |
public void getNetworkSelectionMode(Message response) { | |
RILRequest rr = RILRequest.obtain(45, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getAvailableNetworks(Message response) { | |
RILRequest rr = RILRequest.obtain(48, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setCallForward(int action, int cfReason, int serviceClass, String number, int timeSeconds, Message response) { | |
setCallForward(action, cfReason, serviceClass, number, timeSeconds, null, null, response); | |
} | |
public void setCallForward(int action, int cfReason, int serviceClass, String number, int timeSeconds, String startTime, String endTime, Message response) { | |
RILRequest rr = RILRequest.obtain(34, response); | |
rr.mParcel.writeInt(action); | |
rr.mParcel.writeInt(cfReason); | |
rr.mParcel.writeInt(serviceClass); | |
rr.mParcel.writeInt(PhoneNumberUtils.toaFromString(number)); | |
rr.mParcel.writeString(number); | |
rr.mParcel.writeInt(timeSeconds); | |
if (startTime == null || !startTime.contains(":")) { | |
startTime = null; | |
} else { | |
if (startTime.split(":").length == 2) { | |
startTime = String.format("%02d:%02d", new Object[]{Integer.valueOf(Integer.parseInt(startTime.split(":")[0])), Integer.valueOf(Integer.parseInt(startTime.split(":")[1]))}); | |
} else { | |
startTime = null; | |
} | |
} | |
if (endTime == null || !endTime.contains(":")) { | |
endTime = null; | |
} else { | |
if (endTime.split(":").length == 2) { | |
endTime = String.format("%02d:%02d", new Object[]{Integer.valueOf(Integer.parseInt(endTime.split(":")[0])), Integer.valueOf(Integer.parseInt(endTime.split(":")[1]))}); | |
} else { | |
endTime = null; | |
} | |
} | |
rr.mParcel.writeString(startTime); | |
rr.mParcel.writeString(endTime); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + action + " " + cfReason + " " + serviceClass + " " + timeSeconds + " " + startTime + " - " + endTime); | |
send(rr); | |
} | |
public void queryCallForwardStatus(int cfReason, int serviceClass, String number, Message response) { | |
RILRequest rr = RILRequest.obtain(33, response); | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeInt(cfReason); | |
rr.mParcel.writeInt(serviceClass); | |
rr.mParcel.writeInt(PhoneNumberUtils.toaFromString(number)); | |
rr.mParcel.writeString(number); | |
rr.mParcel.writeInt(0); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + cfReason + " " + serviceClass); | |
send(rr); | |
} | |
public void queryCLIP(Message response) { | |
RILRequest rr = RILRequest.obtain(55, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void queryCNAP(Message response) { | |
RILRequest rr = RILRequest.obtain(10029, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getBasebandVersion(Message response) { | |
RILRequest rr = RILRequest.obtain(51, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void queryFacilityLock(String facility, String password, int serviceClass, Message response) { | |
queryFacilityLockForApp(facility, password, serviceClass, null, response); | |
} | |
public void queryFacilityLockForApp(String facility, String password, int serviceClass, String appId, Message response) { | |
RILRequest rr = RILRequest.obtain(42, response); | |
String dbgMsg = rr.serialString() + "> " + requestToString(rr.mRequest); | |
if (!SHIP_BUILD) { | |
dbgMsg = dbgMsg + " [" + facility + " " + password + " " + serviceClass + " " + appId + "]"; | |
} | |
riljLog(dbgMsg); | |
rr.mParcel.writeInt(4); | |
rr.mParcel.writeString(facility); | |
rr.mParcel.writeString(password); | |
rr.mParcel.writeString(Integer.toString(serviceClass)); | |
rr.mParcel.writeString(appId); | |
send(rr); | |
} | |
public void setFacilityLock(String facility, boolean lockState, String password, int serviceClass, Message response) { | |
setFacilityLockForApp(facility, lockState, password, serviceClass, null, response); | |
} | |
public void setFacilityLockForApp(String facility, boolean lockState, String password, int serviceClass, String appId, Message response) { | |
RILRequest rr = RILRequest.obtain(43, response); | |
String dbgMsg = rr.serialString() + "> " + requestToString(rr.mRequest) + " [" + facility + " " + lockState + " " + serviceClass + " "; | |
if (!SHIP_BUILD) { | |
dbgMsg = dbgMsg + appId; | |
} | |
riljLog(dbgMsg + "]"); | |
rr.mParcel.writeInt(5); | |
rr.mParcel.writeString(facility); | |
rr.mParcel.writeString(lockState ? "1" : "0"); | |
rr.mParcel.writeString(password); | |
rr.mParcel.writeString(Integer.toString(serviceClass)); | |
rr.mParcel.writeString(appId); | |
send(rr); | |
} | |
public void sendUSSD(String ussdString, Message response) { | |
RILRequest rr = RILRequest.obtain(29, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + "*******"); | |
rr.mParcel.writeString(ussdString); | |
send(rr); | |
} | |
public void cancelPendingUssd(Message response) { | |
RILRequest rr = RILRequest.obtain(30, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void resetRadio(Message result) { | |
RILRequest rr = RILRequest.obtain(58, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
/* JADX WARNING: inconsistent code. */ | |
/* Code decompiled incorrectly, please refer to instructions dump. */ | |
public void getModemCapability(android.os.Message r6) { | |
/* | |
r5 = this; | |
r0 = new java.io.ByteArrayOutputStream; | |
r0.<init>(); | |
r1 = new java.io.DataOutputStream; | |
r1.<init>(r0); | |
r3 = "RILJ"; | |
r4 = "getModemCapability"; | |
android.telephony.Rlog.d(r3, r4); | |
r3 = 2; | |
r1.writeByte(r3); Catch:{ IOException -> 0x0029, all -> 0x0030 } | |
r3 = 97; | |
r1.writeByte(r3); Catch:{ IOException -> 0x0029, all -> 0x0030 } | |
r3 = 4; | |
r1.writeShort(r3); Catch:{ IOException -> 0x0029, all -> 0x0030 } | |
r1.close(); Catch:{ Exception -> 0x0035 } | |
L_0x0021: | |
r3 = r0.toByteArray(); | |
r5.invokeOemRilRequestRaw(r3, r6); | |
L_0x0028: | |
return; | |
L_0x0029: | |
r2 = move-exception; | |
r1.close(); Catch:{ Exception -> 0x002e } | |
goto L_0x0028; | |
L_0x002e: | |
r3 = move-exception; | |
goto L_0x0028; | |
L_0x0030: | |
r3 = move-exception; | |
r1.close(); Catch:{ Exception -> 0x0037 } | |
L_0x0034: | |
throw r3; | |
L_0x0035: | |
r3 = move-exception; | |
goto L_0x0021; | |
L_0x0037: | |
r4 = move-exception; | |
goto L_0x0034; | |
*/ | |
throw new UnsupportedOperationException("Method not decompiled: com.android.internal.telephony.RIL.getModemCapability(android.os.Message):void"); | |
} | |
/* JADX WARNING: inconsistent code. */ | |
/* Code decompiled incorrectly, please refer to instructions dump. */ | |
public void updateStackBinding(int r6, int r7, android.os.Message r8) { | |
/* | |
r5 = this; | |
r0 = new java.io.ByteArrayOutputStream; | |
r0.<init>(); | |
r1 = new java.io.DataOutputStream; | |
r1.<init>(r0); | |
r3 = "RILJ"; | |
r4 = "updateStackBinding"; | |
android.telephony.Rlog.d(r3, r4); | |
r3 = 2; | |
r1.writeByte(r3); Catch:{ IOException -> 0x002f, all -> 0x0036 } | |
r3 = 98; | |
r1.writeByte(r3); Catch:{ IOException -> 0x002f, all -> 0x0036 } | |
r3 = 6; | |
r1.writeShort(r3); Catch:{ IOException -> 0x002f, all -> 0x0036 } | |
r1.writeByte(r6); Catch:{ IOException -> 0x002f, all -> 0x0036 } | |
r1.writeByte(r7); Catch:{ IOException -> 0x002f, all -> 0x0036 } | |
r1.close(); Catch:{ Exception -> 0x003b } | |
L_0x0027: | |
r3 = r0.toByteArray(); | |
r5.invokeOemRilRequestRaw(r3, r8); | |
L_0x002e: | |
return; | |
L_0x002f: | |
r2 = move-exception; | |
r1.close(); Catch:{ Exception -> 0x0034 } | |
goto L_0x002e; | |
L_0x0034: | |
r3 = move-exception; | |
goto L_0x002e; | |
L_0x0036: | |
r3 = move-exception; | |
r1.close(); Catch:{ Exception -> 0x003d } | |
L_0x003a: | |
throw r3; | |
L_0x003b: | |
r3 = move-exception; | |
goto L_0x0027; | |
L_0x003d: | |
r4 = move-exception; | |
goto L_0x003a; | |
*/ | |
throw new UnsupportedOperationException("Method not decompiled: com.android.internal.telephony.RIL.updateStackBinding(int, int, android.os.Message):void"); | |
} | |
public void invokeOemRilRequestRaw(byte[] data, Message response) { | |
RILRequest rr = RILRequest.obtain(59, response); | |
if ((data[0] == (byte) 81 && data[1] == (byte) 66) || (data[0] == (byte) 81 && data[1] == (byte) 65)) { | |
rr.onError(1, null); | |
rr.release(); | |
return; | |
} | |
String dbgMsg = IccUtils.bytesToHexString(data); | |
if (SHIP_BUILD) { | |
if ("15".equals(dbgMsg.substring(0, 2))) { | |
dbgMsg = "****"; | |
} else if ("1627".equals(dbgMsg.substring(0, 4)) && "KOREA".equals(SystemProperties.get("ro.csc.country_code"))) { | |
dbgMsg = "****"; | |
} | |
} | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + "[" + dbgMsg + "]"); | |
rr.mParcel.writeByteArray(data); | |
send(rr); | |
} | |
public void invokeOemRilRequestStrings(String[] strings, Message response) { | |
RILRequest rr = RILRequest.obtain(60, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeStringArray(strings); | |
send(rr); | |
} | |
public void setBandMode(int bandMode, Message response) { | |
RILRequest rr = RILRequest.obtain(65, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(bandMode); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + bandMode); | |
send(rr); | |
} | |
public void queryAvailableBandMode(Message response) { | |
RILRequest rr = RILRequest.obtain(66, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void sendTerminalResponse(String contents, Message response) { | |
RILRequest rr = RILRequest.obtain(70, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeString(contents); | |
send(rr); | |
} | |
public void sendEnvelope(String contents, Message response) { | |
RILRequest rr = RILRequest.obtain(69, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeString(contents); | |
send(rr); | |
} | |
public void sendEnvelopeWithStatus(String contents, Message response) { | |
RILRequest rr = RILRequest.obtain(107, response); | |
if (SHIP_BUILD) { | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
} else { | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + '[' + contents + ']'); | |
} | |
rr.mParcel.writeString(contents); | |
send(rr); | |
} | |
public void handleCallSetupRequestFromSim(boolean accept, Message response) { | |
int i = 1; | |
riljLog("handleCallSetupRequestFromSim"); | |
RILRequest rr = RILRequest.obtain(71, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
int[] param = new int[1]; | |
if (!accept) { | |
i = 0; | |
} | |
param[0] = i; | |
rr.mParcel.writeIntArray(param); | |
send(rr); | |
} | |
public void setPreferredNetworkType(int networkType, Message response) { | |
RILRequest rr = RILRequest.obtain(73, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(networkType); | |
setInitialPhoneType(networkType); | |
this.mPreferredNetworkType = networkType; | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " : " + networkType); | |
send(rr); | |
} | |
public void getPreferredNetworkType(Message response) { | |
RILRequest rr = RILRequest.obtain(74, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getNeighboringCids(Message response) { | |
RILRequest rr = RILRequest.obtain(75, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setLocationUpdates(boolean enable, Message response) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(76, response); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (!enable) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + ": " + enable); | |
send(rr); | |
} | |
public void getSmscAddress(Message result) { | |
RILRequest rr = RILRequest.obtain(100, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setSmscAddress(String address, Message result) { | |
RILRequest rr = RILRequest.obtain(Threads.ALERT_EXTREME_THREAD, result); | |
rr.mParcel.writeString(address); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " : " + address); | |
send(rr); | |
} | |
public void reportSmsMemoryStatus(boolean available, Message result) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(Threads.ALERT_SEVERE_THREAD, result); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (!available) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + ": " + available); | |
send(rr); | |
} | |
public void reportStkServiceIsRunning(Message result) { | |
RILRequest rr = RILRequest.obtain(Threads.ALERT_AMBER_THREAD, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getGsmBroadcastConfig(Message response) { | |
RILRequest rr = RILRequest.obtain(89, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) { | |
RILRequest rr = RILRequest.obtain(90, response); | |
rr.mParcel.writeInt(numOfConfig); | |
for (int i = 0; i < numOfConfig; i++) { | |
int i2; | |
rr.mParcel.writeInt(config[i].getFromServiceId()); | |
rr.mParcel.writeInt(config[i].getToServiceId()); | |
rr.mParcel.writeInt(config[i].getFromCodeScheme()); | |
rr.mParcel.writeInt(config[i].getToCodeScheme()); | |
Parcel parcel = rr.mParcel; | |
if (config[i].isSelected()) { | |
i2 = 1; | |
} else { | |
i2 = 0; | |
} | |
parcel.writeInt(i2); | |
} | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " with " + numOfConfig + " configs : "); | |
for (SmsBroadcastConfigInfo smsBroadcastConfigInfo : config) { | |
riljLog(smsBroadcastConfigInfo.toString()); | |
} | |
send(rr); | |
} | |
public void setGsmBroadcastActivation(boolean activate, Message response) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(91, response); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (activate) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
private void updateScreenState() { | |
boolean z = true; | |
int oldState = this.mRadioScreenState; | |
this.mRadioScreenState = this.mDefaultDisplayState == 2 ? 1 : 0; | |
if (this.mRadioScreenState != oldState) { | |
if (this.mRadioScreenState != 1) { | |
z = false; | |
} | |
sendScreenState(z); | |
} | |
} | |
private void sendScreenState(boolean on) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(61, null); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (!on) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + ": " + on); | |
send(rr); | |
} | |
protected void onRadioAvailable() { | |
if (this.mDefaultDisplay == null) { | |
riljLog("Get default display because DefaultDisplay is null"); | |
this.mDefaultDisplay = ((DisplayManager) this.mContext.getSystemService("display")).getDisplay(0); | |
} | |
if (this.mDefaultDisplay != null) { | |
this.mDefaultDisplayState = this.mDefaultDisplay.getState(); | |
} else { | |
riljLog("Can't get default display"); | |
} | |
updateScreenState(); | |
if (FloatingFeature.getInstance().getEnableStatus("SEC_FLOATING_FEATURE_COMMON_SUPPORT_SAFETYCARE")) { | |
EmergencyManager em = EmergencyManager.getInstance(this.mContext); | |
if (em.isEmergencyMode() && !em.checkModeType(512)) { | |
sendSafemode(true); | |
} else if (System.getInt(this.mContext.getContentResolver(), "emergency_mode", 0) != 1 || System.getInt(this.mContext.getContentResolver(), "ultra_powersaving_mode", 0) == 1) { | |
sendSafemode(false); | |
} else { | |
riljLog("EMERGENCY_MODE"); | |
sendSafemode(true); | |
} | |
} | |
} | |
private RadioState getRadioStateFromInt(int stateInt) { | |
switch (stateInt) { | |
case 0: | |
return RadioState.RADIO_OFF; | |
case 1: | |
return RadioState.RADIO_UNAVAILABLE; | |
case 10: | |
return RadioState.RADIO_ON; | |
default: | |
throw new RuntimeException("Unrecognized RIL_RadioState: " + stateInt); | |
} | |
} | |
private void switchToRadioState(RadioState newState) { | |
RadioState oldState = getRadioState(); | |
setRadioState(newState); | |
String salesCode = SystemProperties.get("ro.csc.sales_code"); | |
String isBpmFirstTime = SystemProperties.get("persist.sys.bpmsetting.default", "FirstTime"); | |
if (salesCode != null && "COL".equals(salesCode) && isBpmFirstTime != null && "FirstTime".equals(isBpmFirstTime)) { | |
SystemProperties.set("persist.sys.bpmsetting.enable", "1"); | |
SystemProperties.set("persist.sys.bpmsetting.default", "1"); | |
} | |
if (TelephonyManager.getDefault().getPhoneCount() <= 1) { | |
return; | |
} | |
if (("CHN".equals(salesCode) || "CHC".equals(salesCode) || "CHU".equals(salesCode) || "CHM".equals(salesCode) || "CTC".equals(salesCode) || "BRI".equals(salesCode) || "TGY".equals(salesCode) || "CWT".equals(salesCode) || "FET".equals(salesCode) || "TWM".equals(salesCode) || "CHZ".equals(salesCode)) && "Combination".equals("Combination") && getRadioState().isOn() && !oldState.isOn()) { | |
byte[] RAW_HOOK_OEM_CMD_BPM_ENABLE_QC_EVOLUTION = new byte[]{(byte) 2, (byte) 96, (byte) 0, (byte) 5, (byte) 5}; | |
String isBpminit = SystemProperties.get("persist.sys.bpmsetting.enable", "X"); | |
if (isBpminit == null || !"X".equals(isBpminit)) { | |
riljLog("init Bpm before set : " + isBpminit); | |
return; | |
} | |
riljLog("init Bpm"); | |
SystemProperties.set("persist.sys.bpmsetting.enable", "1"); | |
invokeOemRilRequestRaw(RAW_HOOK_OEM_CMD_BPM_ENABLE_QC_EVOLUTION, null); | |
} | |
} | |
private void acquireWakeLock() { | |
synchronized (this.mWakeLock) { | |
this.mWakeLock.acquire(); | |
this.mWakeLockCount++; | |
this.mSender.removeMessages(2); | |
this.mSender.sendMessageDelayed(this.mSender.obtainMessage(2), (long) this.mWakeLockTimeout); | |
} | |
} | |
private void decrementWakeLock() { | |
synchronized (this.mWakeLock) { | |
if (this.mWakeLockCount > 1) { | |
this.mWakeLockCount--; | |
} else { | |
this.mWakeLockCount = 0; | |
this.mWakeLock.release(); | |
this.mSender.removeMessages(2); | |
} | |
} | |
} | |
private boolean clearWakeLock() { | |
boolean z = false; | |
synchronized (this.mWakeLock) { | |
if (this.mWakeLockCount != 0 || this.mWakeLock.isHeld()) { | |
Rlog.d(RILJ_LOG_TAG, "NOTE: mWakeLockCount is " + this.mWakeLockCount + "at time of clearing"); | |
this.mWakeLockCount = 0; | |
this.mWakeLock.release(); | |
this.mSender.removeMessages(2); | |
z = true; | |
} | |
} | |
return z; | |
} | |
protected void send(RILRequest rr) { | |
if (this.mSocket == null) { | |
rr.onError(1, null); | |
rr.release(); | |
return; | |
} | |
Message msg = this.mSender.obtainMessage(1, rr); | |
acquireWakeLock(); | |
msg.sendToTarget(); | |
} | |
private void processResponse(Parcel p) { | |
int type = p.readInt(); | |
if (type == 1) { | |
processUnsolicited(p); | |
} else if (type == 0) { | |
RILRequest rr = processSolicited(p); | |
if (rr != null) { | |
rr.release(); | |
decrementWakeLock(); | |
} | |
} | |
} | |
private void clearRequestList(int error, boolean loggable) { | |
synchronized (this.mRequestList) { | |
int count = this.mRequestList.size(); | |
if (loggable) { | |
Rlog.d(RILJ_LOG_TAG, "clearRequestList mWakeLockCount=" + this.mWakeLockCount + " mRequestList=" + count); | |
} | |
for (int i = 0; i < count; i++) { | |
RILRequest rr = (RILRequest) this.mRequestList.valueAt(i); | |
if (loggable) { | |
Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] " + requestToString(rr.mRequest)); | |
} | |
rr.onError(error, null); | |
rr.release(); | |
decrementWakeLock(); | |
} | |
this.mRequestList.clear(); | |
} | |
} | |
private RILRequest findAndRemoveRequestFromList(int serial) { | |
RILRequest rr; | |
synchronized (this.mRequestList) { | |
rr = (RILRequest) this.mRequestList.get(serial); | |
if (rr != null) { | |
this.mRequestList.remove(serial); | |
} | |
} | |
return rr; | |
} | |
protected RILRequest processSolicited(Parcel p) { | |
String salesCode = SystemProperties.get("ro.csc.sales_code"); | |
int serial = p.readInt(); | |
int error = p.readInt(); | |
RILRequest rr = findAndRemoveRequestFromList(serial); | |
if (rr == null) { | |
Rlog.w(RILJ_LOG_TAG, "Unexpected solicited response! sn: " + serial + " error: " + error); | |
return null; | |
} | |
Object obj = null; | |
if (error == 0 || p.dataAvail() > 0) { | |
try { | |
switch (rr.mRequest) { | |
case 1: | |
obj = responseIccCardStatus(p); | |
break; | |
case 2: | |
obj = responseInts(p); | |
break; | |
case 3: | |
obj = responseInts(p); | |
break; | |
case 4: | |
obj = responseInts(p); | |
break; | |
case 5: | |
obj = responseInts(p); | |
break; | |
case 6: | |
obj = responseInts(p); | |
break; | |
case 7: | |
obj = responseInts(p); | |
break; | |
case 8: | |
obj = responseInts(p); | |
break; | |
case 9: | |
obj = responseCallList(p); | |
break; | |
case 10: | |
obj = responseVoid(p); | |
break; | |
case 11: | |
obj = responseString(p); | |
break; | |
case 12: | |
obj = responseVoid(p); | |
break; | |
case 13: | |
obj = responseVoid(p); | |
break; | |
case 14: | |
if (this.mTestingEmergencyCall.getAndSet(false) && this.mEmergencyCallbackModeRegistrant != null) { | |
riljLog("testing emergency call, notify ECM Registrants"); | |
this.mEmergencyCallbackModeRegistrant.notifyRegistrant(); | |
} | |
obj = responseVoid(p); | |
break; | |
case 15: | |
obj = responseVoid(p); | |
break; | |
case 16: | |
obj = responseVoid(p); | |
break; | |
case 17: | |
obj = responseVoid(p); | |
break; | |
case 18: | |
obj = responseFailCause(p); | |
break; | |
case 19: | |
obj = responseSignalStrength(p); | |
break; | |
case 20: | |
obj = responseStrings(p); | |
break; | |
case 21: | |
obj = responseStrings(p); | |
break; | |
case 22: | |
obj = responseStrings(p); | |
break; | |
case 23: | |
obj = responseVoid(p); | |
break; | |
case 24: | |
obj = responseVoid(p); | |
break; | |
case 25: | |
obj = responseSMS(p); | |
break; | |
case 26: | |
obj = responseSMS(p); | |
break; | |
case WspTypeDecoder.WSP_HEADER_IF_UNMODIFIED_SINCE /*27*/: | |
obj = responseSetupDataCall(p); | |
break; | |
case WspTypeDecoder.WSP_HEADER_LOCATION /*28*/: | |
obj = responseICC_IO(p); | |
break; | |
case WspTypeDecoder.WSP_HEADER_LAST_MODIFIED /*29*/: | |
obj = responseVoid(p); | |
break; | |
case 30: | |
obj = responseVoid(p); | |
break; | |
case 31: | |
obj = responseInts(p); | |
break; | |
case 32: | |
obj = responseVoid(p); | |
break; | |
case 33: | |
obj = responseCallForward(p); | |
break; | |
case 34: | |
obj = responseVoid(p); | |
break; | |
case 35: | |
obj = responseInts(p); | |
break; | |
case 36: | |
obj = responseVoid(p); | |
break; | |
case 37: | |
obj = responseVoid(p); | |
break; | |
case 38: | |
obj = responseString(p); | |
break; | |
case 39: | |
obj = responseString(p); | |
break; | |
case 40: | |
obj = responseVoid(p); | |
break; | |
case 41: | |
obj = responseVoid(p); | |
break; | |
case 42: | |
obj = responseInts(p); | |
break; | |
case 43: | |
obj = responseInts(p); | |
break; | |
case 44: | |
obj = responseVoid(p); | |
break; | |
case WspTypeDecoder.WSP_HEADER_WWW_AUTHENTICATE /*45*/: | |
obj = responseInts(p); | |
break; | |
case 46: | |
obj = responseVoid(p); | |
break; | |
case 47: | |
obj = responseVoid(p); | |
break; | |
case 48: | |
obj = responseOperatorInfos(p); | |
break; | |
case 49: | |
obj = responseVoid(p); | |
if (this.mDtmfProgress > 0) { | |
this.mDtmfProgress--; | |
break; | |
} | |
break; | |
case 50: | |
obj = responseVoid(p); | |
if (this.mDtmfProgress > 0) { | |
this.mDtmfProgress--; | |
break; | |
} | |
break; | |
case 51: | |
obj = responseString(p); | |
break; | |
case 52: | |
obj = responseVoid(p); | |
break; | |
case 53: | |
obj = responseVoid(p); | |
break; | |
case 54: | |
obj = responseInts(p); | |
break; | |
case 55: | |
obj = responseInts(p); | |
break; | |
case 56: | |
obj = responseInts(p); | |
break; | |
case 57: | |
obj = responseDataCallList(p); | |
break; | |
case 58: | |
obj = responseVoid(p); | |
break; | |
case 59: | |
obj = responseRaw(p); | |
break; | |
case WspTypeDecoder.WSP_HEADER_ACCEPT_ENCODING2 /*60*/: | |
obj = responseStrings(p); | |
break; | |
case WspTypeDecoder.WSP_HEADER_CACHE_CONTROL2 /*61*/: | |
obj = responseVoid(p); | |
break; | |
case 62: | |
obj = responseVoid(p); | |
break; | |
case 63: | |
obj = responseInts(p); | |
break; | |
case 64: | |
obj = responseVoid(p); | |
break; | |
case 65: | |
obj = responseVoid(p); | |
break; | |
case 66: | |
obj = responseInts(p); | |
break; | |
case 67: | |
obj = responseString(p); | |
break; | |
case 68: | |
obj = responseVoid(p); | |
break; | |
case WspTypeDecoder.WSP_HEADER_CONTENT_DISPOSITION2 /*69*/: | |
obj = responseString(p); | |
break; | |
case 70: | |
obj = responseVoid(p); | |
break; | |
case 71: | |
obj = responseInts(p); | |
break; | |
case 72: | |
obj = responseVoid(p); | |
break; | |
case 73: | |
obj = responseVoid(p); | |
break; | |
case 74: | |
obj = responseGetPreferredNetworkType(p); | |
break; | |
case 75: | |
obj = responseCellList(p); | |
break; | |
case RadioNVItems.RIL_NV_LTE_SCAN_PRIORITY_41 /*76*/: | |
obj = responseVoid(p); | |
break; | |
case RadioNVItems.RIL_NV_LTE_HIDDEN_BAND_PRIORITY_25 /*77*/: | |
obj = responseVoid(p); | |
break; | |
case 78: | |
obj = responseVoid(p); | |
break; | |
case RadioNVItems.RIL_NV_LTE_HIDDEN_BAND_PRIORITY_41 /*79*/: | |
obj = responseInts(p); | |
break; | |
case RadioNVItems.RIL_NV_LTE_NEXT_SCAN /*80*/: | |
obj = responseVoid(p); | |
break; | |
case 81: | |
obj = responseInts(p); | |
break; | |
case RadioNVItems.RIL_NV_LTE_BSR_MAX_TIME /*82*/: | |
obj = responseVoid(p); | |
break; | |
case 83: | |
obj = responseInts(p); | |
break; | |
case 84: | |
obj = responseVoid(p); | |
break; | |
case 85: | |
obj = responseVoid(p); | |
break; | |
case 86: | |
obj = responseVoid(p); | |
break; | |
case 87: | |
obj = responseSMS(p); | |
break; | |
case 88: | |
obj = responseVoid(p); | |
break; | |
case 89: | |
obj = responseGmsBroadcastConfig(p); | |
break; | |
case 90: | |
obj = responseVoid(p); | |
break; | |
case 91: | |
obj = responseVoid(p); | |
break; | |
case 92: | |
obj = responseCdmaBroadcastConfig(p); | |
break; | |
case 93: | |
obj = responseVoid(p); | |
break; | |
case 94: | |
obj = responseVoid(p); | |
break; | |
case 95: | |
obj = responseStrings(p); | |
break; | |
case CommandsInterface.CDMA_SMS_FAIL_CAUSE_ENCODING_PROBLEM /*96*/: | |
obj = responseInts(p); | |
break; | |
case OEM_NET_GET_MODEM_CAP /*97*/: | |
obj = responseVoid(p); | |
break; | |
case OEM_NET_UPDATE_SUB_BINDING /*98*/: | |
obj = responseStrings(p); | |
break; | |
case 99: | |
obj = responseVoid(p); | |
break; | |
case 100: | |
obj = responseString(p); | |
break; | |
case Threads.ALERT_EXTREME_THREAD /*101*/: | |
obj = responseVoid(p); | |
break; | |
case Threads.ALERT_SEVERE_THREAD /*102*/: | |
obj = responseVoid(p); | |
break; | |
case Threads.ALERT_AMBER_THREAD /*103*/: | |
obj = responseVoid(p); | |
break; | |
case Threads.ALERT_TEST_MESSAGE_THREAD /*104*/: | |
obj = responseInts(p); | |
break; | |
case 105: | |
obj = responseString(p); | |
break; | |
case 106: | |
obj = responseVoid(p); | |
break; | |
case 107: | |
obj = responseICC_IO(p); | |
break; | |
case 108: | |
obj = responseInts(p); | |
break; | |
case 109: | |
obj = responseCellInfoList(p); | |
break; | |
case Threads.ALERTS_ALL_ONE_THREAD /*110*/: | |
obj = responseVoid(p); | |
break; | |
case 111: | |
obj = responseVoid(p); | |
break; | |
case 112: | |
obj = responseInts(p); | |
break; | |
case 113: | |
obj = responseSMS(p); | |
break; | |
case CallFailCause.KTF_FAIL_CAUSE_114 /*114*/: | |
obj = responseICC_IO(p); | |
break; | |
case CallFailCause.KTF_FAIL_CAUSE_115 /*115*/: | |
obj = responseInts(p); | |
break; | |
case CallFailCause.KTF_FAIL_CAUSE_116 /*116*/: | |
obj = responseVoid(p); | |
break; | |
case 117: | |
obj = responseICC_IO(p); | |
break; | |
case 118: | |
obj = responseString(p); | |
break; | |
case 119: | |
obj = responseVoid(p); | |
break; | |
case 120: | |
obj = responseVoid(p); | |
break; | |
case 121: | |
obj = responseVoid(p); | |
break; | |
case 122: | |
obj = responseVoid(p); | |
break; | |
case 123: | |
obj = responseVoid(p); | |
break; | |
case 124: | |
obj = responseHardwareConfig(p); | |
break; | |
case 125: | |
obj = responseICC_IO(p); | |
break; | |
case 128: | |
obj = responseVoid(p); | |
break; | |
case 129: | |
obj = responseVoid(p); | |
break; | |
case 130: | |
obj = responseRadioCapability(p); | |
break; | |
case 131: | |
obj = responseRadioCapability(p); | |
break; | |
case 132: | |
obj = responseLceStatus(p); | |
break; | |
case 133: | |
obj = responseLceStatus(p); | |
break; | |
case 134: | |
obj = responseLceData(p); | |
break; | |
case 135: | |
obj = responseActivityData(p); | |
break; | |
case 10001: | |
obj = responseVoid(p); | |
break; | |
case 10002: | |
obj = responseVoid(p); | |
break; | |
case 10003: | |
obj = responseFailCause(p); | |
break; | |
case 10004: | |
obj = responseVoid(p); | |
break; | |
case 10005: | |
obj = responseVoid(p); | |
break; | |
case 10006: | |
obj = responseVoid(p); | |
break; | |
case 10007: | |
obj = responseVoid(p); | |
break; | |
case 10008: | |
obj = responseCbSettings(p); | |
break; | |
case 10009: | |
obj = responseInts(p); | |
break; | |
case 10010: | |
obj = responseSIM_PB(p); | |
break; | |
case 10011: | |
obj = responseInts(p); | |
break; | |
case 10012: | |
obj = responseInts(p); | |
break; | |
case 10013: | |
obj = responseSIM_LockInfo(p); | |
break; | |
case 10014: | |
obj = responseVoid(p); | |
break; | |
case 10015: | |
obj = responseVoid(p); | |
break; | |
case 10016: | |
obj = responsePreferredNetworkList(p); | |
break; | |
case 10017: | |
obj = responseInts(p); | |
break; | |
case 10018: | |
obj = responseInts(p); | |
break; | |
case 10019: | |
obj = responseVoid(p); | |
break; | |
case 10020: | |
obj = responseSMS(p); | |
break; | |
case 10021: | |
obj = responseVoid(p); | |
break; | |
case 10022: | |
obj = responseVoid(p); | |
break; | |
case 10023: | |
obj = responseSimPowerDone(p); | |
break; | |
case 10025: | |
obj = responseBootstrap(p); | |
break; | |
case 10026: | |
obj = responseNaf(p); | |
break; | |
case 10027: | |
obj = responseString(p); | |
break; | |
case 10028: | |
obj = responseVoid(p); | |
break; | |
case 10029: | |
obj = responseInts(p); | |
break; | |
case 10030: | |
obj = responseVoid(p); | |
break; | |
case 10031: | |
obj = responseInts(p); | |
break; | |
case 10032: | |
obj = responseVoid(p); | |
break; | |
case 10033: | |
obj = responseVoid(p); | |
break; | |
default: | |
throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest); | |
} | |
} catch (Throwable tr) { | |
Rlog.w(RILJ_LOG_TAG, rr.serialString() + "< " + requestToString(rr.mRequest) + " exception, possible invalid RIL response", tr); | |
if (rr.mResult == null) { | |
return rr; | |
} | |
AsyncResult.forMessage(rr.mResult, null, tr); | |
rr.mResult.sendToTarget(); | |
return rr; | |
} | |
} | |
if (rr.mRequest == 129) { | |
riljLog("Response to RIL_REQUEST_SHUTDOWN received. Error is " + error + " Setting Radio State to Unavailable regardless of error."); | |
setRadioState(RadioState.RADIO_UNAVAILABLE); | |
if ("DCGS".equals("") && "1".equals(SystemProperties.get("sys.deviceOffReq", "0"))) { | |
if (this.mInstanceId.intValue() == 0) { | |
SystemProperties.set("ril.deviceOffRes", "1"); | |
} else if (this.mInstanceId.intValue() == 1) { | |
SystemProperties.set("ril.deviceOffRes2", "1"); | |
} | |
} | |
} | |
switch (rr.mRequest) { | |
case 3: | |
case 5: | |
if (this.mIccStatusChangedRegistrants != null) { | |
riljLog("ON enter sim puk fakeSimStatusChanged: reg count=" + this.mIccStatusChangedRegistrants.size()); | |
this.mIccStatusChangedRegistrants.notifyRegistrants(); | |
break; | |
} | |
break; | |
} | |
if (error != 0) { | |
switch (rr.mRequest) { | |
case 2: | |
case 4: | |
case 6: | |
case 7: | |
case 43: | |
if (this.mIccStatusChangedRegistrants != null) { | |
riljLog("ON some errors fakeSimStatusChanged: reg count=" + this.mIccStatusChangedRegistrants.size()); | |
this.mIccStatusChangedRegistrants.notifyRegistrants(); | |
break; | |
} | |
break; | |
case 130: | |
if (6 != error && 2 != error) { | |
obj = makeStaticRadioCapability(); | |
error = 0; | |
break; | |
} | |
obj = makeStaticRadioCapability(); | |
error = 0; | |
break; | |
case 135: | |
obj = new ModemActivityInfo(0, 0, 0, new int[5], 0, 0); | |
error = 0; | |
break; | |
} | |
if (error != 0) { | |
rr.onError(error, obj); | |
} | |
} | |
if (error != 0) { | |
return rr; | |
} | |
if ("CTC".equals(salesCode) && rr.mRequest == 73) { | |
if (this.mPreferredNetworkType < 8 || this.mPreferredNetworkType > 12) { | |
System.putInt(this.mContext.getContentResolver(), "lte_mode_switch", 0); | |
Rlog.d(RILJ_LOG_TAG, "Set LTE_MODE_SWITCH off"); | |
} else { | |
System.putInt(this.mContext.getContentResolver(), "lte_mode_switch", 1); | |
Rlog.d(RILJ_LOG_TAG, "Set LTE_MODE_SWITCH on"); | |
} | |
} | |
riljLog(rr.serialString() + "< " + requestToString(rr.mRequest) + " " + retToString(rr.mRequest, obj)); | |
if (rr.mResult == null) { | |
return rr; | |
} | |
AsyncResult.forMessage(rr.mResult, obj, null); | |
rr.mResult.sendToTarget(); | |
return rr; | |
} | |
private RadioCapability makeStaticRadioCapability() { | |
int raf = 1; | |
String rafString = this.mContext.getResources().getString(17039447); | |
if (!TextUtils.isEmpty(rafString)) { | |
raf = RadioAccessFamily.rafTypeFromString(rafString); | |
} | |
RadioCapability rc = new RadioCapability(this.mInstanceId.intValue(), 0, 0, raf, "", 1); | |
riljLog("Faking RIL_REQUEST_GET_RADIO_CAPABILITY response using " + raf); | |
return rc; | |
} | |
static String retToString(int req, Object ret) { | |
if (ret == null) { | |
return ""; | |
} | |
switch (req) { | |
case 11: | |
case 38: | |
case 39: | |
case CallFailCause.KTF_FAIL_CAUSE_115 /*115*/: | |
case 117: | |
return ""; | |
case 22: | |
if (SHIP_BUILD) { | |
return "{xx,xx,xx,xx}"; | |
} | |
break; | |
case 95: | |
break; | |
case OEM_NET_UPDATE_SUB_BINDING /*98*/: | |
if (SHIP_BUILD) { | |
return "{xx,xx,xx,xx,xx}"; | |
} | |
break; | |
case 105: | |
case 109: | |
case 1013: | |
case 1014: | |
case CharacterSets.UTF_16 /*1015*/: | |
case 1027: | |
if (SHIP_BUILD) { | |
return ""; | |
} | |
break; | |
} | |
if (SHIP_BUILD) { | |
return "{xx,xx,xx,xx,xx}"; | |
} | |
int length; | |
StringBuilder stringBuilder; | |
int i; | |
int i2; | |
if (ret instanceof int[]) { | |
int[] intArray = (int[]) ret; | |
length = intArray.length; | |
stringBuilder = new StringBuilder("{"); | |
if (length > 0) { | |
i = 0 + 1; | |
stringBuilder.append(intArray[0]); | |
while (i < length) { | |
i2 = i + 1; | |
stringBuilder.append(", ").append(intArray[i]); | |
i = i2; | |
} | |
} | |
stringBuilder.append("}"); | |
return stringBuilder.toString(); | |
} else if (ret instanceof String[]) { | |
String[] strings = (String[]) ret; | |
length = strings.length; | |
stringBuilder = new StringBuilder("{"); | |
if (length > 0) { | |
i = 0 + 1; | |
stringBuilder.append(strings[0]); | |
while (i < length) { | |
i2 = i + 1; | |
stringBuilder.append(", ").append(strings[i]); | |
i = i2; | |
} | |
} | |
stringBuilder.append("}"); | |
return stringBuilder.toString(); | |
} else if (req == 9) { | |
ArrayList<DriverCall> calls = (ArrayList) ret; | |
stringBuilder = new StringBuilder("{"); | |
i$ = calls.iterator(); | |
while (i$.hasNext()) { | |
stringBuilder.append("[").append((DriverCall) i$.next()).append("] "); | |
} | |
stringBuilder.append("}"); | |
return stringBuilder.toString(); | |
} else if (req == 75) { | |
ArrayList<NeighboringCellInfo> cells = (ArrayList) ret; | |
stringBuilder = new StringBuilder("{"); | |
i$ = cells.iterator(); | |
while (i$.hasNext()) { | |
stringBuilder.append("[").append((NeighboringCellInfo) i$.next()).append("] "); | |
} | |
stringBuilder.append("}"); | |
return stringBuilder.toString(); | |
} else if (req == 33) { | |
stringBuilder = new StringBuilder("{"); | |
for (Object append : (CallForwardInfo[]) ret) { | |
stringBuilder.append("[").append(append).append("] "); | |
} | |
stringBuilder.append("}"); | |
return stringBuilder.toString(); | |
} else if (req == 124) { | |
ArrayList<HardwareConfig> hwcfgs = (ArrayList) ret; | |
stringBuilder = new StringBuilder(" "); | |
i$ = hwcfgs.iterator(); | |
while (i$.hasNext()) { | |
stringBuilder.append("[").append((HardwareConfig) i$.next()).append("] "); | |
} | |
return stringBuilder.toString(); | |
} else if (req == 59) { | |
String s = ret.toString(); | |
if (!SHIP_BUILD || s.length() <= 5) { | |
return s; | |
} | |
return s.substring(0, 5) + "..."; | |
} else if (req != 33) { | |
return ret.toString(); | |
} else { | |
CallForwardInfo[] CFinfos = (CallForwardInfo[]) ret; | |
length = CFinfos.length; | |
stringBuilder = new StringBuilder("["); | |
if (SHIP_BUILD) { | |
if (length > 0) { | |
i = 0 + 1; | |
if (CFinfos[0].status == 1) { | |
stringBuilder.append(" active "); | |
} else { | |
stringBuilder.append(" not active "); | |
} | |
while (i < length) { | |
i2 = i + 1; | |
if (CFinfos[i].status == 1) { | |
stringBuilder.append("] [").append(" active "); | |
i = i2; | |
} else { | |
stringBuilder.append("] [").append(" not active "); | |
i = i2; | |
} | |
} | |
} | |
} else if (length > 0) { | |
i = 0 + 1; | |
stringBuilder.append(CFinfos[0].toString()); | |
while (i < length) { | |
i2 = i + 1; | |
stringBuilder.append("] [").append(CFinfos[i].toString()); | |
i = i2; | |
} | |
} | |
stringBuilder.append("]"); | |
return stringBuilder.toString(); | |
} | |
} | |
protected void processUnsolicited(Parcel p) { | |
String responseVoid; | |
int response = p.readInt(); | |
switch (response) { | |
case 1000: | |
responseVoid = responseVoid(p); | |
break; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_DROP /*1001*/: | |
this.mDtmfProgress = 0; | |
responseVoid = responseVoid(p); | |
break; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_INTERCEPT /*1002*/: | |
responseVoid = responseVoid(p); | |
break; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_REORDER /*1003*/: | |
responseVoid = responseString(p); | |
break; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_SO_REJECT /*1004*/: | |
responseVoid = responseString(p); | |
break; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_RETRY_ORDER /*1005*/: | |
responseVoid = responseInts(p); | |
break; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_ACCESS_FAILURE /*1006*/: | |
responseVoid = responseStrings(p); | |
break; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_NOT_EMERGENCY /*1008*/: | |
responseVoid = responseString(p); | |
break; | |
case 1009: | |
responseVoid = responseSignalStrength(p); | |
break; | |
case 1010: | |
responseVoid = responseDataCallList(p); | |
break; | |
case 1011: | |
responseVoid = responseSuppServiceNotification(p); | |
break; | |
case 1012: | |
responseVoid = responseVoid(p); | |
break; | |
case 1013: | |
responseVoid = responseString(p); | |
break; | |
case 1014: | |
responseVoid = responseString(p); | |
break; | |
case CharacterSets.UTF_16 /*1015*/: | |
responseVoid = responseInts(p); | |
break; | |
case 1016: | |
responseVoid = responseVoid(p); | |
break; | |
case 1017: | |
responseVoid = responseSimRefresh(p); | |
break; | |
case 1018: | |
responseVoid = responseCallRing(p); | |
break; | |
case 1019: | |
responseVoid = responseVoid(p); | |
break; | |
case 1020: | |
responseVoid = responseCdmaSms(p); | |
break; | |
case 1021: | |
responseVoid = responseRaw(p); | |
break; | |
case 1022: | |
responseVoid = responseVoid(p); | |
break; | |
case 1023: | |
responseVoid = responseInts(p); | |
break; | |
case 1024: | |
responseVoid = responseVoid(p); | |
break; | |
case 1025: | |
responseVoid = responseCdmaCallWaiting(p); | |
break; | |
case 1026: | |
responseVoid = responseInts(p); | |
break; | |
case 1027: | |
responseVoid = responseCdmaInformationRecord(p); | |
break; | |
case 1028: | |
responseVoid = responseRaw(p); | |
break; | |
case 1029: | |
responseVoid = responseInts(p); | |
break; | |
case 1030: | |
responseVoid = responseVoid(p); | |
break; | |
case 1031: | |
responseVoid = responseInts(p); | |
break; | |
case 1032: | |
responseVoid = responseInts(p); | |
break; | |
case 1033: | |
responseVoid = responseVoid(p); | |
break; | |
case 1034: | |
responseVoid = responseInts(p); | |
break; | |
case 1035: | |
responseVoid = responseInts(p); | |
break; | |
case 1036: | |
responseVoid = responseCellInfoList(p); | |
break; | |
case 1037: | |
responseVoid = responseVoid(p); | |
break; | |
case 1038: | |
responseVoid = responseInts(p); | |
break; | |
case 1039: | |
responseVoid = responseInts(p); | |
break; | |
case 1040: | |
responseVoid = responseHardwareConfig(p); | |
break; | |
case 1042: | |
responseVoid = responseRadioCapability(p); | |
break; | |
case 1043: | |
responseVoid = responseSsData(p); | |
break; | |
case 1044: | |
responseVoid = responseString(p); | |
break; | |
case 1045: | |
responseVoid = responseLceData(p); | |
break; | |
case 11001: | |
responseVoid = responseSSReleaseCompleteNotification(p); | |
break; | |
case 11002: | |
responseVoid = responseInts(p); | |
break; | |
case 11003: | |
responseVoid = responseString(p); | |
break; | |
case 11008: | |
responseVoid = responseVoid(p); | |
break; | |
case 11009: | |
responseVoid = responseVoid(p); | |
break; | |
case 11010: | |
responseVoid = responseString(p); | |
break; | |
case 11013: | |
responseVoid = responseRaw(p); | |
break; | |
case 11020: | |
responseVoid = responseRaw(p); | |
break; | |
case 11021: | |
responseVoid = responseVoid(p); | |
break; | |
case 11024: | |
responseVoid = responseRaw(p); | |
break; | |
case 11027: | |
responseVoid = responseInts(p); | |
break; | |
case 11028: | |
responseVoid = responseCallModify(p); | |
break; | |
case 11030: | |
responseVoid = responseInts(p); | |
break; | |
case 11032: | |
responseVoid = responseInts(p); | |
break; | |
case 11034: | |
responseVoid = responseVoid(p); | |
break; | |
case 11035: | |
responseVoid = responseVoid(p); | |
break; | |
case 11037: | |
responseVoid = responseVoid(p); | |
break; | |
case 11043: | |
responseVoid = responseVoid(p); | |
break; | |
case 11054: | |
responseVoid = responseInts(p); | |
break; | |
case 11056: | |
responseVoid = responseRaw(p); | |
break; | |
case 11057: | |
responseVoid = responseInts(p); | |
break; | |
case 11058: | |
responseVoid = responseInts(p); | |
break; | |
case 11060: | |
responseVoid = responseStrings(p); | |
break; | |
case 11061: | |
responseVoid = responseInts(p); | |
break; | |
case 11062: | |
responseVoid = responseInts(p); | |
break; | |
case 11064: | |
responseVoid = responseInts(p); | |
break; | |
case 11066: | |
responseVoid = responseString(p); | |
break; | |
default: | |
try { | |
throw new RuntimeException("Unrecognized unsol response: " + response); | |
} catch (Throwable tr) { | |
Rlog.e(RILJ_LOG_TAG, "Exception processing unsol response: " + response + "Exception:" + tr.toString()); | |
return; | |
} | |
} | |
SmsMessage sms; | |
switch (response) { | |
case 1000: | |
RadioState newState = getRadioStateFromInt(p.readInt()); | |
unsljLogMore(response, newState.toString()); | |
switchToRadioState(newState); | |
return; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_DROP /*1001*/: | |
unsljLog(response); | |
this.mCallStateRegistrants.notifyRegistrants(new AsyncResult(null, null, null)); | |
return; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_INTERCEPT /*1002*/: | |
unsljLog(response); | |
this.mVoiceNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, null, null)); | |
return; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_REORDER /*1003*/: | |
unsljLog(response); | |
String[] a = new String[2]; | |
a[1] = responseVoid; | |
sms = SmsMessage.newFromCMT(a); | |
if (this.mGsmSmsRegistrant != null) { | |
this.mGsmSmsRegistrant.notifyRegistrant(new AsyncResult(null, sms, null)); | |
} | |
if (SystemProperties.getBoolean("persist.EarthquakeTestmode", false)) { | |
testingETWS(sms); | |
return; | |
} | |
return; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_SO_REJECT /*1004*/: | |
unsljLogRet(response, responseVoid); | |
if (this.mSmsStatusRegistrant != null) { | |
this.mSmsStatusRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_RETRY_ORDER /*1005*/: | |
unsljLogRet(response, responseVoid); | |
Object smsIndex = (int[]) responseVoid; | |
if (smsIndex.length != 1) { | |
riljLog(" NEW_SMS_ON_SIM ERROR with wrong length " + smsIndex.length); | |
return; | |
} else if (this.mSmsOnSimRegistrant != null) { | |
this.mSmsOnSimRegistrant.notifyRegistrant(new AsyncResult(null, smsIndex, null)); | |
return; | |
} else { | |
return; | |
} | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_ACCESS_FAILURE /*1006*/: | |
Object resp = (String[]) responseVoid; | |
if (resp.length < 2) { | |
resp = new String[]{((String[]) responseVoid)[0], null}; | |
} | |
unsljLogMore(response, resp[0]); | |
if (this.mUSSDRegistrant != null) { | |
this.mUSSDRegistrant.notifyRegistrant(new AsyncResult(null, resp, null)); | |
return; | |
} | |
return; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_NOT_EMERGENCY /*1008*/: | |
unsljLogRet(response, responseVoid); | |
long nitzReceiveTime = p.readLong(); | |
Object result = new Object[]{responseVoid, Long.valueOf(nitzReceiveTime)}; | |
if (SystemProperties.getBoolean("telephony.test.ignore.nitz", false)) { | |
riljLog("ignoring UNSOL_NITZ_TIME_RECEIVED"); | |
return; | |
} | |
if (this.mNITZTimeRegistrant != null) { | |
this.mNITZTimeRegistrant.notifyRegistrant(new AsyncResult(null, result, null)); | |
} | |
this.mLastNITZTimeInfo = result; | |
return; | |
case 1009: | |
if (this.mSignalStrengthRegistrant != null) { | |
this.mSignalStrengthRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1010: | |
unsljLogRet(response, responseVoid); | |
this.mDataNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
case 1011: | |
unsljLogRet(response, responseVoid); | |
if (this.mSsnRegistrant != null) { | |
this.mSsnRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1012: | |
unsljLog(response); | |
if (this.mCatSessionEndRegistrant != null) { | |
this.mCatSessionEndRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1013: | |
unsljLog(response); | |
if (this.mCatProCmdRegistrant != null) { | |
this.mCatProCmdRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1014: | |
unsljLog(response); | |
if (this.mCatEventRegistrant != null) { | |
this.mCatEventRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case CharacterSets.UTF_16 /*1015*/: | |
unsljLogRet(response, responseVoid); | |
if (this.mCatCallSetUpRegistrant != null) { | |
this.mCatCallSetUpRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1016: | |
unsljLog(response); | |
if (this.mIccSmsFullRegistrant != null) { | |
this.mIccSmsFullRegistrant.notifyRegistrant(); | |
return; | |
} | |
return; | |
case 1017: | |
unsljLogRet(response, responseVoid); | |
if (this.mIccRefreshRegistrants != null) { | |
this.mIccRefreshRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1018: | |
unsljLogRet(response, responseVoid); | |
if (this.mRingRegistrant != null) { | |
this.mRingRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1019: | |
unsljLog(response); | |
if (this.mIccStatusChangedRegistrants != null) { | |
this.mIccStatusChangedRegistrants.notifyRegistrants(); | |
return; | |
} | |
return; | |
case 1020: | |
unsljLog(response); | |
sms = (SmsMessage) responseVoid; | |
if (this.mCdmaSmsRegistrant != null) { | |
this.mCdmaSmsRegistrant.notifyRegistrant(new AsyncResult(null, sms, null)); | |
return; | |
} | |
return; | |
case 1021: | |
unsljLogvRet(response, IccUtils.bytesToHexString((byte[]) responseVoid)); | |
if (this.mGsmBroadcastSmsRegistrant != null) { | |
this.mGsmBroadcastSmsRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1022: | |
unsljLog(response); | |
if (this.mIccSmsFullRegistrant != null) { | |
this.mIccSmsFullRegistrant.notifyRegistrant(); | |
return; | |
} | |
return; | |
case 1023: | |
unsljLogvRet(response, responseVoid); | |
if (this.mRestrictedStateRegistrant != null) { | |
this.mRestrictedStateRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1024: | |
unsljLog(response); | |
if (this.mEmergencyCallbackModeRegistrant != null) { | |
this.mEmergencyCallbackModeRegistrant.notifyRegistrant(); | |
return; | |
} | |
return; | |
case 1025: | |
unsljLogRet(response, responseVoid); | |
if (this.mCallWaitingInfoRegistrants != null) { | |
this.mCallWaitingInfoRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1026: | |
unsljLogRet(response, responseVoid); | |
if (this.mOtaProvisionRegistrants != null) { | |
this.mOtaProvisionRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1027: | |
try { | |
Iterator i$ = ((ArrayList) responseVoid).iterator(); | |
while (i$.hasNext()) { | |
CdmaInformationRecords rec = (CdmaInformationRecords) i$.next(); | |
unsljLogRet(response, rec); | |
notifyRegistrantsCdmaInfoRec(rec); | |
} | |
return; | |
} catch (ClassCastException e) { | |
Rlog.e(RILJ_LOG_TAG, "Unexpected exception casting to listInfoRecs", e); | |
return; | |
} | |
case 1028: | |
unsljLogvRet(response, IccUtils.bytesToHexString((byte[]) responseVoid)); | |
if (this.mUnsolOemHookRawRegistrant != null) { | |
this.mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1029: | |
unsljLogvRet(response, responseVoid); | |
if (this.mRingbackToneRegistrants != null) { | |
this.mRingbackToneRegistrants.notifyRegistrants(new AsyncResult(null, Boolean.valueOf(((int[]) ((int[]) responseVoid))[0] == 1), null)); | |
return; | |
} | |
return; | |
case 1030: | |
unsljLogRet(response, responseVoid); | |
if (this.mResendIncallMuteRegistrants != null) { | |
this.mResendIncallMuteRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1031: | |
unsljLogRet(response, responseVoid); | |
if (this.mCdmaSubscriptionChangedRegistrants != null) { | |
this.mCdmaSubscriptionChangedRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1032: | |
unsljLogRet(response, responseVoid); | |
if (this.mCdmaPrlChangedRegistrants != null) { | |
this.mCdmaPrlChangedRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1033: | |
unsljLogRet(response, responseVoid); | |
if (this.mExitEmergencyCallbackModeRegistrants != null) { | |
this.mExitEmergencyCallbackModeRegistrants.notifyRegistrants(new AsyncResult(null, null, null)); | |
return; | |
} | |
return; | |
case 1034: | |
Rlog.i(RILJ_LOG_TAG, "!@Boot_SVC : RIL_UNSOL_RIL_CONNECTED"); | |
unsljLogRet(response, responseVoid); | |
if ("DCGG".equals("")) { | |
Rlog.d(RILJ_LOG_TAG, "do not power off radio"); | |
} else if ("DGG".equals("") && this.mInstanceId.intValue() == 1) { | |
Rlog.d(RILJ_LOG_TAG, "do not power off radio"); | |
} else if ("DCGGS".equals("")) { | |
String cg_switch = SystemProperties.get("ril.rildreset", ""); | |
if ("8".equals(cg_switch)) { | |
String isRildReady = SystemProperties.get("ril.RildInit", ""); | |
int reTryTimes = 1; | |
while (!"1".equals(isRildReady) && reTryTimes < 8) { | |
Rlog.d(RILJ_LOG_TAG, "Rild is not ready, reTry " + reTryTimes + "times"); | |
try { | |
Thread.sleep(500); | |
} catch (InterruptedException e2) { | |
} | |
isRildReady = SystemProperties.get("ril.RildInit", ""); | |
reTryTimes++; | |
} | |
Rlog.d(RILJ_LOG_TAG, "[CGG] Notify ril connected event to CP!"); | |
setSimPower(9, null); | |
} | |
if ("8".equals(cg_switch) || "9".equals(cg_switch)) { | |
Rlog.d(RILJ_LOG_TAG, "[CGG] rildreset property value set as zero!"); | |
SystemProperties.set("ril.rildreset", "0"); | |
} | |
} else if (TelephonyManager.getDefault().getPhoneCount() <= 1 || this.mInstanceId.intValue() != 1) { | |
setRadioPower(false, null); | |
} else { | |
Rlog.d(RILJ_LOG_TAG, "Do not power off radio for slot2"); | |
} | |
setCellInfoListRate(Integer.MAX_VALUE, null); | |
notifyRegistrantsRilConnectionChanged(((int[]) responseVoid)[0]); | |
return; | |
case 1035: | |
unsljLogRet(response, responseVoid); | |
if (this.mVoiceRadioTechChangedRegistrants != null) { | |
this.mVoiceRadioTechChangedRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1036: | |
unsljLogRet(response, responseVoid); | |
if (this.mRilCellInfoListRegistrants != null) { | |
this.mRilCellInfoListRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1037: | |
unsljLog(response); | |
this.mImsNetworkStateChangedRegistrants.notifyRegistrants(new AsyncResult(null, null, null)); | |
return; | |
case 1038: | |
unsljLogRet(response, responseVoid); | |
if (this.mSubscriptionStatusRegistrants != null) { | |
this.mSubscriptionStatusRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1039: | |
unsljLogRet(response, responseVoid); | |
if (this.mSrvccStateRegistrants != null) { | |
this.mSrvccStateRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1040: | |
unsljLogRet(response, responseVoid); | |
if (this.mHardwareConfigChangeRegistrants != null) { | |
this.mHardwareConfigChangeRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1042: | |
unsljLogRet(response, responseVoid); | |
if (this.mPhoneRadioCapabilityChangedRegistrants != null) { | |
this.mPhoneRadioCapabilityChangedRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1043: | |
unsljLogRet(response, responseVoid); | |
if (this.mSsRegistrant != null) { | |
this.mSsRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1044: | |
unsljLogRet(response, responseVoid); | |
if (this.mCatCcAlphaRegistrant != null) { | |
this.mCatCcAlphaRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 1045: | |
unsljLogRet(response, responseVoid); | |
if (this.mLceInfoRegistrant != null) { | |
this.mLceInfoRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11001: | |
unsljLog(response); | |
if (this.mReleaseCompleteMessageRegistrant != null) { | |
this.mReleaseCompleteMessageRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11002: | |
unsljLogRet(response, responseVoid); | |
if (this.mCatSendSmsResultRegistrant != null) { | |
this.mCatSendSmsResultRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11003: | |
unsljLogRet(response, responseVoid); | |
if (this.mCatCallControlResultRegistrant != null) { | |
this.mCatCallControlResultRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11008: | |
unsljLog(response); | |
if (this.mSmsDeviceReadyRegistrant != null) { | |
this.mSmsDeviceReadyRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11010: | |
String str = responseVoid; | |
Rlog.d(RILJ_LOG_TAG, "Executing Am " + str); | |
Am.main(str.split(" ")); | |
return; | |
case 11013: | |
unsljLogRet(response, responseVoid); | |
if (this.mSapRegistant != null) { | |
this.mSapRegistant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11021: | |
unsljLogRet(response, responseVoid); | |
if (this.mSimPbReadyRegistrant != null) { | |
this.mSimPbReadyRegistrant.notifyRegistrant(new AsyncResult(null, null, null)); | |
return; | |
} | |
return; | |
case 11027: | |
unsljLogvRet(response, responseVoid); | |
if (this.mImsRegistrationStateChangedRegistrants != null) { | |
this.mImsRegistrationStateChangedRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11028: | |
unsljLogvRet(response, responseVoid); | |
if (this.mModifyCallRegistrants != null) { | |
this.mModifyCallRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11030: | |
unsljLogRet(response, responseVoid); | |
if (this.mCsFallbackRegistant != null) { | |
this.mCsFallbackRegistant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11032: | |
unsljLogvRet(response, responseVoid); | |
if (this.mVoiceSystemIdRegistrant != null) { | |
this.mVoiceSystemIdRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11034: | |
unsljLog(response); | |
Rlog.d(RILJ_LOG_TAG, "RIL_UNSOL_IMS_RETRYOVER"); | |
if (this.mImsRegistrationRetryOver != null) { | |
this.mImsRegistrationRetryOver.notifyRegistrants(new AsyncResult(null, null, null)); | |
return; | |
} | |
return; | |
case 11035: | |
unsljLogRet(response, responseVoid); | |
if (this.mPbInitCompleteRegistrant != null) { | |
this.mPbInitCompleteRegistrant.notifyRegistrant(new AsyncResult(null, null, null)); | |
return; | |
} | |
return; | |
case 11037: | |
unsljLogRet(response, responseVoid); | |
if (this.mHysteresisDCNRegistant != null) { | |
this.mHysteresisDCNRegistant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11043: | |
unsljLog(response); | |
if (this.mHomeNetworkRegistant != null) { | |
this.mHomeNetworkRegistant.notifyRegistrant(); | |
return; | |
} | |
return; | |
case 11054: | |
unsljLogRet(response, responseVoid); | |
if (this.mStkSetupCallStatus != null) { | |
this.mStkSetupCallStatus.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11056: | |
unsljLogRet(response, responseVoid); | |
Rlog.d(RILJ_LOG_TAG, "UNSOL_MODEM_CAPABILITY = mInstanceId" + this.mInstanceId); | |
notifyModemCap((byte[]) responseVoid, this.mInstanceId); | |
return; | |
case 11057: | |
unsljLogRet(response, responseVoid); | |
Rlog.d(RILJ_LOG_TAG, "RIL_UNSOL_SIM_SWAP_STATE_CHANGED"); | |
this.mSimSwapRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
case 11058: | |
unsljLogRet(response, responseVoid); | |
Rlog.d(RILJ_LOG_TAG, "RIL_UNSOL_SIM_COUNT_MISMATCHED"); | |
this.mSimCountMismatchRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
case 11060: | |
unsljLogRet(response, responseVoid); | |
if (this.mDunStateChangedRegistrant == null) { | |
return; | |
} | |
return; | |
case 11061: | |
unsljLogRet(response, responseVoid); | |
if (this.mImsPrefNotiRegistrant != null) { | |
this.mImsPrefNotiRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11062: | |
unsljLogRet(response, responseVoid); | |
if (this.mIccAppRefreshRegistrant != null) { | |
this.mIccAppRefreshRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
case 11064: | |
unsljLogRet(response, responseVoid); | |
Rlog.d(RILJ_LOG_TAG, "RIL_UNSOL_VOICE_RADIO_BEARER_HO_STATUS"); | |
this.mVoiceRadioBearerHoStateRegistrant.notifyRegistrant(new AsyncResult(null, responseVoid, null)); | |
return; | |
case 11066: | |
unsljLog(response); | |
if (this.mSimIccIdNotiRegistrants != null) { | |
this.mSimIccIdNotiRegistrants.notifyRegistrants(new AsyncResult(null, responseVoid, null)); | |
return; | |
} | |
return; | |
default: | |
return; | |
} | |
} | |
private void notifyRegistrantsRilConnectionChanged(int rilVer) { | |
this.mRilVersion = rilVer; | |
if (this.mRilConnectedRegistrants != null) { | |
this.mRilConnectedRegistrants.notifyRegistrants(new AsyncResult(null, new Integer(rilVer), null)); | |
} | |
} | |
private Object responseInts(Parcel p) { | |
int numInts = p.readInt(); | |
int[] response = new int[numInts]; | |
for (int i = 0; i < numInts; i++) { | |
response[i] = p.readInt(); | |
} | |
return response; | |
} | |
private Object responseFailCause(Parcel p) { | |
LastCallFailCause failCause = new LastCallFailCause(); | |
failCause.causeCode = p.readInt(); | |
if (p.dataAvail() > 0) { | |
failCause.vendorCause = p.readString(); | |
} | |
return failCause; | |
} | |
private Object responseVoid(Parcel p) { | |
return null; | |
} | |
private Object responseCallForward(Parcel p) { | |
int numInfos = p.readInt(); | |
CallForwardInfo[] infos = new CallForwardInfo[numInfos]; | |
for (int i = 0; i < numInfos; i++) { | |
infos[i] = new CallForwardInfo(); | |
infos[i].status = p.readInt(); | |
infos[i].reason = p.readInt(); | |
infos[i].serviceClass = p.readInt(); | |
infos[i].toa = p.readInt(); | |
infos[i].number = p.readString(); | |
infos[i].timeSeconds = p.readInt(); | |
String startTime = p.readString(); | |
CallForwardInfo callForwardInfo = infos[i]; | |
if (startTime == null) { | |
startTime = ""; | |
} | |
callForwardInfo.startTime = startTime; | |
String endTime = p.readString(); | |
callForwardInfo = infos[i]; | |
if (endTime == null) { | |
endTime = ""; | |
} | |
callForwardInfo.endTime = endTime; | |
} | |
return infos; | |
} | |
private Object responseSuppServiceNotification(Parcel p) { | |
SuppServiceNotification notification = new SuppServiceNotification(); | |
notification.notificationType = p.readInt(); | |
notification.code = p.readInt(); | |
notification.index = p.readInt(); | |
notification.type = p.readInt(); | |
notification.mtConference = 0; | |
if (CscFeature.getInstance().getEnableStatus("CscFeature_RIL_SupportVolte") && ((CscFeature.getInstance().getString("CscFeature_RIL_ConfigNetworkTypeCapability").startsWith("VZW-") || CscFeature.getInstance().getString("CscFeature_RIL_ConfigNetworkTypeCapability").startsWith("ATT-")) && notification.code == 3)) { | |
notification.mtConference = p.readInt(); | |
} | |
notification.number = p.readString(); | |
return notification; | |
} | |
private Object responseCdmaSms(Parcel p) { | |
return SmsMessage.newFromParcel(p); | |
} | |
private Object responseString(Parcel p) { | |
return p.readString(); | |
} | |
private Object responseStrings(Parcel p) { | |
return p.readStringArray(); | |
} | |
private Object responseRaw(Parcel p) { | |
return p.createByteArray(); | |
} | |
private Object responseSMS(Parcel p) { | |
int messageRef = p.readInt(); | |
String ackPDU = p.readString(); | |
int errorCode = p.readInt(); | |
if (CscFeature.getInstance().getEnableStatus("CscFeature_RIL_SmsErrorClassRetry")) { | |
return new SmsResponse(messageRef, ackPDU, errorCode, p.readInt()); | |
} | |
return new SmsResponse(messageRef, ackPDU, errorCode); | |
} | |
private Object responseICC_IO(Parcel p) { | |
int sw1 = p.readInt(); | |
int sw2 = p.readInt(); | |
String s = p.readString(); | |
String dbgMsg = "< iccIO: 0x" + Integer.toHexString(sw1) + " 0x" + Integer.toHexString(sw2) + " "; | |
if (!SHIP_BUILD) { | |
dbgMsg = dbgMsg + s; | |
} | |
return new IccIoResult(sw1, sw2, s); | |
} | |
private Object responseICC_IOBase64(Parcel p) { | |
int sw1 = p.readInt(); | |
int sw2 = p.readInt(); | |
String s = p.readString(); | |
return new IccIoResult(sw1, sw2, s != null ? Base64.decode(s, 0) : (byte[]) null); | |
} | |
private Object responseIccCardStatus(Parcel p) { | |
IccCardStatus cardStatus = new IccCardStatus(); | |
cardStatus.setCardState(p.readInt()); | |
cardStatus.setUniversalPinState(p.readInt()); | |
cardStatus.mGsmUmtsSubscriptionAppIndex = p.readInt(); | |
cardStatus.mCdmaSubscriptionAppIndex = p.readInt(); | |
cardStatus.mImsSubscriptionAppIndex = p.readInt(); | |
int numApplications = p.readInt(); | |
if (numApplications > 8) { | |
numApplications = 8; | |
} | |
cardStatus.mApplications = new IccCardApplicationStatus[numApplications]; | |
for (int i = 0; i < numApplications; i++) { | |
IccCardApplicationStatus appStatus = new IccCardApplicationStatus(); | |
appStatus.app_type = appStatus.AppTypeFromRILInt(p.readInt()); | |
appStatus.app_state = appStatus.AppStateFromRILInt(p.readInt()); | |
appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(p.readInt()); | |
appStatus.aid = p.readString(); | |
appStatus.app_label = p.readString(); | |
appStatus.pin1_replaced = p.readInt(); | |
appStatus.pin1 = appStatus.PinStateFromRILInt(p.readInt()); | |
appStatus.pin2 = appStatus.PinStateFromRILInt(p.readInt()); | |
appStatus.pin1_num_retries = p.readInt(); | |
appStatus.puk1_num_retries = p.readInt(); | |
appStatus.pin2_num_retries = p.readInt(); | |
appStatus.puk2_num_retries = p.readInt(); | |
appStatus.perso_unblock_retries = p.readInt(); | |
cardStatus.mApplications[i] = appStatus; | |
} | |
return cardStatus; | |
} | |
private Object responseSimRefresh(Parcel p) { | |
IccRefreshResponse response = new IccRefreshResponse(); | |
response.refreshResult = p.readInt(); | |
response.efId = p.readInt(); | |
return response; | |
} | |
protected Object responseCallList(Parcel p) { | |
int num = p.readInt(); | |
ArrayList<DriverCall> response = new ArrayList(num); | |
for (int i = 0; i < num; i++) { | |
boolean z; | |
DriverCall dc = new DriverCall(); | |
dc.state = DriverCall.stateFromCLCC(p.readInt()); | |
dc.index = p.readInt(); | |
dc.id = (dc.index >> 8) & 255; | |
dc.index &= 255; | |
dc.TOA = p.readInt(); | |
dc.isMpty = p.readInt() != 0; | |
dc.isMT = p.readInt() != 0; | |
dc.als = p.readInt(); | |
if (p.readInt() == 0) { | |
z = false; | |
} else { | |
z = true; | |
} | |
dc.isVoice = z; | |
int type = p.readInt(); | |
int domain = p.readInt(); | |
String extras = p.readString(); | |
dc.callDetails = new CallDetails(type, domain, null); | |
dc.callDetails.setExtrasFromCsv(extras); | |
Rlog.d(RILJ_LOG_TAG, "dc.index " + dc.index + " dc.id " + dc.id + " dc.callDetails " + dc.callDetails); | |
dc.isVoicePrivacy = p.readInt() != 0; | |
dc.number = p.readString(); | |
dc.numberPresentation = DriverCall.presentationFromCLIP(p.readInt()); | |
dc.name = p.readString(); | |
Rlog.d(RILJ_LOG_TAG, "responseCallList dc.name" + dc.name); | |
dc.namePresentation = DriverCall.presentationFromCLIP(p.readInt()); | |
if (p.readInt() == 1) { | |
dc.uusInfo = new UUSInfo(); | |
dc.uusInfo.setType(p.readInt()); | |
dc.uusInfo.setDcs(p.readInt()); | |
dc.uusInfo.setUserData(p.createByteArray()); | |
riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d", new Object[]{Integer.valueOf(dc.uusInfo.getType()), Integer.valueOf(dc.uusInfo.getDcs()), Integer.valueOf(dc.uusInfo.getUserData().length)})); | |
riljLogv("Incoming UUS : data (string)=" + new String(dc.uusInfo.getUserData())); | |
riljLogv("Incoming UUS : data (hex): " + IccUtils.bytesToHexString(dc.uusInfo.getUserData())); | |
} else { | |
riljLogv("Incoming UUS : NOT present!"); | |
} | |
dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA); | |
if (TelephonyFeature.alwaysTerminalbasedCW()) { | |
int cw; | |
if (this.mInstanceId.intValue() == 1) { | |
cw = System.getInt(this.mContext.getContentResolver(), "volte_call_waiting_slot2", 1); | |
} else { | |
cw = System.getInt(this.mContext.getContentResolver(), "volte_call_waiting", 1); | |
} | |
if (cw == 0) { | |
riljLogv("T/B_CALL_WAITING - hangupWaitingOrBackground"); | |
if (dc.state == State.WAITING) { | |
hangupWaitingOrBackground(null); | |
break; | |
} | |
} | |
} | |
response.add(dc); | |
if (dc.isVoicePrivacy) { | |
this.mVoicePrivacyOnRegistrants.notifyRegistrants(); | |
riljLog("InCall VoicePrivacy is enabled"); | |
} else { | |
this.mVoicePrivacyOffRegistrants.notifyRegistrants(); | |
riljLog("InCall VoicePrivacy is disabled"); | |
} | |
} | |
Collections.sort(response); | |
if (num == 0 && this.mTestingEmergencyCall.getAndSet(false) && this.mEmergencyCallbackModeRegistrant != null) { | |
riljLog("responseCallList: call ended, testing emergency call, notify ECM Registrants"); | |
this.mEmergencyCallbackModeRegistrant.notifyRegistrant(); | |
} | |
return response; | |
} | |
private DataCallResponse getDataCallResponse(Parcel p, int version) { | |
DataCallResponse dataCall = new DataCallResponse(); | |
dataCall.version = version; | |
String addresses; | |
if (version < 5) { | |
dataCall.cid = p.readInt(); | |
dataCall.active = p.readInt(); | |
dataCall.type = p.readString(); | |
addresses = p.readString(); | |
if (!TextUtils.isEmpty(addresses)) { | |
dataCall.addresses = addresses.split(" "); | |
} | |
} else { | |
dataCall.status = p.readInt(); | |
dataCall.suggestedRetryTime = p.readInt(); | |
dataCall.cid = p.readInt(); | |
dataCall.active = p.readInt(); | |
dataCall.type = p.readString(); | |
dataCall.ifname = p.readString(); | |
if (dataCall.status == DcFailCause.NONE.getErrorCode() && TextUtils.isEmpty(dataCall.ifname)) { | |
throw new RuntimeException("getDataCallResponse, no ifname"); | |
} | |
addresses = p.readString(); | |
if (!TextUtils.isEmpty(addresses)) { | |
dataCall.addresses = addresses.split(" "); | |
} | |
String dnses = p.readString(); | |
if (!TextUtils.isEmpty(dnses)) { | |
dataCall.dnses = dnses.split(" "); | |
} | |
if (CscFeature.getInstance().getEnableStatus("CscFeature_RIL_ExtDevCdmaPacketAccessSupport") && dataCall.type.equals("IP")) { | |
dataCall.dnses = modifyDnsByCpa(dnses, dataCall.ifname).split(" "); | |
} | |
String gateways = p.readString(); | |
if (!TextUtils.isEmpty(gateways)) { | |
dataCall.gateways = gateways.split(" "); | |
} | |
if (version >= 10) { | |
String pcscf = p.readString(); | |
if (!TextUtils.isEmpty(pcscf)) { | |
dataCall.pcscf = pcscf.split(" "); | |
} | |
} | |
if (version >= 11) { | |
dataCall.mtu = p.readInt(); | |
} | |
} | |
return dataCall; | |
} | |
private Object responseDataCallList(Parcel p) { | |
int ver = p.readInt(); | |
int num = p.readInt(); | |
riljLog("responseDataCallList ver=" + ver + " num=" + num); | |
ArrayList<DataCallResponse> response = new ArrayList(num); | |
for (int i = 0; i < num; i++) { | |
response.add(getDataCallResponse(p, ver)); | |
} | |
return response; | |
} | |
protected Object responseSetupDataCall(Parcel p) { | |
int ver = p.readInt(); | |
int num = p.readInt(); | |
if (ver < 5) { | |
DataCallResponse dataCall = new DataCallResponse(); | |
dataCall.version = ver; | |
dataCall.cid = Integer.parseInt(p.readString()); | |
dataCall.ifname = p.readString(); | |
if (TextUtils.isEmpty(dataCall.ifname)) { | |
throw new RuntimeException("RIL_REQUEST_SETUP_DATA_CALL response, no ifname"); | |
} | |
String addresses = p.readString(); | |
if (!TextUtils.isEmpty(addresses)) { | |
dataCall.addresses = addresses.split(" "); | |
} | |
if (num >= 4) { | |
String dnses = p.readString(); | |
riljLog("responseSetupDataCall got dnses=" + dnses); | |
if (!TextUtils.isEmpty(dnses)) { | |
dataCall.dnses = dnses.split(" "); | |
} | |
} | |
if (num >= 5) { | |
String gateways = p.readString(); | |
riljLog("responseSetupDataCall got gateways=" + gateways); | |
if (!TextUtils.isEmpty(gateways)) { | |
dataCall.gateways = gateways.split(" "); | |
} | |
} | |
if (num < 6) { | |
return dataCall; | |
} | |
String pcscf = p.readString(); | |
riljLog("responseSetupDataCall got pcscf=" + pcscf); | |
if (TextUtils.isEmpty(pcscf)) { | |
return dataCall; | |
} | |
dataCall.pcscf = pcscf.split(" "); | |
return dataCall; | |
} else if (num == 1) { | |
return getDataCallResponse(p, ver); | |
} else { | |
throw new RuntimeException("RIL_REQUEST_SETUP_DATA_CALL response expecting 1 RIL_Data_Call_response_v5 got " + num); | |
} | |
} | |
private Object responseOperatorInfos(Parcel p) { | |
ArrayList<OperatorInfo> ret; | |
String[] strings = (String[]) responseStrings(p); | |
int i; | |
if (CscFeature.getInstance().getEnableStatus("CscFeature_RIL_NetworkInfoRat") || CscFeature.getInstance().getEnableStatus("CscFeature_RIL_UseRatInfoDuringPlmnSelection") || CscFeature.getInstance().getEnableStatus("CscFeature_RIL_OperatorNameRuleForDcm") || CscFeature.getInstance().getEnableStatus("CscFeature_RIL_DisplayRatInfoInManualNetSearchList")) { | |
if (strings.length % 6 != 0) { | |
throw new RuntimeException("RIL_REQUEST_QUERY_AVAILABLE_NETWORKS: invalid response. Got " + strings.length + " strings, expected multible of 6"); | |
} | |
ret = new ArrayList(strings.length / 6); | |
for (i = 0; i < strings.length; i += 6) { | |
ret.add(new OperatorInfo(strings[i + 0], strings[i + 1], strings[i + 2], strings[i + 3], strings[i + 4], strings[i + 5])); | |
Rlog.d(RILJ_LOG_TAG, "Add OperatorInfo is:" + strings[i + 0] + " " + strings[i + 1] + " " + strings[i + 2] + " " + strings[i + 3] + " " + strings[i + 4] + " " + strings[i + 5] + " "); | |
} | |
} else if (strings.length % 6 != 0) { | |
throw new RuntimeException("RIL_REQUEST_QUERY_AVAILABLE_NETWORKS: invalid response. Got " + strings.length + " strings, expected multible of 6"); | |
} else { | |
ret = new ArrayList(strings.length / 6); | |
Set<String> mccmnc = new HashSet(strings.length / 6); | |
String sim_numeric = TelephonyManager.getTelephonyProperty(this.mInstanceId.intValue(), "gsm.sim.operator.numeric", ""); | |
String spn = TelephonyManager.getTelephonyProperty(this.mInstanceId.intValue(), "gsm.sim.operator.alpha", ""); | |
String isRoaming = TelephonyManager.getTelephonyProperty(this.mInstanceId.intValue(), "gsm.operator.isroaming", ""); | |
i = 0; | |
while (i < strings.length) { | |
if (!mccmnc.contains(strings[i + 2])) { | |
mccmnc.add(strings[i + 2]); | |
if ("45400".equals(strings[i + 2]) || "45402".equals(strings[i + 2]) || "45410".equals(strings[i + 2]) || ("45418".equals(strings[i + 2]) && "false".equals(isRoaming))) { | |
Rlog.d(RILJ_LOG_TAG, "CSL Network, SPN sholud be displayed instead of PLMN : " + sim_numeric + "SPN : " + spn); | |
if ("45400".equals(sim_numeric) || "45402".equals(sim_numeric) || "45410".equals(sim_numeric) || "45418".equals(sim_numeric)) { | |
strings[i + 0] = spn; | |
strings[i + 1] = strings[i + 0]; | |
} | |
} | |
if ("45416".equals(strings[i + 2]) || ("45419".equals(strings[i + 2]) && "false".equals(isRoaming))) { | |
Rlog.d(RILJ_LOG_TAG, "PCCW-HKT Network, SPN sholud be displayed instead of PLMN : " + sim_numeric + "SPN : " + spn); | |
if ("45416".equals(sim_numeric) || "45419".equals(sim_numeric)) { | |
strings[i + 0] = spn; | |
strings[i + 1] = strings[i + 0]; | |
} | |
} | |
if ("46697".equals(strings[i + 2]) && "false".equals(isRoaming)) { | |
Rlog.d(RILJ_LOG_TAG, "APT Network, SPN sholud be displayed instead of PLMN : " + sim_numeric + "SPN : " + spn); | |
if ("46605".equals(sim_numeric)) { | |
strings[i + 0] = spn; | |
strings[i + 1] = strings[i + 0]; | |
} | |
} | |
ret.add(new OperatorInfo(strings[i + 0], strings[i + 1], strings[i + 2], strings[i + 3], strings[i + 4], strings[i + 5])); | |
Rlog.d(RILJ_LOG_TAG, "Add OperatorInfo is:" + strings[i + 0] + " " + strings[i + 1] + " " + strings[i + 2] + " " + strings[i + 3] + " " + strings[i + 4] + " " + strings[i + 5] + " "); | |
} | |
i += 6; | |
} | |
} | |
return ret; | |
} | |
private Object responseCellList(Parcel p) { | |
int num = p.readInt(); | |
ArrayList<NeighboringCellInfo> response = new ArrayList(); | |
int radioType = ((TelephonyManager) this.mContext.getSystemService("phone")).getDataNetworkType(SubscriptionManager.getSubId(this.mInstanceId.intValue())[0]); | |
if (radioType != 0) { | |
for (int i = 0; i < num; i++) { | |
response.add(new NeighboringCellInfo(p.readInt(), p.readString(), radioType)); | |
} | |
} | |
return response; | |
} | |
private Object responseGetPreferredNetworkType(Parcel p) { | |
int[] response = (int[]) responseInts(p); | |
if (response.length >= 1) { | |
this.mPreferredNetworkType = response[0]; | |
setInitialPhoneType(this.mPreferredNetworkType); | |
} | |
return response; | |
} | |
private Object responseGmsBroadcastConfig(Parcel p) { | |
int num = p.readInt(); | |
ArrayList<SmsBroadcastConfigInfo> response = new ArrayList(num); | |
for (int i = 0; i < num; i++) { | |
response.add(new SmsBroadcastConfigInfo(p.readInt(), p.readInt(), p.readInt(), p.readInt(), p.readInt() == 1)); | |
} | |
return response; | |
} | |
private Object responseCdmaBroadcastConfig(Parcel p) { | |
int[] response; | |
int numServiceCategories = p.readInt(); | |
int i; | |
if (numServiceCategories == 0) { | |
response = new int[94]; | |
response[0] = 31; | |
for (i = 1; i < 94; i += 3) { | |
response[i + 0] = i / 3; | |
response[i + 1] = 1; | |
response[i + 2] = 0; | |
} | |
} else { | |
int numInts = (numServiceCategories * 3) + 1; | |
response = new int[numInts]; | |
response[0] = numServiceCategories; | |
for (i = 1; i < numInts; i++) { | |
response[i] = p.readInt(); | |
} | |
} | |
return response; | |
} | |
private Object responseSignalStrength(Parcel p) { | |
return SignalStrength.makeSignalStrengthFromRilParcel(p); | |
} | |
private ArrayList<CdmaInformationRecords> responseCdmaInformationRecord(Parcel p) { | |
int numberOfInfoRecs = p.readInt(); | |
ArrayList<CdmaInformationRecords> response = new ArrayList(numberOfInfoRecs); | |
for (int i = 0; i < numberOfInfoRecs; i++) { | |
response.add(new CdmaInformationRecords(p)); | |
} | |
return response; | |
} | |
protected Object responseCdmaCallWaiting(Parcel p) { | |
CdmaCallWaitingNotification notification = new CdmaCallWaitingNotification(); | |
notification.number = p.readString(); | |
notification.numberPresentation = CdmaCallWaitingNotification.presentationFromCLIP(p.readInt()); | |
notification.name = p.readString(); | |
notification.namePresentation = notification.numberPresentation; | |
notification.isPresent = p.readInt(); | |
notification.signalType = p.readInt(); | |
notification.alertPitch = p.readInt(); | |
notification.signal = p.readInt(); | |
notification.numberType = p.readInt(); | |
notification.numberPlan = p.readInt(); | |
return notification; | |
} | |
private Object responseCallRing(Parcel p) { | |
return new char[]{(char) p.readInt(), (char) p.readInt(), (char) p.readInt(), (char) p.readInt()}; | |
} | |
private void notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) { | |
if (infoRec.record instanceof CdmaDisplayInfoRec) { | |
if (this.mDisplayInfoRegistrants != null) { | |
unsljLogRet(1027, infoRec.record); | |
this.mDisplayInfoRegistrants.notifyRegistrants(new AsyncResult(null, infoRec.record, null)); | |
} | |
} else if (infoRec.record instanceof CdmaSignalInfoRec) { | |
if (this.mSignalInfoRegistrants != null) { | |
unsljLogRet(1027, infoRec.record); | |
this.mSignalInfoRegistrants.notifyRegistrants(new AsyncResult(null, infoRec.record, null)); | |
} | |
} else if (infoRec.record instanceof CdmaNumberInfoRec) { | |
if (this.mNumberInfoRegistrants != null) { | |
unsljLogRet(1027, infoRec.record); | |
this.mNumberInfoRegistrants.notifyRegistrants(new AsyncResult(null, infoRec.record, null)); | |
} | |
} else if (infoRec.record instanceof CdmaRedirectingNumberInfoRec) { | |
if (this.mRedirNumInfoRegistrants != null) { | |
unsljLogRet(1027, infoRec.record); | |
this.mRedirNumInfoRegistrants.notifyRegistrants(new AsyncResult(null, infoRec.record, null)); | |
} | |
} else if (infoRec.record instanceof CdmaLineControlInfoRec) { | |
if (this.mLineControlInfoRegistrants != null) { | |
unsljLogRet(1027, infoRec.record); | |
this.mLineControlInfoRegistrants.notifyRegistrants(new AsyncResult(null, infoRec.record, null)); | |
} | |
} else if (infoRec.record instanceof CdmaT53ClirInfoRec) { | |
if (this.mT53ClirInfoRegistrants != null) { | |
unsljLogRet(1027, infoRec.record); | |
this.mT53ClirInfoRegistrants.notifyRegistrants(new AsyncResult(null, infoRec.record, null)); | |
} | |
} else if ((infoRec.record instanceof CdmaT53AudioControlInfoRec) && this.mT53AudCntrlInfoRegistrants != null) { | |
unsljLogRet(1027, infoRec.record); | |
this.mT53AudCntrlInfoRegistrants.notifyRegistrants(new AsyncResult(null, infoRec.record, null)); | |
} | |
} | |
private ArrayList<CellInfo> responseCellInfoList(Parcel p) { | |
int numberOfInfoRecs = p.readInt(); | |
ArrayList<CellInfo> response = new ArrayList(numberOfInfoRecs); | |
for (int i = 0; i < numberOfInfoRecs; i++) { | |
response.add((CellInfo) CellInfo.CREATOR.createFromParcel(p)); | |
} | |
return response; | |
} | |
private Object responseHardwareConfig(Parcel p) { | |
int num = p.readInt(); | |
ArrayList<HardwareConfig> response = new ArrayList(num); | |
for (int i = 0; i < num; i++) { | |
HardwareConfig hw; | |
int type = p.readInt(); | |
switch (type) { | |
case 0: | |
hw = new HardwareConfig(type); | |
hw.assignModem(p.readString(), p.readInt(), p.readInt(), p.readInt(), p.readInt(), p.readInt(), p.readInt()); | |
break; | |
case 1: | |
hw = new HardwareConfig(type); | |
hw.assignSim(p.readString(), p.readInt(), p.readString()); | |
break; | |
default: | |
throw new RuntimeException("RIL_REQUEST_GET_HARDWARE_CONFIG invalid hardward type:" + type); | |
} | |
response.add(hw); | |
} | |
return response; | |
} | |
private Object responseRadioCapability(Parcel p) { | |
int version = p.readInt(); | |
int session = p.readInt(); | |
int phase = p.readInt(); | |
int rat = p.readInt(); | |
String logicModemUuid = p.readString(); | |
int status = p.readInt(); | |
riljLog("responseRadioCapability: version= " + version + ", session=" + session + ", phase=" + phase + ", rat=" + rat + ", logicModemUuid=" + logicModemUuid + ", status=" + status); | |
return new RadioCapability(this.mInstanceId.intValue(), session, phase, rat, logicModemUuid, status); | |
} | |
private Object responseLceData(Parcel p) { | |
ArrayList<Integer> capacityResponse = new ArrayList(); | |
int capacityDownKbps = p.readInt(); | |
int confidenceLevel = p.readByte(); | |
int lceSuspended = p.readByte(); | |
riljLog("LCE capacity information received: capacity=" + capacityDownKbps + " confidence=" + confidenceLevel + " lceSuspended=" + lceSuspended); | |
capacityResponse.add(Integer.valueOf(capacityDownKbps)); | |
capacityResponse.add(Integer.valueOf(confidenceLevel)); | |
capacityResponse.add(Integer.valueOf(lceSuspended)); | |
return capacityResponse; | |
} | |
private Object responseLceStatus(Parcel p) { | |
ArrayList<Integer> statusResponse = new ArrayList(); | |
int lceStatus = p.readByte(); | |
int actualInterval = p.readInt(); | |
riljLog("LCE status information received: lceStatus=" + lceStatus + " actualInterval=" + actualInterval); | |
statusResponse.add(Integer.valueOf(lceStatus)); | |
statusResponse.add(Integer.valueOf(actualInterval)); | |
return statusResponse; | |
} | |
private Object responseActivityData(Parcel p) { | |
int sleepModeTimeMs = p.readInt(); | |
int idleModeTimeMs = p.readInt(); | |
int[] txModeTimeMs = new int[5]; | |
for (int i = 0; i < 5; i++) { | |
txModeTimeMs[i] = p.readInt(); | |
} | |
int rxModeTimeMs = p.readInt(); | |
riljLog("Modem activity info received: sleepModeTimeMs=" + sleepModeTimeMs + " idleModeTimeMs=" + idleModeTimeMs + " txModeTimeMs[]=" + Arrays.toString(txModeTimeMs) + " rxModeTimeMs=" + rxModeTimeMs); | |
return new ModemActivityInfo(SystemClock.elapsedRealtime(), sleepModeTimeMs, idleModeTimeMs, txModeTimeMs, rxModeTimeMs, 0); | |
} | |
private Object responseCbSettings(Parcel P) { | |
byte[] Cbmid_List; | |
int j = 0; | |
CbConfig cb = new CbConfig(); | |
Rlog.d(RILJ_LOG_TAG, "responseCbSettings"); | |
int Enabled = P.readInt(); | |
if (Enabled == 1) { | |
cb.bCBEnabled = true; | |
} else if (Enabled == 2) { | |
cb.bCBEnabled = false; | |
} | |
cb.selectedId = (char) P.readInt(); | |
cb.msgIdMaxCount = (char) P.readInt(); | |
cb.msgIdCount = P.readInt(); | |
if (cb.msgIdMaxCount > '\u0000') { | |
Cbmid_List = new byte[(cb.msgIdMaxCount * 2)]; | |
} else { | |
Cbmid_List = new byte[100]; | |
} | |
if (cb.msgIdCount > 100) { | |
Rlog.d(RILJ_LOG_TAG, "No of CBMID Exceeded "); | |
} | |
cb.msgIDs = new short[cb.msgIdCount]; | |
String Cbmid_Str = P.readString(); | |
Rlog.d(RILJ_LOG_TAG, "ENABLED:" + cb.bCBEnabled + ", selectedId:" + cb.selectedId + ", msgIdCount:" + cb.msgIdCount + ", msgIdMaxCount:" + cb.msgIdMaxCount); | |
if (Cbmid_Str == null) { | |
Rlog.d(RILJ_LOG_TAG, "MessageIDs String is NULL"); | |
} else { | |
Rlog.d(RILJ_LOG_TAG, ", MessageIDs:" + Cbmid_Str); | |
Cbmid_List = IccUtils.hexStringToBytes(Cbmid_Str); | |
for (int i = 0; i < cb.msgIdCount; i++) { | |
int msb = Cbmid_List[j + 1] & 255; | |
cb.msgIDs[i] = (short) (((Cbmid_List[j] & 255) << 8) | msb); | |
j += 2; | |
} | |
} | |
return cb; | |
} | |
private Object responseCallModify(Parcel p) { | |
CallModify response = new CallModify(); | |
response.call_index = p.readInt(); | |
int type = p.readInt(); | |
int domain = p.readInt(); | |
String extras = p.readString(); | |
response.call_details = new CallDetails(type, domain, null); | |
response.call_details.setExtrasFromCsv(extras); | |
return response; | |
} | |
private Object responsePreferredNetworkList(Parcel p) { | |
int num = p.readInt(); | |
Rlog.d(RILJ_LOG_TAG, "number of network list = " + num); | |
ArrayList<PreferredNetworkListInfo> response = new ArrayList(num); | |
for (int i = 0; i < num; i++) { | |
PreferredNetworkListInfo preferredNetwork = new PreferredNetworkListInfo(); | |
preferredNetwork.mIndex = p.readInt(); | |
preferredNetwork.mOperator = p.readString(); | |
preferredNetwork.mPlmn = p.readString(); | |
preferredNetwork.mGsmAct = p.readInt(); | |
preferredNetwork.mGsmCompactAct = p.readInt(); | |
preferredNetwork.mUtranAct = p.readInt(); | |
preferredNetwork.mMode = p.readInt(); | |
response.add(preferredNetwork); | |
} | |
return response; | |
} | |
static String requestToString(int request) { | |
switch (request) { | |
case 1: | |
return "GET_SIM_STATUS"; | |
case 2: | |
return "ENTER_SIM_PIN"; | |
case 3: | |
return "ENTER_SIM_PUK"; | |
case 4: | |
return "ENTER_SIM_PIN2"; | |
case 5: | |
return "ENTER_SIM_PUK2"; | |
case 6: | |
return "CHANGE_SIM_PIN"; | |
case 7: | |
return "CHANGE_SIM_PIN2"; | |
case 8: | |
return "ENTER_NETWORK_DEPERSONALIZATION"; | |
case 9: | |
return "GET_CURRENT_CALLS"; | |
case 10: | |
return "DIAL"; | |
case 11: | |
return "GET_IMSI"; | |
case 12: | |
return "HANGUP"; | |
case 13: | |
return "HANGUP_WAITING_OR_BACKGROUND"; | |
case 14: | |
return "HANGUP_FOREGROUND_RESUME_BACKGROUND"; | |
case 15: | |
return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE"; | |
case 16: | |
return "CONFERENCE"; | |
case 17: | |
return "UDUB"; | |
case 18: | |
return "LAST_CALL_FAIL_CAUSE"; | |
case 19: | |
return "SIGNAL_STRENGTH"; | |
case 20: | |
return "VOICE_REGISTRATION_STATE"; | |
case 21: | |
return "DATA_REGISTRATION_STATE"; | |
case 22: | |
return "OPERATOR"; | |
case 23: | |
return "RADIO_POWER"; | |
case 24: | |
return "DTMF"; | |
case 25: | |
return "SEND_SMS"; | |
case 26: | |
return "SEND_SMS_EXPECT_MORE"; | |
case WspTypeDecoder.WSP_HEADER_IF_UNMODIFIED_SINCE /*27*/: | |
return "SETUP_DATA_CALL"; | |
case WspTypeDecoder.WSP_HEADER_LOCATION /*28*/: | |
return "SIM_IO"; | |
case WspTypeDecoder.WSP_HEADER_LAST_MODIFIED /*29*/: | |
return "SEND_USSD"; | |
case 30: | |
return "CANCEL_USSD"; | |
case 31: | |
return "GET_CLIR"; | |
case 32: | |
return "SET_CLIR"; | |
case 33: | |
return "QUERY_CALL_FORWARD_STATUS"; | |
case 34: | |
return "SET_CALL_FORWARD"; | |
case 35: | |
return "QUERY_CALL_WAITING"; | |
case 36: | |
return "SET_CALL_WAITING"; | |
case 37: | |
return "SMS_ACKNOWLEDGE"; | |
case 38: | |
return "GET_IMEI"; | |
case 39: | |
return "GET_IMEISV"; | |
case 40: | |
return "ANSWER"; | |
case 41: | |
return "DEACTIVATE_DATA_CALL"; | |
case 42: | |
return "QUERY_FACILITY_LOCK"; | |
case 43: | |
return "SET_FACILITY_LOCK"; | |
case 44: | |
return "CHANGE_BARRING_PASSWORD"; | |
case WspTypeDecoder.WSP_HEADER_WWW_AUTHENTICATE /*45*/: | |
return "QUERY_NETWORK_SELECTION_MODE"; | |
case 46: | |
return "SET_NETWORK_SELECTION_AUTOMATIC"; | |
case 47: | |
return "SET_NETWORK_SELECTION_MANUAL"; | |
case 48: | |
return "QUERY_AVAILABLE_NETWORKS "; | |
case 49: | |
return "DTMF_START"; | |
case 50: | |
return "DTMF_STOP"; | |
case 51: | |
return "BASEBAND_VERSION"; | |
case 52: | |
return "SEPARATE_CONNECTION"; | |
case 53: | |
return "SET_MUTE"; | |
case 54: | |
return "GET_MUTE"; | |
case 55: | |
return "QUERY_CLIP"; | |
case 56: | |
return "LAST_DATA_CALL_FAIL_CAUSE"; | |
case 57: | |
return "DATA_CALL_LIST"; | |
case 58: | |
return "RESET_RADIO"; | |
case 59: | |
return "OEM_HOOK_RAW"; | |
case WspTypeDecoder.WSP_HEADER_ACCEPT_ENCODING2 /*60*/: | |
return "OEM_HOOK_STRINGS"; | |
case WspTypeDecoder.WSP_HEADER_CACHE_CONTROL2 /*61*/: | |
return "SCREEN_STATE"; | |
case 62: | |
return "SET_SUPP_SVC_NOTIFICATION"; | |
case 63: | |
return "WRITE_SMS_TO_SIM"; | |
case 64: | |
return "DELETE_SMS_ON_SIM"; | |
case 65: | |
return "SET_BAND_MODE"; | |
case 66: | |
return "QUERY_AVAILABLE_BAND_MODE"; | |
case 67: | |
return "REQUEST_STK_GET_PROFILE"; | |
case 68: | |
return "REQUEST_STK_SET_PROFILE"; | |
case WspTypeDecoder.WSP_HEADER_CONTENT_DISPOSITION2 /*69*/: | |
return "REQUEST_STK_SEND_ENVELOPE_COMMAND"; | |
case 70: | |
return "REQUEST_STK_SEND_TERMINAL_RESPONSE"; | |
case 71: | |
return "REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM"; | |
case 72: | |
return "REQUEST_EXPLICIT_CALL_TRANSFER"; | |
case 73: | |
return "REQUEST_SET_PREFERRED_NETWORK_TYPE"; | |
case 74: | |
return "REQUEST_GET_PREFERRED_NETWORK_TYPE"; | |
case 75: | |
return "REQUEST_GET_NEIGHBORING_CELL_IDS"; | |
case RadioNVItems.RIL_NV_LTE_SCAN_PRIORITY_41 /*76*/: | |
return "REQUEST_SET_LOCATION_UPDATES"; | |
case RadioNVItems.RIL_NV_LTE_HIDDEN_BAND_PRIORITY_25 /*77*/: | |
return "RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE"; | |
case 78: | |
return "RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE"; | |
case RadioNVItems.RIL_NV_LTE_HIDDEN_BAND_PRIORITY_41 /*79*/: | |
return "RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE"; | |
case RadioNVItems.RIL_NV_LTE_NEXT_SCAN /*80*/: | |
return "RIL_REQUEST_SET_TTY_MODE"; | |
case 81: | |
return "RIL_REQUEST_QUERY_TTY_MODE"; | |
case RadioNVItems.RIL_NV_LTE_BSR_MAX_TIME /*82*/: | |
return "RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE"; | |
case 83: | |
return "RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE"; | |
case 84: | |
return "RIL_REQUEST_CDMA_FLASH"; | |
case 85: | |
return "RIL_REQUEST_CDMA_BURST_DTMF"; | |
case 86: | |
return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY"; | |
case 87: | |
return "RIL_REQUEST_CDMA_SEND_SMS"; | |
case 88: | |
return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE"; | |
case 89: | |
return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG"; | |
case 90: | |
return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG"; | |
case 91: | |
return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION"; | |
case 92: | |
return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG"; | |
case 93: | |
return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG"; | |
case 94: | |
return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION"; | |
case 95: | |
return "RIL_REQUEST_CDMA_SUBSCRIPTION"; | |
case CommandsInterface.CDMA_SMS_FAIL_CAUSE_ENCODING_PROBLEM /*96*/: | |
return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM"; | |
case OEM_NET_GET_MODEM_CAP /*97*/: | |
return "RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM"; | |
case OEM_NET_UPDATE_SUB_BINDING /*98*/: | |
return "RIL_REQUEST_DEVICE_IDENTITY"; | |
case 99: | |
return "REQUEST_EXIT_EMERGENCY_CALLBACK_MODE"; | |
case 100: | |
return "RIL_REQUEST_GET_SMSC_ADDRESS"; | |
case Threads.ALERT_EXTREME_THREAD /*101*/: | |
return "RIL_REQUEST_SET_SMSC_ADDRESS"; | |
case Threads.ALERT_SEVERE_THREAD /*102*/: | |
return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS"; | |
case Threads.ALERT_AMBER_THREAD /*103*/: | |
return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING"; | |
case Threads.ALERT_TEST_MESSAGE_THREAD /*104*/: | |
return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE"; | |
case 105: | |
return "RIL_REQUEST_ISIM_AUTHENTICATION"; | |
case 106: | |
return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU"; | |
case 107: | |
return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS"; | |
case 108: | |
return "RIL_REQUEST_VOICE_RADIO_TECH"; | |
case 109: | |
return "RIL_REQUEST_GET_CELL_INFO_LIST"; | |
case Threads.ALERTS_ALL_ONE_THREAD /*110*/: | |
return "RIL_REQUEST_SET_CELL_INFO_LIST_RATE"; | |
case 111: | |
return "RIL_REQUEST_SET_INITIAL_ATTACH_APN"; | |
case 112: | |
return "RIL_REQUEST_IMS_REGISTRATION_STATE"; | |
case 113: | |
return "RIL_REQUEST_IMS_SEND_SMS"; | |
case CallFailCause.KTF_FAIL_CAUSE_114 /*114*/: | |
return "RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC"; | |
case CallFailCause.KTF_FAIL_CAUSE_115 /*115*/: | |
return "RIL_REQUEST_SIM_OPEN_CHANNEL"; | |
case CallFailCause.KTF_FAIL_CAUSE_116 /*116*/: | |
return "RIL_REQUEST_SIM_CLOSE_CHANNEL"; | |
case 117: | |
return "RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL"; | |
case 118: | |
return "RIL_REQUEST_NV_READ_ITEM"; | |
case 119: | |
return "RIL_REQUEST_NV_WRITE_ITEM"; | |
case 120: | |
return "RIL_REQUEST_NV_WRITE_CDMA_PRL"; | |
case 121: | |
return "RIL_REQUEST_NV_RESET_CONFIG"; | |
case 122: | |
return "RIL_REQUEST_SET_UICC_SUBSCRIPTION"; | |
case 123: | |
return "RIL_REQUEST_ALLOW_DATA"; | |
case 124: | |
return "GET_HARDWARE_CONFIG"; | |
case 125: | |
return "RIL_REQUEST_SIM_AUTHENTICATION"; | |
case 128: | |
return "RIL_REQUEST_SET_DATA_PROFILE"; | |
case 129: | |
return "RIL_REQUEST_SHUTDOWN"; | |
case 130: | |
return "RIL_REQUEST_GET_RADIO_CAPABILITY"; | |
case 131: | |
return "RIL_REQUEST_SET_RADIO_CAPABILITY"; | |
case 132: | |
return "RIL_REQUEST_START_LCE"; | |
case 133: | |
return "RIL_REQUEST_STOP_LCE"; | |
case 134: | |
return "RIL_REQUEST_PULL_LCEDATA"; | |
case 135: | |
return "RIL_REQUEST_GET_ACTIVITY_INFO"; | |
case 10001: | |
return "DIAL_EMERGENCY_CALL"; | |
case 10002: | |
return "CALL_DEFLECTION"; | |
case 10003: | |
return "MODIFY_CALL_INITIATE"; | |
case 10004: | |
return "MODIFY_CALL_CONFIRM"; | |
case 10005: | |
return "SET_VOICE_DOMAIN_PREF"; | |
case 10006: | |
return "SAFE_MODE"; | |
case 10007: | |
return "SET_TRANSMIT_POWER"; | |
case 10008: | |
return "GET_CELL_BROADCAST_CONFIG"; | |
case 10009: | |
return "GET_PHONEBOOK_STORAGE_INFO"; | |
case 10010: | |
return "GET_PHONEBOOK_ENTRY"; | |
case 10011: | |
return "ACCESS_PHONEBOOK_ENTRY"; | |
case 10012: | |
return "USIM_PB_CAPA"; | |
case 10013: | |
return "LOCK_INFO"; | |
case 10014: | |
return "STK_SIM_INIT_EVENT"; | |
case 10015: | |
return "SET_PREFERRED_NETWORK_LIST"; | |
case 10016: | |
return "GET_PREFERRED_NETWORK_LIST"; | |
case 10017: | |
return "CHANGE_SIM_PERSO"; | |
case 10018: | |
return "ENTER_SIM_PERSO"; | |
case 10019: | |
return "SEND_ENCODED_USSD"; | |
case 10020: | |
return "CDMA_SEND_SMS_EXPECT_MORE"; | |
case 10021: | |
return "HANGUP_VT"; | |
case 10022: | |
return "REQUEST_HOLD"; | |
case 10023: | |
return "SET_SIM_POWER"; | |
case 10025: | |
return "UICC_GBA_AUTHENTICATE_BOOTSTRAP"; | |
case 10026: | |
return "UICC_GBA_AUTHENTICATE_NAF"; | |
case 10027: | |
return "GET_INCOMING_COMMUNICATION_BARRING"; | |
case 10028: | |
return "SET_INCOMING_COMMUNICATION_BARRING"; | |
case 10029: | |
return "QUERY_CNAP"; | |
case 10030: | |
return "SET_TRANSFER_CALL"; | |
case 10031: | |
return "GET_DISABLE_2G"; | |
case 10032: | |
return "SET_DISABLE_2G"; | |
case 10033: | |
return "REFRESH_NITZ_TIME"; | |
default: | |
return "<unknown request>"; | |
} | |
} | |
static String responseToString(int request) { | |
switch (request) { | |
case 1000: | |
return "UNSOL_RESPONSE_RADIO_STATE_CHANGED"; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_DROP /*1001*/: | |
return "UNSOL_RESPONSE_CALL_STATE_CHANGED"; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_INTERCEPT /*1002*/: | |
return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED"; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_REORDER /*1003*/: | |
return "UNSOL_RESPONSE_NEW_SMS"; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_SO_REJECT /*1004*/: | |
return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT"; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_RETRY_ORDER /*1005*/: | |
return "UNSOL_RESPONSE_NEW_SMS_ON_SIM"; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_ACCESS_FAILURE /*1006*/: | |
return "UNSOL_ON_USSD"; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_PREEMPTED /*1007*/: | |
return "UNSOL_ON_USSD_REQUEST"; | |
case com.android.internal.telephony.cdma.CallFailCause.CDMA_NOT_EMERGENCY /*1008*/: | |
return "UNSOL_NITZ_TIME_RECEIVED"; | |
case 1009: | |
return "UNSOL_SIGNAL_STRENGTH"; | |
case 1010: | |
return "UNSOL_DATA_CALL_LIST_CHANGED"; | |
case 1011: | |
return "UNSOL_SUPP_SVC_NOTIFICATION"; | |
case 1012: | |
return "UNSOL_STK_SESSION_END"; | |
case 1013: | |
return "UNSOL_STK_PROACTIVE_COMMAND"; | |
case 1014: | |
return "UNSOL_STK_EVENT_NOTIFY"; | |
case CharacterSets.UTF_16 /*1015*/: | |
return "UNSOL_STK_CALL_SETUP"; | |
case 1016: | |
return "UNSOL_SIM_SMS_STORAGE_FULL"; | |
case 1017: | |
return "UNSOL_SIM_REFRESH"; | |
case 1018: | |
return "UNSOL_CALL_RING"; | |
case 1019: | |
return "UNSOL_RESPONSE_SIM_STATUS_CHANGED"; | |
case 1020: | |
return "UNSOL_RESPONSE_CDMA_NEW_SMS"; | |
case 1021: | |
return "UNSOL_RESPONSE_NEW_BROADCAST_SMS"; | |
case 1022: | |
return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL"; | |
case 1023: | |
return "UNSOL_RESTRICTED_STATE_CHANGED"; | |
case 1024: | |
return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE"; | |
case 1025: | |
return "UNSOL_CDMA_CALL_WAITING"; | |
case 1026: | |
return "UNSOL_CDMA_OTA_PROVISION_STATUS"; | |
case 1027: | |
return "UNSOL_CDMA_INFO_REC"; | |
case 1028: | |
return "UNSOL_OEM_HOOK_RAW"; | |
case 1029: | |
return "UNSOL_RINGBACK_TONE"; | |
case 1030: | |
return "UNSOL_RESEND_INCALL_MUTE"; | |
case 1031: | |
return "CDMA_SUBSCRIPTION_SOURCE_CHANGED"; | |
case 1032: | |
return "UNSOL_CDMA_PRL_CHANGED"; | |
case 1033: | |
return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE"; | |
case 1034: | |
return "UNSOL_RIL_CONNECTED"; | |
case 1035: | |
return "UNSOL_VOICE_RADIO_TECH_CHANGED"; | |
case 1036: | |
return "UNSOL_CELL_INFO_LIST"; | |
case 1037: | |
return "UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED"; | |
case 1038: | |
return "RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED"; | |
case 1039: | |
return "UNSOL_SRVCC_STATE_NOTIFY"; | |
case 1040: | |
return "RIL_UNSOL_HARDWARE_CONFIG_CHANGED"; | |
case 1042: | |
return "RIL_UNSOL_RADIO_CAPABILITY"; | |
case 1043: | |
return "UNSOL_ON_SS"; | |
case 1044: | |
return "UNSOL_STK_CC_ALPHA_NOTIFY"; | |
case 1045: | |
return "UNSOL_LCE_INFO_RECV"; | |
case 11000: | |
return "UNSOL_RESPONSE_NEW_CB_MSG"; | |
case 11001: | |
return "UNSOL_RELEASE_COMPLETE_MESSAGE"; | |
case 11002: | |
return "UNSOL_STK_SEND_SMS_RESULT"; | |
case 11003: | |
return "UNSOL_STK_CALL_CONTROL_RESULT"; | |
case 11008: | |
return "UNSOL_DEVICE_READY_NOTI"; | |
case 11009: | |
return "UNSOL_GPS_NOTI"; | |
case 11010: | |
return "UNSOL_AM"; | |
case 11013: | |
return "UNSOL_SAP"; | |
case 11020: | |
return "UNSOL_UART"; | |
case 11021: | |
return "UNSOL_SIM_PB_READY"; | |
case 11024: | |
return "UNSOL_VE"; | |
case 11026: | |
return "UNSOL_FACTORY_AM"; | |
case 11027: | |
return "UNSOL_IMS_REGISTRATION_STATE_CHANGED"; | |
case 11028: | |
return "UNSOL_MODIFY_CALL"; | |
case 11030: | |
return "UNSOL_CS_FALLBACK"; | |
case 11032: | |
return "UNSOL_VOICE_SYSTEM_ID"; | |
case 11034: | |
return "UNSOL_IMS_RETRYOVER"; | |
case 11035: | |
return "UNSOL_PB_INIT_COMPLETE"; | |
case 11037: | |
return "UNSOL_HYSTERESIS_DCN"; | |
case 11038: | |
return "UNSOL_CP_POSITION"; | |
case 11043: | |
return "UNSOL_HOME_NETWORK_NOTI"; | |
case 11054: | |
return "UNSOL_STK_CALL_STATUS"; | |
case 11056: | |
return "UNSOL_MODEM_CAP"; | |
case 11057: | |
return "UNSOL_SIM_SWAP_STATE_CHANGED"; | |
case 11058: | |
return "UNSOL_SIM_COUNT_MISMATCHED"; | |
case 11060: | |
return "UNSOL_DUN"; | |
case 11061: | |
return "UNSOL_IMS_PREFERENCE_CHANGED"; | |
case 11062: | |
return "UNSOL_SIM_APPLICATION_REFRESH"; | |
case 11063: | |
return "UNSOL_UICC_APPLICATION_STATUS"; | |
case 11064: | |
return "UNSOL_VOICE_RADIO_BEARER_HO_STATUS"; | |
case 11065: | |
return "UNSOL_CLM_NOTI"; | |
case 11066: | |
return "UNSOL_SIM_ICCID_NOTI"; | |
default: | |
return "<unknown response>"; | |
} | |
} | |
private void riljLog(String msg) { | |
Rlog.d(RILJ_LOG_TAG, msg + (this.mInstanceId != null ? " [SUB" + this.mInstanceId + "]" : "")); | |
} | |
private void riljLogv(String msg) { | |
Rlog.v(RILJ_LOG_TAG, msg + (this.mInstanceId != null ? " [SUB" + this.mInstanceId + "]" : "")); | |
} | |
private void unsljLog(int response) { | |
riljLog("[UNSL]< " + responseToString(response)); | |
} | |
private void unsljLogMore(int response, String more) { | |
riljLog("[UNSL]< " + responseToString(response) + " " + more); | |
} | |
private void unsljLogRet(int response, Object ret) { | |
riljLog("[UNSL]< " + responseToString(response) + " " + retToString(response, ret)); | |
} | |
private void unsljLogvRet(int response, Object ret) { | |
riljLogv("[UNSL]< " + responseToString(response) + " " + retToString(response, ret)); | |
} | |
private Object responseSsData(Parcel p) { | |
SsData ssData = new SsData(); | |
ssData.serviceType = ssData.ServiceTypeFromRILInt(p.readInt()); | |
ssData.requestType = ssData.RequestTypeFromRILInt(p.readInt()); | |
ssData.teleserviceType = ssData.TeleserviceTypeFromRILInt(p.readInt()); | |
ssData.serviceClass = p.readInt(); | |
ssData.result = p.readInt(); | |
int num = p.readInt(); | |
int i; | |
if (ssData.serviceType.isTypeCF() && ssData.requestType.isTypeInterrogation()) { | |
ssData.cfInfo = new CallForwardInfo[num]; | |
for (i = 0; i < num; i++) { | |
ssData.cfInfo[i] = new CallForwardInfo(); | |
ssData.cfInfo[i].status = p.readInt(); | |
ssData.cfInfo[i].reason = p.readInt(); | |
ssData.cfInfo[i].serviceClass = p.readInt(); | |
ssData.cfInfo[i].toa = p.readInt(); | |
ssData.cfInfo[i].number = p.readString(); | |
ssData.cfInfo[i].timeSeconds = p.readInt(); | |
riljLog("[SS Data] CF Info " + i + " : " + ssData.cfInfo[i]); | |
} | |
} else { | |
ssData.ssInfo = new int[num]; | |
for (i = 0; i < num; i++) { | |
ssData.ssInfo[i] = p.readInt(); | |
riljLog("[SS Data] SS Info " + i + " : " + ssData.ssInfo[i]); | |
} | |
} | |
return ssData; | |
} | |
public void getDeviceIdentity(Message response) { | |
RILRequest rr = RILRequest.obtain(OEM_NET_UPDATE_SUB_BINDING, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getCDMASubscription(Message response) { | |
RILRequest rr = RILRequest.obtain(95, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setPhoneType(int phoneType) { | |
riljLog("setPhoneType=" + phoneType + " old value=" + this.mPhoneType); | |
this.mPhoneType = phoneType; | |
} | |
public void queryCdmaRoamingPreference(Message response) { | |
RILRequest rr = RILRequest.obtain(79, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) { | |
RILRequest rr = RILRequest.obtain(78, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(cdmaRoamingType); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " : " + cdmaRoamingType); | |
send(rr); | |
} | |
public void setCdmaSubscriptionSource(int cdmaSubscription, Message response) { | |
RILRequest rr = RILRequest.obtain(77, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(cdmaSubscription); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " : " + cdmaSubscription); | |
send(rr); | |
} | |
public void getCdmaSubscriptionSource(Message response) { | |
RILRequest rr = RILRequest.obtain(Threads.ALERT_TEST_MESSAGE_THREAD, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void queryTTYMode(Message response) { | |
RILRequest rr = RILRequest.obtain(81, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setTTYMode(int ttyMode, Message response) { | |
RILRequest rr = RILRequest.obtain(80, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(ttyMode); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " : " + ttyMode); | |
send(rr); | |
} | |
public void sendCDMAFeatureCode(String FeatureCode, Message response) { | |
RILRequest rr = RILRequest.obtain(84, response); | |
rr.mParcel.writeString(FeatureCode); | |
if (SHIP_BUILD) { | |
if (FeatureCode == null || TextUtils.isEmpty(FeatureCode)) { | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
} else { | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " : ...(" + FeatureCode.length() + ")"); | |
} | |
send(rr); | |
return; | |
} | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " : " + FeatureCode); | |
send(rr); | |
} | |
public void getCdmaBroadcastConfig(Message response) { | |
send(RILRequest.obtain(92, response)); | |
} | |
public void setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message response) { | |
int i; | |
RILRequest rr = RILRequest.obtain(93, response); | |
ArrayList<CdmaSmsBroadcastConfigInfo> processedConfigs = new ArrayList(); | |
for (CdmaSmsBroadcastConfigInfo config : configs) { | |
for (i = config.getFromServiceCategory(); i <= config.getToServiceCategory(); i++) { | |
processedConfigs.add(new CdmaSmsBroadcastConfigInfo(i, i, config.getLanguage(), config.isSelected())); | |
} | |
} | |
CdmaSmsBroadcastConfigInfo[] rilConfigs = (CdmaSmsBroadcastConfigInfo[]) processedConfigs.toArray(configs); | |
rr.mParcel.writeInt(rilConfigs.length); | |
for (i = 0; i < rilConfigs.length; i++) { | |
rr.mParcel.writeInt(rilConfigs[i].getFromServiceCategory()); | |
rr.mParcel.writeInt(rilConfigs[i].getLanguage()); | |
rr.mParcel.writeInt(rilConfigs[i].isSelected() ? 1 : 0); | |
} | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " with " + rilConfigs.length + " configs : "); | |
send(rr); | |
} | |
public void setCdmaBroadcastActivation(boolean activate, Message response) { | |
int i = 1; | |
RILRequest rr = RILRequest.obtain(94, response); | |
rr.mParcel.writeInt(1); | |
Parcel parcel = rr.mParcel; | |
if (activate) { | |
i = 0; | |
} | |
parcel.writeInt(i); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void exitEmergencyCallbackMode(Message response) { | |
RILRequest rr = RILRequest.obtain(99, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void requestIsimAuthentication(String nonce, Message response) { | |
RILRequest rr = RILRequest.obtain(105, response); | |
rr.mParcel.writeString(nonce); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void requestIccSimAuthentication(int authContext, String data, String aid, Message response) { | |
RILRequest rr = RILRequest.obtain(125, response); | |
rr.mParcel.writeInt(authContext); | |
rr.mParcel.writeString(data); | |
rr.mParcel.writeString(aid); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getCellInfoList(Message result) { | |
RILRequest rr = RILRequest.obtain(109, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setCellInfoListRate(int rateInMillis, Message response) { | |
riljLog("setCellInfoListRate: " + rateInMillis); | |
RILRequest rr = RILRequest.obtain(Threads.ALERTS_ALL_ONE_THREAD, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(rateInMillis); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setInitialAttachApn(String apn, String protocol, int authType, String username, String password, Message result) { | |
RILRequest rr = RILRequest.obtain(111, null); | |
riljLog("Set RIL_REQUEST_SET_INITIAL_ATTACH_APN"); | |
rr.mParcel.writeString(apn); | |
rr.mParcel.writeString(protocol); | |
rr.mParcel.writeInt(authType); | |
rr.mParcel.writeString(username); | |
rr.mParcel.writeString(password); | |
if (isDebugLevelNotLow()) { | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + ", apn:" + apn + ", protocol:" + protocol + ", authType:" + authType + ", username:" + username + ", password:" + password); | |
} | |
send(rr); | |
} | |
public void setDataProfile(DataProfile[] dps, Message result) { | |
riljLog("Set RIL_REQUEST_SET_DATA_PROFILE"); | |
RILRequest rr = RILRequest.obtain(128, null); | |
DataProfile.toParcel(rr.mParcel, dps); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " with " + dps + " Data Profiles : "); | |
for (DataProfile dataProfile : dps) { | |
riljLog(dataProfile.toString()); | |
} | |
send(rr); | |
} | |
public void testingEmergencyCall() { | |
riljLog("testingEmergencyCall"); | |
this.mTestingEmergencyCall.set(true); | |
} | |
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { | |
pw.println("RIL: " + this); | |
pw.println(" mSocket=" + this.mSocket); | |
pw.println(" mSenderThread=" + this.mSenderThread); | |
pw.println(" mSender=" + this.mSender); | |
pw.println(" mReceiverThread=" + this.mReceiverThread); | |
pw.println(" mReceiver=" + this.mReceiver); | |
pw.println(" mWakeLock=" + this.mWakeLock); | |
pw.println(" mWakeLockTimeout=" + this.mWakeLockTimeout); | |
synchronized (this.mRequestList) { | |
synchronized (this.mWakeLock) { | |
pw.println(" mWakeLockCount=" + this.mWakeLockCount); | |
} | |
int count = this.mRequestList.size(); | |
pw.println(" mRequestList count=" + count); | |
for (int i = 0; i < count; i++) { | |
RILRequest rr = (RILRequest) this.mRequestList.valueAt(i); | |
pw.println(" [" + rr.mSerial + "] " + requestToString(rr.mRequest)); | |
} | |
} | |
pw.println(" mLastNITZTimeInfo=" + this.mLastNITZTimeInfo); | |
pw.println(" mTestingEmergencyCall=" + this.mTestingEmergencyCall.get()); | |
} | |
public void iccOpenLogicalChannel(String AID, Message response) { | |
RILRequest rr = RILRequest.obtain(CallFailCause.KTF_FAIL_CAUSE_115, response); | |
rr.mParcel.writeString(AID); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void iccCloseLogicalChannel(int channel, Message response) { | |
RILRequest rr = RILRequest.obtain(CallFailCause.KTF_FAIL_CAUSE_116, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(channel); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void iccTransmitApduLogicalChannel(int channel, int cla, int instruction, int p1, int p2, int p3, String data, Message response) { | |
if (channel <= 0) { | |
throw new RuntimeException("Invalid channel in iccTransmitApduLogicalChannel: " + channel); | |
} | |
iccTransmitApduHelper(117, channel, cla, instruction, p1, p2, p3, data, response); | |
} | |
public void iccTransmitApduBasicChannel(int cla, int instruction, int p1, int p2, int p3, String data, Message response) { | |
iccTransmitApduHelper(CallFailCause.KTF_FAIL_CAUSE_114, 0, cla, instruction, p1, p2, p3, data, response); | |
} | |
private void iccTransmitApduHelper(int rilCommand, int channel, int cla, int instruction, int p1, int p2, int p3, String data, Message response) { | |
RILRequest rr = RILRequest.obtain(rilCommand, response); | |
rr.mParcel.writeInt(channel); | |
rr.mParcel.writeInt(cla); | |
rr.mParcel.writeInt(instruction); | |
rr.mParcel.writeInt(p1); | |
rr.mParcel.writeInt(p2); | |
rr.mParcel.writeInt(p3); | |
rr.mParcel.writeString(data); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void nvReadItem(int itemID, Message response) { | |
RILRequest rr = RILRequest.obtain(118, response); | |
rr.mParcel.writeInt(itemID); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + ' ' + itemID); | |
send(rr); | |
} | |
public void nvWriteItem(int itemID, String itemValue, Message response) { | |
RILRequest rr = RILRequest.obtain(119, response); | |
rr.mParcel.writeInt(itemID); | |
rr.mParcel.writeString(itemValue); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + ' ' + itemID + ": " + itemValue); | |
send(rr); | |
} | |
public void nvWriteCdmaPrl(byte[] preferredRoamingList, Message response) { | |
RILRequest rr = RILRequest.obtain(120, response); | |
rr.mParcel.writeByteArray(preferredRoamingList); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " (" + preferredRoamingList.length + " bytes)"); | |
send(rr); | |
} | |
public void nvResetConfig(int resetType, Message response) { | |
RILRequest rr = RILRequest.obtain(121, response); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(resetType); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + ' ' + resetType); | |
send(rr); | |
} | |
public void setRadioCapability(RadioCapability rc, Message response) { | |
RILRequest rr = RILRequest.obtain(131, response); | |
rr.mParcel.writeInt(rc.getVersion()); | |
rr.mParcel.writeInt(rc.getSession()); | |
rr.mParcel.writeInt(rc.getPhase()); | |
rr.mParcel.writeInt(rc.getRadioAccessFamily()); | |
rr.mParcel.writeString(rc.getLogicalModemUuid()); | |
rr.mParcel.writeInt(rc.getStatus()); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + rc.toString()); | |
send(rr); | |
} | |
public void getRadioCapability(Message response) { | |
RILRequest rr = RILRequest.obtain(130, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void startLceService(int reportIntervalMs, boolean pullMode, Message response) { | |
RILRequest rr = RILRequest.obtain(132, response); | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeInt(reportIntervalMs); | |
rr.mParcel.writeInt(pullMode ? 1 : 0); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void stopLceService(Message response) { | |
RILRequest rr = RILRequest.obtain(133, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void pullLceData(Message response) { | |
RILRequest rr = RILRequest.obtain(134, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getModemActivityInfo(Message response) { | |
RILRequest rr = RILRequest.obtain(135, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void accessPhoneBookEntry(int command, int fileid, int index, AdnRecord adn, String pin2, Message result) { | |
boolean isEncodable; | |
int i; | |
int j; | |
RILRequest rr = RILRequest.obtain(10011, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
String alphTag = adn.mAlphaTag; | |
String number = adn.mNumber; | |
String email = adn.mEmails[0]; | |
String anr = adn.mAnr; | |
String anrA = adn.mAnrA; | |
String anrB = adn.mAnrB; | |
String anrC = adn.mAnrC; | |
String sne = adn.mSne; | |
if (anr.length() == 0) { | |
anr = null; | |
} | |
if (anrA.length() == 0) { | |
anrA = null; | |
} | |
if (anrB.length() == 0) { | |
anrB = null; | |
} | |
if (anrC.length() == 0) { | |
anrC = null; | |
} | |
byte[] byteArrayName = new byte[0]; | |
byte[] byteArrayNameTemp = new byte[0]; | |
byte[] byteArraySNE = new byte[0]; | |
byte[] byteArraySNETemp = new byte[0]; | |
byte[] byteArrayEmail = new byte[0]; | |
byte[] byteArrayEmailTemp = new byte[0]; | |
rr.mParcel.writeInt(command); | |
rr.mParcel.writeInt(fileid); | |
rr.mParcel.writeInt(index); | |
try { | |
GsmAlphabet.countGsmSeptets(alphTag, true); | |
isEncodable = true; | |
} catch (Exception e) { | |
isEncodable = false; | |
} | |
if (isEncodable) { | |
} | |
try { | |
byteArrayNameTemp = alphTag.getBytes("ISO-10646-UCS-2"); | |
byteArrayName = new byte[(byteArrayNameTemp.length - 2)]; | |
for (i = 0; i < byteArrayNameTemp.length - 2; i++) { | |
byteArrayName[i] = byteArrayNameTemp[i + 2]; | |
} | |
} catch (Exception e2) { | |
} | |
for (i = 0; i < byteArrayName.length; i++) { | |
riljLog("name[" + i + " ] = " + byteArrayName[i]); | |
} | |
rr.mParcel.writeByteArray(byteArrayName); | |
rr.mParcel.writeInt(byteArrayName.length); | |
rr.mParcel.writeInt(3); | |
rr.mParcel.writeString(number); | |
if (false) { | |
try { | |
byteArrayEmailTemp = email.getBytes("ISO-10646-UCS-2"); | |
byteArrayEmail = new byte[(byteArrayEmailTemp.length - 2)]; | |
for (j = 0; j < byteArrayEmailTemp.length - 2; j++) { | |
byteArrayEmail[j] = byteArrayEmailTemp[j + 2]; | |
} | |
} catch (Exception e3) { | |
} | |
riljLog("email = " + email); | |
rr.mParcel.writeByteArray(byteArrayEmail); | |
rr.mParcel.writeInt(byteArrayEmail.length); | |
} else { | |
byte[] gsm8bitEmail = GsmAlphabet.stringToGsm8BitPacked(email); | |
rr.mParcel.writeByteArray(gsm8bitEmail); | |
rr.mParcel.writeInt(gsm8bitEmail.length); | |
} | |
riljLog("anr = " + anr); | |
rr.mParcel.writeString(anr); | |
rr.mParcel.writeString(anrA); | |
rr.mParcel.writeString(anrB); | |
rr.mParcel.writeString(anrC); | |
try { | |
GsmAlphabet.countGsmSeptets(sne, true); | |
} catch (Exception e4) { | |
} | |
try { | |
byteArraySNETemp = sne.getBytes("ISO-10646-UCS-2"); | |
byteArraySNE = new byte[(byteArraySNETemp.length - 2)]; | |
for (i = 0; i < byteArraySNETemp.length - 2; i++) { | |
byteArraySNE[i] = byteArraySNETemp[i + 2]; | |
} | |
} catch (Exception e5) { | |
} | |
riljLog("sne = " + sne); | |
for (j = 0; j < byteArraySNE.length; j++) { | |
riljLog("sne[" + j + " ] = " + byteArraySNE[j]); | |
} | |
rr.mParcel.writeByteArray(byteArraySNE); | |
rr.mParcel.writeInt(byteArraySNE.length); | |
rr.mParcel.writeInt(3); | |
rr.mParcel.writeString(pin2); | |
send(rr); | |
} | |
public void changeBarringPassword(String facility, String oldPwd, String newPwd, String newPwdAgain, Message result) { | |
RILRequest rr = RILRequest.obtain(44, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(4); | |
rr.mParcel.writeString(facility); | |
rr.mParcel.writeString(oldPwd); | |
rr.mParcel.writeString(newPwd); | |
rr.mParcel.writeString(newPwdAgain); | |
send(rr); | |
} | |
public void getPhoneBookStorageInfo(int fileid, Message response) { | |
RILRequest rr = RILRequest.obtain(10009, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(fileid); | |
send(rr); | |
} | |
public void getPhoneBookEntry(int command, int fileid, int index, String pin2, Message result) { | |
RILRequest rr = RILRequest.obtain(10010, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(command); | |
rr.mParcel.writeInt(fileid); | |
rr.mParcel.writeString(null); | |
rr.mParcel.writeInt(index); | |
rr.mParcel.writeInt(0); | |
rr.mParcel.writeInt(0); | |
rr.mParcel.writeString(null); | |
rr.mParcel.writeString(pin2); | |
send(rr); | |
} | |
public void getUsimPBCapa(Message result) { | |
RILRequest rr = RILRequest.obtain(10012, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void getSIMLockInfo(int num_lock_type, int lock_type, Message result) { | |
RILRequest rr = RILRequest.obtain(10013, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(num_lock_type); | |
rr.mParcel.writeInt(lock_type); | |
send(rr); | |
} | |
public void setSimInitEvent(Message response) { | |
RILRequest rr = RILRequest.obtain(10014, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public int modifyNetworkTypeByOperator(int networkType) { | |
boolean isDcmLteFeature = SystemProperties.getBoolean("persist.radio.dcmlte", true); | |
boolean isRoaming = SystemProperties.getBoolean("gsm.operator.isroaming", false); | |
int preferredNetworkType = SystemProperties.getInt("persist.radio.setnwkmode", 9); | |
boolean userDataEnabled = Global.getInt(this.mContext.getContentResolver(), "mobile_data", 1) == 1; | |
boolean userDataRoamingEnabled = Global.getInt(this.mContext.getContentResolver(), "data_roaming", 1) == 1; | |
if (System.getInt(this.mContext.getContentResolver(), "voicecall_type", 1) == 0) { | |
} | |
String campMcc = SystemProperties.get("gsm.operator.numeric", ""); | |
String homeNet = SystemProperties.get("gsm.sim.operator.numeric", "44050"); | |
if ("00101".equals(homeNet) || "99999".equals(homeNet) || "45001".equals(homeNet)) { | |
return networkType; | |
} | |
if (campMcc.length() < 3) { | |
isRoaming = false; | |
} else if (homeNet.substring(0, 3).equals(campMcc.substring(0, 3)) || "000".equals(campMcc.substring(0, 3)) || "000".equals(homeNet.substring(0, 3))) { | |
isRoaming = false; | |
} else { | |
isRoaming = true; | |
} | |
riljLog("modifyNetworkTypeByOperator (preferredNetworkType:" + preferredNetworkType + ", userDataEnabled:" + userDataEnabled + ", isRoaming:" + isRoaming + ", userDataRoamingEnabled:" + userDataRoamingEnabled + ")"); | |
if (!userDataEnabled || (isRoaming && !userDataRoamingEnabled)) { | |
userDataEnabled = false; | |
} else { | |
userDataEnabled = true; | |
} | |
if ("KDI".equals("EUR")) { | |
boolean LteDataComm = PreferenceManager.getDefaultSharedPreferences(this.mContext).getBoolean("japan_system_select_key", true); | |
riljLog("... LteDataComm:" + LteDataComm); | |
userDataEnabled = isRoaming ? userDataEnabled && LteDataComm : true; | |
} | |
if (CscFeature.getInstance().getEnableStatus("CscFeature_RIL_NamSupport")) { | |
boolean allowDataEnableByNam = SystemProperties.getBoolean("ril.allowDataEnableByNam", true); | |
riljLog("allowDataEnableByNam: " + allowDataEnableByNam); | |
userDataEnabled = userDataEnabled && allowDataEnableByNam; | |
} | |
networkType = preferredNetworkType; | |
if (!userDataEnabled) { | |
switch (preferredNetworkType) { | |
case 8: | |
networkType = 4; | |
break; | |
case 9: | |
networkType = 3; | |
break; | |
case 10: | |
networkType = 7; | |
break; | |
case 12: | |
networkType = 2; | |
break; | |
} | |
} | |
return networkType; | |
} | |
public String modifyDnsByCpa(String dnses, String ifname) { | |
boolean isKddiCpaOn; | |
String[] tmpDns = new String[0]; | |
String DEFAULT_NULL_ADDRESS = "0.0.0.0"; | |
if (Secure.getInt(this.mContext.getContentResolver(), "kddi_cpa_on", 0) != 0) { | |
isKddiCpaOn = true; | |
} else { | |
isKddiCpaOn = false; | |
} | |
String cpaDns1 = Secure.getString(this.mContext.getContentResolver(), "kddi_cpa_static_dns1"); | |
String cpaDns2 = Secure.getString(this.mContext.getContentResolver(), "kddi_cpa_static_dns2"); | |
riljLog("modifyDnsByCpa (isKddiCpaOn:" + isKddiCpaOn + ", cpaDns1:" + cpaDns1 + "cpaDns2:" + cpaDns2 + ", dnses:" + dnses + ")"); | |
if (cpaDns2 == null || cpaDns2.equals("")) { | |
cpaDns2 = DEFAULT_NULL_ADDRESS; | |
} | |
if (!isKddiCpaOn) { | |
return dnses; | |
} | |
String propertyPrefix = "net." + ifname + "."; | |
String[] dnsServers = new String[2]; | |
if (cpaDns1 == null || cpaDns1.equals("")) { | |
if (TextUtils.isEmpty(dnses)) { | |
cpaDns1 = "1.0.0.0"; | |
cpaDns2 = "1.0.0.0"; | |
} else { | |
tmpDns = dnses.split(" "); | |
riljLog("tmpdns[0]:" + tmpDns[0] + ", tmpDns[1]:" + tmpDns[1]); | |
if (tmpDns[0].equals(DEFAULT_NULL_ADDRESS)) { | |
tmpDns[0] = "1.0.0.0"; | |
} | |
if (tmpDns[1].equals(DEFAULT_NULL_ADDRESS)) { | |
tmpDns[1] = "1.0.0.0"; | |
} | |
SystemProperties.set(propertyPrefix + "dns1", tmpDns[0]); | |
SystemProperties.set(propertyPrefix + "dns2", tmpDns[1]); | |
return tmpDns[0] + " " + tmpDns[1]; | |
} | |
} | |
SystemProperties.set(propertyPrefix + "dns1", cpaDns1); | |
SystemProperties.set(propertyPrefix + "dns2", cpaDns2); | |
return cpaDns1 + " " + cpaDns2; | |
} | |
public void sendEncodedUSSD(byte[] ussdString, int length, int dcsCode, Message response) { | |
RILRequest rr = RILRequest.obtain(10019, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + IccUtils.bytesToHexString(ussdString) + ", DCS : " + dcsCode); | |
rr.mParcel.writeByteArray(ussdString); | |
rr.mParcel.writeInt(length); | |
rr.mParcel.writeInt(dcsCode); | |
send(rr); | |
} | |
private Object responseSSReleaseCompleteNotification(Parcel p) { | |
SSReleaseCompleteNotification notification = new SSReleaseCompleteNotification(); | |
Rlog.i(RILJ_LOG_TAG, "responseSSReleaseCompleteNotification()"); | |
notification.size = p.readInt(); | |
notification.dataLen = p.readInt(); | |
notification.params = p.readInt(); | |
notification.status = p.readInt(); | |
notification.data = p.readString(); | |
Rlog.i(RILJ_LOG_TAG, "notification.data = " + notification.data); | |
return notification; | |
} | |
private Object responseUSSD(Parcel p) { | |
int num = p.readInt(); | |
int dcs = p.readInt(); | |
Rlog.d(RILJ_LOG_TAG, "responseUSSD - num " + num); | |
String[] response = new String[num]; | |
int i = 0; | |
while (i < num) { | |
if (dcs != 148 || i <= 0) { | |
response[i] = p.readString(); | |
} else { | |
try { | |
response[i] = new String(IccUtils.hexStringToBytes(p.readString()), CharacterSets.MIMENAME_EUC_KR); | |
Rlog.d(RILJ_LOG_TAG, "responseUSSD :: USSD_DCS_KS5601, response" + response[i]); | |
} catch (UnsupportedEncodingException e) { | |
response[i] = ""; | |
} | |
} | |
i++; | |
} | |
return response; | |
} | |
private Object responseSIM_PB(Parcel p) { | |
int[] lengthAlphas = new int[3]; | |
int[] dataTypeAlphas = new int[3]; | |
String[] alphaTags = new String[3]; | |
int[] lengthNumbers = new int[5]; | |
int[] dataTypeNumbers = new int[5]; | |
String[] numbers = new String[5]; | |
p.readIntArray(lengthAlphas); | |
p.readIntArray(dataTypeAlphas); | |
p.readStringArray(alphaTags); | |
if (!SHIP_BUILD) { | |
Rlog.i(RILJ_LOG_TAG, "alphaTag is " + alphaTags[0]); | |
} | |
if (!SHIP_BUILD) { | |
Rlog.i(RILJ_LOG_TAG, "SNE is " + alphaTags[1]); | |
} | |
if (!SHIP_BUILD) { | |
Rlog.i(RILJ_LOG_TAG, "email is " + alphaTags[2]); | |
} | |
p.readIntArray(lengthNumbers); | |
Rlog.i(RILJ_LOG_TAG, "lengthNumber is " + lengthNumbers[0]); | |
p.readIntArray(dataTypeNumbers); | |
p.readStringArray(numbers); | |
if (!SHIP_BUILD) { | |
Rlog.i(RILJ_LOG_TAG, "number is " + numbers[0]); | |
} | |
if (!SHIP_BUILD) { | |
Rlog.i(RILJ_LOG_TAG, "ANR is " + numbers[1]); | |
} | |
return new SimPBEntryResult(lengthAlphas, dataTypeAlphas, alphaTags, lengthNumbers, dataTypeNumbers, numbers, p.readInt(), p.readInt()); | |
} | |
private Object responseSIM_LockInfo(Parcel p) { | |
int num_lock_type = p.readInt(); | |
int lock_type = p.readInt(); | |
int lock_key = p.readInt(); | |
int num_of_retry = p.readInt(); | |
Rlog.i(RILJ_LOG_TAG, "num:" + num_lock_type + " lock_type:" + lock_type + " lock_key:" + lock_key + " num_of_retry:" + num_of_retry); | |
return new SimLockInfoResult(num_lock_type, lock_type, lock_key, num_of_retry); | |
} | |
private Object responseSimPowerDone(Parcel p) { | |
Rlog.d(RILJ_LOG_TAG, "ResponseSimPowerDone"); | |
int numInts = p.readInt(); | |
int[] response = new int[numInts]; | |
for (int i = 0; i < numInts; i++) { | |
response[i] = p.readInt(); | |
} | |
Rlog.d(RILJ_LOG_TAG, "ResponseSimPowerDone : " + response[0]); | |
return Integer.valueOf(response[0]); | |
} | |
private void setInitialPhoneType(int networkType) { | |
int phoneType = TelephonyManager.getPhoneType(networkType); | |
if (phoneType != this.initPhoneType) { | |
SystemProperties.set("persist.radio.initphone-type", String.valueOf(phoneType)); | |
Rlog.d(RILJ_LOG_TAG, "Initial PhoneType is changed: " + this.initPhoneType + " -> " + phoneType); | |
this.initPhoneType = phoneType; | |
} | |
} | |
public void supplyIccPerso(String pin, Message result) { | |
RILRequest rr = RILRequest.obtain(10018, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeString(pin); | |
send(rr); | |
} | |
public void changeIccSimPerso(String oldPass, String newPass, Message result) { | |
RILRequest rr = RILRequest.obtain(10017, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
rr.mParcel.writeInt(2); | |
rr.mParcel.writeString(oldPass); | |
rr.mParcel.writeString(newPass); | |
send(rr); | |
} | |
public void sendSMSmore(String smscPDU, String pdu, Message result) { | |
RILRequest rr = RILRequest.obtain(26, result); | |
Rlog.d(RILJ_LOG_TAG, "smscPDU: " + smscPDU); | |
Rlog.d(RILJ_LOG_TAG, "pdu: " + pdu); | |
constructGsmSendSmsRilRequest(rr, smscPDU, pdu); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void sendCdmaSmsMore(byte[] pdu, Message result) { | |
RILRequest rr = RILRequest.obtain(10020, result); | |
constructCdmaSendSmsRilRequest(rr, pdu); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void hangupVT(int rejectCause, Message result) { | |
RILRequest rr = RILRequest.obtain(10021, result); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(rejectCause); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " rejectCause: " + rejectCause); | |
send(rr); | |
} | |
public void holdCall(Message result) { | |
RILRequest rr = RILRequest.obtain(10022, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
private boolean isDebugLevelNotLow() { | |
if (SystemProperties.get(LOG_LEVEL_PROP, LOG_LEVEL_PROP_LOW).equalsIgnoreCase(LOG_LEVEL_PROP_LOW)) { | |
return false; | |
} | |
return true; | |
} | |
public void uiccGbaAuthenticateBootstrap(String sessionId, byte[] rand, byte[] autn, Message response) { | |
RILRequest rr = RILRequest.obtain(10025, response); | |
String randHex = IccUtils.bytesToHexString(rand); | |
String autnHex = IccUtils.bytesToHexString(autn); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + "[" + sessionId + "," + randHex + "," + autnHex + "]"); | |
rr.mParcel.writeString(sessionId); | |
rr.mParcel.writeString(randHex); | |
rr.mParcel.writeString(autnHex); | |
send(rr); | |
} | |
public void uiccGbaAuthenticateNaf(String sessionId, byte[] nafId, byte[] impi, Message response) { | |
RILRequest rr = RILRequest.obtain(10026, response); | |
String nafIdHex = IccUtils.bytesToHexString(nafId); | |
String impiHex = IccUtils.bytesToHexString(impi); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + "[" + sessionId + "," + nafIdHex + "]"); | |
rr.mParcel.writeString(sessionId); | |
rr.mParcel.writeString(nafIdHex); | |
rr.mParcel.writeString(impiHex); | |
send(rr); | |
} | |
private Object responseBootstrap(Parcel p) { | |
Bundle b = new Bundle(); | |
b.putByteArray("res", IccUtils.hexStringToBytes(p.readString())); | |
b.putByteArray("auts", IccUtils.hexStringToBytes(p.readString())); | |
return b; | |
} | |
private Object responseNaf(Parcel p) { | |
return IccUtils.hexStringToBytes(p.readString()); | |
} | |
protected void notifyModemCap(byte[] data, Integer phoneId) { | |
this.mModemCapRegistrants.notifyRegistrants(new AsyncResult(null, new UnsolOemHookBuffer(phoneId.intValue(), data), null)); | |
Rlog.d(RILJ_LOG_TAG, "MODEM_CAPABILITY on phone=" + phoneId + " notified to registrants"); | |
} | |
public void getICBarring(String facility, String password, int serviceClass, Message response) { | |
RILRequest rr = RILRequest.obtain(10027, response); | |
String dbgMsg = rr.serialString() + "> " + requestToString(rr.mRequest); | |
if (!SHIP_BUILD) { | |
dbgMsg = dbgMsg + " [" + facility + " " + serviceClass + "]"; | |
} | |
riljLog(dbgMsg); | |
rr.mParcel.writeInt(4); | |
rr.mParcel.writeString(facility); | |
rr.mParcel.writeString(password); | |
rr.mParcel.writeString(Integer.toString(serviceClass)); | |
rr.mParcel.writeString(""); | |
send(rr); | |
} | |
public void setICBarring(String facility, int barringState, String iCBNumber, int serviceClass, Message response) { | |
String barringString; | |
RILRequest rr = RILRequest.obtain(10028, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " [" + facility + " " + barringState + " " + serviceClass + " ]"); | |
rr.mParcel.writeInt(5); | |
rr.mParcel.writeString(facility); | |
if (barringState == 0) { | |
barringString = "0"; | |
} else if (barringState == 1) { | |
barringString = "1"; | |
} else if (barringState == 3) { | |
barringString = "3"; | |
} else if (barringState == 4) { | |
barringString = "4"; | |
} else { | |
Rlog.d(RILJ_LOG_TAG, "setICBarring: barring state is wrong value"); | |
barringString = "1"; | |
} | |
rr.mParcel.writeString(barringString); | |
rr.mParcel.writeString(iCBNumber); | |
rr.mParcel.writeString(Integer.toString(serviceClass)); | |
rr.mParcel.writeString(""); | |
send(rr); | |
} | |
public void transferCall(String msisdn, String deviceId, int index, Message result) { | |
RILRequest rr = RILRequest.obtain(10030, result); | |
String dbgMsg = rr.serialString() + "> " + requestToString(rr.mRequest); | |
if (!SHIP_BUILD) { | |
dbgMsg = dbgMsg + " [" + msisdn + "," + deviceId + "]"; | |
} | |
riljLog(dbgMsg); | |
rr.mParcel.writeInt(3); | |
rr.mParcel.writeString(msisdn); | |
rr.mParcel.writeString(deviceId); | |
rr.mParcel.writeString(Integer.toString(index)); | |
send(rr); | |
} | |
public void getDisable2g(Message response) { | |
RILRequest rr = RILRequest.obtain(10031, response); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
public void setDisable2g(int state, Message response) { | |
RILRequest rr = RILRequest.obtain(10032, response); | |
String dbgMsg = rr.serialString() + "> " + requestToString(rr.mRequest); | |
if (!SHIP_BUILD) { | |
dbgMsg = dbgMsg + " [" + state + "]"; | |
} | |
riljLog(dbgMsg); | |
rr.mParcel.writeInt(1); | |
rr.mParcel.writeInt(state); | |
send(rr); | |
} | |
public void refreshNitzTime(Message result) { | |
RILRequest rr = RILRequest.obtain(10033, result); | |
riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); | |
send(rr); | |
} | |
private void testingETWS(SmsMessage sms) { | |
byte[] tmp; | |
byte[] testID_1_1100 = IccUtils.hexStringToBytes("3000110011010D0A5BAE57CE770C531790E85C716CBF3044573065B9306757309707767A751F30025F37304463FA308C306B509930483066"); | |
byte[] testID_2_1100 = IccUtils.hexStringToBytes("2000110011010D0A5BAE57CE770C531790E85C716CBF3044573065B9306757309707767A751F30025F37304463FA308C306B509930483066"); | |
byte[] testID_3_1100 = IccUtils.hexStringToBytes("1000110011010D0A5BAE57CE770C531790E85C716CBF3044573065B9306757309707767A751F30025F37304463FA308C306B509930483066"); | |
byte[] testID_4_1100 = IccUtils.hexStringToBytes("4000110011010D0A5BAE57CE770C531790E85C716CBF3044573065B9306757309707767A751F30025F37304463FA308C306B509930483066"); | |
int Id = Integer.parseInt(sms.getMessageBody()); | |
riljLog("testingETWS"); | |
switch (Id) { | |
case 11100: | |
tmp = testID_1_1100; | |
break; | |
case 21100: | |
tmp = testID_2_1100; | |
break; | |
case 31100: | |
tmp = testID_3_1100; | |
break; | |
case 41100: | |
tmp = testID_4_1100; | |
break; | |
default: | |
return; | |
} | |
if (this.mGsmBroadcastSmsRegistrant != null) { | |
this.mGsmBroadcastSmsRegistrant.notifyRegistrant(new AsyncResult(null, tmp, null)); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment