10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony; 180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajanimport static com.android.internal.telephony.RILConstants.*; 20c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajanimport static com.android.internal.util.Preconditions.checkNotNull; 21c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context; 235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.Carrier; 245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.CarrierRestrictions; 255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.CdmaBroadcastSmsConfigInfo; 265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.CdmaSmsAck; 275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.CdmaSmsMessage; 285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.CdmaSmsWriteArgs; 2999607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.CellInfoCdma; 3099607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.CellInfoGsm; 3199607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.CellInfoLte; 3299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.CellInfoType; 3399607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.CellInfoWcdma; 348e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport android.hardware.radio.V1_0.DataProfileInfo; 35d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.Dial; 365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.GsmBroadcastSmsConfigInfo; 375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.GsmSmsMessage; 3899607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.HardwareConfigModem; 39d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.IRadio; 405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.IccIo; 415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.ImsSmsMessage; 42c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbachimport android.hardware.radio.V1_0.IndicationFilter; 4399607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.LceDataInfo; 448e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport android.hardware.radio.V1_0.MvnoType; 455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.NvWriteItem; 46d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioError; 47d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioIndicationType; 48d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioResponseInfo; 49d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioResponseType; 50e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran Cimport android.hardware.radio.V1_0.ResetNvType; 515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.SelectUiccSub; 525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.SimApdu; 535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.SmsWriteArgs; 54d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.UusInfo; 55c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbachimport android.hardware.radio.V1_2.AccessNetwork; 56ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qianimport android.hardware.radio.deprecated.V1_0.IOemHook; 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.ConnectivityManager; 58f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Haroldimport android.net.KeepalivePacketData; 59d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yuimport android.net.LinkProperties; 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult; 61504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasakaimport android.os.Build; 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler; 630012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajanimport android.os.HwBinder; 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message; 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Parcel; 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager; 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager.WakeLock; 680012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajanimport android.os.RemoteException; 6927eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadhamimport android.os.SystemClock; 70f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.os.SystemProperties; 711bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport android.os.WorkSource; 7240659286ac42ec77bbe7893830bd50c06f393ee8Meng Wangimport android.service.carrier.CarrierIdentifier; 7301e8b1e70fe5ee7d522fe8ba57630a55e633bcbbMalcolm Chenimport android.telephony.AccessNetworkConstants.AccessNetworkType; 747aa0254d5d8f08163b3702a2a1c9602366f568d8Jack Yuimport android.telephony.CellIdentity; 75a8af56d7ddc5b3e7781aaa792a44c2c18539ab2fNathan Haroldimport android.telephony.CellIdentityCdma; 765fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Savilleimport android.telephony.CellInfo; 77a8af56d7ddc5b3e7781aaa792a44c2c18539ab2fNathan Haroldimport android.telephony.CellSignalStrengthCdma; 781bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport android.telephony.ClientRequestStats; 799179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwarimport android.telephony.ImsiEncryptionInfo; 80f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.telephony.ModemActivityInfo; 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.NeighboringCellInfo; 82c8c651f856047c6c761de788a14097600701cdabyinxuimport android.telephony.NetworkScanRequest; 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.PhoneNumberUtils; 843ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwaltimport android.telephony.RadioAccessFamily; 85c8c651f856047c6c761de788a14097600701cdabyinxuimport android.telephony.RadioAccessSpecifier; 86fa4fd4721082689c4b276f67b845e7be249cb8daWink Savilleimport android.telephony.Rlog; 87d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yuimport android.telephony.ServiceState; 885b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingamimport android.telephony.SignalStrength; 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.SmsManager; 90d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padaweimport android.telephony.TelephonyHistogram; 912d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chenimport android.telephony.TelephonyManager; 92c2d0cec6cc786470359383a5fa179586bdde3858Jack Yuimport android.telephony.data.DataProfile; 93d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yuimport android.telephony.data.DataService; 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils; 95c8c651f856047c6c761de788a14097600701cdabyinxuimport android.util.Log; 967cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwaltimport android.util.SparseArray; 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 98c066b40160496c1265e21a3b624e267e47807137Pengquan Mengimport com.android.internal.annotations.VisibleForTesting; 99e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Nakaimport com.android.internal.telephony.cat.ComprehensionTlv; 100e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Nakaimport com.android.internal.telephony.cat.ComprehensionTlvTag; 101f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.cdma.CdmaInformationRecords; 102f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo; 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; 104f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.metrics.TelephonyMetrics; 1059460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.SmsSession; 106d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccUtils; 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.ByteArrayInputStream; 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.DataInputStream; 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor; 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.IOException; 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter; 113bf307ac11797b1a843e687a3f5e6170e20df244cJack Yuimport java.net.Inet4Address; 114f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Haroldimport java.net.Inet6Address; 1153f8bd3dd2c7bceeab44854231411e9517417b944Jack Yuimport java.net.InetAddress; 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList; 11727eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadhamimport java.util.Arrays; 118d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padaweimport java.util.List; 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicBoolean; 1200012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajanimport java.util.concurrent.atomic.AtomicLong; 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * RIL implementation of the CommandsInterface. 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 127c066b40160496c1265e21a3b624e267e47807137Pengquan Mengpublic class RIL extends BaseCommands implements CommandsInterface { 128fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville static final String RILJ_LOG_TAG = "RILJ"; 12904ed5d01a9f80a41a09b8cb455d27614598caae4Olivier Gaillard static final String RILJ_WAKELOCK_TAG = "*telephony-radio*"; 130a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe // Have a separate wakelock instance for Ack 131a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe static final String RILJ_ACK_WAKELOCK_NAME = "RILJ_ACK_WL"; 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final boolean RILJ_LOGD = true; 133cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville static final boolean RILJ_LOGV = false; // STOPSHIP if true 134d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe static final int RIL_HISTOGRAM_BUCKET_COUNT = 5; 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Wake lock timeout should be longer than the longest timeout in 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the vendor ril. 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1403464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe private static final int DEFAULT_WAKE_LOCK_TIMEOUT_MS = 60000; 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 142a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe // Wake lock default timeout associated with ack 1433464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe private static final int DEFAULT_ACK_WAKE_LOCK_TIMEOUT_MS = 200; 144a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe 14532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold private static final int DEFAULT_BLOCKING_MESSAGE_RESPONSE_TIMEOUT_MS = 2000; 14632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 147a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe // Variables used to differentiate ack messages from request while calling clearWakeLock() 14832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold public static final int INVALID_WAKELOCK = -1; 14932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold public static final int FOR_WAKELOCK = 0; 15032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold public static final int FOR_ACK_WAKELOCK = 1; 1511b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla private final ClientWakelockTracker mClientWakelockTracker = new ClientWakelockTracker(); 152a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //***** Instance Variables 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 155a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe final WakeLock mWakeLock; // Wake lock associated with request/response 156a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe final WakeLock mAckWakeLock; // Wake lock associated with ack sent 157a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe final int mWakeLockTimeout; // Timeout associated with request/response 158a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe final int mAckWakeLockTimeout; // Timeout associated with ack sent 1597cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // The number of wakelock requests currently active. Don't release the lock 1607cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // until dec'd to 0 1617cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt int mWakeLockCount; 1627cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt 163a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe // Variables used to identify releasing of WL on wakelock timeouts 164a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe volatile int mWlSequenceNum = 0; 165a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe volatile int mAckWlSequenceNum = 0; 166a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe 1677cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt SparseArray<RILRequest> mRequestList = new SparseArray<RILRequest>(); 168d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe static SparseArray<TelephonyHistogram> mRilTimeHistograms = new 169d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe SparseArray<TelephonyHistogram>(); 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 171d39109502855e8d81e45e21161d8bf0cfacf42e0Sanket Padawe Object[] mLastNITZTimeInfo; 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // When we are testing emergency calls 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AtomicBoolean mTestingEmergencyCall = new AtomicBoolean(false); 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe final Integer mPhoneId; 177a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1788e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran /* default work source which will blame phone process */ 1798e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran private WorkSource mRILDefaultWorkSource; 1805054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 1818e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran /* Worksource containing all applications causing wakelock to be held */ 1828e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran private WorkSource mActiveWakelockWorkSource; 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1843fe0578ea48570cd5d8c8dfd8b53b8984915330fJack Yu /** Telephony metrics instance for logging metrics event */ 185f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private TelephonyMetrics mMetrics = TelephonyMetrics.getInstance(); 1865054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 1870d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan boolean mIsMobileNetworkSupported; 1880d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan RadioResponse mRadioResponse; 1890d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan RadioIndication mRadioIndication; 1900d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan volatile IRadio mRadioProxy = null; 191ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian OemHookResponse mOemHookResponse; 192ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian OemHookIndication mOemHookIndication; 193ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian volatile IOemHook mOemHookProxy = null; 1940d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan final AtomicLong mRadioProxyCookie = new AtomicLong(0); 1950d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan final RadioProxyDeathRecipient mRadioProxyDeathRecipient; 1960d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan final RilHandler mRilHandler; 1970d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan 1988e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran //***** Events 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int EVENT_WAKE_LOCK_TIMEOUT = 2; 200a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe static final int EVENT_ACK_WAKE_LOCK_TIMEOUT = 4; 20132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold static final int EVENT_BLOCKING_RESPONSE_TIMEOUT = 5; 2020012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan static final int EVENT_RADIO_PROXY_DEAD = 6; 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //***** Constants 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 206606cb716e62998ea9813deeb858c45dd4ac5470eAmit Mahajan static final String[] HIDL_SERVICE_NAME = {"slot1", "slot2", "slot3"}; 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2080d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan static final int IRADIO_GET_SERVICE_DELAY_MILLIS = 4 * 1000; 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 210e2be13c62d7f340a6560c61e2e925d8608f1024cCassie static final String EMPTY_ALPHA_LONG = ""; 211e2be13c62d7f340a6560c61e2e925d8608f1024cCassie static final String EMPTY_ALPHA_SHORT = ""; 212e2be13c62d7f340a6560c61e2e925d8608f1024cCassie 213d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe public static List<TelephonyHistogram> getTelephonyRILTimingHistograms() { 214d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe List<TelephonyHistogram> list; 215d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe synchronized (mRilTimeHistograms) { 216d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe list = new ArrayList<>(mRilTimeHistograms.size()); 217d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe for (int i = 0; i < mRilTimeHistograms.size(); i++) { 218d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe TelephonyHistogram entry = new TelephonyHistogram(mRilTimeHistograms.valueAt(i)); 219d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe list.add(entry); 220d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 221d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 222d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe return list; 223d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 224d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe 225c066b40160496c1265e21a3b624e267e47807137Pengquan Meng /** The handler used to handle the internal event of RIL. */ 226c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @VisibleForTesting 227c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public class RilHandler extends Handler { 228c066b40160496c1265e21a3b624e267e47807137Pengquan Meng 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //***** Handler implementation 230c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 231c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void handleMessage(Message msg) { 232d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan RILRequest rr; 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (msg.what) { 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_WAKE_LOCK_TIMEOUT: 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Haven't heard back from the last request. Assume we're 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // not getting a response and release the wake lock. 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2397cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // The timer of WAKE_LOCK_TIMEOUT is reset with each 2407cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // new send request. So when WAKE_LOCK_TIMEOUT occurs 2417cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // all requests in mRequestList already waited at 2423464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe // least DEFAULT_WAKE_LOCK_TIMEOUT_MS but no response. 2437cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // 2447cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // Note: Keep mRequestList so that delayed response 2457cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // can still be handled when response finally comes. 2467cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt 2477cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt synchronized (mRequestList) { 248a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe if (msg.arg1 == mWlSequenceNum && clearWakeLock(FOR_WAKELOCK)) { 2497cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt if (RILJ_LOGD) { 2507cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt int count = mRequestList.size(); 2516613a961473a72c218ec505e384dad6b19049aa0Robert Greenwalt Rlog.d(RILJ_LOG_TAG, "WAKE_LOCK_TIMEOUT " + 2527cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt " mRequestList=" + count); 2537cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt for (int i = 0; i < count; i++) { 2547cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt rr = mRequestList.valueAt(i); 2556613a961473a72c218ec505e384dad6b19049aa0Robert Greenwalt Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] " 2567cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt + requestToString(rr.mRequest)); 2577cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt } 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 262a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe 263a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe case EVENT_ACK_WAKE_LOCK_TIMEOUT: 264a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe if (msg.arg1 == mAckWlSequenceNum && clearWakeLock(FOR_ACK_WAKELOCK)) { 26534dffd7066bcf421829e249f56288bc33735eaf4Sanket Padawe if (RILJ_LOGV) { 266a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe Rlog.d(RILJ_LOG_TAG, "ACK_WAKE_LOCK_TIMEOUT"); 267a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe } 268a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe } 269a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe break; 27032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 27132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold case EVENT_BLOCKING_RESPONSE_TIMEOUT: 27232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold int serial = msg.arg1; 27332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold rr = findAndRemoveRequestFromList(serial); 27432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold // If the request has already been processed, do nothing 27532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold if(rr == null) { 27632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold break; 27732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold } 27832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 27932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold //build a response if expected 28032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold if (rr.mResult != null) { 28132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold Object timeoutResponse = getResponseForTimedOutRILRequest(rr); 28232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold AsyncResult.forMessage( rr.mResult, timeoutResponse, null); 28332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold rr.mResult.sendToTarget(); 2845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeOnRilTimeoutResponse(mPhoneId, rr.mSerial, rr.mRequest); 28532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold } 28632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 28732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold decrementWakeLock(rr); 28832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold rr.release(); 28932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold break; 290d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan 291d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan case EVENT_RADIO_PROXY_DEAD: 292d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan riljLog("handleMessage: EVENT_RADIO_PROXY_DEAD cookie = " + msg.obj + 293d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan " mRadioProxyCookie = " + mRadioProxyCookie.get()); 294d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan if ((long) msg.obj == mRadioProxyCookie.get()) { 295d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan resetProxyAndRequestList(); 296d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan } 297d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan break; 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 30332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * In order to prevent calls to Telephony from waiting indefinitely 30432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * low-latency blocking calls will eventually time out. In the event of 30532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * a timeout, this function generates a response that is returned to the 30632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * higher layers to unblock the call. This is in lieu of a meaningful 30732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * response. 30832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * @param rr The RIL Request that has timed out. 30932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * @return A default object, such as the one generated by a normal response 31032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * that is returned to the higher layers. 31132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold **/ 31232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold private static Object getResponseForTimedOutRILRequest(RILRequest rr) { 31332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold if (rr == null ) return null; 31432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 31532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold Object timeoutResponse = null; 31632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold switch(rr.mRequest) { 31732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold case RIL_REQUEST_GET_ACTIVITY_INFO: 31832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold timeoutResponse = new ModemActivityInfo( 31932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 0, 0, 0, new int [ModemActivityInfo.TX_POWER_LEVELS], 0, 0); 32032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold break; 32132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold }; 32232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold return timeoutResponse; 32332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold } 32432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 3250012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan final class RadioProxyDeathRecipient implements HwBinder.DeathRecipient { 3260012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan @Override 3270012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan public void serviceDied(long cookie) { 3280012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan // Deal with service going away 3290012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan riljLog("serviceDied"); 3305dab6d6e64ae95575dbaafbc1b618917ec3525d3Amit Mahajan mRilHandler.sendMessage(mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD, cookie)); 3310012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } 332a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 333a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 3340012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan private void resetProxyAndRequestList() { 3350012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxy = null; 336ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian mOemHookProxy = null; 33775a34bca6e996289e3ad200ab545aa154d2fba58Amit Mahajan 338c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan // increment the cookie so that death notification can be ignored 339c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan mRadioProxyCookie.incrementAndGet(); 340c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan 34175a34bca6e996289e3ad200ab545aa154d2fba58Amit Mahajan setRadioState(RadioState.RADIO_UNAVAILABLE); 34275a34bca6e996289e3ad200ab545aa154d2fba58Amit Mahajan 3430012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan RILRequest.resetSerial(); 3440012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan // Clear request list on close 3450012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan clearRequestList(RADIO_NOT_AVAILABLE, false); 346c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 3475dab6d6e64ae95575dbaafbc1b618917ec3525d3Amit Mahajan getRadioProxy(null); 348b8ed5811e5456b64838c198ba7ef7058920e3d4bsqian getOemHookProxy(null); 3490012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } 350c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 351c066b40160496c1265e21a3b624e267e47807137Pengquan Meng /** Returns a {@link IRadio} instance or null if the service is not available. */ 352c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @VisibleForTesting 353c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public IRadio getRadioProxy(Message result) { 3540ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan if (!mIsMobileNetworkSupported) { 355b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan if (RILJ_LOGV) riljLog("getRadioProxy: Not calling getService(): wifi-only"); 356447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu if (result != null) { 357447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu AsyncResult.forMessage(result, null, 358447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu CommandException.fromRilErrno(RADIO_NOT_AVAILABLE)); 359447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu result.sendToTarget(); 360447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu } 3610ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan return null; 3620ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan } 3630ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan 3640012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan if (mRadioProxy != null) { 3650012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan return mRadioProxy; 3660012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } 3670d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan 368c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan try { 3695dab6d6e64ae95575dbaafbc1b618917ec3525d3Amit Mahajan mRadioProxy = IRadio.getService(HIDL_SERVICE_NAME[mPhoneId == null ? 0 : mPhoneId], 3705dab6d6e64ae95575dbaafbc1b618917ec3525d3Amit Mahajan true); 3710012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan if (mRadioProxy != null) { 3720012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxy.linkToDeath(mRadioProxyDeathRecipient, 3730012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxyCookie.incrementAndGet()); 3740012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxy.setResponseFunctions(mRadioResponse, mRadioIndication); 375c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } else { 376f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan riljLoge("getRadioProxy: mRadioProxy == null"); 377c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 3780012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 3790012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxy = null; 3800d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan riljLoge("RadioProxy getService/setResponseFunctions: " + e); 3810d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan } 3825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 3830d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan if (mRadioProxy == null) { 3845dab6d6e64ae95575dbaafbc1b618917ec3525d3Amit Mahajan // getService() is a blocking call, so this should never happen 3855dab6d6e64ae95575dbaafbc1b618917ec3525d3Amit Mahajan riljLoge("getRadioProxy: mRadioProxy == null"); 3865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (result != null) { 3875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe AsyncResult.forMessage(result, null, 3885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CommandException.fromRilErrno(RADIO_NOT_AVAILABLE)); 3895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe result.sendToTarget(); 3905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 391c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 3920d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan 3930012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan return mRadioProxy; 3940012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } 3950012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan 396ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian /** Returns an {@link IOemHook} instance or null if the service is not available. */ 397ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian @VisibleForTesting 398ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian public IOemHook getOemHookProxy(Message result) { 399ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (!mIsMobileNetworkSupported) { 400ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (RILJ_LOGV) riljLog("getOemHookProxy: Not calling getService(): wifi-only"); 401ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (result != null) { 402ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian AsyncResult.forMessage(result, null, 403ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian CommandException.fromRilErrno(RADIO_NOT_AVAILABLE)); 404ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian result.sendToTarget(); 405ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 406ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian return null; 407ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 408ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 409ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (mOemHookProxy != null) { 410ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian return mOemHookProxy; 411ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 412ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 413ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian try { 414ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian mOemHookProxy = IOemHook.getService( 415498ab681c876500f0a7ea5174d5f89f79f9d6a89Steven Moreland HIDL_SERVICE_NAME[mPhoneId == null ? 0 : mPhoneId], true); 416ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (mOemHookProxy != null) { 417ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian // not calling linkToDeath() as ril service runs in the same process and death 418ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian // notification for that should be sufficient 419ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian mOemHookProxy.setResponseFunctions(mOemHookResponse, mOemHookIndication); 420ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } else { 421ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian riljLoge("getOemHookProxy: mOemHookProxy == null"); 422ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 423ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } catch (RemoteException | RuntimeException e) { 424ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian mOemHookProxy = null; 425ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian riljLoge("OemHookProxy getService/setResponseFunctions: " + e); 426ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 427ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 428ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (mOemHookProxy == null) { 429ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (result != null) { 430ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian AsyncResult.forMessage(result, null, 431ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian CommandException.fromRilErrno(RADIO_NOT_AVAILABLE)); 432ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian result.sendToTarget(); 433ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 434ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 435ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 436ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian return mOemHookProxy; 437ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 438ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 4390012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan //***** Constructors 4400012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan 4410012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan public RIL(Context context, int preferredNetworkType, int cdmaSubscription) { 4420012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan this(context, preferredNetworkType, cdmaSubscription, null); 443c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 444c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 445a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public RIL(Context context, int preferredNetworkType, 446a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville int cdmaSubscription, Integer instanceId) { 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super(context); 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (RILJ_LOGD) { 449d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe riljLog("RIL: init preferredNetworkType=" + preferredNetworkType 450d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe + " cdmaSubscription=" + cdmaSubscription + ")"); 4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4527cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt 453a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mContext = context; 4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCdmaSubscription = cdmaSubscription; 4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreferredNetworkType = preferredNetworkType; 4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPhoneType = RILConstants.NO_PHONE; 4575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mPhoneId = instanceId; 4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4590ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan ConnectivityManager cm = (ConnectivityManager)context.getSystemService( 4600ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan Context.CONNECTIVITY_SERVICE); 4610ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan mIsMobileNetworkSupported = cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE); 4620ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan 463c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan mRadioResponse = new RadioResponse(this); 464c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan mRadioIndication = new RadioIndication(this); 465ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian mOemHookResponse = new OemHookResponse(this); 466ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian mOemHookIndication = new OemHookIndication(this); 4670012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRilHandler = new RilHandler(); 4680012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxyDeathRecipient = new RadioProxyDeathRecipient(); 469c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); 47104ed5d01a9f80a41a09b8cb455d27614598caae4Olivier Gaillard mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_WAKELOCK_TAG); 4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mWakeLock.setReferenceCounted(false); 473a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe mAckWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_ACK_WAKELOCK_NAME); 474a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe mAckWakeLock.setReferenceCounted(false); 4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mWakeLockTimeout = SystemProperties.getInt(TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT, 4763464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe DEFAULT_WAKE_LOCK_TIMEOUT_MS); 477a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe mAckWakeLockTimeout = SystemProperties.getInt( 4783464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT, DEFAULT_ACK_WAKE_LOCK_TIMEOUT_MS); 4797cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt mWakeLockCount = 0; 4808e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran mRILDefaultWorkSource = new WorkSource(context.getApplicationInfo().uid, 4818e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran context.getPackageName()); 4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 483a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville TelephonyDevController tdc = TelephonyDevController.getInstance(); 484a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville tdc.registerRIL(this); 4850d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan 4860d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan // set radio callback; needed to set RadioIndication callback (should be done after 4870d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan // wakelock stuff is initialized above as callbacks are received on separate binder threads) 4880d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan getRadioProxy(null); 489ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian getOemHookProxy(null); 4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 492c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 493c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void setOnNITZTime(Handler h, int what, Object obj) { 4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.setOnNITZTime(h, what, obj); 4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Send the last NITZ time if we have it 4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mLastNITZTimeInfo != null) { 4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNITZTimeRegistrant 4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .notifyRegistrant( 5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville new AsyncResult (null, mLastNITZTimeInfo, null)); 5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 504c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan private void addRequest(RILRequest rr) { 505c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan acquireWakeLock(rr, FOR_WAKELOCK); 506c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan synchronized (mRequestList) { 507d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe rr.mStartTimeMs = SystemClock.elapsedRealtime(); 508c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan mRequestList.append(rr.mSerial, rr); 509c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 510c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 511c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 5125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private RILRequest obtainRequest(int request, Message result, WorkSource workSource) { 5135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = RILRequest.obtain(request, result, workSource); 5145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe addRequest(rr); 5155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return rr; 5165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 5175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 5185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void handleRadioProxyExceptionForRR(RILRequest rr, String caller, Exception e) { 5190d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan riljLoge(caller + ": " + e); 5205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe resetProxyAndRequestList(); 5215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 5225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 5235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private String convertNullToEmptyString(String string) { 5245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return string != null ? string : ""; 5255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 5265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 527cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 528c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void getIccCardStatus(Message result) { 5295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 5305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 5315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_SIM_STATUS, result, 5325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 536c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan try { 537c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan radioProxy.getIccCardStatus(rr.mSerial); 5380012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 5395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getIccCardStatus", e); 540c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 541c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 544c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 5454e10a61602bd065cdf71d0335493ac3444d5055ayinxu public void getIccSlotsStatus(Message result) { 5468b55cbe95ef5c0007cacf1727e239ab21da6cbafyinxu if (result != null) { 5478b55cbe95ef5c0007cacf1727e239ab21da6cbafyinxu AsyncResult.forMessage(result, null, 5488b55cbe95ef5c0007cacf1727e239ab21da6cbafyinxu CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); 5498b55cbe95ef5c0007cacf1727e239ab21da6cbafyinxu result.sendToTarget(); 5504e10a61602bd065cdf71d0335493ac3444d5055ayinxu } 5514e10a61602bd065cdf71d0335493ac3444d5055ayinxu } 5524e10a61602bd065cdf71d0335493ac3444d5055ayinxu 5534e10a61602bd065cdf71d0335493ac3444d5055ayinxu @Override 5544e10a61602bd065cdf71d0335493ac3444d5055ayinxu public void setLogicalToPhysicalSlotMapping(int[] physicalSlots, Message result) { 5558b55cbe95ef5c0007cacf1727e239ab21da6cbafyinxu if (result != null) { 5568b55cbe95ef5c0007cacf1727e239ab21da6cbafyinxu AsyncResult.forMessage(result, null, 5578b55cbe95ef5c0007cacf1727e239ab21da6cbafyinxu CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); 5588b55cbe95ef5c0007cacf1727e239ab21da6cbafyinxu result.sendToTarget(); 5594e10a61602bd065cdf71d0335493ac3444d5055ayinxu } 5604e10a61602bd065cdf71d0335493ac3444d5055ayinxu } 5614e10a61602bd065cdf71d0335493ac3444d5055ayinxu 5624e10a61602bd065cdf71d0335493ac3444d5055ayinxu @Override 563c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void supplyIccPin(String pin, Message result) { 5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPinForApp(pin, null, result); 5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 567c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 568c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void supplyIccPinForApp(String pin, String aid, Message result) { 5695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 5705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 5715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PIN, result, 5725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 575231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 576231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran + " aid = " + aid); 5775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 579d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 580d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.supplyIccPinForApp(rr.mSerial, 5815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(pin), 5825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 5830012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 5845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "supplyIccPinForApp", e); 585d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 586d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 5905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void supplyIccPuk(String puk, String newPin, Message result) { 5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPukForApp(puk, newPin, null, result); 5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 5955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void supplyIccPukForApp(String puk, String newPin, String aid, Message result) { 5965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 5975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 5985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PUK, result, 5995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 602231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 603231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran + " aid = " + aid); 6045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 606d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 607d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.supplyIccPukForApp(rr.mSerial, 6085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(puk), 6095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(newPin), 6105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 6110012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 6125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "supplyIccPukForApp", e); 613d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 614d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 617c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 618c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void supplyIccPin2(String pin, Message result) { 6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPin2ForApp(pin, null, result); 6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 622c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 623c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void supplyIccPin2ForApp(String pin, String aid, Message result) { 6245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 6255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 6265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PIN2, result, 6275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 630231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 631231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran + " aid = " + aid); 6325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 634d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 635d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.supplyIccPin2ForApp(rr.mSerial, 6365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(pin), 6375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 6380012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 6395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "supplyIccPin2ForApp", e); 640d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 641d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 644c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 645c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void supplyIccPuk2(String puk2, String newPin2, Message result) { 6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPuk2ForApp(puk2, newPin2, null, result); 6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 649c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 650c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void supplyIccPuk2ForApp(String puk, String newPin2, String aid, Message result) { 6515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 6525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 6535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PUK2, result, 6545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 657231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 658231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran + " aid = " + aid); 6595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 661d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 662d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.supplyIccPuk2ForApp(rr.mSerial, 6635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(puk), 6645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(newPin2), 6655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 6660012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 6675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "supplyIccPuk2ForApp", e); 668d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 669d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 672c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 673c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void changeIccPin(String oldPin, String newPin, Message result) { 6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville changeIccPinForApp(oldPin, newPin, null, result); 6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 677c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 678c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void changeIccPinForApp(String oldPin, String newPin, String aid, Message result) { 6795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 6805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 6815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CHANGE_SIM_PIN, result, 6825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 6855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " oldPin = " 6865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + oldPin + " newPin = " + newPin + " aid = " + aid); 6875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 689d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 690d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.changeIccPinForApp(rr.mSerial, 6915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(oldPin), 6925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(newPin), 6935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 6940012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 6955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "changeIccPinForApp", e); 696d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 697d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 700c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 701c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void changeIccPin2(String oldPin2, String newPin2, Message result) { 7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville changeIccPin2ForApp(oldPin2, newPin2, null, result); 7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 705c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @Override 706c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void changeIccPin2ForApp(String oldPin2, String newPin2, String aid, Message result) { 7075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 7085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 7095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CHANGE_SIM_PIN2, result, 7105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 7135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " oldPin = " 7145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + oldPin2 + " newPin = " + newPin2 + " aid = " + aid); 7155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 717d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 718d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.changeIccPin2ForApp(rr.mSerial, 7195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(oldPin2), 7205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(newPin2), 7215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 7220012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 7235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "changeIccPin2ForApp", e); 724d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 725d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 726d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 728d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe @Override 729d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe public void supplyNetworkDepersonalization(String netpin, Message result) { 7305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 7315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 7325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, result, 7335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 734d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 7355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 7365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " netpin = " 7375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + netpin); 7385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 739d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 740d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 741d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.supplyNetworkDepersonalization(rr.mSerial, 7425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(netpin)); 7430012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 7445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "supplyNetworkDepersonalization", e); 745d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 746d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 749cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 750d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe public void getCurrentCalls(Message result) { 7515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 7525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 7535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_CURRENT_CALLS, result, 7545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 7575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 7585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 760d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 761d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.getCurrentCalls(rr.mSerial); 7620012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 7635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getCurrentCalls", e); 764d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 765d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 766d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 768d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe @Override 769d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe public void dial(String address, int clirMode, Message result) { 770d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe dial(address, clirMode, null, result); 7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 773cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 774d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe public void dial(String address, int clirMode, UUSInfo uusInfo, Message result) { 7755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 7765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 7775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DIAL, result, 7785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Dial dialInfo = new Dial(); 7815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe dialInfo.address = convertNullToEmptyString(address); 7825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe dialInfo.clir = clirMode; 7835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (uusInfo != null) { 7845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe UusInfo info = new UusInfo(); 7855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.uusType = uusInfo.getType(); 7865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.uusDcs = uusInfo.getDcs(); 7875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.uusData = new String(uusInfo.getUserData()); 7885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe dialInfo.uusInfo.add(info); 7895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 7925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function arg for privacy 7935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 7945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 796d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 797d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.dial(rr.mSerial, dialInfo); 7980012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 7995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "dial", e); 800d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 801d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 8055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getIMSI(Message result) { 8065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe getIMSIForApp(null, result); 8075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 8105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getIMSIForApp(String aid, Message result) { 8115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 8125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 8135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_IMSI, result, 8145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 8155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 8165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 8175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() 8185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + "> " + requestToString(rr.mRequest) + " aid = " + aid); 8195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 8215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getImsiForApp(rr.mSerial, convertNullToEmptyString(aid)); 8225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 8235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getIMSIForApp", e); 8245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 825d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 8265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 827d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 8285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 8295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void hangupConnection(int gsmIndex, Message result) { 8305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 8315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 8325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_HANGUP, result, 8335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 8340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 8365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " gsmIndex = " 8375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + gsmIndex); 8385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 8415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.hangup(rr.mSerial, gsmIndex); 8425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 8435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "hangupConnection", e); 8445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 845d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 8460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 848cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void hangupWaitingOrBackground(Message result) { 8505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 8515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 8525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND, result, 8535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 8540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 856d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 8575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 8585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.hangupWaitingOrBackground(rr.mSerial); 8595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 8605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "hangupWaitingOrBackground", e); 8615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 865cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void hangupForegroundResumeBackground(Message result) { 8675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 8685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 8695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND, result, 8705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 8715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 8725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 8735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 8745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 8755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.hangupForegroundResumeBackground(rr.mSerial); 8765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 8775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "hangupForegroundResumeBackground", e); 8785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 882cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void switchWaitingOrHoldingAndActive(Message result) { 8845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 8855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 8865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE, result, 8875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 8900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 8925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.switchWaitingOrHoldingAndActive(rr.mSerial); 8935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 8945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "switchWaitingOrHoldingAndActive", e); 8955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 899cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void conference(Message result) { 9015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 9025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 9035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CONFERENCE, result, 9045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 9055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 9065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 9075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 9085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 9095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.conference(rr.mSerial); 9105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 9115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "conference", e); 9125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 916cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void rejectCall(Message result) { 9185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 9195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 9205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_UDUB, result, 9215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 9265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.rejectCall(rr.mSerial); 9275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 9285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "rejectCall", e); 9295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 933cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getLastCallFailCause(Message result) { 9355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 9365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 9375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_LAST_CALL_FAIL_CAUSE, result, 9385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 9435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getLastCallFailCause(rr.mSerial); 9445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 9455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getLastCallFailCause", e); 9465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 950cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 951a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan public void getSignalStrength(Message result) { 952a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(result); 953a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 954a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_SIGNAL_STRENGTH, result, 955a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 9560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 957a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 959a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 960a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.getSignalStrength(rr.mSerial); 961a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 962a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "getSignalStrength", e); 963a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 964a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 9650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 967cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getVoiceRegistrationState(Message result) { 9695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 9705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 9715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_VOICE_REGISTRATION_STATE, result, 9725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 9775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getVoiceRegistrationState(rr.mSerial); 9785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 9795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getVoiceRegistrationState", e); 9805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 984cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getDataRegistrationState(Message result) { 9865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 9875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 9885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DATA_REGISTRATION_STATE, result, 9895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 9920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 9945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getDataRegistrationState(rr.mSerial); 9955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 9965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getDataRegistrationState", e); 9975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1001cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getOperator(Message result) { 10035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 10045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 10055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_OPERATOR, result, 10065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 10070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 10095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 10105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 10115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getOperator(rr.mSerial); 10125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 10135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getOperator", e); 10145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1018cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setRadioPower(boolean on, Message result) { 10205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 10215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 10225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_RADIO_POWER, result, 10235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 10240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 10265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 10275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " on = " + on); 10285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 10315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setRadioPower(rr.mSerial, on); 10325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 10335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setRadioPower", e); 10345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1038cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendDtmf(char c, Message result) { 10405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 10415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 10425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DTMF, result, 10435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 10440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 10465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function arg for privacy 10475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 10485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 10515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendDtmf(rr.mSerial, c + ""); 10525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 10535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendDtmf", e); 10545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private GsmSmsMessage constructGsmSendSmsRilRequest(String smscPdu, String pdu) { 10595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe GsmSmsMessage msg = new GsmSmsMessage(); 10605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.smscPdu = smscPdu == null ? "" : smscPdu; 10615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.pdu = pdu == null ? "" : pdu; 10625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return msg; 10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1065cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendSMS(String smscPdu, String pdu, Message result) { 10675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 10685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 10695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SEND_SMS, result, 10705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 10710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function args for privacy 10735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 10740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe GsmSmsMessage msg = constructGsmSendSmsRilRequest(smscPdu, pdu); 10760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 10785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendSms(rr.mSerial, msg); 10795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_GSM, 10805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsSession.Event.Format.SMS_FORMAT_3GPP); 10815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 10825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendSMS", e); 10835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1087cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendSMSExpectMore(String smscPdu, String pdu, Message result) { 10895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 10905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 10915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SEND_SMS_EXPECT_MORE, result, 10925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 10930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function arg for privacy 10955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 10960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe GsmSmsMessage msg = constructGsmSendSmsRilRequest(smscPdu, pdu); 10985054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 10995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 11005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendSMSExpectMore(rr.mSerial, msg); 11015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_GSM, 11025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsSession.Event.Format.SMS_FORMAT_3GPP); 11035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 11045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendSMSExpectMore", e); 11055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11098e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu /** 11108e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * Convert MVNO type string into MvnoType defined in types.hal. 11118e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * @param mvnoType MVNO type 11128e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * @return MVNO type in integer 11138e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu */ 11148e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu private static int convertToHalMvnoType(String mvnoType) { 11158e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu switch (mvnoType) { 11168e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu case "imsi" : return MvnoType.IMSI; 11178e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu case "gid" : return MvnoType.GID; 11188e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu case "spn" : return MvnoType.SPN; 11198e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu default: return MvnoType.NONE; 11208e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 11218e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 11228e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 11238e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu /** 11248e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * Convert to DataProfileInfo defined in types.hal 11258e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * @param dp Data profile 11268e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * @return A converted data profile 11278e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu */ 11288e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu private static DataProfileInfo convertToHalDataProfile(DataProfile dp) { 11298e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu DataProfileInfo dpi = new DataProfileInfo(); 11308e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 1131c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.profileId = dp.getProfileId(); 1132c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.apn = dp.getApn(); 1133c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.protocol = dp.getProtocol(); 1134c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.roamingProtocol = dp.getRoamingProtocol(); 1135c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.authType = dp.getAuthType(); 1136c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.user = dp.getUserName(); 1137c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.password = dp.getPassword(); 1138c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.type = dp.getType(); 1139c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.maxConnsTime = dp.getMaxConnsTime(); 1140c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.maxConns = dp.getMaxConns(); 1141c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.waitTime = dp.getWaitTime(); 1142c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.enabled = dp.isEnabled(); 1143c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.supportedApnTypesBitmap = dp.getSupportedApnTypesBitmap(); 1144c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.bearerBitmap = dp.getBearerBitmap(); 1145c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.mtu = dp.getMtu(); 1146c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.mvnoType = convertToHalMvnoType(dp.getMvnoType()); 1147c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dpi.mvnoMatchData = dp.getMvnoMatchData(); 11488e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 11498e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu return dpi; 11508e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 11518e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 11528e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu /** 1153e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * Convert NV reset type into ResetNvType defined in types.hal. 1154e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * @param resetType NV reset type. 1155e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * @return Converted reset type in integer or -1 if param is invalid. 1156e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C */ 1157e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C private static int convertToHalResetNvType(int resetType) { 1158e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C /** 1159e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * resetType values 1160e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * 1 - reload all NV items 1161e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * 2 - erase NV reset (SCRTN) 1162e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * 3 - factory reset (RTN) 1163e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C */ 1164e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C switch (resetType) { 1165e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C case 1: return ResetNvType.RELOAD; 1166e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C case 2: return ResetNvType.ERASE; 1167e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C case 3: return ResetNvType.FACTORY_RESET; 1168e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C } 1169e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C return -1; 1170e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C } 1171e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C 1172cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1173d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu public void setupDataCall(int accessNetworkType, DataProfile dataProfile, boolean isRoaming, 1174d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu boolean allowRoaming, int reason, LinkProperties linkProperties, 1175d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu Message result) { 11768e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 1177a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(result); 11784b2c78c078d59466d18a4f7f926bb3bc0eccff9dJack Yu 1179a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 11808e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 1181a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_SETUP_DATA_CALL, result, 1182a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 1183a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 11848e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu // Convert to HAL data profile 11858e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu DataProfileInfo dpi = convertToHalDataProfile(dataProfile); 11868e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 1187d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu android.hardware.radio.V1_2.IRadio radioProxy12 = 1188d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu android.hardware.radio.V1_2.IRadio.castFrom(radioProxy); 1189a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 1190d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu if (radioProxy12 == null) { 1191d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu // IRadio V1.0 11927465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu 11937465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu // Getting data RAT here is just a workaround to support the older 1.0 vendor 11947465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu // RIL. The new data service interface passes access network type instead of 11957465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu // RAT for setup data request. It is impossible to convert access network 11967465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu // type back to RAT here, so we directly get the data RAT from phone. 11977465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu int dataRat = ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN; 11987465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu Phone phone = PhoneFactory.getPhone(mPhoneId); 11997465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu if (phone != null) { 12007465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu ServiceState ss = phone.getServiceState(); 12017465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu if (ss != null) { 12027465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu dataRat = ss.getRilDataRadioTechnology(); 12037465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu } 12047465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu } 1205d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu if (RILJ_LOGD) { 1206d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 12077465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu + ",dataRat=" + dataRat + ",isRoaming=" + isRoaming 1208d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu + ",allowRoaming=" + allowRoaming + "," + dataProfile); 1209d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu } 12107465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu 12117465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu radioProxy.setupDataCall(rr.mSerial, dataRat, dpi, 12127465b0a9baaa9e27088324cda4f005aab40fa71dJack Yu dataProfile.isModemCognitive(), allowRoaming, isRoaming); 1213d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu } else { 1214d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu // IRadio V1.2 1215014495e4376ec853899a43b8dca4a8c874aba1d5Sandeep Gutta ArrayList<String> addresses = new ArrayList<>(); 1216014495e4376ec853899a43b8dca4a8c874aba1d5Sandeep Gutta ArrayList<String> dnses = new ArrayList<>(); 1217d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu if (linkProperties != null) { 1218d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu for (InetAddress address : linkProperties.getAddresses()) { 1219d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu addresses.add(address.getHostAddress()); 1220d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu } 1221d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu for (InetAddress dns : linkProperties.getDnsServers()) { 1222d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu dnses.add(dns.getHostAddress()); 1223d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu } 1224d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu } 1225d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu 1226d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu if (RILJ_LOGD) { 1227d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 1228d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu + ",accessNetworkType=" + accessNetworkType + ",isRoaming=" 1229d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu + isRoaming + ",allowRoaming=" + allowRoaming + "," + dataProfile 1230d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu + ",addresses=" + addresses + ",dnses=" + dnses); 1231d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu } 1232d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu 1233d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu radioProxy12.setupDataCall_1_2(rr.mSerial, accessNetworkType, dpi, 1234d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu dataProfile.isModemCognitive(), allowRoaming, isRoaming, reason, 1235d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu addresses, dnses); 1236d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu } 1237a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 1238a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "setupDataCall", e); 1239a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 12408e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 12410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1243cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void iccIO(int command, int fileId, String path, int p1, int p2, int p3, 12455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String data, String pin2, Message result) { 12465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIOForApp(command, fileId, path, p1, p2, p3, data, pin2, null, result); 12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1249cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void iccIOForApp(int command, int fileId, String path, int p1, int p2, int p3, 12515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String data, String pin2, String aid, Message result) { 12525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 12535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 12545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_IO, result, 12555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 12560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 1258504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka if (Build.IS_DEBUGGABLE) { 1259504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka riljLog(rr.serialString() + "> iccIO: " 1260504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka + requestToString(rr.mRequest) + " command = 0x" 1261504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka + Integer.toHexString(command) + " fileId = 0x" 1262504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka + Integer.toHexString(fileId) + " path = " + path + " p1 = " 1263504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka + p1 + " p2 = " + p2 + " p3 = " + " data = " + data 1264504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka + " aid = " + aid); 1265504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka } else { 1266504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka riljLog(rr.serialString() + "> iccIO: " + requestToString(rr.mRequest)); 1267504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka } 12685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 12690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IccIo iccIo = new IccIo(); 12715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.command = command; 12725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.fileId = fileId; 12735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.path = convertNullToEmptyString(path); 12745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.p1 = p1; 12755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.p2 = p2; 12765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.p3 = p3; 12775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.data = convertNullToEmptyString(data); 12785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.pin2 = convertNullToEmptyString(pin2); 12795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.aid = convertNullToEmptyString(aid); 12800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 12825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.iccIOForApp(rr.mSerial, iccIo); 12835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 12845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "iccIOForApp", e); 12855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 12865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 12870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1289cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendUSSD(String ussd, Message result) { 12915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 12925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 12935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SEND_USSD, result, 12945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 12950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 12975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String logUssd = "*******"; 12985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGV) logUssd = ussd; 12995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 13005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " ussd = " + logUssd); 13015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 13045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendUssd(rr.mSerial, convertNullToEmptyString(ussd)); 13055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 13065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendUSSD", e); 13075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1311cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void cancelPendingUssd(Message result) { 13135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 13145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 13155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CANCEL_USSD, result, 13165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 13170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 13195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() 13205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + "> " + requestToString(rr.mRequest)); 13215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 13245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.cancelPendingUssd(rr.mSerial); 13255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 13265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "cancelPendingUssd", e); 13275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1331cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getCLIR(Message result) { 13335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 13345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 13355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_CLIR, result, 13365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 13370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 13390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 13415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getClir(rr.mSerial); 13425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 13435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getCLIR", e); 13445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1348cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCLIR(int clirMode, Message result) { 13505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 13515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 13525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_CLIR, result, mRILDefaultWorkSource); 13530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 13555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 13565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " clirMode = " + clirMode); 13575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 13605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setClir(rr.mSerial, clirMode); 13615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 13625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCLIR", e); 13635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1367cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryCallForwardStatus(int cfReason, int serviceClass, 13695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String number, Message result) { 13705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 13715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 13725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, result, 13735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 13740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 13765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 13775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " cfreason = " + cfReason + " serviceClass = " + serviceClass); 13785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe android.hardware.radio.V1_0.CallForwardInfo cfInfo = 13815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new android.hardware.radio.V1_0.CallForwardInfo(); 13825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.reason = cfReason; 13835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.serviceClass = serviceClass; 13845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.toa = PhoneNumberUtils.toaFromString(number); 13855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.number = convertNullToEmptyString(number); 13865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.timeSeconds = 0; 13875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 13885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 13895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCallForwardStatus(rr.mSerial, cfInfo); 13905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 13915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryCallForwardStatus", e); 13925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1396cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCallForward(int action, int cfReason, int serviceClass, 13985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String number, int timeSeconds, Message result) { 13995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 14005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 14015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_CALL_FORWARD, result, 14025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 14030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 14055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 14065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " action = " + action + " cfReason = " + cfReason + " serviceClass = " 14075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + serviceClass + " timeSeconds = " + timeSeconds); 14085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe android.hardware.radio.V1_0.CallForwardInfo cfInfo = 14115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new android.hardware.radio.V1_0.CallForwardInfo(); 14125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.status = action; 14135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.reason = cfReason; 14145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.serviceClass = serviceClass; 14155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.toa = PhoneNumberUtils.toaFromString(number); 1416a5b70e4dc179942acc958d650bab1017be443e14Sooraj Sasindran cfInfo.number = convertNullToEmptyString(number); 14178489fba4bf4086d89973231cd627ce5898f34b5cSanket Padawe cfInfo.timeSeconds = timeSeconds; 14185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 14195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 14205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCallForward(rr.mSerial, cfInfo); 14215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 14225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCallForward", e); 14235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 14245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1428cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryCallWaiting(int serviceClass, Message result) { 14305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 14315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 14325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_CALL_WAITING, result, 14335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 1434a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 14355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 14365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 14375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " serviceClass = " + serviceClass); 14385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 1439a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 14405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 14415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCallWaiting(rr.mSerial, serviceClass); 14425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 14435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryCallWaiting", e); 14445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 1446a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1447a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1448a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 14495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCallWaiting(boolean enable, int serviceClass, Message result) { 14505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 14515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 14525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_CALL_WAITING, result, 14535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 14540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 14565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 14575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " enable = " + enable + " serviceClass = " + serviceClass); 14585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 14615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCallWaiting(rr.mSerial, enable, serviceClass); 14625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 14635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCallWaiting", e); 14645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1468cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) { 14705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 14715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 14725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SMS_ACKNOWLEDGE, result, 14735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 14740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 14765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 14775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " success = " + success + " cause = " + cause); 14785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 14815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.acknowledgeLastIncomingGsmSms(rr.mSerial, success, cause); 14825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 14835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "acknowledgeLastIncomingGsmSms", e); 14845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1488cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void acceptCall(Message result) { 14905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 14915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 14925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ANSWER, result, 14935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 14940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 14965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 14975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 15005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.acceptCall(rr.mSerial); 15015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilAnswer(mPhoneId, rr.mSerial); 15025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 15035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "acceptCall", e); 15045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1508cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void deactivateDataCall(int cid, int reason, Message result) { 15105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 15115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 15125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DEACTIVATE_DATA_CALL, result, 15135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 15140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 15165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 15175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) + " cid = " + cid + " reason = " + reason); 15185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1520d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu android.hardware.radio.V1_2.IRadio radioProxy12 = 1521d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu android.hardware.radio.V1_2.IRadio.castFrom(radioProxy); 1522d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu 15235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 1524d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu if (radioProxy12 == null) { 1525d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu radioProxy.deactivateDataCall(rr.mSerial, cid, 1526d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu (reason == DataService.REQUEST_REASON_SHUTDOWN)); 1527d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu } else { 1528d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu radioProxy12.deactivateDataCall_1_2(rr.mSerial, cid, reason); 1529d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu } 1530d5a7979d5c82f1fd568d80267216402bc9d8d0baJack Yu mMetrics.writeRilDeactivateDataCall(mPhoneId, rr.mSerial, cid, reason); 15315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 15325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "deactivateDataCall", e); 15335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 15385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryFacilityLock(String facility, String password, int serviceClass, 15395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Message result) { 15405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe queryFacilityLockForApp(facility, password, serviceClass, null, result); 15411260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 15421260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 15435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 15445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryFacilityLockForApp(String facility, String password, int serviceClass, 15455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String appId, Message result) { 15465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 15475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 15485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_FACILITY_LOCK, result, 15495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 15500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 15525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 15535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " facility = " + facility + " serviceClass = " + serviceClass 15545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " appId = " + appId); 15555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15565054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 15575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 15585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getFacilityLockForApp(rr.mSerial, 15595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(facility), 15605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(password), 15615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe serviceClass, 15625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(appId)); 15635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 15645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getFacilityLockForApp", e); 15655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15696ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi @Override 15705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setFacilityLock(String facility, boolean lockState, String password, 15715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int serviceClass, Message result) { 15725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe setFacilityLockForApp(facility, lockState, password, serviceClass, null, result); 15736ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi } 15746ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi 15755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 15765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setFacilityLockForApp(String facility, boolean lockState, String password, 15775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int serviceClass, String appId, Message result) { 15785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 15795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 15805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_FACILITY_LOCK, result, 15815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 15820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 15845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 15855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " facility = " + facility + " lockstate = " + lockState 15865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " serviceClass = " + serviceClass + " appId = " + appId); 15870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 15905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setFacilityLockForApp(rr.mSerial, 15915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(facility), 15925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe lockState, 15935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(password), 15945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe serviceClass, 15955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(appId)); 15965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 15975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setFacilityLockForApp", e); 15980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16001260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 16011260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 16025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 16035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void changeBarringPassword(String facility, String oldPwd, String newPwd, 16045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Message result) { 16055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 16065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 16075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CHANGE_BARRING_PASSWORD, result, 16085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 16091260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 16105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log all function args for privacy 16115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 16125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 16135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + "facility = " + facility); 16145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16155054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 16165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 16175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setBarringPassword(rr.mSerial, 16185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(facility), 16195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(oldPwd), 16205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(newPwd)); 16215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 16225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "changeBarringPassword", e); 16235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16251260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 16261260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 16275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 16285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getNetworkSelectionMode(Message result) { 16295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 16305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 16315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE, result, 16325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 16331260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 16345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 16355054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 16365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 16375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getNetworkSelectionMode(rr.mSerial); 16385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 16395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getNetworkSelectionMode", e); 16405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16421260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 16431260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 16445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 16455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setNetworkSelectionModeAutomatic(Message result) { 16465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 16475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 16485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC, result, 16495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 16500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 16525054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 16535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 16545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setNetworkSelectionModeAutomatic(rr.mSerial); 16555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 16565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setNetworkSelectionModeAutomatic", e); 16575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1661cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setNetworkSelectionModeManual(String operatorNumeric, Message result) { 16635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 16645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 16655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL, result, 16665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 16670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 16695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 16705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " operatorNumeric = " + operatorNumeric); 16715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 16745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setNetworkSelectionModeManual(rr.mSerial, 16755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(operatorNumeric)); 16765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 16775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setNetworkSelectionModeManual", e); 16785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1682cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getAvailableNetworks(Message result) { 16845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 16855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 16865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_AVAILABLE_NETWORKS, result, 16875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 16880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 16900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 16925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getAvailableNetworks(rr.mSerial); 16935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 16945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getAvailableNetworks", e); 16955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1699ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran private android.hardware.radio.V1_1.RadioAccessSpecifier convertRadioAccessSpecifierToRadioHAL( 1700ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran RadioAccessSpecifier ras) { 1701ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran android.hardware.radio.V1_1.RadioAccessSpecifier rasInHalFormat = 1702ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran new android.hardware.radio.V1_1.RadioAccessSpecifier(); 1703a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu rasInHalFormat.radioAccessNetwork = ras.getRadioAccessNetwork(); 1704ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran List<Integer> bands = null; 1705a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu switch (ras.getRadioAccessNetwork()) { 170601e8b1e70fe5ee7d522fe8ba57630a55e633bcbbMalcolm Chen case AccessNetworkType.GERAN: 1707ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran bands = rasInHalFormat.geranBands; 1708ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran break; 170901e8b1e70fe5ee7d522fe8ba57630a55e633bcbbMalcolm Chen case AccessNetworkType.UTRAN: 1710ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran bands = rasInHalFormat.utranBands; 1711ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran break; 171201e8b1e70fe5ee7d522fe8ba57630a55e633bcbbMalcolm Chen case AccessNetworkType.EUTRAN: 1713ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran bands = rasInHalFormat.eutranBands; 1714ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran break; 1715ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran default: 1716a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu Log.wtf(RILJ_LOG_TAG, "radioAccessNetwork " + ras.getRadioAccessNetwork() 1717ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran + " not supported!"); 1718ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran return null; 1719ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1720ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran 1721a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu if (ras.getBands() != null) { 1722a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu for (int band : ras.getBands()) { 1723ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran bands.add(band); 1724ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1725ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1726a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu if (ras.getChannels() != null) { 1727a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu for (int channel : ras.getChannels()) { 1728ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran rasInHalFormat.channels.add(channel); 1729ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1730ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1731ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran 1732ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran return rasInHalFormat; 1733ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1734ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran 1735cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 173684de7198887db7ba56c5cfd1d653033e7b4631a9yinxu public void startNetworkScan(NetworkScanRequest nsr, Message result) { 1737c8c651f856047c6c761de788a14097600701cdabyinxu IRadio radioProxy = getRadioProxy(result); 1738c8c651f856047c6c761de788a14097600701cdabyinxu if (radioProxy != null) { 1739ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran android.hardware.radio.V1_2.IRadio radioProxy12 = 1740ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran android.hardware.radio.V1_2.IRadio.castFrom(radioProxy); 1741ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran if (radioProxy12 != null) { 1742ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran android.hardware.radio.V1_2.NetworkScanRequest request = 1743ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran new android.hardware.radio.V1_2.NetworkScanRequest(); 1744a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu request.type = nsr.getScanType(); 1745a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu request.interval = nsr.getSearchPeriodicity(); 1746a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu request.maxSearchTime = nsr.getMaxSearchTime(); 1747a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu request.incrementalResultsPeriodicity = nsr.getIncrementalResultsPeriodicity(); 1748a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu request.incrementalResults = nsr.getIncrementalResults(); 1749ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran 1750a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu for (RadioAccessSpecifier ras : nsr.getSpecifiers()) { 1751ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran 1752ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran android.hardware.radio.V1_1.RadioAccessSpecifier rasInHalFormat = 1753ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran convertRadioAccessSpecifierToRadioHAL(ras); 1754ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran if (rasInHalFormat == null) { 1755ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran return; 1756c8c651f856047c6c761de788a14097600701cdabyinxu } 1757ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran 1758ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran request.specifiers.add(rasInHalFormat); 1759c8c651f856047c6c761de788a14097600701cdabyinxu } 1760c8c651f856047c6c761de788a14097600701cdabyinxu 1761a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu request.mccMncs.addAll(nsr.getPlmns()); 1762c8c651f856047c6c761de788a14097600701cdabyinxu RILRequest rr = obtainRequest(RIL_REQUEST_START_NETWORK_SCAN, result, 1763c8c651f856047c6c761de788a14097600701cdabyinxu mRILDefaultWorkSource); 1764c8c651f856047c6c761de788a14097600701cdabyinxu 1765c8c651f856047c6c761de788a14097600701cdabyinxu if (RILJ_LOGD) { 1766c8c651f856047c6c761de788a14097600701cdabyinxu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 1767c8c651f856047c6c761de788a14097600701cdabyinxu } 1768c8c651f856047c6c761de788a14097600701cdabyinxu 1769c8c651f856047c6c761de788a14097600701cdabyinxu try { 1770ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran radioProxy12.startNetworkScan_1_2(rr.mSerial, request); 1771c8c651f856047c6c761de788a14097600701cdabyinxu } catch (RemoteException | RuntimeException e) { 1772c8c651f856047c6c761de788a14097600701cdabyinxu handleRadioProxyExceptionForRR(rr, "startNetworkScan", e); 1773c8c651f856047c6c761de788a14097600701cdabyinxu } 1774ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } else { 1775ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran android.hardware.radio.V1_1.IRadio radioProxy11 = 1776ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran android.hardware.radio.V1_1.IRadio.castFrom(radioProxy); 1777ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran if (radioProxy11 == null) { 1778ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran if (result != null) { 1779ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran AsyncResult.forMessage(result, null, 1780ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); 1781ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran result.sendToTarget(); 1782ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1783ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } else { 1784ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran android.hardware.radio.V1_1.NetworkScanRequest request = 1785ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran new android.hardware.radio.V1_1.NetworkScanRequest(); 1786a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu request.type = nsr.getScanType(); 1787a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu request.interval = nsr.getSearchPeriodicity(); 1788a4fd7bbd4141a66ff1465c2e4f65aca2c65ec728yinxu for (RadioAccessSpecifier ras : nsr.getSpecifiers()) { 1789ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran android.hardware.radio.V1_1.RadioAccessSpecifier rasInHalFormat = 1790ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran convertRadioAccessSpecifierToRadioHAL(ras); 1791ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran if (rasInHalFormat == null) { 1792ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran return; 1793ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1794ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran 1795ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran request.specifiers.add(rasInHalFormat); 1796ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1797ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran 1798ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran RILRequest rr = obtainRequest(RIL_REQUEST_START_NETWORK_SCAN, result, 1799ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran mRILDefaultWorkSource); 1800ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran 1801ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran if (RILJ_LOGD) { 1802ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 1803ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1804ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran 1805ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran try { 1806ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran radioProxy11.startNetworkScan(rr.mSerial, request); 1807ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } catch (RemoteException | RuntimeException e) { 1808ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran handleRadioProxyExceptionForRR(rr, "startNetworkScan", e); 1809ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1810ffac118f2399d342c4ca4ddb5167667e52db5adfSooraj Sasindran } 1811c8c651f856047c6c761de788a14097600701cdabyinxu } 1812c8c651f856047c6c761de788a14097600701cdabyinxu } 1813c8c651f856047c6c761de788a14097600701cdabyinxu } 1814c8c651f856047c6c761de788a14097600701cdabyinxu 1815c8c651f856047c6c761de788a14097600701cdabyinxu @Override 1816c8c651f856047c6c761de788a14097600701cdabyinxu public void stopNetworkScan(Message result) { 1817c8c651f856047c6c761de788a14097600701cdabyinxu IRadio radioProxy = getRadioProxy(result); 1818c8c651f856047c6c761de788a14097600701cdabyinxu if (radioProxy != null) { 1819c8c651f856047c6c761de788a14097600701cdabyinxu android.hardware.radio.V1_1.IRadio radioProxy11 = 1820c8c651f856047c6c761de788a14097600701cdabyinxu android.hardware.radio.V1_1.IRadio.castFrom(radioProxy); 1821c8c651f856047c6c761de788a14097600701cdabyinxu if (radioProxy11 == null) { 1822c8c651f856047c6c761de788a14097600701cdabyinxu if (result != null) { 1823c8c651f856047c6c761de788a14097600701cdabyinxu AsyncResult.forMessage(result, null, 1824c8c651f856047c6c761de788a14097600701cdabyinxu CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); 1825c8c651f856047c6c761de788a14097600701cdabyinxu result.sendToTarget(); 1826c8c651f856047c6c761de788a14097600701cdabyinxu } 1827c8c651f856047c6c761de788a14097600701cdabyinxu } else { 1828c8c651f856047c6c761de788a14097600701cdabyinxu RILRequest rr = obtainRequest(RIL_REQUEST_STOP_NETWORK_SCAN, result, 1829c8c651f856047c6c761de788a14097600701cdabyinxu mRILDefaultWorkSource); 1830c8c651f856047c6c761de788a14097600701cdabyinxu 1831c8c651f856047c6c761de788a14097600701cdabyinxu if (RILJ_LOGD) { 1832c8c651f856047c6c761de788a14097600701cdabyinxu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 1833c8c651f856047c6c761de788a14097600701cdabyinxu } 1834c8c651f856047c6c761de788a14097600701cdabyinxu 1835c8c651f856047c6c761de788a14097600701cdabyinxu try { 1836c8c651f856047c6c761de788a14097600701cdabyinxu radioProxy11.stopNetworkScan(rr.mSerial); 1837c8c651f856047c6c761de788a14097600701cdabyinxu } catch (RemoteException | RuntimeException e) { 1838c8c651f856047c6c761de788a14097600701cdabyinxu handleRadioProxyExceptionForRR(rr, "stopNetworkScan", e); 1839c8c651f856047c6c761de788a14097600701cdabyinxu } 1840c8c651f856047c6c761de788a14097600701cdabyinxu } 1841c8c651f856047c6c761de788a14097600701cdabyinxu } 1842c8c651f856047c6c761de788a14097600701cdabyinxu } 1843c8c651f856047c6c761de788a14097600701cdabyinxu 1844c8c651f856047c6c761de788a14097600701cdabyinxu @Override 18455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void startDtmf(char c, Message result) { 18465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 18475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 18485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DTMF_START, result, 18495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 18500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function arg for privacy 18525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 18530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 18555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.startDtmf(rr.mSerial, c + ""); 18565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 18575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "startDtmf", e); 18585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1862cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 18635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void stopDtmf(Message result) { 18645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 18655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 18665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DTMF_STOP, result, 18675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 18680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 18700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 18725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.stopDtmf(rr.mSerial); 18735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 18745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "stopDtmf", e); 18755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 18805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void separateConnection(int gsmIndex, Message result) { 18815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 18825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 18835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SEPARATE_CONNECTION, result, 18845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 18850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 18875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 18885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " gsmIndex = " + gsmIndex); 18895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 18925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.separateConnection(rr.mSerial, gsmIndex); 18935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 18945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "separateConnection", e); 18955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1899cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 19005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getBasebandVersion(Message result) { 19015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 19025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 19035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_BASEBAND_VERSION, result, 19045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 19050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 19070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 19095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getBasebandVersion(rr.mSerial); 19105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 19115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getBasebandVersion", e); 19125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 19175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setMute(boolean enableMute, Message result) { 19185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 19195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 19205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_MUTE, result, 19215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 19220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 19245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 19255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " enableMute = " + enableMute); 19265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19275054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 19285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 19295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setMute(rr.mSerial, enableMute); 19305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 19315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setMute", e); 19325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1936cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 19375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getMute(Message result) { 19385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 19395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 19405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_MUTE, result, 19415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 19420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 19445054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 19455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 19465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getMute(rr.mSerial); 19475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 19485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getMute", e); 19495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1953cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 19545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryCLIP(Message result) { 19555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 19565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 19575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_CLIP, result, 19585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 19590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 19610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 19635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getClip(rr.mSerial); 19645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 19655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryCLIP", e); 19665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 19715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @deprecated 19725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 1973cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 19745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Deprecated 19755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getPDPContextList(Message result) { 19765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe getDataCallList(result); 197703586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla } 197803586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla 197903586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla @Override 19805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getDataCallList(Message result) { 1981a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(result); 1982a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 1983a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_DATA_CALL_LIST, result, 1984a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 19850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1986a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 19870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1988a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 1989a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.getDataCallList(rr.mSerial); 1990a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 1991a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "getDataCallList", e); 1992a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 1993a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 19940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1996cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1997ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian public void invokeOemRilRequestRaw(byte[] data, Message response) { 1998ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian IOemHook oemHookProxy = getOemHookProxy(response); 1999ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (oemHookProxy != null) { 2000ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian RILRequest rr = obtainRequest(RIL_REQUEST_OEM_HOOK_RAW, response, 2001ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian mRILDefaultWorkSource); 2002ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 2003ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (RILJ_LOGD) { 2004ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 2005ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian + "[" + IccUtils.bytesToHexString(data) + "]"); 2006ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 2007ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 2008ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian try { 2009ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian oemHookProxy.sendRequestRaw(rr.mSerial, primitiveArrayToArrayList(data)); 2010ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } catch (RemoteException | RuntimeException e) { 2011ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian handleRadioProxyExceptionForRR(rr, "invokeOemRilRequestRaw", e); 2012ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 2013b8ed5811e5456b64838c198ba7ef7058920e3d4bsqian } else { 2014b8ed5811e5456b64838c198ba7ef7058920e3d4bsqian // OEM Hook service is disabled for P and later devices. 2015b8ed5811e5456b64838c198ba7ef7058920e3d4bsqian // Deprecated OEM Hook APIs will perform dummy before being removed. 2016b8ed5811e5456b64838c198ba7ef7058920e3d4bsqian if (RILJ_LOGD) riljLog("Radio Oem Hook Service is disabled for P and later devices. "); 2017ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 2018ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 2019ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 2020ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian @Override 2021ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian public void invokeOemRilRequestStrings(String[] strings, Message result) { 2022ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian IOemHook oemHookProxy = getOemHookProxy(result); 2023ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (oemHookProxy != null) { 2024ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian RILRequest rr = obtainRequest(RIL_REQUEST_OEM_HOOK_STRINGS, result, 2025ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian mRILDefaultWorkSource); 2026ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 2027ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian String logStr = ""; 2028ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian for (int i = 0; i < strings.length; i++) { 2029ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian logStr = logStr + strings[i] + " "; 2030ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 2031ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian if (RILJ_LOGD) { 2032ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " strings = " 2033ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian + logStr); 2034ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 2035ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 2036ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian try { 2037ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian oemHookProxy.sendRequestStrings(rr.mSerial, 2038ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian new ArrayList<String>(Arrays.asList(strings))); 2039ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } catch (RemoteException | RuntimeException e) { 2040ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian handleRadioProxyExceptionForRR(rr, "invokeOemRilRequestStrings", e); 2041ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 2042b8ed5811e5456b64838c198ba7ef7058920e3d4bsqian } else { 2043b8ed5811e5456b64838c198ba7ef7058920e3d4bsqian // OEM Hook service is disabled for P and later devices. 2044b8ed5811e5456b64838c198ba7ef7058920e3d4bsqian // Deprecated OEM Hook APIs will perform dummy before being removed. 2045b8ed5811e5456b64838c198ba7ef7058920e3d4bsqian if (RILJ_LOGD) riljLog("Radio Oem Hook Service is disabled for P and later devices. "); 2046ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 2047ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian } 2048ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian 2049ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian @Override 20505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setSuppServiceNotifications(boolean enable, Message result) { 20515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 20525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 20535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, result, 20545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 20550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 20575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " enable = " 20585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + enable); 20595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 20625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setSuppServiceNotifications(rr.mSerial, enable); 20635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 20645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setSuppServiceNotifications", e); 20655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 20680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2069cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 20705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void writeSmsToSim(int status, String smsc, String pdu, Message result) { 20715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe status = translateStatus(status); 20725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 20735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 20745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_WRITE_SMS_TO_SIM, result, 20755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 20760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGV) { 20785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 20795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) 20805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " " + status); 20815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsWriteArgs args = new SmsWriteArgs(); 20845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe args.status = status; 20855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe args.smsc = convertNullToEmptyString(smsc); 20865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe args.pdu = convertNullToEmptyString(pdu); 20870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 20895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.writeSmsToSim(rr.mSerial, args); 20905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 20915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "writeSmsToSim", e); 20925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 20950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2096cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 20975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void deleteSmsOnSim(int index, Message result) { 20985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 20995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 21005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DELETE_SMS_ON_SIM, result, 21015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 21020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGV) { 21045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 21055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) + " index = " + index); 21065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 21095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.deleteSmsOnSim(rr.mSerial, index); 21105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 21115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "deleteSmsOnSim", e); 21125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 21150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2116cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 21175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setBandMode(int bandMode, Message result) { 21185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 21195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 21205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_BAND_MODE, result, 21215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 21220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 21245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 21255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " bandMode = " + bandMode); 21265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 21295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setBandMode(rr.mSerial, bandMode); 21305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 21315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setBandMode", e); 21325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 21350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2136cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 21375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryAvailableBandMode(Message result) { 21385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 21395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 21405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE, result, 21415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 21420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 21440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 21465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getAvailableBandModes(rr.mSerial); 21475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 21485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryAvailableBandMode", e); 21495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 21520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2153cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 21545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendEnvelope(String contents, Message result) { 21555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 21565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 21575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, result, 21585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 21590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 21615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " contents = " 21625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + contents); 21635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 21665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendEnvelope(rr.mSerial, convertNullToEmptyString(contents)); 21675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 21685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendEnvelope", e); 21695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 21720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2173cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 21745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendTerminalResponse(String contents, Message result) { 21755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 21765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 21775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, result, 21785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 21790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 21815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " contents = " 2182e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka + (Build.IS_DEBUGGABLE ? contents : censoredTerminalResponse(contents))); 21835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 21865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendTerminalResponseToSim(rr.mSerial, 21875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(contents)); 21885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 21895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendTerminalResponse", e); 21905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 21930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2194e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka private String censoredTerminalResponse(String terminalResponse) { 2195e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka try { 2196e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka byte[] bytes = IccUtils.hexStringToBytes(terminalResponse); 2197e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka if (bytes != null) { 2198e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka List<ComprehensionTlv> ctlvs = ComprehensionTlv.decodeMany(bytes, 0); 2199e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka int from = 0; 2200e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka for (ComprehensionTlv ctlv : ctlvs) { 2201e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka // Find text strings which might be personal information input by user, 2202e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka // then replace it with "********". 2203e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka if (ComprehensionTlvTag.TEXT_STRING.value() == ctlv.getTag()) { 2204e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka byte[] target = Arrays.copyOfRange(ctlv.getRawValue(), from, 2205e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka ctlv.getValueIndex() + ctlv.getLength()); 2206e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka terminalResponse = terminalResponse.toLowerCase().replace( 2207e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka IccUtils.bytesToHexString(target), "********"); 2208e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka } 2209e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka // The text string tag and the length field should also be hidden. 2210e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka from = ctlv.getValueIndex() + ctlv.getLength(); 2211e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka } 2212e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka } 2213e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka } catch (Exception e) { 2214e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka Rlog.e(RILJ_LOG_TAG, "Could not censor the terminal response: " + e); 2215e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka terminalResponse = null; 2216e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka } 2217e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka 2218e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka return terminalResponse; 2219e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka } 2220e411085af17b045bfb3b4c2dcbccd7ba4ad2fb73Yoshiaki Naka 2221cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 22225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendEnvelopeWithStatus(String contents, Message result) { 22235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 22245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 22255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, result, 22265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 22270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 22295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " contents = " 22305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + contents); 22315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 22345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendEnvelopeWithStatus(rr.mSerial, convertNullToEmptyString(contents)); 22355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 22365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendEnvelopeWithStatus", e); 22375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 22400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2241cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 22425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void explicitCallTransfer(Message result) { 22435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 22445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 22455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_EXPLICIT_CALL_TRANSFER, result, 22465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 22470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 22490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 22515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.explicitCallTransfer(rr.mSerial); 22525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 22535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "explicitCallTransfer", e); 22545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 22570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2258cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 22595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setPreferredNetworkType(int networkType , Message result) { 22605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 22615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 22625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, result, 22635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 22640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 22665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 22675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " networkType = " + networkType); 22685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mPreferredNetworkType = networkType; 22705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeSetPreferredNetworkType(mPhoneId, networkType); 22710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 22735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setPreferredNetworkType(rr.mSerial, networkType); 22745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 22755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setPreferredNetworkType", e); 22765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 22790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2280cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 22815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getPreferredNetworkType(Message result) { 22825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 22835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 22845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, result, 22855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 22860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 22880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 22905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getPreferredNetworkType(rr.mSerial); 22915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 22925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getPreferredNetworkType", e); 22935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 22960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2297cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 22985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getNeighboringCids(Message result, WorkSource workSource) { 22995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource = getDeafultWorkSourceIfInvalid(workSource); 23005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, result, 23035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource); 23040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 23060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 23085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getNeighboringCids(rr.mSerial); 23095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 23105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getNeighboringCids", e); 23115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 23140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 23165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setLocationUpdates(boolean enable, Message result) { 23175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_LOCATION_UPDATES, result, 23205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 23215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 23225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 23235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 23245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) + " enable = " + enable); 23255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 23275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 23285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setLocationUpdates(rr.mSerial, enable); 23295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 23305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setLocationUpdates", e); 23315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 23340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 23365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCdmaSubscriptionSource(int cdmaSubscription , Message result) { 23375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, result, 23405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 23410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 23435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 23445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " cdmaSubscription = " + cdmaSubscription); 23455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 23485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCdmaSubscriptionSource(rr.mSerial, cdmaSubscription); 23495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 23505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCdmaSubscriptionSource", e); 23515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 23565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryCdmaRoamingPreference(Message result) { 23575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, result, 23605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 23610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 23630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 23655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCdmaRoamingPreference(rr.mSerial); 23665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 23675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryCdmaRoamingPreference", e); 23685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 23710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 23735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCdmaRoamingPreference(int cdmaRoamingType, Message result) { 23745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, result, 23775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 23785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 23795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 23805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 23815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " cdmaRoamingType = " + cdmaRoamingType); 23825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 23845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 23855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCdmaRoamingPreference(rr.mSerial, cdmaRoamingType); 23865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 23875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCdmaRoamingPreference", e); 23885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 23910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 23935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryTTYMode(Message result) { 23945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_TTY_MODE, result, 23975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 23980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 24000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 24025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getTTYMode(rr.mSerial); 24035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 24045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryTTYMode", e); 24055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 24105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setTTYMode(int ttyMode, Message result) { 24115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 24125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 24135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_TTY_MODE, result, 24145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 24150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 24175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 24185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " ttyMode = " + ttyMode); 24195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 24225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setTTYMode(rr.mSerial, ttyMode); 24235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 24245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setTTYMode", e); 24255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 24280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2429cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 24305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setPreferredVoicePrivacy(boolean enable, Message result) { 24315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 24325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 24335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE, result, 24345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 24350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 24375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 24385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " enable = " + enable); 24395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 24425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setPreferredVoicePrivacy(rr.mSerial, enable); 24435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 24445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setPreferredVoicePrivacy", e); 24455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 24480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2449cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 24505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getPreferredVoicePrivacy(Message result) { 24515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 24525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 24535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE, 24545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe result, mRILDefaultWorkSource); 24550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 24570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 24595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getPreferredVoicePrivacy(rr.mSerial); 24605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 24615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getPreferredVoicePrivacy", e); 24625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 24650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2466cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 24675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendCDMAFeatureCode(String featureCode, Message result) { 24685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 24695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 24705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_FLASH, result, 24715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 24720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 24745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 24755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " featureCode = " + featureCode); 24765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 24795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendCDMAFeatureCode(rr.mSerial, convertNullToEmptyString(featureCode)); 24805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 24815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendCDMAFeatureCode", e); 24825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 24850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2486cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 24875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendBurstDtmf(String dtmfString, int on, int off, Message result) { 24885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 24895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 24905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_BURST_DTMF, result, 24915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 24920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 24945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 24955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " dtmfString = " + dtmfString + " on = " + on + " off = " + off); 24965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 24995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendBurstDtmf(rr.mSerial, convertNullToEmptyString(dtmfString), on, off); 25005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 25015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendBurstDtmf", e); 25025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void constructCdmaSendSmsRilRequest(CdmaSmsMessage msg, byte[] pdu) { 25075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int addrNbrOfDigits; 25085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int subaddrNbrOfDigits; 25095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int bearerDataLength; 25105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ByteArrayInputStream bais = new ByteArrayInputStream(pdu); 25115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe DataInputStream dis = new DataInputStream(bais); 25125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 25135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 25145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.teleserviceId = dis.readInt(); // teleServiceId 25155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.isServicePresent = (byte) dis.readInt() == 1 ? true : false; // servicePresent 25165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.serviceCategory = dis.readInt(); // serviceCategory 25175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.address.digitMode = dis.read(); // address digit mode 25185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.address.numberMode = dis.read(); // address number mode 25195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.address.numberType = dis.read(); // address number type 25205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.address.numberPlan = dis.read(); // address number plan 25215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe addrNbrOfDigits = (byte) dis.read(); 25225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < addrNbrOfDigits; i++) { 25235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.address.digits.add(dis.readByte()); // address_orig_bytes[i] 25245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.subAddress.subaddressType = dis.read(); //subaddressType 25265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.subAddress.odd = (byte) dis.read() == 1 ? true : false; //subaddr odd 25275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe subaddrNbrOfDigits = (byte) dis.read(); 25285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < subaddrNbrOfDigits; i++) { 25295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.subAddress.digits.add(dis.readByte()); //subaddr_orig_bytes[i] 25305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe bearerDataLength = dis.read(); 25335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < bearerDataLength; i++) { 25345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.bearerData.add(dis.readByte()); //bearerData[i] 25355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (IOException ex) { 25375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 25385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("sendSmsCdma: conversion from input stream to object failed: " 25395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + ex); 25405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 25430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2544cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 25455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendCdmaSms(byte[] pdu, Message result) { 25465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 25475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 25485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SEND_SMS, result, 25495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 25500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function arg for privacy 25525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 25530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CdmaSmsMessage msg = new CdmaSmsMessage(); 25555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe constructCdmaSendSmsRilRequest(msg, pdu); 25560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 25585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendCdmaSms(rr.mSerial, msg); 25595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_CDMA, 25605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsSession.Event.Format.SMS_FORMAT_3GPP2); 25615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 25625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendCdmaSms", e); 25635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 25660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2567cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 25685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) { 25695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 25705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 25715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, result, 25725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 25730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 25755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 25765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " success = " + success + " cause = " + cause); 25775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CdmaSmsAck msg = new CdmaSmsAck(); 25805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.errorClass = success ? 0 : 1; 25815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.smsCauseCode = cause; 25820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 25845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.acknowledgeLastIncomingCdmaSms(rr.mSerial, msg); 25855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 25865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "acknowledgeLastIncomingCdmaSms", e); 25875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2591cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 25925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getGsmBroadcastConfig(Message result) { 25935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 25945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 25955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GSM_GET_BROADCAST_CONFIG, result, 25965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 25970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 25990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 26015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getGsmBroadcastConfig(rr.mSerial); 26025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 26035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getGsmBroadcastConfig", e); 26045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 26070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2608cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 26095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message result) { 26105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 26115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 26125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GSM_SET_BROADCAST_CONFIG, result, 26135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 26140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 26165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 26175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " with " + config.length + " configs : "); 26185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < config.length; i++) { 26195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(config[i].toString()); 26205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<GsmBroadcastSmsConfigInfo> configs = new ArrayList<>(); 26240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int numOfConfig = config.length; 26265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe GsmBroadcastSmsConfigInfo info; 26270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < numOfConfig; i++) { 26295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info = new GsmBroadcastSmsConfigInfo(); 26305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.fromServiceId = config[i].getFromServiceId(); 26315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.toServiceId = config[i].getToServiceId(); 26325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.fromCodeScheme = config[i].getFromCodeScheme(); 26335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.toCodeScheme = config[i].getToCodeScheme(); 26345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.selected = config[i].isSelected(); 26355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe configs.add(info); 26365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 26395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setGsmBroadcastConfig(rr.mSerial, configs); 26405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 26415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setGsmBroadcastConfig", e); 26425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 26450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2646cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 26475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setGsmBroadcastActivation(boolean activate, Message result) { 26485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 26495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 26505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GSM_BROADCAST_ACTIVATION, result, 26515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 26520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 26545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 26555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " activate = " + activate); 26565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 26595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setGsmBroadcastActivation(rr.mSerial, activate); 26605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 26615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setGsmBroadcastActivation", e); 26625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 26650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2666cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 26675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getCdmaBroadcastConfig(Message result) { 26685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 26695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 26705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG, result, 26715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 26720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 26740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 26765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCdmaBroadcastConfig(rr.mSerial); 26775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 26785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getCdmaBroadcastConfig", e); 26795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 26820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 26845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message result) { 26855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 26865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 26875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG, result, 26885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 26890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<CdmaBroadcastSmsConfigInfo> halConfigs = new ArrayList<>(); 26910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2692cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan for (CdmaSmsBroadcastConfigInfo config: configs) { 2693cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan for (int i = config.getFromServiceCategory(); 2694cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan i <= config.getToServiceCategory(); 2695cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan i++) { 2696cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan CdmaBroadcastSmsConfigInfo info = new CdmaBroadcastSmsConfigInfo(); 2697cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan info.serviceCategory = i; 2698cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan info.language = config.getLanguage(); 2699cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan info.selected = config.isSelected(); 2700cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan halConfigs.add(info); 2701cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan } 2702cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan } 27030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2704cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan if (RILJ_LOGD) { 2705cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 2706cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan + " with " + halConfigs.size() + " configs : "); 2707cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan for (CdmaBroadcastSmsConfigInfo config : halConfigs) { 2708cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan riljLog(config.toString()); 2709cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan } 27105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27119746fca2d7389f0fce6d5d031d87acd87b9de723Pavel Zhamaitsiak 27125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCdmaBroadcastConfig(rr.mSerial, halConfigs); 27145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCdmaBroadcastConfig", e); 27165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 27190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2720cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 27215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCdmaBroadcastActivation(boolean activate, Message result) { 27225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 27235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 27245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, result, 27255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 27260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 27285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 27295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " activate = " + activate); 27305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCdmaBroadcastActivation(rr.mSerial, activate); 27345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCdmaBroadcastActivation", e); 27365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 27390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2740cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 27415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getCDMASubscription(Message result) { 27425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 27435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 27445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SUBSCRIPTION, result, 27455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 27460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 27480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCDMASubscription(rr.mSerial); 27515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getCDMASubscription", e); 27535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 27560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2757cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 27585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void writeSmsToRuim(int status, String pdu, Message result) { 27595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe status = translateStatus(status); 27605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 27615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 27625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM, result, 27635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 27640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGV) { 27665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 27675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) 27685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " status = " + status); 27695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CdmaSmsWriteArgs args = new CdmaSmsWriteArgs(); 27725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe args.status = status; 27735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe constructCdmaSendSmsRilRequest(args.message, pdu.getBytes()); 27745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 27755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.writeSmsToRuim(rr.mSerial, args); 27775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "writeSmsToRuim", e); 27795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 27820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2783cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 27845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void deleteSmsOnRuim(int index, Message result) { 27855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 27865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 27875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM, result, 27885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 27890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGV) { 27915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 27925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) 27935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " index = " + index); 27945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.deleteSmsOnRuim(rr.mSerial, index); 27985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "deleteSmsOnRuim", e); 28005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2804cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 28055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getDeviceIdentity(Message result) { 28065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 28075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 28085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DEVICE_IDENTITY, result, 28095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 28100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 28120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 28145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getDeviceIdentity(rr.mSerial); 28155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 28165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getDeviceIdentity", e); 28175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2821cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 28225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void exitEmergencyCallbackMode(Message result) { 28235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 28245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 28255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, result, 28265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 28270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 28290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 28315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.exitEmergencyCallbackMode(rr.mSerial); 28325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 28335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "exitEmergencyCallbackMode", e); 28345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2838cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 28395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getSmscAddress(Message result) { 28405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 28415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 28425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_SMSC_ADDRESS, result, 28435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 28440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 28460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 28485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getSmscAddress(rr.mSerial); 28495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 28505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getSmscAddress", e); 28515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2855cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 28565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setSmscAddress(String address, Message result) { 28575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 28585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 28595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_SMSC_ADDRESS, result, 28605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 28610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 28635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 28645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " address = " + address); 28655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 28685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setSmscAddress(rr.mSerial, convertNullToEmptyString(address)); 28695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 28705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setSmscAddress", e); 28715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2875cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 28765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void reportSmsMemoryStatus(boolean available, Message result) { 28775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 28785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 28795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, result, 28805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 28810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 28835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 28845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) + " available = " + available); 28855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 28885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.reportSmsMemoryStatus(rr.mSerial, available); 28895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 28905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "reportSmsMemoryStatus", e); 28910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2895cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 28965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void reportStkServiceIsRunning(Message result) { 2897522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan IRadio radioProxy = getRadioProxy(result); 2898522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan if (radioProxy != null) { 2899522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, result, 2900522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan mRILDefaultWorkSource); 29010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2902522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 29030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2904522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan try { 2905522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan radioProxy.reportStkServiceIsRunning(rr.mSerial); 2906522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan } catch (RemoteException | RuntimeException e) { 2907522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan handleRadioProxyExceptionForRR(rr, "reportStkServiceIsRunning", e); 2908522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan } 2909522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan } 29100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 29110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 29125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 29135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getCdmaSubscriptionSource(Message result) { 29145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 29155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 29165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, result, 29175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 29180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 29195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 29205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 29215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 29225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCdmaSubscriptionSource(rr.mSerial); 29235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 29245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getCdmaSubscriptionSource", e); 292580795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown } 292680795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown } 292780795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown } 292880795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown 29295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 29305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) { 29315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 29325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 29335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU, result, 29345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 29350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 29365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 29375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 29385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " success = " + success); 29395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 2940d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 29415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 29425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.acknowledgeIncomingGsmSmsWithPdu(rr.mSerial, success, 29435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(ackPdu)); 29445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 29455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "acknowledgeIncomingGsmSmsWithPdu", e); 2946d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 2947c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 2948c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 29490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 29505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 29515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getVoiceRadioTechnology(Message result) { 29525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 29535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 29545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_VOICE_RADIO_TECH, result, 29555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 2956c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 29575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 2958c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 29595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 29605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getVoiceRadioTechnology(rr.mSerial); 29615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 29625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getVoiceRadioTechnology", e); 2963c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 2964d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 29655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 2966c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 29675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 29685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getCellInfoList(Message result, WorkSource workSource) { 29695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource = getDeafultWorkSourceIfInvalid(workSource); 2970a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(result); 2971a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 2972a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_GET_CELL_INFO_LIST, result, 2973a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan workSource); 2974c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 2975a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 2976a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 2977a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 2978d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 2979a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 2980a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.getCellInfoList(rr.mSerial); 2981a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 2982a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "getCellInfoList", e); 2983a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 2984a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 29850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 29860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 29875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 29885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCellInfoListRate(int rateInMillis, Message result, WorkSource workSource) { 29895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource = getDeafultWorkSourceIfInvalid(workSource); 29905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 29915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 29925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE, result, 29935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource); 29945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 2995d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe if (RILJ_LOGD) { 29965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 29975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " rateInMillis = " + rateInMillis); 2998d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 29995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 30005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 30015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCellInfoListRate(rr.mSerial, rateInMillis); 30025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 30035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCellInfoListRate", e); 3004c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 3005c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 3006c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 3007c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 30085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void setCellInfoListRate() { 30095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe setCellInfoListRate(Integer.MAX_VALUE, null, mRILDefaultWorkSource); 30105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 30115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 30125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 30138e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public void setInitialAttachApn(DataProfile dataProfile, boolean isRoaming, Message result) { 30148e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 30155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 3016d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe if (radioProxy != null) { 30175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_INITIAL_ATTACH_APN, result, 30185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 30195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 30205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 30218e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + dataProfile); 30225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 30235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 3024d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 30258e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu radioProxy.setInitialAttachApn(rr.mSerial, convertToHalDataProfile(dataProfile), 3026c2d0cec6cc786470359383a5fa179586bdde3858Jack Yu dataProfile.isModemCognitive(), isRoaming); 30270012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 30285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setInitialAttachApn", e); 3029d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 3030d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 30318e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran } 30328e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran 30335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 30345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getImsRegistrationState(Message result) { 30355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 30365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 30375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_IMS_REGISTRATION_STATE, result, 30385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 30390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 30405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 30415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3042a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe } 30430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 30445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 30455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getImsRegistrationState(rr.mSerial); 30465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 30475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getImsRegistrationState", e); 30485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 30495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 30505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 30518e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran 30525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 30535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendImsGsmSms(String smscPdu, String pdu, int retry, int messageRef, 30545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Message result) { 30555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 30565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 30575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_IMS_SEND_SMS, result, 30585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 30598e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran 30605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function args for privacy 30615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 306232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 30635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ImsSmsMessage msg = new ImsSmsMessage(); 30645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.tech = RILConstants.GSM_PHONE; 3065663bd9a35f7826c91357c32453fd94c54797ad8dyouhei yamahata msg.retry = (byte) retry >= 1 ? true : false; 30665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.messageRef = messageRef; 306732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 30685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe GsmSmsMessage gsmMsg = constructGsmSendSmsRilRequest(smscPdu, pdu); 30695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.gsmMessage.add(gsmMsg); 30705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 30715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendImsSms(rr.mSerial, msg); 30725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_IMS, 30735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsSession.Event.Format.SMS_FORMAT_3GPP); 30745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 30755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendImsGsmSms", e); 3076a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe } 30770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 30780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 30790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 30805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 30815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendImsCdmaSms(byte[] pdu, int retry, int messageRef, Message result) { 30825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 30835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 30845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_IMS_SEND_SMS, result, 30855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 30868e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran 30875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function args for privacy 30885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 30895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 30905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ImsSmsMessage msg = new ImsSmsMessage(); 30915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.tech = RILConstants.CDMA_PHONE; 3092663bd9a35f7826c91357c32453fd94c54797ad8dyouhei yamahata msg.retry = (byte) retry >= 1 ? true : false; 30935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.messageRef = messageRef; 30945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 30955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CdmaSmsMessage cdmaMsg = new CdmaSmsMessage(); 30965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe constructCdmaSendSmsRilRequest(cdmaMsg, pdu); 30975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.cdmaMessage.add(cdmaMsg); 30985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 30995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 31005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendImsSms(rr.mSerial, msg); 31015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_IMS, 31023aa8c871462bbee9eb01a3c22afb5dcdd414eab2Sanket Padawe SmsSession.Event.Format.SMS_FORMAT_3GPP2); 31035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 31045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendImsCdmaSms", e); 31050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private SimApdu createSimApdu(int channel, int cla, int instruction, int p1, int p2, int p3, 31105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String data) { 31115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SimApdu msg = new SimApdu(); 31125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.sessionId = channel; 31135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.cla = cla; 31145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.instruction = instruction; 31155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.p1 = p1; 31165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.p2 = p2; 31175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.p3 = p3; 31185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.data = convertNullToEmptyString(data); 31195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return msg; 31207cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt } 31217cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt 31225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 31235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void iccTransmitApduBasicChannel(int cla, int instruction, int p1, int p2, 31245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int p3, String data, Message result) { 31255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 31265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 31275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC, result, 31285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 31290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 3131504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka if (Build.IS_DEBUGGABLE) { 3132504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 3133504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka + " cla = " + cla + " instruction = " + instruction 3134504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka + " p1 = " + p1 + " p2 = " + " p3 = " + p3 + " data = " + data); 3135504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka } else { 3136504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3137504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka } 31385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 31390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SimApdu msg = createSimApdu(0, cla, instruction, p1, p2, p3, data); 31415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 31425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.iccTransmitApduBasicChannel(rr.mSerial, msg); 31435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 31445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "iccTransmitApduBasicChannel", e); 31455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 31465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 31470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 3150c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi public void iccOpenLogicalChannel(String aid, int p2, Message result) { 31515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 31525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 31535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_OPEN_CHANNEL, result, 31545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 31550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 3157504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka if (Build.IS_DEBUGGABLE) { 3158504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " aid = " + aid 3159504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka + " p2 = " + p2); 3160504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka } else { 3161504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3162504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka } 3163060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe } 3164060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe 31655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 3166c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi radioProxy.iccOpenLogicalChannel(rr.mSerial, convertNullToEmptyString(aid), p2); 31675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 31685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "iccOpenLogicalChannel", e); 31697cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt } 31700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 31745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void iccCloseLogicalChannel(int channel, Message result) { 31755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 31765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 31775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_CLOSE_CHANNEL, result, 31785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 31795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 31805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 31815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " channel = " 31825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + channel); 31830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 31865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.iccCloseLogicalChannel(rr.mSerial, channel); 31875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 31885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "iccCloseLogicalChannel", e); 31890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 31945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void iccTransmitApduLogicalChannel(int channel, int cla, int instruction, 31955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int p1, int p2, int p3, String data, 31965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Message result) { 31975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (channel <= 0) { 31985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe throw new RuntimeException( 31995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe "Invalid channel in iccTransmitApduLogicalChannel: " + channel); 32000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 32035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 32045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL, result, 32055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 32060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 3208504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka if (Build.IS_DEBUGGABLE) { 3209504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " channel = " 3210504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka + channel + " cla = " + cla + " instruction = " + instruction 3211504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka + " p1 = " + p1 + " p2 = " + " p3 = " + p3 + " data = " + data); 3212504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka } else { 3213504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3214504efb8bb7ecb120ee0ea38d60b0ad4dafd40cabMasatoshi Akasaka } 32155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 3216d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe 32175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SimApdu msg = createSimApdu(channel, cla, instruction, p1, p2, p3, data); 32185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 32195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 32205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.iccTransmitApduLogicalChannel(rr.mSerial, msg); 32215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 32225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "iccTransmitApduLogicalChannel", e); 3223d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 3224d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 3225d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 3226d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe 32275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 32285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void nvReadItem(int itemID, Message result) { 32295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 32305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 32315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_NV_READ_ITEM, result, 32325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 32330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 32355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 32365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " itemId = " + itemID); 32375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 32405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.nvReadItem(rr.mSerial, itemID); 32415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 32425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "nvReadItem", e); 32435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 32485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void nvWriteItem(int itemId, String itemValue, Message result) { 32495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 32505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 32515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_NV_WRITE_ITEM, result, 32528e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran mRILDefaultWorkSource); 32535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 3254a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe if (RILJ_LOGD) { 32555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 32565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " itemId = " + itemId + " itemValue = " + itemValue); 3257a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe } 3258060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe 32595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe NvWriteItem item = new NvWriteItem(); 32605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe item.itemId = itemId; 32615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe item.value = convertNullToEmptyString(itemValue); 3262060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe 32635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 32645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.nvWriteItem(rr.mSerial, item); 32655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 32665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "nvWriteItem", e); 32675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 32725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void nvWriteCdmaPrl(byte[] preferredRoamingList, Message result) { 32735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 32745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 32755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_NV_WRITE_CDMA_PRL, result, 32765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 3277d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 32785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 32795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 32805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " PreferredRoamingList = 0x" 32815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + IccUtils.bytesToHexString(preferredRoamingList)); 32820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<Byte> arrList = new ArrayList<>(); 32855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < preferredRoamingList.length; i++) { 32865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe arrList.add(preferredRoamingList[i]); 32875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 32905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.nvWriteCdmaPrl(rr.mSerial, arrList); 32915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 32925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "nvWriteCdmaPrl", e); 32930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 32985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void nvResetConfig(int resetType, Message result) { 32995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 33005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 33015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_NV_RESET_CONFIG, result, 33025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 330303586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla 33045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 33055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 33065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " resetType = " + resetType); 3307f860a3f42f87c9c8572623aff33349168d689477Wink Saville } 3308f860a3f42f87c9c8572623aff33349168d689477Wink Saville 33095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 3310e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C radioProxy.nvResetConfig(rr.mSerial, convertToHalResetNvType(resetType)); 33115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 33125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "nvResetConfig", e); 33137cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt } 33140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 33155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 33165054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 33175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 33185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setUiccSubscription(int slotId, int appIndex, int subId, 33195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int subStatus, Message result) { 33205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 33215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 33225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_UICC_SUBSCRIPTION, result, 33235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 33245054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 33255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 33265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 33275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " slot = " + slotId + " appIndex = " + appIndex 33285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " subId = " + subId + " subStatus = " + subStatus); 33295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 33300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SelectUiccSub info = new SelectUiccSub(); 33325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.slot = slotId; 33335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.appIndex = appIndex; 33345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.subType = subId; 33355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.actStatus = subStatus; 33363ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt 33375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 33385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setUiccSubscription(rr.mSerial, info); 33395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 33405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setUiccSubscription", e); 33415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 33423ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt } 33433ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt } 33443ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt 33455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 33465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setDataAllowed(boolean allowed, Message result) { 33475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 33485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 33495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ALLOW_DATA, result, 33505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 33510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 33535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 33545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " allowed = " + allowed); 33550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 33565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 33575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 33585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setDataAllowed(rr.mSerial, allowed); 33595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 33605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setDataAllowed", e); 3361a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 33620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 33630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 33640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 3366c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void getHardwareConfig(Message result) { 3367a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(result); 3368a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 3369a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_GET_HARDWARE_CONFIG, result, 3370a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 3371e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan 3372a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan // Do not log function args for privacy 3373a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3374e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan 3375a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 3376a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.getHardwareConfig(rr.mSerial); 3377a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 3378a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "getHardwareConfig", e); 3379a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3380a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 338121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 33821bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla 33835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 33845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void requestIccSimAuthentication(int authContext, String data, String aid, 33855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Message result) { 33865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 33875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 33885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_AUTHENTICATION, result, 33895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 33900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function args for privacy 33925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 33935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 33945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 33955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.requestIccSimAuthentication(rr.mSerial, 33965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe authContext, 33975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(data), 33985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 33995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 34005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "requestIccSimAuthentication", e); 34015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 34068e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public void setDataProfile(DataProfile[] dps, boolean isRoaming, Message result) { 34078e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 34085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 34095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 34105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_DATA_PROFILE, result, 34115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 34120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 34145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 34158e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu + " with data profiles : "); 34168e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu for (DataProfile profile : dps) { 34178e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu riljLog(profile.toString()); 34185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34218e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu ArrayList<DataProfileInfo> dpis = new ArrayList<>(); 34228e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu for (DataProfile dp : dps) { 34238e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpis.add(convertToHalDataProfile(dp)); 34245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 34278e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu radioProxy.setDataProfile(rr.mSerial, dpis, isRoaming); 34285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 34295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setDataProfile", e); 34305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 343133cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu } 34320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 34355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void requestShutdown(Message result) { 34365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 34375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 34385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SHUTDOWN, result, 34395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 34400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 34425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 34435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 34465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.requestShutdown(rr.mSerial); 34475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 34485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "requestShutdown", e); 34495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 34545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getRadioCapability(Message response) { 3455a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(response); 3456a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 3457a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_GET_RADIO_CAPABILITY, response, 3458a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 34590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3460a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 3461a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3462a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 34630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3464a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 3465a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.getRadioCapability(rr.mSerial); 3466a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 3467a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "getRadioCapability", e); 3468a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3469a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 34700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 34735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setRadioCapability(RadioCapability rc, Message response) { 3474a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(response); 3475a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 3476a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_SET_RADIO_CAPABILITY, response, 3477a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 34780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3479a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 3480a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 3481a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan + " RadioCapability = " + rc.toString()); 3482a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 34830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3484a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan android.hardware.radio.V1_0.RadioCapability halRc = 3485a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan new android.hardware.radio.V1_0.RadioCapability(); 348671173a876ff48d65e013f0a92e920d90fa7a26c7Sanket Padawe 3487a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan halRc.session = rc.getSession(); 3488a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan halRc.phase = rc.getPhase(); 3489a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan halRc.raf = rc.getRadioAccessFamily(); 3490a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan halRc.logicalModemUuid = convertNullToEmptyString(rc.getLogicalModemUuid()); 3491a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan halRc.status = rc.getStatus(); 3492a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 3493a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 3494a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.setRadioCapability(rr.mSerial, halRc); 3495a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (Exception e) { 3496a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "setRadioCapability", e); 3497a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3498a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 34990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 35025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void startLceService(int reportIntervalMs, boolean pullMode, Message result) { 35035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 35047afdb3942adde7efd33b5af5556fead92243e49cNathan Harold android.hardware.radio.V1_2.IRadio radioProxy12 = 35057afdb3942adde7efd33b5af5556fead92243e49cNathan Harold android.hardware.radio.V1_2.IRadio.castFrom(radioProxy); 35067afdb3942adde7efd33b5af5556fead92243e49cNathan Harold if (radioProxy12 != null) { 35077afdb3942adde7efd33b5af5556fead92243e49cNathan Harold // We have a 1.2 or later radio, so the LCE 1.0 LCE service control path is unused. 35087afdb3942adde7efd33b5af5556fead92243e49cNathan Harold // Instead the LCE functionality is always-on and provides unsolicited indications. 35097afdb3942adde7efd33b5af5556fead92243e49cNathan Harold return; 35107afdb3942adde7efd33b5af5556fead92243e49cNathan Harold } 35117afdb3942adde7efd33b5af5556fead92243e49cNathan Harold 35125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 35135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_START_LCE, result, 35145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 35150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 35175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 35185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " reportIntervalMs = " + reportIntervalMs + " pullMode = " + pullMode); 35195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 35200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 35225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.startLceService(rr.mSerial, reportIntervalMs, pullMode); 35235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 35245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "startLceService", e); 35255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 35265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 35270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 35305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void stopLceService(Message result) { 35315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 35327afdb3942adde7efd33b5af5556fead92243e49cNathan Harold android.hardware.radio.V1_2.IRadio radioProxy12 = 35337afdb3942adde7efd33b5af5556fead92243e49cNathan Harold android.hardware.radio.V1_2.IRadio.castFrom(radioProxy); 35347afdb3942adde7efd33b5af5556fead92243e49cNathan Harold if (radioProxy12 != null) { 35357afdb3942adde7efd33b5af5556fead92243e49cNathan Harold // We have a 1.2 or later radio, so the LCE 1.0 LCE service control is unused. 35367afdb3942adde7efd33b5af5556fead92243e49cNathan Harold // Instead the LCE functionality is always-on and provides unsolicited indications. 35377afdb3942adde7efd33b5af5556fead92243e49cNathan Harold return; 35387afdb3942adde7efd33b5af5556fead92243e49cNathan Harold } 35397afdb3942adde7efd33b5af5556fead92243e49cNathan Harold 35405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 35415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_STOP_LCE, result, 35425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 35430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 35455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 35465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 35470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 35495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.stopLceService(rr.mSerial); 35505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 35515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "stopLceService", e); 35525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 35535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 35540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35567afdb3942adde7efd33b5af5556fead92243e49cNathan Harold /** 35577afdb3942adde7efd33b5af5556fead92243e49cNathan Harold * This will only be called if the LCE service is started in PULL mode, which is 35587afdb3942adde7efd33b5af5556fead92243e49cNathan Harold * only enabled when using Radio HAL versions 1.1 and earlier. 35597afdb3942adde7efd33b5af5556fead92243e49cNathan Harold * 35607afdb3942adde7efd33b5af5556fead92243e49cNathan Harold * It is still possible for vendors to override this behavior and use the 1.1 version 35617afdb3942adde7efd33b5af5556fead92243e49cNathan Harold * of LCE; however, this is strongly discouraged and this functionality will be removed 35627afdb3942adde7efd33b5af5556fead92243e49cNathan Harold * when HAL 1.x support is dropped. 35637afdb3942adde7efd33b5af5556fead92243e49cNathan Harold * 35647afdb3942adde7efd33b5af5556fead92243e49cNathan Harold * @deprecated HAL 1.2 and later use an always-on LCE that relies on indications. 35657afdb3942adde7efd33b5af5556fead92243e49cNathan Harold */ 35667afdb3942adde7efd33b5af5556fead92243e49cNathan Harold @Deprecated 35675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 35685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void pullLceData(Message response) { 3569a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(response); 3570a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 3571a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_PULL_LCEDATA, response, 3572a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 3573a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 3574a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 3575a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3576a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3577a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 3578a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 3579a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.pullLceData(rr.mSerial); 3580a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 3581a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "pullLceData", e); 3582a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 35835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 35840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 35875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getModemActivityInfo(Message result) { 35885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 35895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 35905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_ACTIVITY_INFO, result, 35915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 3592cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande 35935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 35945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 35955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 3596cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande 35975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 35985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getModemActivityInfo(rr.mSerial); 3599cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande 3600d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan Message msg = mRilHandler.obtainMessage(EVENT_BLOCKING_RESPONSE_TIMEOUT); 36015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.obj = null; 36025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.arg1 = rr.mSerial; 3603d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan mRilHandler.sendMessageDelayed(msg, DEFAULT_BLOCKING_MESSAGE_RESPONSE_TIMEOUT_MS); 36045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 36055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getModemActivityInfo", e); 36065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 36075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 3608cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande 36090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 36135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message result) { 36143953d6e1205524261e887cea2b283d05213e61c1Sanket Padawe checkNotNull(carriers, "Allowed carriers list cannot be null."); 36155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 36165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 36175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_ALLOWED_CARRIERS, result, 36185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 36190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 36215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String logStr = ""; 36225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < carriers.size(); i++) { 36235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe logStr = logStr + carriers.get(i) + " "; 36245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 3625e240e9e8f8ae0e9c0aebae3a860653c1dba08495Meng Wang riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " carriers = " 36265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + logStr); 36270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 36295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe boolean allAllowed; 36305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (carriers.size() == 0) { 36315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe allAllowed = true; 36325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 36335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe allAllowed = false; 36340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CarrierRestrictions carrierList = new CarrierRestrictions(); 36365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 36375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (CarrierIdentifier ci : carriers) { /* allowed carriers */ 36385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Carrier c = new Carrier(); 36399f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan c.mcc = convertNullToEmptyString(ci.getMcc()); 36409f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan c.mnc = convertNullToEmptyString(ci.getMnc()); 36415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int matchType = CarrierIdentifier.MatchType.ALL; 36425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String matchData = null; 36435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!TextUtils.isEmpty(ci.getSpn())) { 36445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchType = CarrierIdentifier.MatchType.SPN; 36455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchData = ci.getSpn(); 36465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (!TextUtils.isEmpty(ci.getImsi())) { 36475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchType = CarrierIdentifier.MatchType.IMSI_PREFIX; 36485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchData = ci.getImsi(); 36495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (!TextUtils.isEmpty(ci.getGid1())) { 36505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchType = CarrierIdentifier.MatchType.GID1; 36515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchData = ci.getGid1(); 36525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (!TextUtils.isEmpty(ci.getGid2())) { 36535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchType = CarrierIdentifier.MatchType.GID2; 36545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchData = ci.getGid2(); 36558f19c6d717bf0e00aeb33552a570a0f60af0ce3bAmit Mahajan } 36565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe c.matchType = matchType; 36579f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan c.matchData = convertNullToEmptyString(matchData); 36585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe carrierList.allowedCarriers.add(c); 3659a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 36600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36619f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan /* TODO: add excluded carriers */ 36620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 36645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setAllowedCarriers(rr.mSerial, allAllowed, carrierList); 36655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 36665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setAllowedCarriers", e); 36675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 36680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 36725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getAllowedCarriers(Message result) { 36735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 36745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 36755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_ALLOWED_CARRIERS, result, 36765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 36770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 36795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3680a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 36815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 36825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 36835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getAllowedCarriers(rr.mSerial); 36845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 36855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getAllowedCarriers", e); 36860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 3691baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu public void sendDeviceState(int stateType, boolean state, 3692baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu Message result) { 3693baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu IRadio radioProxy = getRadioProxy(result); 3694baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu if (radioProxy != null) { 3695baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu RILRequest rr = obtainRequest(RIL_REQUEST_SEND_DEVICE_STATE, result, 3696baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu mRILDefaultWorkSource); 3697baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3698baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu if (RILJ_LOGD) { 3699baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " 3700baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu + stateType + ":" + state); 3701baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3702baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3703baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu try { 3704baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu radioProxy.sendDeviceState(rr.mSerial, stateType, state); 3705baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } catch (RemoteException | RuntimeException e) { 3706baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu handleRadioProxyExceptionForRR(rr, "sendDeviceState", e); 3707baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3708baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3709baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3710baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3711baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu @Override 3712baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu public void setUnsolResponseFilter(int filter, Message result) { 3713baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu IRadio radioProxy = getRadioProxy(result); 3714baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu if (radioProxy != null) { 3715baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu RILRequest rr = obtainRequest(RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER, result, 3716baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu mRILDefaultWorkSource); 3717baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3718baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu if (RILJ_LOGD) { 3719baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + filter); 3720baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3721baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3722c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach android.hardware.radio.V1_2.IRadio radioProxy12 = 3723c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach android.hardware.radio.V1_2.IRadio.castFrom(radioProxy); 3724c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 3725c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach if (radioProxy12 != null) { 3726c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach try { 3727c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach radioProxy12.setIndicationFilter_1_2(rr.mSerial, filter); 3728c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } catch (RemoteException | RuntimeException e) { 3729c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach handleRadioProxyExceptionForRR(rr, "setIndicationFilter_1_2", e); 3730c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3731c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } else { 3732c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach try { 3733c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach int filter10 = filter & IndicationFilter.ALL; 3734c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach radioProxy.setIndicationFilter(rr.mSerial, filter10); 3735c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } catch (RemoteException | RuntimeException e) { 3736c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach handleRadioProxyExceptionForRR(rr, "setIndicationFilter", e); 3737c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3738c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3739c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3740c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3741c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 3742c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach @Override 3743c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach public void setSignalStrengthReportingCriteria(int hysteresisMs, int hysteresisDb, 3744c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach int[] thresholdsDbm, int ran, Message result) { 3745c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach IRadio radioProxy = getRadioProxy(result); 3746c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach if (radioProxy != null) { 3747c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach android.hardware.radio.V1_2.IRadio radioProxy12 = 3748c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach android.hardware.radio.V1_2.IRadio.castFrom(radioProxy); 3749c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach if (radioProxy12 == null) { 3750c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach riljLoge("setSignalStrengthReportingCriteria ignored. RadioProxy 1.2 is null!"); 3751c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return; 3752c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3753c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 3754c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach RILRequest rr = obtainRequest(RIL_REQUEST_SET_SIGNAL_STRENGTH_REPORTING_CRITERIA, 3755c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach result, mRILDefaultWorkSource); 3756c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 3757c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach if (RILJ_LOGD) { 3758c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3759c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3760c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 3761baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu try { 3762c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach radioProxy12.setSignalStrengthReportingCriteria(rr.mSerial, hysteresisMs, 3763c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach hysteresisDb, primitiveArrayToArrayList(thresholdsDbm), 3764c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach convertRanToHalRan(ran)); 3765baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } catch (RemoteException | RuntimeException e) { 3766c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach handleRadioProxyExceptionForRR(rr, "setSignalStrengthReportingCriteria", e); 3767baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3768baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3769baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3770baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3771baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu @Override 3772c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach public void setLinkCapacityReportingCriteria(int hysteresisMs, int hysteresisDlKbps, 3773c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach int hysteresisUlKbps, int[] thresholdsDlKbps, int[] thresholdsUlKbps, int ran, 3774c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach Message result) { 3775c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach IRadio radioProxy = getRadioProxy(result); 3776c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach if (radioProxy != null) { 3777c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach android.hardware.radio.V1_2.IRadio radioProxy12 = 3778c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach android.hardware.radio.V1_2.IRadio.castFrom(radioProxy); 3779c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach if (radioProxy12 == null) { 3780c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach riljLoge("setLinkCapacityReportingCriteria ignored. RadioProxy 1.2 is null!"); 3781c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return; 3782c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3783c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 3784c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach RILRequest rr = obtainRequest(RIL_REQUEST_SET_LINK_CAPACITY_REPORTING_CRITERIA, 3785c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach result, mRILDefaultWorkSource); 3786c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 3787c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach if (RILJ_LOGD) { 3788c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3789c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3790c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 3791c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach try { 3792c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach radioProxy12.setLinkCapacityReportingCriteria(rr.mSerial, hysteresisMs, 3793c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach hysteresisDlKbps, hysteresisUlKbps, 3794c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach primitiveArrayToArrayList(thresholdsDlKbps), 3795c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach primitiveArrayToArrayList(thresholdsUlKbps), convertRanToHalRan(ran)); 3796c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } catch (RemoteException | RuntimeException e) { 3797c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach handleRadioProxyExceptionForRR(rr, "setLinkCapacityReportingCriteria", e); 3798c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3799c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3800c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3801c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 3802c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach private static int convertRanToHalRan(int radioAccessNetwork) { 3803c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach switch (radioAccessNetwork) { 3804c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach case AccessNetworkType.GERAN: 3805c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return AccessNetwork.GERAN; 3806c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach case AccessNetworkType.UTRAN: 3807c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return AccessNetwork.UTRAN; 3808c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach case AccessNetworkType.EUTRAN: 3809c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return AccessNetwork.EUTRAN; 3810c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach case AccessNetworkType.CDMA2000: 3811c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return AccessNetwork.CDMA2000; 3812c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach case AccessNetworkType.IWLAN: 3813c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return AccessNetwork.IWLAN; 3814c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach case AccessNetworkType.UNKNOWN: 3815c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach default: 3816c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return 0; 3817c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3818c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 3819c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 3820c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach @Override 38212d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen public void setSimCardPower(int state, Message result) { 382299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu IRadio radioProxy = getRadioProxy(result); 382399607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu if (radioProxy != null) { 382499607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu RILRequest rr = obtainRequest(RIL_REQUEST_SET_SIM_CARD_POWER, result, 382599607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu mRILDefaultWorkSource); 382699607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu 382799607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu if (RILJ_LOGD) { 38282d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + state); 382999607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu } 38302d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen android.hardware.radio.V1_1.IRadio radioProxy11 = 38312d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen android.hardware.radio.V1_1.IRadio.castFrom(radioProxy); 38322d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen if (radioProxy11 == null) { 38332d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen try { 38342d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen switch (state) { 38352d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen case TelephonyManager.CARD_POWER_DOWN: { 38362d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen radioProxy.setSimCardPower(rr.mSerial, false); 38372d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen break; 38382d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen } 38392d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen case TelephonyManager.CARD_POWER_UP: { 38402d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen radioProxy.setSimCardPower(rr.mSerial, true); 38412d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen break; 38422d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen } 38432d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen default: { 38442d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen if (result != null) { 38452d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen AsyncResult.forMessage(result, null, 38462d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); 38472d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen result.sendToTarget(); 38482d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen } 38492d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen } 38502d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen } 38512d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen } catch (RemoteException | RuntimeException e) { 38522d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen handleRadioProxyExceptionForRR(rr, "setSimCardPower", e); 38532d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen } 38542d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen } else { 38552d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen try { 38562d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen radioProxy11.setSimCardPower_1_1(rr.mSerial, state); 38572d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen } catch (RemoteException | RuntimeException e) { 38582d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen handleRadioProxyExceptionForRR(rr, "setSimCardPower", e); 38592d4f7c72eb95807a2235068dde9c4c98cda2f626Grace Chen } 386099607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu } 386199607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu } 386299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu } 386399607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu 386499607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu @Override 38659179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar public void setCarrierInfoForImsiEncryption(ImsiEncryptionInfo imsiEncryptionInfo, 38663dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar Message result) { 38679179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar checkNotNull(imsiEncryptionInfo, "ImsiEncryptionInfo cannot be null."); 38683dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar IRadio radioProxy = getRadioProxy(result); 38693dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar if (radioProxy != null) { 38703dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar android.hardware.radio.V1_1.IRadio radioProxy11 = 38713dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar android.hardware.radio.V1_1.IRadio.castFrom(radioProxy); 38723dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar if (radioProxy11 == null) { 38733dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar if (result != null) { 38743dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar AsyncResult.forMessage(result, null, 38753dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); 38763dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar result.sendToTarget(); 38773dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar } 38783dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar } else { 38793dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar RILRequest rr = obtainRequest(RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION, result, 38803dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar mRILDefaultWorkSource); 38813dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 38823dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar 38833dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar try { 38849179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar android.hardware.radio.V1_1.ImsiEncryptionInfo halImsiInfo = 38859179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar new android.hardware.radio.V1_1.ImsiEncryptionInfo(); 38869179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar halImsiInfo.mnc = imsiEncryptionInfo.getMnc(); 38879179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar halImsiInfo.mcc = imsiEncryptionInfo.getMcc(); 38889179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar halImsiInfo.keyIdentifier = imsiEncryptionInfo.getKeyIdentifier(); 38899179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar if (imsiEncryptionInfo.getExpirationTime() != null) { 38909179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar halImsiInfo.expirationTime = 38919179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar imsiEncryptionInfo.getExpirationTime().getTime(); 38929179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar } 38939179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar for (byte b : imsiEncryptionInfo.getPublicKey().getEncoded()) { 38949179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar halImsiInfo.carrierKey.add(new Byte(b)); 38959179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar } 38969179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar 38973dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar radioProxy11.setCarrierInfoForImsiEncryption( 38989179967a8da4955d6d8c6e2bbc6293d4c451b942pkanwar rr.mSerial, halImsiInfo); 38993dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar } catch (RemoteException | RuntimeException e) { 39003dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar handleRadioProxyExceptionForRR(rr, "setCarrierInfoForImsiEncryption", e); 39013dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar } 39023dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar } 39033dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar } 39043dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar } 39053dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar 39063dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar @Override 3907f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold public void startNattKeepalive( 3908f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold int contextId, KeepalivePacketData packetData, int intervalMillis, Message result) { 3909f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold checkNotNull(packetData, "KeepaliveRequest cannot be null."); 3910f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold IRadio radioProxy = getRadioProxy(result); 3911f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold if (radioProxy == null) { 3912f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold riljLoge("Radio Proxy object is null!"); 3913f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold return; 3914f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3915f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3916f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold android.hardware.radio.V1_1.IRadio radioProxy11 = 3917f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold android.hardware.radio.V1_1.IRadio.castFrom(radioProxy); 3918f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold if (radioProxy11 == null) { 3919f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold if (result != null) { 3920f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold AsyncResult.forMessage(result, null, 3921f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); 3922f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold result.sendToTarget(); 3923f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3924f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold return; 3925f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3926f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3927f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold RILRequest rr = obtainRequest( 3928f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold RIL_REQUEST_START_KEEPALIVE, result, mRILDefaultWorkSource); 3929f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3930f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3931f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3932f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold try { 3933f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold android.hardware.radio.V1_1.KeepaliveRequest req = 3934f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold new android.hardware.radio.V1_1.KeepaliveRequest(); 3935f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3936f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold req.cid = contextId; 3937f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3938f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold if (packetData.dstAddress instanceof Inet4Address) { 3939f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold req.type = android.hardware.radio.V1_1.KeepaliveType.NATT_IPV4; 3940f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } else if (packetData.dstAddress instanceof Inet6Address) { 3941f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold req.type = android.hardware.radio.V1_1.KeepaliveType.NATT_IPV6; 3942f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } else { 3943f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold AsyncResult.forMessage(result, null, 3944f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold CommandException.fromRilErrno(INVALID_ARGUMENTS)); 3945f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold result.sendToTarget(); 3946f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold return; 3947f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3948f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3949f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold appendPrimitiveArrayToArrayList( 3950f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold packetData.srcAddress.getAddress(), req.sourceAddress); 3951f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold req.sourcePort = packetData.srcPort; 3952f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold appendPrimitiveArrayToArrayList( 3953f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold packetData.dstAddress.getAddress(), req.destinationAddress); 3954f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold req.destinationPort = packetData.dstPort; 3955f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3956f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold radioProxy11.startKeepalive(rr.mSerial, req); 3957f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } catch (RemoteException | RuntimeException e) { 3958f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold handleRadioProxyExceptionForRR(rr, "startNattKeepalive", e); 3959f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3960f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3961f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3962f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold @Override 3963f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold public void stopNattKeepalive(int sessionHandle, Message result) { 3964f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold IRadio radioProxy = getRadioProxy(result); 3965f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold if (radioProxy == null) { 3966f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold Rlog.e(RIL.RILJ_LOG_TAG, "Radio Proxy object is null!"); 3967f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold return; 3968f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3969f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3970f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold android.hardware.radio.V1_1.IRadio radioProxy11 = 3971f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold android.hardware.radio.V1_1.IRadio.castFrom(radioProxy); 3972f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold if (radioProxy11 == null) { 3973f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold if (result != null) { 3974f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold AsyncResult.forMessage(result, null, 3975f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); 3976f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold result.sendToTarget(); 3977f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3978f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold return; 3979f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3980f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3981f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold RILRequest rr = obtainRequest( 3982f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold RIL_REQUEST_STOP_KEEPALIVE, result, mRILDefaultWorkSource); 3983f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3984f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3985f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3986f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold try { 3987f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold radioProxy11.stopKeepalive(rr.mSerial, sessionHandle); 3988f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } catch (RemoteException | RuntimeException e) { 3989f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold handleRadioProxyExceptionForRR(rr, "stopNattKeepalive", e); 3990f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3991f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 3992f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 3993f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold @Override 39945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getIMEI(Message result) { 3995522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("getIMEI not expected to be called"); 39960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 39970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 39985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 39995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getIMEISV(Message result) { 4000522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("getIMEISV not expected to be called"); 40010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 40020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 40035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 40045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @deprecated 40055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 40065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Deprecated 40075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 40085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getLastPdpFailCause(Message result) { 4009522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("getLastPdpFailCause not expected to be called"); 40100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 40110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 40125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 40135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * The preferred new alternative to getLastPdpFailCause 40145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 40155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 40165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getLastDataCallFailCause(Message result) { 4017522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("getLastDataCallFailCause not expected to be called"); 40185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 40215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * Translates EF_SMS status bits to a status value compatible with 40225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * SMS AT commands. See TS 27.005 3.1. 40235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 40245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private int translateStatus(int status) { 40255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch(status & 0x7) { 40265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case SmsManager.STATUS_ON_ICC_READ: 40275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return 1; 40285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case SmsManager.STATUS_ON_ICC_UNREAD: 40295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return 0; 40305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case SmsManager.STATUS_ON_ICC_SENT: 40315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return 3; 40325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case SmsManager.STATUS_ON_ICC_UNSENT: 40335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return 2; 40340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 40355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Default to READ. 40375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return 1; 40380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 40390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 40405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 40415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void resetRadio(Message result) { 4042522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("resetRadio not expected to be called"); 40435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 40465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * {@inheritDoc} 40475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 40485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 40495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void handleCallSetupRequestFromSim(boolean accept, Message result) { 40505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 40515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 40525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM, 40535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe result, mRILDefaultWorkSource); 40545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 40565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 40570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 40580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 40595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 40605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.handleStkCallSetupRequestFromSim(rr.mSerial, accept); 40615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 40625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getAllowedCarriers", e); 40635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 40655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 40675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe //***** Private Methods 40685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 40705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * This is a helper function to be called when a RadioIndication callback is called. 40715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * It takes care of acquiring wakelock and sending ack if needed. 40725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param indicationType RadioIndicationType received 40735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 40745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void processIndication(int indicationType) { 40755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (indicationType == RadioIndicationType.UNSOLICITED_ACK_EXP) { 40765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sendAck(); 40775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog("Unsol response received; Sending ack to ril.cpp"); 40785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 40795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // ack is not expected to be sent back. Nothing is required to be done here. 40805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 40835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void processRequestAck(int serial) { 40845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr; 40855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mRequestList) { 40865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr = mRequestList.get(serial); 40875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (rr == null) { 40895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.w(RIL.RILJ_LOG_TAG, "processRequestAck: Unexpected solicited ack response! " 40905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + "serial: " + serial); 40915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 40925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe decrementWakeLock(rr); 40935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RIL.RILJ_LOGD) { 40945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + " Ack < " + RIL.requestToString(rr.mRequest)); 40955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 40995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 41005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * This is a helper function to be called when a RadioResponse callback is called. 41015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * It takes care of acks, wakelocks, and finds and returns RILRequest corresponding to the 41025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * response if one is found. 41035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param responseInfo RadioResponseInfo received in response callback 41045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @return RILRequest corresponding to the response 41055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 4106c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @VisibleForTesting 4107c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public RILRequest processResponse(RadioResponseInfo responseInfo) { 41085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int serial = responseInfo.serial; 41095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int error = responseInfo.error; 41105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int type = responseInfo.type; 41115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 4112a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = null; 4113a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 4114a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (type == RadioResponseType.SOLICITED_ACK) { 4115a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan synchronized (mRequestList) { 4116a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan rr = mRequestList.get(serial); 4117a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 4118a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (rr == null) { 4119a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan Rlog.w(RILJ_LOG_TAG, "Unexpected solicited ack response! sn: " + serial); 4120a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } else { 4121a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan decrementWakeLock(rr); 4122a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 4123a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan riljLog(rr.serialString() + " Ack < " + requestToString(rr.mRequest)); 4124a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 4125a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 4126a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan return rr; 4127a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 4128a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 4129a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan rr = findAndRemoveRequestFromList(serial); 41305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (rr == null) { 41315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.e(RIL.RILJ_LOG_TAG, "processResponse: Unexpected response! serial: " + serial 41325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " error: " + error); 41335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return null; 41340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 41350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 41365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Time logging for RIL command and storing it in TelephonyHistogram. 41375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe addToRilHistogram(rr); 41380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 41395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (type == RadioResponseType.SOLICITED_ACK_EXP) { 41405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sendAck(); 41415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RIL.RILJ_LOGD) { 41425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("Response received for " + rr.serialString() + " " 41435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + RIL.requestToString(rr.mRequest) + " Sending ack to ril.cpp"); 41440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 41455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 41465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // ack sent for SOLICITED_ACK_EXP above; nothing to do for SOLICITED response 41475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 41495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Here and below fake RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, see b/7255789. 41505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // This is needed otherwise we don't automatically transition to the main lock 41515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // screen when the pin or puk is entered incorrectly. 41525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch (rr.mRequest) { 41535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PUK: 41545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PUK2: 41555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mIccStatusChangedRegistrants != null) { 41565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 41575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("ON enter sim puk fakeSimStatusChanged: reg count=" 41585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + mIccStatusChangedRegistrants.size()); 41595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mIccStatusChangedRegistrants.notifyRegistrants(); 41615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 41635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SHUTDOWN: 41645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe setRadioState(RadioState.RADIO_UNAVAILABLE); 41655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 41665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 41685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (error != RadioError.NONE) { 41695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch (rr.mRequest) { 41705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PIN: 41715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PIN2: 41725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CHANGE_SIM_PIN: 41735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CHANGE_SIM_PIN2: 41745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_FACILITY_LOCK: 41755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mIccStatusChangedRegistrants != null) { 41765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 41775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("ON some errors fakeSimStatusChanged: reg count=" 41785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + mIccStatusChangedRegistrants.size()); 41795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mIccStatusChangedRegistrants.notifyRegistrants(); 41815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 41835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 41840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 41855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 41865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch (rr.mRequest) { 41875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: 41885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mTestingEmergencyCall.getAndSet(false)) { 41895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mEmergencyCallbackModeRegistrant != null) { 41905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("testing emergency call, notify ECM Registrants"); 41915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mEmergencyCallbackModeRegistrant.notifyRegistrant(); 41925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 41955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return rr; 41975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 41995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 42005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * This is a helper function to be called at the end of all RadioResponse callbacks. 42015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * It takes care of sending error response, logging, decrementing wakelock if needed, and 42025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * releases the request from memory pool. 42035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param rr RILRequest for which response callback was called 42045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param responseInfo RadioResponseInfo received in the callback 42055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param ret object to be returned to request sender 42065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 4207c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @VisibleForTesting 4208c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public void processResponseDone(RILRequest rr, RadioResponseInfo responseInfo, Object ret) { 42095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (responseInfo.error == 0) { 42105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 42115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "< " + requestToString(rr.mRequest) 42125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " " + retToString(rr.mRequest, ret)); 42130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 42145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 42155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 42165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "< " + requestToString(rr.mRequest) 42175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " error " + responseInfo.error); 42180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 42195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.onError(responseInfo.error, ret); 42205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeOnRilSolicitedResponse(mPhoneId, rr.mSerial, responseInfo.error, 42225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mRequest, ret); 42235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (rr != null) { 42245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (responseInfo.type == RadioResponseType.SOLICITED) { 42255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe decrementWakeLock(rr); 42260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 42275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.release(); 42285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 42315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 42325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * Function to send ack and acquire related wakelock 42335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 42345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void sendAck() { 42355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // TODO: Remove rr and clean up acquireWakelock for response and ack 42365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = RILRequest.obtain(RIL_RESPONSE_ACKNOWLEDGEMENT, null, 42375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 42385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe acquireWakeLock(rr, RIL.FOR_ACK_WAKELOCK); 42395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(null); 42405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 42415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 42425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.responseAcknowledgement(); 42435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 4244c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan handleRadioProxyExceptionForRR(rr, "sendAck", e); 42450d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan riljLoge("sendAck: " + e); 42465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 42485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.e(RILJ_LOG_TAG, "Error trying to send ack, radioProxy = null"); 42495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.release(); 42515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 42535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private WorkSource getDeafultWorkSourceIfInvalid(WorkSource workSource) { 42545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (workSource == null) { 42555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource = mRILDefaultWorkSource; 42565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 42585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return workSource; 42595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 42615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 42625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 42635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * Holds a PARTIAL_WAKE_LOCK whenever 42645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * a) There is outstanding RIL request sent to RIL deamon and no replied 42655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * b) There is a request pending to be sent out. 42665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * 42675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * There is a WAKE_LOCK_TIMEOUT to release the lock, though it shouldn't 42685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * happen often. 42695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 42705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void acquireWakeLock(RILRequest rr, int wakeLockType) { 42715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (rr) { 42725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (rr.mWakeLockType != INVALID_WAKELOCK) { 42735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.d(RILJ_LOG_TAG, "Failed to aquire wakelock for " + rr.serialString()); 42745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return; 42755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 42775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch(wakeLockType) { 42785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case FOR_WAKELOCK: 42795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mWakeLock) { 42805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLock.acquire(); 42815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLockCount++; 42825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWlSequenceNum++; 42835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 42849e0a2cd0de646f9455c0d6ab34632b89b418235cNarayan Kamath String clientId = rr.getWorkSourceClientId(); 42855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!mClientWakelockTracker.isClientActive(clientId)) { 42865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mActiveWakelockWorkSource != null) { 42875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mActiveWakelockWorkSource.add(rr.mWorkSource); 42885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 42895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mActiveWakelockWorkSource = rr.mWorkSource; 42905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLock.setWorkSource(mActiveWakelockWorkSource); 42925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 42945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mClientWakelockTracker.startTracking(rr.mClientId, 42955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mRequest, rr.mSerial, mWakeLockCount); 42965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 4297d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan Message msg = mRilHandler.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT); 42985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.arg1 = mWlSequenceNum; 4299d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan mRilHandler.sendMessageDelayed(msg, mWakeLockTimeout); 43005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 43025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case FOR_ACK_WAKELOCK: 43035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mAckWakeLock) { 43045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mAckWakeLock.acquire(); 43055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mAckWlSequenceNum++; 43065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 4307d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan Message msg = mRilHandler.obtainMessage(EVENT_ACK_WAKE_LOCK_TIMEOUT); 43085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.arg1 = mAckWlSequenceNum; 4309d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan mRilHandler.sendMessageDelayed(msg, mAckWakeLockTimeout); 43105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 43125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe default: //WTF 43135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.w(RILJ_LOG_TAG, "Acquiring Invalid Wakelock type " + wakeLockType); 43145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return; 43155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mWakeLockType = wakeLockType; 43175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 4320c066b40160496c1265e21a3b624e267e47807137Pengquan Meng /** Returns the wake lock of the given type. */ 4321c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @VisibleForTesting 4322c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public WakeLock getWakeLock(int wakeLockType) { 4323c066b40160496c1265e21a3b624e267e47807137Pengquan Meng return wakeLockType == FOR_WAKELOCK ? mWakeLock : mAckWakeLock; 4324c066b40160496c1265e21a3b624e267e47807137Pengquan Meng } 4325c066b40160496c1265e21a3b624e267e47807137Pengquan Meng 4326c066b40160496c1265e21a3b624e267e47807137Pengquan Meng /** Returns the {@link RilHandler} instance. */ 4327c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @VisibleForTesting 4328c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public RilHandler getRilHandler() { 4329c066b40160496c1265e21a3b624e267e47807137Pengquan Meng return mRilHandler; 4330c066b40160496c1265e21a3b624e267e47807137Pengquan Meng } 4331c066b40160496c1265e21a3b624e267e47807137Pengquan Meng 4332c066b40160496c1265e21a3b624e267e47807137Pengquan Meng /** Returns the Ril request list. */ 4333c066b40160496c1265e21a3b624e267e47807137Pengquan Meng @VisibleForTesting 4334c066b40160496c1265e21a3b624e267e47807137Pengquan Meng public SparseArray<RILRequest> getRilRequestList() { 4335c066b40160496c1265e21a3b624e267e47807137Pengquan Meng return mRequestList; 4336c066b40160496c1265e21a3b624e267e47807137Pengquan Meng } 4337c066b40160496c1265e21a3b624e267e47807137Pengquan Meng 43385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void decrementWakeLock(RILRequest rr) { 43395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (rr) { 43405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch(rr.mWakeLockType) { 43415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case FOR_WAKELOCK: 43425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mWakeLock) { 43435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mClientWakelockTracker.stopTracking(rr.mClientId, 43445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mRequest, rr.mSerial, 43455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe (mWakeLockCount > 1) ? mWakeLockCount - 1 : 0); 43469e0a2cd0de646f9455c0d6ab34632b89b418235cNarayan Kamath String clientId = rr.getWorkSourceClientId(); 43475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!mClientWakelockTracker.isClientActive(clientId) 43485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe && (mActiveWakelockWorkSource != null)) { 43495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mActiveWakelockWorkSource.remove(rr.mWorkSource); 43505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mActiveWakelockWorkSource.size() == 0) { 43515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mActiveWakelockWorkSource = null; 43525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLock.setWorkSource(mActiveWakelockWorkSource); 43545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 43565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mWakeLockCount > 1) { 43575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLockCount--; 43585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 43595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLockCount = 0; 43605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLock.release(); 43615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 43645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case FOR_ACK_WAKELOCK: 43655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe //We do not decrement the ACK wakelock 43665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 43675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case INVALID_WAKELOCK: 43685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 43695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe default: 43705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.w(RILJ_LOG_TAG, "Decrementing Invalid Wakelock type " + rr.mWakeLockType); 43715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mWakeLockType = INVALID_WAKELOCK; 43735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 43765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private boolean clearWakeLock(int wakeLockType) { 43775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (wakeLockType == FOR_WAKELOCK) { 43785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mWakeLock) { 43795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mWakeLockCount == 0 && !mWakeLock.isHeld()) return false; 43805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.d(RILJ_LOG_TAG, "NOTE: mWakeLockCount is " + mWakeLockCount 43815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + "at time of clearing"); 43825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLockCount = 0; 43835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLock.release(); 43845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mClientWakelockTracker.stopTrackingAll(); 43855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mActiveWakelockWorkSource = null; 43865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return true; 43875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 43895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mAckWakeLock) { 43905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!mAckWakeLock.isHeld()) return false; 43915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mAckWakeLock.release(); 43925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return true; 43935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 43965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 43975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 43985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * Release each request in mRequestList then clear the list 43995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param error is the RIL_Errno sent back 44005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param loggable true means to print all requests in mRequestList 44015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 44025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void clearRequestList(int error, boolean loggable) { 44035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr; 44045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mRequestList) { 44055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int count = mRequestList.size(); 44065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD && loggable) { 44075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.d(RILJ_LOG_TAG, "clearRequestList " + " mWakeLockCount=" 44085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + mWakeLockCount + " mRequestList=" + count); 44095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 44115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < count; i++) { 44125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr = mRequestList.valueAt(i); 44135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD && loggable) { 44145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] " 44155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest)); 44165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.onError(error, null); 44185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe decrementWakeLock(rr); 44195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.release(); 44205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRequestList.clear(); 44225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 44255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private RILRequest findAndRemoveRequestFromList(int serial) { 44265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = null; 44275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mRequestList) { 44285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr = mRequestList.get(serial); 44295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (rr != null) { 44305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRequestList.remove(serial); 44315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 44345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return rr; 44355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 44375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void addToRilHistogram(RILRequest rr) { 44385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe long endTime = SystemClock.elapsedRealtime(); 44395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int totalTime = (int) (endTime - rr.mStartTimeMs); 44405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 44415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mRilTimeHistograms) { 44425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe TelephonyHistogram entry = mRilTimeHistograms.get(rr.mRequest); 44435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (entry == null) { 44445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // We would have total #RIL_HISTOGRAM_BUCKET_COUNT range buckets for RIL commands 44455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe entry = new TelephonyHistogram(TelephonyHistogram.TELEPHONY_CATEGORY_RIL, 44465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mRequest, RIL_HISTOGRAM_BUCKET_COUNT); 44475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRilTimeHistograms.put(rr.mRequest, entry); 44485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe entry.addTimeTaken(totalTime); 44505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 4453a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RadioCapability makeStaticRadioCapability() { 44545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // default to UNKNOWN so we fail fast. 44555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int raf = RadioAccessFamily.RAF_UNKNOWN; 44565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 44575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String rafString = mContext.getResources().getString( 44585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe com.android.internal.R.string.config_radio_access_family); 44595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!TextUtils.isEmpty(rafString)) { 44605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe raf = RadioAccessFamily.rafTypeFromString(rafString); 44615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RadioCapability rc = new RadioCapability(mPhoneId.intValue(), 0, 0, raf, 44635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe "", RadioCapability.RC_STATUS_SUCCESS); 44645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog("Faking RIL_REQUEST_GET_RADIO_CAPABILITY response using " + raf); 44655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return rc; 44665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 44685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe static String retToString(int req, Object ret) { 44695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (ret == null) return ""; 44705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch (req) { 44715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Don't log these return values, for privacy's sake. 44725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMSI: 44735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMEI: 44745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMEISV: 44755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_OPEN_CHANNEL: 44765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: 44775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 44785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!RILJ_LOGV) { 44795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // If not versbose logging just return and don't display IMSI and IMEI, IMEISV 44805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return ""; 44815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 44845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe StringBuilder sb; 44855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String s; 44865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int length; 44875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (ret instanceof int[]) { 44885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int[] intArray = (int[]) ret; 44895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe length = intArray.length; 44905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder("{"); 44915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (length > 0) { 44925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int i = 0; 44935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append(intArray[i++]); 44945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe while (i < length) { 44955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append(", ").append(intArray[i++]); 44965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 44985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("}"); 44995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 45005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (ret instanceof String[]) { 45015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String[] strings = (String[]) ret; 45025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe length = strings.length; 45035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder("{"); 45045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (length > 0) { 45055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int i = 0; 45065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append(strings[i++]); 45075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe while (i < length) { 45085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append(", ").append(strings[i++]); 45095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 45105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 45115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("}"); 45125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 45135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (req == RIL_REQUEST_GET_CURRENT_CALLS) { 45145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<DriverCall> calls = (ArrayList<DriverCall>) ret; 45155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder("{"); 45165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (DriverCall dc : calls) { 45175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("[").append(dc).append("] "); 45185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 45195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("}"); 45205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 45215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (req == RIL_REQUEST_GET_NEIGHBORING_CELL_IDS) { 45225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<NeighboringCellInfo> cells = (ArrayList<NeighboringCellInfo>) ret; 45235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder("{"); 45245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (NeighboringCellInfo cell : cells) { 45255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("[").append(cell).append("] "); 45265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 45275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("}"); 45285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 45295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (req == RIL_REQUEST_QUERY_CALL_FORWARD_STATUS) { 45305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CallForwardInfo[] cinfo = (CallForwardInfo[]) ret; 45315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe length = cinfo.length; 45325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder("{"); 45335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < length; i++) { 45345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("[").append(cinfo[i]).append("] "); 45355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 45365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("}"); 45375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 45385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (req == RIL_REQUEST_GET_HARDWARE_CONFIG) { 45395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<HardwareConfig> hwcfgs = (ArrayList<HardwareConfig>) ret; 45405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder(" "); 45415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (HardwareConfig hwcfg : hwcfgs) { 45425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("[").append(hwcfg).append("] "); 45430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 45445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 45455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 45465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = ret.toString(); 45470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 45485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return s; 45490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 45500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 45515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void writeMetricsNewSms(int tech, int format) { 45525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilNewSms(mPhoneId, tech, format); 45535fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville } 45545fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville 45555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void writeMetricsCallRing(char[] response) { 45565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilCallRing(mPhoneId, response); 45572b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville } 45582b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville 45595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void writeMetricsSrvcc(int state) { 45605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSrvcc(mPhoneId, state); 456165bee39d7e417fb898c3948696d5d8a38046c449fenglu } 456265bee39d7e417fb898c3948696d5d8a38046c449fenglu 45635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void writeMetricsModemRestartEvent(String reason) { 45645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeModemRestartEvent(mPhoneId, reason); 456565bee39d7e417fb898c3948696d5d8a38046c449fenglu } 456665bee39d7e417fb898c3948696d5d8a38046c449fenglu 45675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 45688e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * Notify all registrants that the ril has connected or disconnected. 4569a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido * 4570a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido * @param rilVer is the version of the ril or -1 if disconnected. 45715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 4572a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido void notifyRegistrantsRilConnectionChanged(int rilVer) { 4573a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido mRilVersion = rilVer; 45745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mRilConnectedRegistrants != null) { 45755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRilConnectedRegistrants.notifyRegistrants( 4576a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido new AsyncResult(null, new Integer(rilVer), null)); 457727eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham } 457827eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham } 457927eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham 45805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void 45815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) { 45825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int response = RIL_UNSOL_CDMA_INFO_REC; 45835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (infoRec.record instanceof CdmaInformationRecords.CdmaDisplayInfoRec) { 45845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mDisplayInfoRegistrants != null) { 45855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 45865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mDisplayInfoRegistrants.notifyRegistrants( 45875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 45885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 45895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaSignalInfoRec) { 45905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mSignalInfoRegistrants != null) { 45915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 45925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mSignalInfoRegistrants.notifyRegistrants( 45935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 45945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 45955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaNumberInfoRec) { 45965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mNumberInfoRegistrants != null) { 45975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 45985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mNumberInfoRegistrants.notifyRegistrants( 45995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 46005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaRedirectingNumberInfoRec) { 46025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mRedirNumInfoRegistrants != null) { 46035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 46045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRedirNumInfoRegistrants.notifyRegistrants( 46055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 46065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaLineControlInfoRec) { 46085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mLineControlInfoRegistrants != null) { 46095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 46105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mLineControlInfoRegistrants.notifyRegistrants( 46115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 46125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53ClirInfoRec) { 46145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mT53ClirInfoRegistrants != null) { 46155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 46165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mT53ClirInfoRegistrants.notifyRegistrants( 46175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 46185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53AudioControlInfoRec) { 46205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mT53AudCntrlInfoRegistrants != null) { 46215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 46225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe unsljLogRet(response, infoRec.record); 46235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mT53AudCntrlInfoRegistrants.notifyRegistrants( 46255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 4626a63f55cf17629426d976830429a7612387532195Rika Brooks } 4627a63f55cf17629426d976830429a7612387532195Rika Brooks } 46280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 46290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 46305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe static String requestToString(int request) { 46315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch(request) { 46325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_SIM_STATUS: 46335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_SIM_STATUS"; 46345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PIN: 46355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ENTER_SIM_PIN"; 46365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PUK: 46375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ENTER_SIM_PUK"; 46385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PIN2: 46395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ENTER_SIM_PIN2"; 46405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PUK2: 46415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ENTER_SIM_PUK2"; 46425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CHANGE_SIM_PIN: 46435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CHANGE_SIM_PIN"; 46445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CHANGE_SIM_PIN2: 46455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CHANGE_SIM_PIN2"; 46465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: 46475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ENTER_NETWORK_DEPERSONALIZATION"; 46485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_CURRENT_CALLS: 46495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_CURRENT_CALLS"; 46505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DIAL: 46515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DIAL"; 46525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMSI: 46535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_IMSI"; 46545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_HANGUP: 46555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "HANGUP"; 46565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: 46575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "HANGUP_WAITING_OR_BACKGROUND"; 46585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: 46595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "HANGUP_FOREGROUND_RESUME_BACKGROUND"; 46605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: 46615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE"; 46625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CONFERENCE: 46635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CONFERENCE"; 46645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_UDUB: 46655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UDUB"; 46665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: 46675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "LAST_CALL_FAIL_CAUSE"; 46685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIGNAL_STRENGTH: 46695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SIGNAL_STRENGTH"; 46705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_VOICE_REGISTRATION_STATE: 46715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "VOICE_REGISTRATION_STATE"; 46725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DATA_REGISTRATION_STATE: 46735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DATA_REGISTRATION_STATE"; 46745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_OPERATOR: 46755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "OPERATOR"; 46765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_RADIO_POWER: 46775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RADIO_POWER"; 46785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DTMF: 46795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DTMF"; 46805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SEND_SMS: 46815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SEND_SMS"; 46825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SEND_SMS_EXPECT_MORE: 46835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SEND_SMS_EXPECT_MORE"; 46845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SETUP_DATA_CALL: 46855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SETUP_DATA_CALL"; 46865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_IO: 46875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SIM_IO"; 46885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SEND_USSD: 46895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SEND_USSD"; 46905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CANCEL_USSD: 46915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CANCEL_USSD"; 46925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_CLIR: 46935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_CLIR"; 46945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_CLIR: 46955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_CLIR"; 46965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: 46975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_CALL_FORWARD_STATUS"; 46985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_CALL_FORWARD: 46995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_CALL_FORWARD"; 47005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_CALL_WAITING: 47015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_CALL_WAITING"; 47025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_CALL_WAITING: 47035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_CALL_WAITING"; 47045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SMS_ACKNOWLEDGE: 47055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SMS_ACKNOWLEDGE"; 47065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMEI: 47075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_IMEI"; 47085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMEISV: 47095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_IMEISV"; 47105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ANSWER: 47115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ANSWER"; 47125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DEACTIVATE_DATA_CALL: 47135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DEACTIVATE_DATA_CALL"; 47145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_FACILITY_LOCK: 47155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_FACILITY_LOCK"; 47165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_FACILITY_LOCK: 47175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_FACILITY_LOCK"; 47185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CHANGE_BARRING_PASSWORD: 47195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CHANGE_BARRING_PASSWORD"; 47205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: 47215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_NETWORK_SELECTION_MODE"; 47225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: 47235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_NETWORK_SELECTION_AUTOMATIC"; 47245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: 47255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_NETWORK_SELECTION_MANUAL"; 47265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : 47275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_AVAILABLE_NETWORKS "; 47285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DTMF_START: 47295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DTMF_START"; 47305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DTMF_STOP: 47315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DTMF_STOP"; 47325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_BASEBAND_VERSION: 47335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "BASEBAND_VERSION"; 47345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SEPARATE_CONNECTION: 47355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SEPARATE_CONNECTION"; 47365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_MUTE: 47375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_MUTE"; 47385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_MUTE: 47395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_MUTE"; 47405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_CLIP: 47415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_CLIP"; 47425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: 47435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "LAST_DATA_CALL_FAIL_CAUSE"; 47445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DATA_CALL_LIST: 47455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DATA_CALL_LIST"; 47465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_RESET_RADIO: 47475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RESET_RADIO"; 4748ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian case RIL_REQUEST_OEM_HOOK_RAW: 4749ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian return "OEM_HOOK_RAW"; 4750ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian case RIL_REQUEST_OEM_HOOK_STRINGS: 4751ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian return "OEM_HOOK_STRINGS"; 47525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SCREEN_STATE: 47535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SCREEN_STATE"; 47545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: 47555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_SUPP_SVC_NOTIFICATION"; 47565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_WRITE_SMS_TO_SIM: 47575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "WRITE_SMS_TO_SIM"; 47585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DELETE_SMS_ON_SIM: 47595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DELETE_SMS_ON_SIM"; 47605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_BAND_MODE: 47615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_BAND_MODE"; 47625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: 47635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_AVAILABLE_BAND_MODE"; 47645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_GET_PROFILE: 47655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_STK_GET_PROFILE"; 47665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_SET_PROFILE: 47675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_STK_SET_PROFILE"; 47685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: 47695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_STK_SEND_ENVELOPE_COMMAND"; 47705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: 47715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_STK_SEND_TERMINAL_RESPONSE"; 47725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: 47735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM"; 47745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "REQUEST_EXPLICIT_CALL_TRANSFER"; 47755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: 47765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_SET_PREFERRED_NETWORK_TYPE"; 47775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: 47785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_GET_PREFERRED_NETWORK_TYPE"; 47795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: 47805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_GET_NEIGHBORING_CELL_IDS"; 47815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_LOCATION_UPDATES: 47825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_SET_LOCATION_UPDATES"; 47835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: 47845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE"; 47855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: 47865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE"; 47875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: 47885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE"; 47895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_TTY_MODE: 47905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_TTY_MODE"; 47915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_TTY_MODE: 47925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_QUERY_TTY_MODE"; 47935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: 47945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE"; 47955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: 47965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE"; 47975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_FLASH: 47985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_FLASH"; 47995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_BURST_DTMF: 48005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_BURST_DTMF"; 48015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SEND_SMS: 48025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SEND_SMS"; 48035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: 48045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE"; 48055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: 48065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG"; 48075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: 48085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG"; 48095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: 48105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG"; 48115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: 48125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG"; 48135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: 48145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION"; 48155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: 48165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY"; 48175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: 48185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION"; 48195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SUBSCRIPTION: 48205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SUBSCRIPTION"; 48215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: 48225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM"; 48235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: 48245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM"; 48255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DEVICE_IDENTITY: 48265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_DEVICE_IDENTITY"; 48275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_SMSC_ADDRESS: 48285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GET_SMSC_ADDRESS"; 48295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_SMSC_ADDRESS: 48305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_SMSC_ADDRESS"; 48315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: 48325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_EXIT_EMERGENCY_CALLBACK_MODE"; 48335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: 48345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS"; 48355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: 48365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING"; 48375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: 48385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE"; 48395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ISIM_AUTHENTICATION: 48405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_ISIM_AUTHENTICATION"; 48415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: 48425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU"; 48435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: 48445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS"; 48455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_VOICE_RADIO_TECH: 48465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_VOICE_RADIO_TECH"; 48475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_CELL_INFO_LIST: 48485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GET_CELL_INFO_LIST"; 48495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: 48505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_CELL_INFO_LIST_RATE"; 48515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_INITIAL_ATTACH_APN: 48525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_INITIAL_ATTACH_APN"; 48535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_DATA_PROFILE: 48545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_DATA_PROFILE"; 48555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_IMS_REGISTRATION_STATE: 48565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_IMS_REGISTRATION_STATE"; 48575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_IMS_SEND_SMS: 48585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_IMS_SEND_SMS"; 48595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC: 48605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC"; 48615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_OPEN_CHANNEL: 48625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SIM_OPEN_CHANNEL"; 48635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_CLOSE_CHANNEL: 48645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SIM_CLOSE_CHANNEL"; 48655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: 48665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL"; 48675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_NV_READ_ITEM: 48685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_NV_READ_ITEM"; 48695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_NV_WRITE_ITEM: 48705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_NV_WRITE_ITEM"; 48715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_NV_WRITE_CDMA_PRL: 48725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_NV_WRITE_CDMA_PRL"; 48735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_NV_RESET_CONFIG: 48745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_NV_RESET_CONFIG"; 48755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_UICC_SUBSCRIPTION: 48765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_UICC_SUBSCRIPTION"; 48775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ALLOW_DATA: 48785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_ALLOW_DATA"; 48795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_HARDWARE_CONFIG: 48805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_HARDWARE_CONFIG"; 48815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_AUTHENTICATION: 48825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SIM_AUTHENTICATION"; 48835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SHUTDOWN: 48845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SHUTDOWN"; 48855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_RADIO_CAPABILITY: 48865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_RADIO_CAPABILITY"; 48875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_RADIO_CAPABILITY: 48885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GET_RADIO_CAPABILITY"; 48895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_START_LCE: 48905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_START_LCE"; 48915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STOP_LCE: 48925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_STOP_LCE"; 48935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_PULL_LCEDATA: 48945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_PULL_LCEDATA"; 48955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_ACTIVITY_INFO: 48965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GET_ACTIVITY_INFO"; 48975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_ALLOWED_CARRIERS: 48985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_ALLOWED_CARRIERS"; 48995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_ALLOWED_CARRIERS: 49005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GET_ALLOWED_CARRIERS"; 490199607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu case RIL_REQUEST_SET_SIM_CARD_POWER: 490299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu return "RIL_REQUEST_SET_SIM_CARD_POWER"; 4903baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu case RIL_REQUEST_SEND_DEVICE_STATE: 4904baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu return "RIL_REQUEST_SEND_DEVICE_STATE"; 4905baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu case RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER: 4906baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu return "RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER"; 49075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_RESPONSE_ACKNOWLEDGEMENT: 49085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_RESPONSE_ACKNOWLEDGEMENT"; 49093dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar case RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION: 49103dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar return "RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION"; 4911a88c366bfe12bd5b3bdd54bf9114ed625911fc3ayinxu case RIL_REQUEST_START_NETWORK_SCAN: 4912a88c366bfe12bd5b3bdd54bf9114ed625911fc3ayinxu return "RIL_REQUEST_START_NETWORK_SCAN"; 4913a88c366bfe12bd5b3bdd54bf9114ed625911fc3ayinxu case RIL_REQUEST_STOP_NETWORK_SCAN: 4914a88c366bfe12bd5b3bdd54bf9114ed625911fc3ayinxu return "RIL_REQUEST_STOP_NETWORK_SCAN"; 49154e10a61602bd065cdf71d0335493ac3444d5055ayinxu case RIL_REQUEST_GET_SLOT_STATUS: 49164e10a61602bd065cdf71d0335493ac3444d5055ayinxu return "RIL_REQUEST_GET_SLOT_STATUS"; 49174e10a61602bd065cdf71d0335493ac3444d5055ayinxu case RIL_REQUEST_SET_LOGICAL_TO_PHYSICAL_SLOT_MAPPING: 49184e10a61602bd065cdf71d0335493ac3444d5055ayinxu return "RIL_REQUEST_SET_LOGICAL_TO_PHYSICAL_SLOT_MAPPING"; 4919f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold case RIL_REQUEST_START_KEEPALIVE: 4920f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold return "RIL_REQUEST_START_KEEPALIVE"; 4921f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold case RIL_REQUEST_STOP_KEEPALIVE: 4922f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold return "RIL_REQUEST_STOP_KEEPALIVE"; 4923c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach case RIL_REQUEST_SET_SIGNAL_STRENGTH_REPORTING_CRITERIA: 4924c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return "RIL_REQUEST_SET_SIGNAL_STRENGTH_REPORTING_CRITERIA"; 4925c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach case RIL_REQUEST_SET_LINK_CAPACITY_REPORTING_CRITERIA: 4926c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return "RIL_REQUEST_SET_LINK_CAPACITY_REPORTING_CRITERIA"; 49275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe default: return "<unknown request>"; 49285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 49295fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville } 49305fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville 49315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe static String responseToString(int request) { 49325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch(request) { 49335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: 49345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_RADIO_STATE_CHANGED"; 49355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: 49365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_CALL_STATE_CHANGED"; 49375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_NETWORK_STATE_CHANGED: 49385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_NETWORK_STATE_CHANGED"; 49395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_NEW_SMS: 49405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_NEW_SMS"; 49415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: 49425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT"; 49435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: 49445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_NEW_SMS_ON_SIM"; 49455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_ON_USSD: 49465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_ON_USSD"; 49475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_ON_USSD_REQUEST: 49485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_ON_USSD_REQUEST"; 49495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_NITZ_TIME_RECEIVED: 49505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_NITZ_TIME_RECEIVED"; 49515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_SIGNAL_STRENGTH: 49525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_SIGNAL_STRENGTH"; 49535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_DATA_CALL_LIST_CHANGED: 49545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_DATA_CALL_LIST_CHANGED"; 49555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_SUPP_SVC_NOTIFICATION: 49565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_SUPP_SVC_NOTIFICATION"; 49575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_STK_SESSION_END: 49585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_STK_SESSION_END"; 49595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_STK_PROACTIVE_COMMAND: 49605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_STK_PROACTIVE_COMMAND"; 49615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_STK_EVENT_NOTIFY: 49625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_STK_EVENT_NOTIFY"; 49635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_STK_CALL_SETUP: 49645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_STK_CALL_SETUP"; 49655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_SIM_SMS_STORAGE_FULL: 49665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_SIM_SMS_STORAGE_FULL"; 49675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_SIM_REFRESH: 49685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_SIM_REFRESH"; 49695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CALL_RING: 49705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CALL_RING"; 49715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: 49725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_SIM_STATUS_CHANGED"; 49735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: 49745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_CDMA_NEW_SMS"; 49755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: 49765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_NEW_BROADCAST_SMS"; 49775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: 49785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL"; 49795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESTRICTED_STATE_CHANGED: 49805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESTRICTED_STATE_CHANGED"; 49815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: 49825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE"; 49835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CDMA_CALL_WAITING: 49845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CDMA_CALL_WAITING"; 49855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: 49865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CDMA_OTA_PROVISION_STATUS"; 49875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CDMA_INFO_REC: 49885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CDMA_INFO_REC"; 4989ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian case RIL_UNSOL_OEM_HOOK_RAW: 4990ac009536df32d886e1bab79f07e61200ea6bdcf9Shuo Qian return "UNSOL_OEM_HOOK_RAW"; 49915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RINGBACK_TONE: 49925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RINGBACK_TONE"; 49935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESEND_INCALL_MUTE: 49945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESEND_INCALL_MUTE"; 49955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: 49965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CDMA_SUBSCRIPTION_SOURCE_CHANGED"; 49975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOl_CDMA_PRL_CHANGED: 49985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CDMA_PRL_CHANGED"; 49995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: 50005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE"; 50015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RIL_CONNECTED: 50025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RIL_CONNECTED"; 50035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: 50045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_VOICE_RADIO_TECH_CHANGED"; 50055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CELL_INFO_LIST: 50065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CELL_INFO_LIST"; 50075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED: 50085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED"; 50095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED: 50105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED"; 50115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_SRVCC_STATE_NOTIFY: 50125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_SRVCC_STATE_NOTIFY"; 50135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_HARDWARE_CONFIG_CHANGED: 50145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_UNSOL_HARDWARE_CONFIG_CHANGED"; 50155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RADIO_CAPABILITY: 50165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_UNSOL_RADIO_CAPABILITY"; 50175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_ON_SS: 50185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_ON_SS"; 50195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_STK_CC_ALPHA_NOTIFY: 50205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_STK_CC_ALPHA_NOTIFY"; 50215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_LCEDATA_RECV: 50225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_LCE_INFO_RECV"; 50235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_PCO_DATA: 50245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_PCO_DATA"; 50255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_MODEM_RESTART: 50265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_MODEM_RESTART"; 50273dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar case RIL_UNSOL_CARRIER_INFO_IMSI_ENCRYPTION: 50283dd2f4b1d5d89bb2e785df8e6ede6bf25937b0bdpkanwar return "RIL_UNSOL_CARRIER_INFO_IMSI_ENCRYPTION"; 5029a88c366bfe12bd5b3bdd54bf9114ed625911fc3ayinxu case RIL_UNSOL_NETWORK_SCAN_RESULT: 5030a88c366bfe12bd5b3bdd54bf9114ed625911fc3ayinxu return "RIL_UNSOL_NETWORK_SCAN_RESULT"; 50314e10a61602bd065cdf71d0335493ac3444d5055ayinxu case RIL_UNSOL_ICC_SLOT_STATUS: 50324e10a61602bd065cdf71d0335493ac3444d5055ayinxu return "RIL_UNSOL_ICC_SLOT_STATUS"; 5033f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold case RIL_UNSOL_KEEPALIVE_STATUS: 5034f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold return "RIL_UNSOL_KEEPALIVE_STATUS"; 50359eac50b6b7da40f5f38277b7171b97c524f1f590Eric Schwarzenbach case RIL_UNSOL_PHYSICAL_CHANNEL_CONFIG: 50369eac50b6b7da40f5f38277b7171b97c524f1f590Eric Schwarzenbach return "RIL_UNSOL_PHYSICAL_CHANNEL_CONFIG"; 50375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe default: 50385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "<unknown response>"; 50395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 504021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 504121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 50425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void riljLog(String msg) { 50435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.d(RILJ_LOG_TAG, msg 50445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : "")); 50455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 50465d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi 50475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void riljLoge(String msg) { 50485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.e(RILJ_LOG_TAG, msg 50495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : "")); 50505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 50515d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi 50525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void riljLoge(String msg, Exception e) { 50535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.e(RILJ_LOG_TAG, msg 50545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : ""), e); 50555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 50565d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi 50575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void riljLogv(String msg) { 50585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.v(RILJ_LOG_TAG, msg 50595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : "")); 50605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 50615d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi 50625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void unsljLog(int response) { 50635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("[UNSL]< " + responseToString(response)); 50645d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi } 50655d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi 50665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void unsljLogMore(int response, String more) { 50675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("[UNSL]< " + responseToString(response) + " " + more); 50685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 50699d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan 50705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void unsljLogRet(int response, Object ret) { 50715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("[UNSL]< " + responseToString(response) + " " + retToString(response, ret)); 50725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 50739d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan 50745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void unsljLogvRet(int response, Object ret) { 50755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLogv("[UNSL]< " + responseToString(response) + " " + retToString(response, ret)); 50765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 50779d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan 50785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 50795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setPhoneType(int phoneType) { // Called by GsmCdmaPhone 50805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType); 50815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mPhoneType = phoneType; 50829d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan } 50839d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan 50840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* (non-Javadoc) 50850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @see com.android.internal.telephony.BaseCommands#testingEmergencyCall() 50860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 50870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 50880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testingEmergencyCall() { 50890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (RILJ_LOGD) riljLog("testingEmergencyCall"); 50900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mTestingEmergencyCall.set(true); 50910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 50920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 50930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 509405ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println("RIL: " + this); 50950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mWakeLock=" + mWakeLock); 50960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mWakeLockTimeout=" + mWakeLockTimeout); 5097892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt synchronized (mRequestList) { 50987cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt synchronized (mWakeLock) { 50997cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt pw.println(" mWakeLockCount=" + mWakeLockCount); 51007cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt } 5101892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt int count = mRequestList.size(); 51020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mRequestList count=" + count); 51030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < count; i++) { 51047cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt RILRequest rr = mRequestList.valueAt(i); 51050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" [" + rr.mSerial + "] " + requestToString(rr.mRequest)); 51060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 51070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5108d39109502855e8d81e45e21161d8bf0cfacf42e0Sanket Padawe pw.println(" mLastNITZTimeInfo=" + Arrays.toString(mLastNITZTimeInfo)); 51090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mTestingEmergencyCall=" + mTestingEmergencyCall.get()); 5110ad44212e1cb9fc97679378036f6224c2c287cebfSanket Padawe mClientWakelockTracker.dumpClientRequestTracker(pw); 51110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 511240d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal 51138e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran public List<ClientRequestStats> getClientRequestStats() { 51148e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran return mClientWakelockTracker.getClientRequestStats(); 51158e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran } 5116e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan 5117f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold /** Append the data to the end of an ArrayList */ 5118f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold public static void appendPrimitiveArrayToArrayList(byte[] src, ArrayList<Byte> dst) { 5119f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold for (byte b : src) { 5120f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold dst.add(b); 5121f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 5122f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold } 5123f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold 5124f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan public static ArrayList<Byte> primitiveArrayToArrayList(byte[] arr) { 5125f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan ArrayList<Byte> arrayList = new ArrayList<>(arr.length); 5126f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan for (byte b : arr) { 5127f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan arrayList.add(b); 5128f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 5129f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan return arrayList; 5130f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 5131f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan 5132c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach /** Convert a primitive int array to an ArrayList<Integer>. */ 5133c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach public static ArrayList<Integer> primitiveArrayToArrayList(int[] arr) { 5134c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach ArrayList<Integer> arrayList = new ArrayList<>(arr.length); 5135c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach for (int i : arr) { 5136c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach arrayList.add(i); 5137c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 5138c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach return arrayList; 5139c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach } 5140c7776a8f093a315d3baced16f57c5214116ed3d7Eric Schwarzenbach 5141f9d8835c31c9a0347e5d40f6b0f582bbf09b9e51Nathan Harold /** Convert an ArrayList of Bytes to an exactly-sized primitive array */ 5142e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan public static byte[] arrayListToPrimitiveArray(ArrayList<Byte> bytes) { 5143e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan byte[] ret = new byte[bytes.size()]; 5144e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan for (int i = 0; i < ret.length; i++) { 5145e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan ret[i] = bytes.get(i); 5146e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan } 5147e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan return ret; 5148e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan } 5149e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan 515021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan static ArrayList<HardwareConfig> convertHalHwConfigList( 515121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ArrayList<android.hardware.radio.V1_0.HardwareConfig> hwListRil, 515221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan RIL ril) { 515321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int num; 515421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ArrayList<HardwareConfig> response; 515521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan HardwareConfig hw; 515621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 515721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan num = hwListRil.size(); 515821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan response = new ArrayList<HardwareConfig>(num); 515921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 516021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan if (RILJ_LOGV) { 516121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ril.riljLog("convertHalHwConfigList: num=" + num); 516221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 516321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan for (android.hardware.radio.V1_0.HardwareConfig hwRil : hwListRil) { 516421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int type = hwRil.type; 516521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan switch(type) { 516621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case HardwareConfig.DEV_HARDWARE_TYPE_MODEM: { 516721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan hw = new HardwareConfig(type); 516821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan HardwareConfigModem hwModem = hwRil.modem.get(0); 516921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan hw.assignModem(hwRil.uuid, hwRil.state, hwModem.rilModel, hwModem.rat, 517021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan hwModem.maxVoice, hwModem.maxData, hwModem.maxStandby); 517121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 517221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 517321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case HardwareConfig.DEV_HARDWARE_TYPE_SIM: { 517421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan hw = new HardwareConfig(type); 517521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan hw.assignSim(hwRil.uuid, hwRil.state, hwRil.sim.get(0).modemUuid); 517621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 517721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 517821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan default: { 517921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan throw new RuntimeException( 518021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan "RIL_REQUEST_GET_HARDWARE_CONFIG invalid hardward type:" + type); 518121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 518221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 518321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 518421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan response.add(hw); 518521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 518621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 518721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan return response; 518821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 518921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 519021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan static RadioCapability convertHalRadioCapability( 519121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan android.hardware.radio.V1_0.RadioCapability rcRil, RIL ril) { 519221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int session = rcRil.session; 519321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int phase = rcRil.phase; 519421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int rat = rcRil.raf; 519521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan String logicModemUuid = rcRil.logicalModemUuid; 519621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int status = rcRil.status; 519721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 519821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ril.riljLog("convertHalRadioCapability: session=" + session + 519921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ", phase=" + phase + 520021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ", rat=" + rat + 520121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ", logicModemUuid=" + logicModemUuid + 520221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ", status=" + status); 520321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan RadioCapability rc = new RadioCapability( 52045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ril.mPhoneId, session, phase, rat, logicModemUuid, status); 520521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan return rc; 520621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 520721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 52087afdb3942adde7efd33b5af5556fead92243e49cNathan Harold static LinkCapacityEstimate convertHalLceData(LceDataInfo halData, RIL ril) { 52097afdb3942adde7efd33b5af5556fead92243e49cNathan Harold final LinkCapacityEstimate lce = new LinkCapacityEstimate( 52107afdb3942adde7efd33b5af5556fead92243e49cNathan Harold halData.lastHopCapacityKbps, 52117afdb3942adde7efd33b5af5556fead92243e49cNathan Harold Byte.toUnsignedInt(halData.confidenceLevel), 52127afdb3942adde7efd33b5af5556fead92243e49cNathan Harold halData.lceSuspended ? LinkCapacityEstimate.STATUS_SUSPENDED 52137afdb3942adde7efd33b5af5556fead92243e49cNathan Harold : LinkCapacityEstimate.STATUS_ACTIVE); 521421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 52157afdb3942adde7efd33b5af5556fead92243e49cNathan Harold ril.riljLog("LCE capacity information received:" + lce); 52167afdb3942adde7efd33b5af5556fead92243e49cNathan Harold return lce; 52177afdb3942adde7efd33b5af5556fead92243e49cNathan Harold } 521821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 52197afdb3942adde7efd33b5af5556fead92243e49cNathan Harold static LinkCapacityEstimate convertHalLceData( 52207afdb3942adde7efd33b5af5556fead92243e49cNathan Harold android.hardware.radio.V1_2.LinkCapacityEstimate halData, RIL ril) { 52217afdb3942adde7efd33b5af5556fead92243e49cNathan Harold final LinkCapacityEstimate lce = new LinkCapacityEstimate( 52227afdb3942adde7efd33b5af5556fead92243e49cNathan Harold halData.downlinkCapacityKbps, 52237afdb3942adde7efd33b5af5556fead92243e49cNathan Harold halData.uplinkCapacityKbps); 52247afdb3942adde7efd33b5af5556fead92243e49cNathan Harold ril.riljLog("LCE capacity information received:" + lce); 52257afdb3942adde7efd33b5af5556fead92243e49cNathan Harold return lce; 522621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 522721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 5228e9c396cfd047b045c6df08a32ef546600f921bfaCassie private static void writeToParcelForGsm( 5229e9c396cfd047b045c6df08a32ef546600f921bfaCassie Parcel p, int lac, int cid, int arfcn, int bsic, String mcc, String mnc, 5230e9c396cfd047b045c6df08a32ef546600f921bfaCassie String al, String as, int ss, int ber, int ta) { 52317aa0254d5d8f08163b3702a2a1c9602366f568d8Jack Yu p.writeInt(CellIdentity.TYPE_GSM); 52327aa0254d5d8f08163b3702a2a1c9602366f568d8Jack Yu p.writeString(mcc); 52337aa0254d5d8f08163b3702a2a1c9602366f568d8Jack Yu p.writeString(mnc); 52346da36e04115847978aed09edb7a4f5f5906dc9f8Cassie p.writeString(al); 52356da36e04115847978aed09edb7a4f5f5906dc9f8Cassie p.writeString(as); 5236e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(lac); 5237e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(cid); 5238e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(arfcn); 5239e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(bsic); 5240e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(ss); 5241e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(ber); 5242e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(ta); 5243e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5244e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5245e9c396cfd047b045c6df08a32ef546600f921bfaCassie private static void writeToParcelForCdma( 5246e9c396cfd047b045c6df08a32ef546600f921bfaCassie Parcel p, int ni, int si, int bsi, int lon, int lat, String al, String as, 5247e9c396cfd047b045c6df08a32ef546600f921bfaCassie int dbm, int ecio, int eDbm, int eEcio, int eSnr) { 5248a8af56d7ddc5b3e7781aaa792a44c2c18539ab2fNathan Harold new CellIdentityCdma(ni, si, bsi, lon, lat, al, as).writeToParcel(p, 0); 5249a8af56d7ddc5b3e7781aaa792a44c2c18539ab2fNathan Harold new CellSignalStrengthCdma(dbm, ecio, eDbm, eEcio, eSnr).writeToParcel(p, 0); 5250e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5251e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5252e9c396cfd047b045c6df08a32ef546600f921bfaCassie private static void writeToParcelForLte( 525381b90daac5f0e09da0ea83327b8f31976194aadeEric Schwarzenbach Parcel p, int ci, int pci, int tac, int earfcn, int bandwidth, String mcc, String mnc, 525481b90daac5f0e09da0ea83327b8f31976194aadeEric Schwarzenbach String al, String as, int ss, int rsrp, int rsrq, int rssnr, int cqi, int ta) { 52557aa0254d5d8f08163b3702a2a1c9602366f568d8Jack Yu p.writeInt(CellIdentity.TYPE_LTE); 52567aa0254d5d8f08163b3702a2a1c9602366f568d8Jack Yu p.writeString(mcc); 52577aa0254d5d8f08163b3702a2a1c9602366f568d8Jack Yu p.writeString(mnc); 52586da36e04115847978aed09edb7a4f5f5906dc9f8Cassie p.writeString(al); 52596da36e04115847978aed09edb7a4f5f5906dc9f8Cassie p.writeString(as); 5260e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(ci); 5261e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(pci); 5262e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(tac); 5263e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(earfcn); 526481b90daac5f0e09da0ea83327b8f31976194aadeEric Schwarzenbach p.writeInt(bandwidth); 5265e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(ss); 5266e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(rsrp); 5267e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(rsrq); 5268e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(rssnr); 5269e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(cqi); 5270e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(ta); 5271e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5272e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5273e9c396cfd047b045c6df08a32ef546600f921bfaCassie private static void writeToParcelForWcdma( 5274e9c396cfd047b045c6df08a32ef546600f921bfaCassie Parcel p, int lac, int cid, int psc, int uarfcn, String mcc, String mnc, 5275e9c396cfd047b045c6df08a32ef546600f921bfaCassie String al, String as, int ss, int ber) { 52767aa0254d5d8f08163b3702a2a1c9602366f568d8Jack Yu p.writeInt(CellIdentity.TYPE_WCDMA); 52777aa0254d5d8f08163b3702a2a1c9602366f568d8Jack Yu p.writeString(mcc); 52787aa0254d5d8f08163b3702a2a1c9602366f568d8Jack Yu p.writeString(mnc); 52796da36e04115847978aed09edb7a4f5f5906dc9f8Cassie p.writeString(al); 52806da36e04115847978aed09edb7a4f5f5906dc9f8Cassie p.writeString(as); 5281e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(lac); 5282e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(cid); 5283e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(psc); 5284e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(uarfcn); 5285e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(ss); 5286e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(ber); 5287e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5288e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5289e2be13c62d7f340a6560c61e2e925d8608f1024cCassie /** 5290e2be13c62d7f340a6560c61e2e925d8608f1024cCassie * Convert CellInfo defined in 1.0/types.hal to CellInfo type. 5291e2be13c62d7f340a6560c61e2e925d8608f1024cCassie * @param records List of CellInfo defined in 1.0/types.hal 5292e2be13c62d7f340a6560c61e2e925d8608f1024cCassie * @return List of converted CellInfo object 5293e2be13c62d7f340a6560c61e2e925d8608f1024cCassie */ 5294e9c396cfd047b045c6df08a32ef546600f921bfaCassie @VisibleForTesting 5295e2be13c62d7f340a6560c61e2e925d8608f1024cCassie public static ArrayList<CellInfo> convertHalCellInfoList( 529621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ArrayList<android.hardware.radio.V1_0.CellInfo> records) { 529721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ArrayList<CellInfo> response = new ArrayList<CellInfo>(records.size()); 529821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 529921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan for (android.hardware.radio.V1_0.CellInfo record : records) { 530021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan // first convert RIL CellInfo to Parcel 530121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan Parcel p = Parcel.obtain(); 530221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(record.cellInfoType); 530321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(record.registered ? 1 : 0); 530421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(record.timeStampType); 530521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeLong(record.timeStamp); 530681b90daac5f0e09da0ea83327b8f31976194aadeEric Schwarzenbach p.writeInt(CellInfo.CONNECTION_UNKNOWN); 530721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan switch (record.cellInfoType) { 530821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case CellInfoType.GSM: { 530921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan CellInfoGsm cellInfoGsm = record.gsm.get(0); 5310e9c396cfd047b045c6df08a32ef546600f921bfaCassie writeToParcelForGsm( 5311e9c396cfd047b045c6df08a32ef546600f921bfaCassie p, 5312e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.lac, 5313e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.cid, 5314e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.arfcn, 5315e9c396cfd047b045c6df08a32ef546600f921bfaCassie Byte.toUnsignedInt(cellInfoGsm.cellIdentityGsm.bsic), 5316e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.mcc, 5317e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.mnc, 5318e9c396cfd047b045c6df08a32ef546600f921bfaCassie EMPTY_ALPHA_LONG, 5319e9c396cfd047b045c6df08a32ef546600f921bfaCassie EMPTY_ALPHA_SHORT, 5320e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.signalStrengthGsm.signalStrength, 5321e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.signalStrengthGsm.bitErrorRate, 5322e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.signalStrengthGsm.timingAdvance); 532321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 532421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 532521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 532621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case CellInfoType.CDMA: { 532721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan CellInfoCdma cellInfoCdma = record.cdma.get(0); 5328e9c396cfd047b045c6df08a32ef546600f921bfaCassie writeToParcelForCdma( 5329e9c396cfd047b045c6df08a32ef546600f921bfaCassie p, 5330e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.networkId, 5331e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.systemId, 5332e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.baseStationId, 5333e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.longitude, 5334e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.latitude, 5335e9c396cfd047b045c6df08a32ef546600f921bfaCassie EMPTY_ALPHA_LONG, 5336e9c396cfd047b045c6df08a32ef546600f921bfaCassie EMPTY_ALPHA_SHORT, 5337e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.signalStrengthCdma.dbm, 5338e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.signalStrengthCdma.ecio, 5339e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.signalStrengthEvdo.dbm, 5340e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.signalStrengthEvdo.ecio, 5341e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.signalStrengthEvdo.signalNoiseRatio); 534221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 534321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 534421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 534521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case CellInfoType.LTE: { 534621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan CellInfoLte cellInfoLte = record.lte.get(0); 5347e9c396cfd047b045c6df08a32ef546600f921bfaCassie writeToParcelForLte( 5348e9c396cfd047b045c6df08a32ef546600f921bfaCassie p, 5349e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.ci, 5350e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.pci, 5351e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.tac, 5352e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.earfcn, 535381b90daac5f0e09da0ea83327b8f31976194aadeEric Schwarzenbach Integer.MAX_VALUE, 5354e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.mcc, 5355e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.mnc, 5356e9c396cfd047b045c6df08a32ef546600f921bfaCassie EMPTY_ALPHA_LONG, 5357e9c396cfd047b045c6df08a32ef546600f921bfaCassie EMPTY_ALPHA_SHORT, 5358e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.signalStrength, 5359e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.rsrp, 5360e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.rsrq, 5361e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.rssnr, 5362e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.cqi, 5363e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.timingAdvance); 536421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 536521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 536621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 536721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case CellInfoType.WCDMA: { 536821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan CellInfoWcdma cellInfoWcdma = record.wcdma.get(0); 5369e9c396cfd047b045c6df08a32ef546600f921bfaCassie writeToParcelForWcdma( 5370e9c396cfd047b045c6df08a32ef546600f921bfaCassie p, 5371e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.lac, 5372e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.cid, 5373e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.psc, 5374e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.uarfcn, 5375e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.mcc, 5376e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.mnc, 5377e9c396cfd047b045c6df08a32ef546600f921bfaCassie EMPTY_ALPHA_LONG, 5378e9c396cfd047b045c6df08a32ef546600f921bfaCassie EMPTY_ALPHA_SHORT, 5379e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.signalStrengthWcdma.signalStrength, 5380e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.signalStrengthWcdma.bitErrorRate); 5381e9c396cfd047b045c6df08a32ef546600f921bfaCassie break; 5382e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5383e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5384e9c396cfd047b045c6df08a32ef546600f921bfaCassie default: 5385e9c396cfd047b045c6df08a32ef546600f921bfaCassie throw new RuntimeException("unexpected cellinfotype: " + record.cellInfoType); 5386e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5387e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5388e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.setDataPosition(0); 5389e9c396cfd047b045c6df08a32ef546600f921bfaCassie CellInfo InfoRec = CellInfo.CREATOR.createFromParcel(p); 5390e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.recycle(); 5391e9c396cfd047b045c6df08a32ef546600f921bfaCassie response.add(InfoRec); 5392e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5393e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5394e9c396cfd047b045c6df08a32ef546600f921bfaCassie return response; 5395e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5396e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5397e9c396cfd047b045c6df08a32ef546600f921bfaCassie /** 5398e9c396cfd047b045c6df08a32ef546600f921bfaCassie * Convert CellInfo defined in 1.2/types.hal to CellInfo type. 5399e9c396cfd047b045c6df08a32ef546600f921bfaCassie * @param records List of CellInfo defined in 1.2/types.hal 5400e9c396cfd047b045c6df08a32ef546600f921bfaCassie * @return List of converted CellInfo object 5401e9c396cfd047b045c6df08a32ef546600f921bfaCassie */ 5402e9c396cfd047b045c6df08a32ef546600f921bfaCassie @VisibleForTesting 5403e9c396cfd047b045c6df08a32ef546600f921bfaCassie public static ArrayList<CellInfo> convertHalCellInfoList_1_2( 5404e9c396cfd047b045c6df08a32ef546600f921bfaCassie ArrayList<android.hardware.radio.V1_2.CellInfo> records) { 5405e9c396cfd047b045c6df08a32ef546600f921bfaCassie ArrayList<CellInfo> response = new ArrayList<CellInfo>(records.size()); 5406e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5407e9c396cfd047b045c6df08a32ef546600f921bfaCassie for (android.hardware.radio.V1_2.CellInfo record : records) { 5408e9c396cfd047b045c6df08a32ef546600f921bfaCassie // first convert RIL CellInfo to Parcel 5409e9c396cfd047b045c6df08a32ef546600f921bfaCassie Parcel p = Parcel.obtain(); 5410e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(record.cellInfoType); 5411e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(record.registered ? 1 : 0); 5412e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeInt(record.timeStampType); 5413e9c396cfd047b045c6df08a32ef546600f921bfaCassie p.writeLong(record.timeStamp); 541481b90daac5f0e09da0ea83327b8f31976194aadeEric Schwarzenbach p.writeInt(record.connectionStatus); 5415e9c396cfd047b045c6df08a32ef546600f921bfaCassie switch (record.cellInfoType) { 5416e9c396cfd047b045c6df08a32ef546600f921bfaCassie case CellInfoType.GSM: { 5417e9c396cfd047b045c6df08a32ef546600f921bfaCassie android.hardware.radio.V1_2.CellInfoGsm cellInfoGsm = record.gsm.get(0); 5418e9c396cfd047b045c6df08a32ef546600f921bfaCassie writeToParcelForGsm( 5419e9c396cfd047b045c6df08a32ef546600f921bfaCassie p, 5420e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.base.lac, 5421e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.base.cid, 5422e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.base.arfcn, 5423e9c396cfd047b045c6df08a32ef546600f921bfaCassie Byte.toUnsignedInt(cellInfoGsm.cellIdentityGsm.base.bsic), 5424e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.base.mcc, 5425e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.base.mnc, 5426e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.operatorNames.alphaLong, 5427e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.cellIdentityGsm.operatorNames.alphaShort, 5428e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.signalStrengthGsm.signalStrength, 5429e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.signalStrengthGsm.bitErrorRate, 5430e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoGsm.signalStrengthGsm.timingAdvance); 5431e9c396cfd047b045c6df08a32ef546600f921bfaCassie break; 5432e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5433e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5434e9c396cfd047b045c6df08a32ef546600f921bfaCassie case CellInfoType.CDMA: { 5435e9c396cfd047b045c6df08a32ef546600f921bfaCassie android.hardware.radio.V1_2.CellInfoCdma cellInfoCdma = record.cdma.get(0); 5436e9c396cfd047b045c6df08a32ef546600f921bfaCassie writeToParcelForCdma( 5437e9c396cfd047b045c6df08a32ef546600f921bfaCassie p, 5438e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.base.networkId, 5439e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.base.systemId, 5440e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.base.baseStationId, 5441e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.base.longitude, 5442e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.base.latitude, 5443e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.operatorNames.alphaLong, 5444e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.cellIdentityCdma.operatorNames.alphaShort, 5445e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.signalStrengthCdma.dbm, 5446e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.signalStrengthCdma.ecio, 5447e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.signalStrengthEvdo.dbm, 5448e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.signalStrengthEvdo.ecio, 5449e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoCdma.signalStrengthEvdo.signalNoiseRatio); 5450e9c396cfd047b045c6df08a32ef546600f921bfaCassie break; 5451e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5452e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5453e9c396cfd047b045c6df08a32ef546600f921bfaCassie case CellInfoType.LTE: { 5454e9c396cfd047b045c6df08a32ef546600f921bfaCassie android.hardware.radio.V1_2.CellInfoLte cellInfoLte = record.lte.get(0); 5455e9c396cfd047b045c6df08a32ef546600f921bfaCassie writeToParcelForLte( 5456e9c396cfd047b045c6df08a32ef546600f921bfaCassie p, 5457e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.base.ci, 5458e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.base.pci, 5459e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.base.tac, 5460e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.base.earfcn, 546181b90daac5f0e09da0ea83327b8f31976194aadeEric Schwarzenbach cellInfoLte.cellIdentityLte.bandwidth, 5462e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.base.mcc, 5463e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.base.mnc, 5464e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.operatorNames.alphaLong, 5465e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.cellIdentityLte.operatorNames.alphaShort, 5466e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.signalStrength, 5467e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.rsrp, 5468e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.rsrq, 5469e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.rssnr, 5470e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.cqi, 5471e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoLte.signalStrengthLte.timingAdvance); 5472e9c396cfd047b045c6df08a32ef546600f921bfaCassie break; 5473e9c396cfd047b045c6df08a32ef546600f921bfaCassie } 5474e9c396cfd047b045c6df08a32ef546600f921bfaCassie 5475e9c396cfd047b045c6df08a32ef546600f921bfaCassie case CellInfoType.WCDMA: { 5476e9c396cfd047b045c6df08a32ef546600f921bfaCassie android.hardware.radio.V1_2.CellInfoWcdma cellInfoWcdma = record.wcdma.get(0); 5477e9c396cfd047b045c6df08a32ef546600f921bfaCassie writeToParcelForWcdma( 5478e9c396cfd047b045c6df08a32ef546600f921bfaCassie p, 5479e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.base.lac, 5480e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.base.cid, 5481e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.base.psc, 5482e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.base.uarfcn, 5483e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.base.mcc, 5484e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.base.mnc, 5485e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.operatorNames.alphaLong, 5486e9c396cfd047b045c6df08a32ef546600f921bfaCassie cellInfoWcdma.cellIdentityWcdma.operatorNames.alphaShort, 5487e6702220aa471f98579102516afa8aa268820856Wei Huang cellInfoWcdma.signalStrengthWcdma.base.signalStrength, 5488e6702220aa471f98579102516afa8aa268820856Wei Huang cellInfoWcdma.signalStrengthWcdma.base.bitErrorRate); 548921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 549021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 5491522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan 5492522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan default: 5493522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("unexpected cellinfotype: " + record.cellInfoType); 549421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 549521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 54965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe p.setDataPosition(0); 549721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan CellInfo InfoRec = CellInfo.CREATOR.createFromParcel(p); 54985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe p.recycle(); 549921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan response.add(InfoRec); 550021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 550121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 550221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan return response; 550321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 5504a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 550520d8d294bf13299396436ec4c31cb524377c7502Nathan Harold /** Convert HAL 1.0 Signal Strength to android SignalStrength */ 550620d8d294bf13299396436ec4c31cb524377c7502Nathan Harold @VisibleForTesting 550720d8d294bf13299396436ec4c31cb524377c7502Nathan Harold public static SignalStrength convertHalSignalStrength( 5508a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan android.hardware.radio.V1_0.SignalStrength signalStrength) { 550987162ecfbaa9b28580d905167ae5692dd355fea0Nathan Harold int tdscdmaRscp_1_2 = 255; // 255 is the value for unknown/unreported ASU. 551087162ecfbaa9b28580d905167ae5692dd355fea0Nathan Harold // The HAL 1.0 range is 25..120; the ASU/ HAL 1.2 range is 0..96; 551187162ecfbaa9b28580d905167ae5692dd355fea0Nathan Harold // yes, this means the range in 1.0 cannot express -24dBm = 96 551287162ecfbaa9b28580d905167ae5692dd355fea0Nathan Harold if (signalStrength.tdScdma.rscp >= 25 && signalStrength.tdScdma.rscp <= 120) { 551387162ecfbaa9b28580d905167ae5692dd355fea0Nathan Harold // First we flip the sign to convert from the HALs -rscp to the actual RSCP value. 551487162ecfbaa9b28580d905167ae5692dd355fea0Nathan Harold int rscpDbm = -signalStrength.tdScdma.rscp; 551587162ecfbaa9b28580d905167ae5692dd355fea0Nathan Harold // Then to convert from RSCP to ASU, we apply the offset which aligns 0 ASU to -120dBm. 551687162ecfbaa9b28580d905167ae5692dd355fea0Nathan Harold tdscdmaRscp_1_2 = rscpDbm + 120; 551787162ecfbaa9b28580d905167ae5692dd355fea0Nathan Harold } 5518e6702220aa471f98579102516afa8aa268820856Wei Huang return new SignalStrength( 5519e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.gw.signalStrength, 5520a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.gw.bitErrorRate, 5521a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.cdma.dbm, 5522a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.cdma.ecio, 5523a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.evdo.dbm, 5524a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.evdo.ecio, 5525a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.evdo.signalNoiseRatio, 5526a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.lte.signalStrength, 5527a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.lte.rsrp, 5528a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.lte.rsrq, 5529a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.lte.rssnr, 5530a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.lte.cqi, 553187162ecfbaa9b28580d905167ae5692dd355fea0Nathan Harold tdscdmaRscp_1_2); 5532a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 5533e6702220aa471f98579102516afa8aa268820856Wei Huang 553420d8d294bf13299396436ec4c31cb524377c7502Nathan Harold /** Convert HAL 1.2 Signal Strength to android SignalStrength */ 553520d8d294bf13299396436ec4c31cb524377c7502Nathan Harold @VisibleForTesting 553620d8d294bf13299396436ec4c31cb524377c7502Nathan Harold public static SignalStrength convertHalSignalStrength_1_2( 5537e6702220aa471f98579102516afa8aa268820856Wei Huang android.hardware.radio.V1_2.SignalStrength signalStrength) { 5538e6702220aa471f98579102516afa8aa268820856Wei Huang return new SignalStrength( 5539e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.gsm.signalStrength, 5540e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.gsm.bitErrorRate, 5541e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.cdma.dbm, 5542e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.cdma.ecio, 5543e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.evdo.dbm, 5544e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.evdo.ecio, 5545e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.evdo.signalNoiseRatio, 5546e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.lte.signalStrength, 5547e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.lte.rsrp, 5548e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.lte.rsrq, 5549e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.lte.rssnr, 5550e6702220aa471f98579102516afa8aa268820856Wei Huang signalStrength.lte.cqi, 555185fae19c81c9b12acdfc675ff4ab62b00475443dWei Huang signalStrength.tdScdma.rscp, 555285fae19c81c9b12acdfc675ff4ab62b00475443dWei Huang signalStrength.wcdma.base.signalStrength, 555385fae19c81c9b12acdfc675ff4ab62b00475443dWei Huang signalStrength.wcdma.rscp); 5554e6702220aa471f98579102516afa8aa268820856Wei Huang } 55550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 5556