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; 4299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.LceDataInfo; 438e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport android.hardware.radio.V1_0.MvnoType; 445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.NvWriteItem; 45d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioError; 46d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioIndicationType; 47d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioResponseInfo; 48d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.RadioResponseType; 49e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran Cimport android.hardware.radio.V1_0.ResetNvType; 505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.SelectUiccSub; 5199607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yuimport android.hardware.radio.V1_0.SetupDataCallResult; 525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.SimApdu; 535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padaweimport android.hardware.radio.V1_0.SmsWriteArgs; 54d60a877c59822d2157b8af86f2c3834b04011051Sanket Padaweimport android.hardware.radio.V1_0.UusInfo; 558e9d1e601dce62cd0328701d7054e03db24727c7Jack Yuimport android.hardware.radio.deprecated.V1_0.IOemHook; 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.ConnectivityManager; 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult; 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler; 590012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajanimport android.os.HwBinder; 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message; 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Parcel; 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager; 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager.WakeLock; 640012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajanimport android.os.RemoteException; 6527eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadhamimport android.os.SystemClock; 66f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.os.SystemProperties; 671bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport android.os.WorkSource; 6840659286ac42ec77bbe7893830bd50c06f393ee8Meng Wangimport android.service.carrier.CarrierIdentifier; 695fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Savilleimport android.telephony.CellInfo; 701bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kallaimport android.telephony.ClientRequestStats; 71f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport android.telephony.ModemActivityInfo; 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.NeighboringCellInfo; 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.PhoneNumberUtils; 743ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwaltimport android.telephony.RadioAccessFamily; 75fa4fd4721082689c4b276f67b845e7be249cb8daWink Savilleimport android.telephony.Rlog; 765b81adc82a53b3064f4baa3acfeabef31586588aUma Maheswari Ramalingamimport android.telephony.SignalStrength; 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.SmsManager; 78d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padaweimport android.telephony.TelephonyHistogram; 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils; 807cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwaltimport android.util.SparseArray; 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 82f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.cdma.CdmaInformationRecords; 83f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo; 84f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.dataconnection.DataCallResponse; 85f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.dataconnection.DataProfile; 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; 87f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport com.android.internal.telephony.metrics.TelephonyMetrics; 889460a22f3c1ae70dde80e34557d7011be113b39aTamas Berghammerimport com.android.internal.telephony.nano.TelephonyProto.SmsSession; 89d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccUtils; 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.ByteArrayInputStream; 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.DataInputStream; 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor; 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.IOException; 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter; 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList; 9727eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadhamimport java.util.Arrays; 98d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padaweimport java.util.List; 99f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yuimport java.util.Random; 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicBoolean; 1017cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwaltimport java.util.concurrent.atomic.AtomicInteger; 1020012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajanimport java.util.concurrent.atomic.AtomicLong; 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 10732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleclass RILRequest { 109cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville static final String LOG_TAG = "RilRequest"; 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //***** Class Variables 1127cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt static Random sRandom = new Random(); 1137cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt static AtomicInteger sNextSerial = new AtomicInteger(0); 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static Object sPoolSync = new Object(); 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static RILRequest sPool = null; 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static int sPoolSize = 0; 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int MAX_POOL_SIZE = 4; 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //***** Instance Variables 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int mSerial; 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int mRequest; 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message mResult; 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville RILRequest mNext; 12432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold int mWakeLockType; 1258e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran WorkSource mWorkSource; 1261b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla String mClientId; 127d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe // time in ms when RIL request was made 128d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe long mStartTimeMs; 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves a new RILRequest instance from the pool. 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param request RIL_REQUEST_* 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param result sent when operation completes 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return a RILRequest instance from the pool. 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1378e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran private static RILRequest obtain(int request, Message result) { 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville RILRequest rr = null; 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville synchronized(sPoolSync) { 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (sPool != null) { 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville rr = sPool; 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sPool = rr.mNext; 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville rr.mNext = null; 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sPoolSize--; 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (rr == null) { 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville rr = new RILRequest(); 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1537cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt rr.mSerial = sNextSerial.getAndIncrement(); 1547cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville rr.mRequest = request; 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville rr.mResult = result; 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold rr.mWakeLockType = RIL.INVALID_WAKELOCK; 1598e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran rr.mWorkSource = null; 160d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe rr.mStartTimeMs = SystemClock.elapsedRealtime(); 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (result != null && result.getTarget() == null) { 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new NullPointerException("Message target must not be null"); 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return rr; 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1681b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla 1691b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla /** 1701b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla * Retrieves a new RILRequest instance from the pool and sets the clientId 1711b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla * 1721b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla * @param request RIL_REQUEST_* 1731b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla * @param result sent when operation completes 1748e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran * @param workSource WorkSource to track the client 1751b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla * @return a RILRequest instance from the pool. 1761b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla */ 1778e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran static RILRequest obtain(int request, Message result, WorkSource workSource) { 1781b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla RILRequest rr = null; 1791b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla 1801b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla rr = obtain(request, result); 1818e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran if(workSource != null) { 1828e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran rr.mWorkSource = workSource; 1838e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran rr.mClientId = String.valueOf(workSource.get(0)) + ":" + workSource.getName(0); 1848e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran } else { 1858e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran Rlog.e(LOG_TAG, "null workSource " + request); 1861b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla } 1871b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla 1881b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla return rr; 1891b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla } 1901b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns a RILRequest instance to the pool. 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Note: This should only be called once per use. 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void release() { 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville synchronized (sPoolSync) { 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (sPoolSize < MAX_POOL_SIZE) { 19922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mNext = sPool; 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sPool = this; 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sPoolSize++; 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mResult = null; 20332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold if(mWakeLockType != RIL.INVALID_WAKELOCK) { 20432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold //This is OK for some wakelock types and not others 20532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold if(mWakeLockType == RIL.FOR_WAKELOCK) { 20632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold Rlog.e(LOG_TAG, "RILRequest releasing with held wake lock: " 20732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold + serialString()); 20832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold } 20932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold } 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private RILRequest() { 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static void 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville resetSerial() { 2197cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // use a random so that on recovery we probably don't mix old requests 2207cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // with new. 2217cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt sNextSerial.set(sRandom.nextInt()); 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville serialString() { 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //Cheesy way to do %04d 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville StringBuilder sb = new StringBuilder(8); 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String sn; 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2307cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt long adjustedSerial = (((long)mSerial) - Integer.MIN_VALUE)%10000; 2317cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt 2327cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt sn = Long.toString(adjustedSerial); 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //sb.append("J["); 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append('['); 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0, s = sn.length() ; i < 4 - s; i++) { 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append('0'); 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(sn); 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(']'); 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return sb.toString(); 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville onError(int error, Object ret) { 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CommandException ex; 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ex = CommandException.fromRilErrno(error); 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 251fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville if (RIL.RILJ_LOGD) Rlog.d(LOG_TAG, serialString() + "< " 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + RIL.requestToString(mRequest) 2533522c54a64f577f2b657a775dae9b4eb2d8003d5Wink Saville + " error: " + ex + " ret=" + RIL.retToString(mRequest, ret)); 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mResult != null) { 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult.forMessage(mResult, ret, ex); 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mResult.sendToTarget(); 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * RIL implementation of the CommandsInterface. 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic final class RIL extends BaseCommands implements CommandsInterface { 269fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville static final String RILJ_LOG_TAG = "RILJ"; 270a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe // Have a separate wakelock instance for Ack 271a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe static final String RILJ_ACK_WAKELOCK_NAME = "RILJ_ACK_WL"; 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final boolean RILJ_LOGD = true; 273cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville static final boolean RILJ_LOGV = false; // STOPSHIP if true 274d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe static final int RIL_HISTOGRAM_BUCKET_COUNT = 5; 2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Wake lock timeout should be longer than the longest timeout in 2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the vendor ril. 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2803464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe private static final int DEFAULT_WAKE_LOCK_TIMEOUT_MS = 60000; 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 282a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe // Wake lock default timeout associated with ack 2833464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe private static final int DEFAULT_ACK_WAKE_LOCK_TIMEOUT_MS = 200; 284a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe 28532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold private static final int DEFAULT_BLOCKING_MESSAGE_RESPONSE_TIMEOUT_MS = 2000; 28632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 287a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe // Variables used to differentiate ack messages from request while calling clearWakeLock() 28832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold public static final int INVALID_WAKELOCK = -1; 28932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold public static final int FOR_WAKELOCK = 0; 29032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold public static final int FOR_ACK_WAKELOCK = 1; 2911b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla private final ClientWakelockTracker mClientWakelockTracker = new ClientWakelockTracker(); 292a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //***** Instance Variables 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 295a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe final WakeLock mWakeLock; // Wake lock associated with request/response 296a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe final WakeLock mAckWakeLock; // Wake lock associated with ack sent 297a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe final int mWakeLockTimeout; // Timeout associated with request/response 298a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe final int mAckWakeLockTimeout; // Timeout associated with ack sent 2997cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // The number of wakelock requests currently active. Don't release the lock 3007cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // until dec'd to 0 3017cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt int mWakeLockCount; 3027cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt 303a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe // Variables used to identify releasing of WL on wakelock timeouts 304a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe volatile int mWlSequenceNum = 0; 305a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe volatile int mAckWlSequenceNum = 0; 306a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe 3077cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt SparseArray<RILRequest> mRequestList = new SparseArray<RILRequest>(); 308d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe static SparseArray<TelephonyHistogram> mRilTimeHistograms = new 309d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe SparseArray<TelephonyHistogram>(); 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 311d39109502855e8d81e45e21161d8bf0cfacf42e0Sanket Padawe Object[] mLastNITZTimeInfo; 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // When we are testing emergency calls 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AtomicBoolean mTestingEmergencyCall = new AtomicBoolean(false); 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe final Integer mPhoneId; 317a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 3188e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran /* default work source which will blame phone process */ 3198e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran private WorkSource mRILDefaultWorkSource; 3205054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 3218e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran /* Worksource containing all applications causing wakelock to be held */ 3228e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran private WorkSource mActiveWakelockWorkSource; 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3243fe0578ea48570cd5d8c8dfd8b53b8984915330fJack Yu /** Telephony metrics instance for logging metrics event */ 325f2d0fa64860a12423fb8709766d6af90fba5e6cfJack Yu private TelephonyMetrics mMetrics = TelephonyMetrics.getInstance(); 3265054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 3270d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan boolean mIsMobileNetworkSupported; 3280d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan RadioResponse mRadioResponse; 3290d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan RadioIndication mRadioIndication; 3300d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan volatile IRadio mRadioProxy = null; 3310d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan OemHookResponse mOemHookResponse; 3320d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan OemHookIndication mOemHookIndication; 3330d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan volatile IOemHook mOemHookProxy = null; 3340d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan final AtomicLong mRadioProxyCookie = new AtomicLong(0); 3350d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan final RadioProxyDeathRecipient mRadioProxyDeathRecipient; 3360d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan final RilHandler mRilHandler; 3370d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan 3388e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran //***** Events 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int EVENT_WAKE_LOCK_TIMEOUT = 2; 340a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe static final int EVENT_ACK_WAKE_LOCK_TIMEOUT = 4; 34132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold static final int EVENT_BLOCKING_RESPONSE_TIMEOUT = 5; 3420012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan static final int EVENT_RADIO_PROXY_DEAD = 6; 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //***** Constants 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 346606cb716e62998ea9813deeb858c45dd4ac5470eAmit Mahajan static final String[] HIDL_SERVICE_NAME = {"slot1", "slot2", "slot3"}; 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3480d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan static final int IRADIO_GET_SERVICE_DELAY_MILLIS = 4 * 1000; 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 350d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe public static List<TelephonyHistogram> getTelephonyRILTimingHistograms() { 351d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe List<TelephonyHistogram> list; 352d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe synchronized (mRilTimeHistograms) { 353d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe list = new ArrayList<>(mRilTimeHistograms.size()); 354d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe for (int i = 0; i < mRilTimeHistograms.size(); i++) { 355d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe TelephonyHistogram entry = new TelephonyHistogram(mRilTimeHistograms.valueAt(i)); 356d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe list.add(entry); 357d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 358d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 359d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe return list; 360d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 361d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe 362d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan class RilHandler extends Handler { 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //***** Handler implementation 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville handleMessage(Message msg) { 366d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan RILRequest rr; 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (msg.what) { 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_WAKE_LOCK_TIMEOUT: 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Haven't heard back from the last request. Assume we're 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // not getting a response and release the wake lock. 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3737cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // The timer of WAKE_LOCK_TIMEOUT is reset with each 3747cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // new send request. So when WAKE_LOCK_TIMEOUT occurs 3757cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // all requests in mRequestList already waited at 3763464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe // least DEFAULT_WAKE_LOCK_TIMEOUT_MS but no response. 3777cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // 3787cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // Note: Keep mRequestList so that delayed response 3797cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt // can still be handled when response finally comes. 3807cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt 3817cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt synchronized (mRequestList) { 382a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe if (msg.arg1 == mWlSequenceNum && clearWakeLock(FOR_WAKELOCK)) { 3837cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt if (RILJ_LOGD) { 3847cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt int count = mRequestList.size(); 3856613a961473a72c218ec505e384dad6b19049aa0Robert Greenwalt Rlog.d(RILJ_LOG_TAG, "WAKE_LOCK_TIMEOUT " + 3867cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt " mRequestList=" + count); 3877cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt for (int i = 0; i < count; i++) { 3887cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt rr = mRequestList.valueAt(i); 3896613a961473a72c218ec505e384dad6b19049aa0Robert Greenwalt Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] " 3907cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt + requestToString(rr.mRequest)); 3917cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt } 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 396a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe 397a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe case EVENT_ACK_WAKE_LOCK_TIMEOUT: 398a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe if (msg.arg1 == mAckWlSequenceNum && clearWakeLock(FOR_ACK_WAKELOCK)) { 39934dffd7066bcf421829e249f56288bc33735eaf4Sanket Padawe if (RILJ_LOGV) { 400a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe Rlog.d(RILJ_LOG_TAG, "ACK_WAKE_LOCK_TIMEOUT"); 401a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe } 402a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe } 403a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe break; 40432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 40532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold case EVENT_BLOCKING_RESPONSE_TIMEOUT: 40632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold int serial = msg.arg1; 40732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold rr = findAndRemoveRequestFromList(serial); 40832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold // If the request has already been processed, do nothing 40932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold if(rr == null) { 41032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold break; 41132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold } 41232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 41332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold //build a response if expected 41432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold if (rr.mResult != null) { 41532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold Object timeoutResponse = getResponseForTimedOutRILRequest(rr); 41632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold AsyncResult.forMessage( rr.mResult, timeoutResponse, null); 41732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold rr.mResult.sendToTarget(); 4185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeOnRilTimeoutResponse(mPhoneId, rr.mSerial, rr.mRequest); 41932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold } 42032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 42132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold decrementWakeLock(rr); 42232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold rr.release(); 42332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold break; 424d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan 425d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan case EVENT_RADIO_PROXY_DEAD: 426d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan riljLog("handleMessage: EVENT_RADIO_PROXY_DEAD cookie = " + msg.obj + 427d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan " mRadioProxyCookie = " + mRadioProxyCookie.get()); 428d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan if ((long) msg.obj == mRadioProxyCookie.get()) { 429d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan resetProxyAndRequestList(); 430d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan 431d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan // todo: rild should be back up since message was sent with a delay. this is 432d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan // a hack. 433d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan getRadioProxy(null); 434b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan getOemHookProxy(null); 435d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan } 436d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan break; 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 44232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * In order to prevent calls to Telephony from waiting indefinitely 44332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * low-latency blocking calls will eventually time out. In the event of 44432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * a timeout, this function generates a response that is returned to the 44532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * higher layers to unblock the call. This is in lieu of a meaningful 44632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * response. 44732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * @param rr The RIL Request that has timed out. 44832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * @return A default object, such as the one generated by a normal response 44932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold * that is returned to the higher layers. 45032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold **/ 45132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold private static Object getResponseForTimedOutRILRequest(RILRequest rr) { 45232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold if (rr == null ) return null; 45332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 45432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold Object timeoutResponse = null; 45532c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold switch(rr.mRequest) { 45632c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold case RIL_REQUEST_GET_ACTIVITY_INFO: 45732c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold timeoutResponse = new ModemActivityInfo( 45832c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 0, 0, 0, new int [ModemActivityInfo.TX_POWER_LEVELS], 0, 0); 45932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold break; 46032c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold }; 46132c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold return timeoutResponse; 46232c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold } 46332c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 4640012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan final class RadioProxyDeathRecipient implements HwBinder.DeathRecipient { 4650012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan @Override 4660012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan public void serviceDied(long cookie) { 4670012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan // Deal with service going away 4680012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan riljLog("serviceDied"); 4690012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan // todo: temp hack to send delayed message so that rild is back up by then 4700012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan //mRilHandler.sendMessage(mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD, cookie)); 4710012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRilHandler.sendMessageDelayed( 4720012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD, cookie), 4730012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan IRADIO_GET_SERVICE_DELAY_MILLIS); 4740012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } 475a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 476a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 4770012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan private void resetProxyAndRequestList() { 4780012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxy = null; 479f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan mOemHookProxy = null; 48075a34bca6e996289e3ad200ab545aa154d2fba58Amit Mahajan 481c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan // increment the cookie so that death notification can be ignored 482c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan mRadioProxyCookie.incrementAndGet(); 483c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan 48475a34bca6e996289e3ad200ab545aa154d2fba58Amit Mahajan setRadioState(RadioState.RADIO_UNAVAILABLE); 48575a34bca6e996289e3ad200ab545aa154d2fba58Amit Mahajan 4860012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan RILRequest.resetSerial(); 4870012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan // Clear request list on close 4880012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan clearRequestList(RADIO_NOT_AVAILABLE, false); 489c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 4900012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan // todo: need to get service right away so setResponseFunctions() can be called for 4910012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan // unsolicited indications. getService() is not a blocking call, so it doesn't help to call 4920012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan // it here. Current hack is to call getService() on death notification after a delay. 4930012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } 494c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 4955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private IRadio getRadioProxy(Message result) { 4960ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan if (!mIsMobileNetworkSupported) { 497b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan if (RILJ_LOGV) riljLog("getRadioProxy: Not calling getService(): wifi-only"); 498447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu if (result != null) { 499447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu AsyncResult.forMessage(result, null, 500447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu CommandException.fromRilErrno(RADIO_NOT_AVAILABLE)); 501447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu result.sendToTarget(); 502447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu } 5030ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan return null; 5040ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan } 5050ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan 5060012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan if (mRadioProxy != null) { 5070012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan return mRadioProxy; 5080012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } 5090d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan 510c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan try { 511606cb716e62998ea9813deeb858c45dd4ac5470eAmit Mahajan mRadioProxy = IRadio.getService(HIDL_SERVICE_NAME[mPhoneId == null ? 0 : mPhoneId]); 5120012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan if (mRadioProxy != null) { 5130012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxy.linkToDeath(mRadioProxyDeathRecipient, 5140012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxyCookie.incrementAndGet()); 5150012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxy.setResponseFunctions(mRadioResponse, mRadioIndication); 516c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } else { 517f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan riljLoge("getRadioProxy: mRadioProxy == null"); 518c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 5190012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 5200012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxy = null; 5210d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan riljLoge("RadioProxy getService/setResponseFunctions: " + e); 5220d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan } 5235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 5240d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan if (mRadioProxy == null) { 5255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (result != null) { 5265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe AsyncResult.forMessage(result, null, 5275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CommandException.fromRilErrno(RADIO_NOT_AVAILABLE)); 5285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe result.sendToTarget(); 5295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 5305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 5315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // if service is not up, treat it like death notification to try to get service again 5325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRilHandler.sendMessageDelayed( 533c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD, 534c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan mRadioProxyCookie.incrementAndGet()), 5355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRADIO_GET_SERVICE_DELAY_MILLIS); 536c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 5370d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan 5380012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan return mRadioProxy; 5390012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } 5400012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan 541f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan private IOemHook getOemHookProxy(Message result) { 542b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan if (!mIsMobileNetworkSupported) { 543b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan if (RILJ_LOGV) riljLog("getOemHookProxy: Not calling getService(): wifi-only"); 544447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu if (result != null) { 545447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu AsyncResult.forMessage(result, null, 546447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu CommandException.fromRilErrno(RADIO_NOT_AVAILABLE)); 547447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu result.sendToTarget(); 548447f1b35d518ab3049c22956b66fa76019e0bba2fionaxu } 549b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan return null; 550b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan } 551b1438f640c98e884f47109e9c9fc4a52fb0aa4efAmit Mahajan 552f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan if (mOemHookProxy != null) { 553f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan return mOemHookProxy; 554f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 5550d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan 556f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan try { 557f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan mOemHookProxy = IOemHook.getService( 558606cb716e62998ea9813deeb858c45dd4ac5470eAmit Mahajan HIDL_SERVICE_NAME[mPhoneId == null ? 0 : mPhoneId]); 559f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan if (mOemHookProxy != null) { 560f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan // not calling linkToDeath() as ril service runs in the same process and death 561f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan // notification for that should be sufficient 562f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan mOemHookProxy.setResponseFunctions(mOemHookResponse, mOemHookIndication); 563f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } else { 564f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan riljLoge("getOemHookProxy: mOemHookProxy == null"); 565f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 566f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } catch (RemoteException | RuntimeException e) { 567f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan mOemHookProxy = null; 5680d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan riljLoge("OemHookProxy getService/setResponseFunctions: " + e); 5690d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan } 570f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan 5710d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan if (mOemHookProxy == null) { 572f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan if (result != null) { 573f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan AsyncResult.forMessage(result, null, 574f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan CommandException.fromRilErrno(RADIO_NOT_AVAILABLE)); 575f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan result.sendToTarget(); 576f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 577f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan 578f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan // if service is not up, treat it like death notification to try to get service again 579f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan mRilHandler.sendMessageDelayed( 580c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD, 581c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan mRadioProxyCookie.incrementAndGet()), 582f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan IRADIO_GET_SERVICE_DELAY_MILLIS); 583f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 5840d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan 585f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan return mOemHookProxy; 586f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 587f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan 5880012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan //***** Constructors 5890012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan 5900012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan public RIL(Context context, int preferredNetworkType, int cdmaSubscription) { 5910012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan this(context, preferredNetworkType, cdmaSubscription, null); 592c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 593c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 594a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public RIL(Context context, int preferredNetworkType, 595a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville int cdmaSubscription, Integer instanceId) { 5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super(context); 5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (RILJ_LOGD) { 598d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe riljLog("RIL: init preferredNetworkType=" + preferredNetworkType 599d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe + " cdmaSubscription=" + cdmaSubscription + ")"); 6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6017cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt 602a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mContext = context; 6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCdmaSubscription = cdmaSubscription; 6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreferredNetworkType = preferredNetworkType; 6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPhoneType = RILConstants.NO_PHONE; 6065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mPhoneId = instanceId; 6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6080ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan ConnectivityManager cm = (ConnectivityManager)context.getSystemService( 6090ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan Context.CONNECTIVITY_SERVICE); 6100ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan mIsMobileNetworkSupported = cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE); 6110ef065b1f452063d6f5ad717d8d90f059ffcd6ecAmit Mahajan 612c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan mRadioResponse = new RadioResponse(this); 613c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan mRadioIndication = new RadioIndication(this); 614f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan mOemHookResponse = new OemHookResponse(this); 615f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan mOemHookIndication = new OemHookIndication(this); 6160012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRilHandler = new RilHandler(); 6170012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan mRadioProxyDeathRecipient = new RadioProxyDeathRecipient(); 618c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); 620fa4fd4721082689c4b276f67b845e7be249cb8daWink Saville mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_LOG_TAG); 6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mWakeLock.setReferenceCounted(false); 622a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe mAckWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, RILJ_ACK_WAKELOCK_NAME); 623a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe mAckWakeLock.setReferenceCounted(false); 6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mWakeLockTimeout = SystemProperties.getInt(TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT, 6253464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe DEFAULT_WAKE_LOCK_TIMEOUT_MS); 626a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe mAckWakeLockTimeout = SystemProperties.getInt( 6273464cbb60f1bf1127fd9e10efb05925f6f911b37Sanket Padawe TelephonyProperties.PROPERTY_WAKE_LOCK_TIMEOUT, DEFAULT_ACK_WAKE_LOCK_TIMEOUT_MS); 6287cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt mWakeLockCount = 0; 6298e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran mRILDefaultWorkSource = new WorkSource(context.getApplicationInfo().uid, 6308e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran context.getPackageName()); 6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 632a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville TelephonyDevController tdc = TelephonyDevController.getInstance(); 633a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville tdc.registerRIL(this); 6340d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan 6350d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan // set radio callback; needed to set RadioIndication callback (should be done after 6360d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan // wakelock stuff is initialized above as callbacks are received on separate binder threads) 6370d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan getRadioProxy(null); 6380d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan getOemHookProxy(null); 6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setOnNITZTime(Handler h, int what, Object obj) { 6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.setOnNITZTime(h, what, obj); 6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Send the last NITZ time if we have it 6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mLastNITZTimeInfo != null) { 6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNITZTimeRegistrant 6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .notifyRegistrant( 6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville new AsyncResult (null, mLastNITZTimeInfo, null)); 6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 653c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan private void addRequest(RILRequest rr) { 654c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan acquireWakeLock(rr, FOR_WAKELOCK); 655c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan synchronized (mRequestList) { 656d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe rr.mStartTimeMs = SystemClock.elapsedRealtime(); 657c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan mRequestList.append(rr.mSerial, rr); 658c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 659c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 660c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 6615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private RILRequest obtainRequest(int request, Message result, WorkSource workSource) { 6625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = RILRequest.obtain(request, result, workSource); 6635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe addRequest(rr); 6645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return rr; 6655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 6665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 6675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void handleRadioProxyExceptionForRR(RILRequest rr, String caller, Exception e) { 6680d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan riljLoge(caller + ": " + e); 6695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe resetProxyAndRequestList(); 670c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan 671c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan // service most likely died, handle exception like death notification to try to get service 672c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan // again 673c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan mRilHandler.sendMessageDelayed( 674c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan mRilHandler.obtainMessage(EVENT_RADIO_PROXY_DEAD, 675c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan mRadioProxyCookie.incrementAndGet()), 676c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan IRADIO_GET_SERVICE_DELAY_MILLIS); 6775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 6785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 6795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private String convertNullToEmptyString(String string) { 6805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return string != null ? string : ""; 6815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 6825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 683cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void 6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getIccCardStatus(Message result) { 6865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 6875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 6885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_SIM_STATUS, result, 6895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 693c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan try { 694c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan radioProxy.getIccCardStatus(rr.mSerial); 6950012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 6965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getIccCardStatus", e); 697c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 698c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPin(String pin, Message result) { 7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPinForApp(pin, null, result); 7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPinForApp(String pin, String aid, Message result) { 7085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 7095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 7105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PIN, result, 7115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 714231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 715231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran + " aid = " + aid); 7165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 718d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 719d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.supplyIccPinForApp(rr.mSerial, 7205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(pin), 7215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 7220012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 7235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "supplyIccPinForApp", e); 724d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 725d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 7295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void supplyIccPuk(String puk, String newPin, Message result) { 7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPukForApp(puk, newPin, null, result); 7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 7345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void supplyIccPukForApp(String puk, String newPin, String aid, Message result) { 7355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 7365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 7375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PUK, result, 7385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 741231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 742231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran + " aid = " + aid); 7435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 745d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 746d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.supplyIccPukForApp(rr.mSerial, 7475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(puk), 7485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(newPin), 7495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 7500012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 7515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "supplyIccPukForApp", e); 752d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 753d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPin2(String pin, Message result) { 7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPin2ForApp(pin, null, result); 7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPin2ForApp(String pin, String aid, Message result) { 7635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 7645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 7655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PIN2, result, 7665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 769231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 770231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran + " aid = " + aid); 7715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 773d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 774d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.supplyIccPin2ForApp(rr.mSerial, 7755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(pin), 7765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 7770012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 7785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "supplyIccPin2ForApp", e); 779d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 780d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPuk2(String puk2, String newPin2, Message result) { 7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPuk2ForApp(puk2, newPin2, null, result); 7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville supplyIccPuk2ForApp(String puk, String newPin2, String aid, Message result) { 7905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 7915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 7925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_SIM_PUK2, result, 7935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 796231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 797231379c494dc7274ff97037c593c7e7b88d320d6Sooraj Sasindran + " aid = " + aid); 7985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 800d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 801d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.supplyIccPuk2ForApp(rr.mSerial, 8025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(puk), 8035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(newPin2), 8045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 8050012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 8065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "supplyIccPuk2ForApp", e); 807d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 808d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville changeIccPin(String oldPin, String newPin, Message result) { 8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville changeIccPinForApp(oldPin, newPin, null, result); 8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville changeIccPinForApp(String oldPin, String newPin, String aid, Message result) { 8185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 8195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 8205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CHANGE_SIM_PIN, result, 8215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 8245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " oldPin = " 8255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + oldPin + " newPin = " + newPin + " aid = " + aid); 8265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 828d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 829d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.changeIccPinForApp(rr.mSerial, 8305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(oldPin), 8315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(newPin), 8325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 8330012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 8345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "changeIccPinForApp", e); 835d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 836d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 8400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville changeIccPin2(String oldPin2, String newPin2, Message result) { 8410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville changeIccPin2ForApp(oldPin2, newPin2, null, result); 8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override public void 8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville changeIccPin2ForApp(String oldPin2, String newPin2, String aid, Message result) { 8465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 8475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 8485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CHANGE_SIM_PIN2, result, 8495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 8525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " oldPin = " 8535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + oldPin2 + " newPin = " + newPin2 + " aid = " + aid); 8545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 856d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 857d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.changeIccPin2ForApp(rr.mSerial, 8585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(oldPin2), 8595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(newPin2), 8605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 8610012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 8625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "changeIccPin2ForApp", e); 863d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 864d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 865d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 867d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe @Override 868d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe public void supplyNetworkDepersonalization(String netpin, Message result) { 8695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 8705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 8715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, result, 8725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 873d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 8745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 8755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " netpin = " 8765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + netpin); 8775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 878d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 879d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 880d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.supplyNetworkDepersonalization(rr.mSerial, 8815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(netpin)); 8820012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 8835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "supplyNetworkDepersonalization", e); 884d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 885d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 888cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 889d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe public void getCurrentCalls(Message result) { 8905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 8915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 8925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_CURRENT_CALLS, result, 8935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 8965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 8975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 899d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 900d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.getCurrentCalls(rr.mSerial); 9010012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 9025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getCurrentCalls", e); 903d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 904d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 905d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 907d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe @Override 908d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe public void dial(String address, int clirMode, Message result) { 909d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe dial(address, clirMode, null, result); 9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 912cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 913d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe public void dial(String address, int clirMode, UUSInfo uusInfo, Message result) { 9145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 9155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 9165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DIAL, result, 9175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Dial dialInfo = new Dial(); 9205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe dialInfo.address = convertNullToEmptyString(address); 9215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe dialInfo.clir = clirMode; 9225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (uusInfo != null) { 9235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe UusInfo info = new UusInfo(); 9245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.uusType = uusInfo.getType(); 9255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.uusDcs = uusInfo.getDcs(); 9265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.uusData = new String(uusInfo.getUserData()); 9275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe dialInfo.uusInfo.add(info); 9285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 9315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function arg for privacy 9325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 9335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 935d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 936d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe radioProxy.dial(rr.mSerial, dialInfo); 9370012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 9385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "dial", e); 939d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 940d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 9445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getIMSI(Message result) { 9455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe getIMSIForApp(null, result); 9465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 9495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getIMSIForApp(String aid, Message result) { 9505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 9515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 9525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_IMSI, result, 9535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 9545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 9555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 9565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() 9575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + "> " + requestToString(rr.mRequest) + " aid = " + aid); 9585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 9605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getImsiForApp(rr.mSerial, convertNullToEmptyString(aid)); 9615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 9625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getIMSIForApp", e); 9635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 964d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 9655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 966d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 9675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 9685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void hangupConnection(int gsmIndex, Message result) { 9695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 9705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 9715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_HANGUP, result, 9725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 9755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " gsmIndex = " 9765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + gsmIndex); 9775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 9805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.hangup(rr.mSerial, gsmIndex); 9815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 9825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "hangupConnection", e); 9835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 984d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 987cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void hangupWaitingOrBackground(Message result) { 9895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 9905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 9915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND, result, 9925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 995d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 9965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 9975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.hangupWaitingOrBackground(rr.mSerial); 9985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 9995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "hangupWaitingOrBackground", e); 10005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1004cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void hangupForegroundResumeBackground(Message result) { 10065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 10075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 10085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND, result, 10095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 10105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 10115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 10125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 10135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 10145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.hangupForegroundResumeBackground(rr.mSerial); 10155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 10165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "hangupForegroundResumeBackground", e); 10175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1021cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void switchWaitingOrHoldingAndActive(Message result) { 10235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 10245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 10255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE, result, 10265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 10315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.switchWaitingOrHoldingAndActive(rr.mSerial); 10325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 10335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "switchWaitingOrHoldingAndActive", e); 10345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1038cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void conference(Message result) { 10405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 10415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 10425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CONFERENCE, result, 10435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 10445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 10455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 10465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 10475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 10485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.conference(rr.mSerial); 10495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 10505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "conference", e); 10515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1055cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void rejectCall(Message result) { 10575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 10585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 10595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_UDUB, result, 10605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 10655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.rejectCall(rr.mSerial); 10665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 10675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "rejectCall", e); 10685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1072cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getLastCallFailCause(Message result) { 10745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 10755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 10765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_LAST_CALL_FAIL_CAUSE, result, 10775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 10780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 10825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getLastCallFailCause(rr.mSerial); 10835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 10845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getLastCallFailCause", e); 10855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1089cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1090a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan public void getSignalStrength(Message result) { 1091a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(result); 1092a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 1093a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_SIGNAL_STRENGTH, result, 1094a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1096a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1098a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 1099a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.getSignalStrength(rr.mSerial); 1100a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 1101a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "getSignalStrength", e); 1102a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 1103a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1106cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getVoiceRegistrationState(Message result) { 11085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 11095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 11105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_VOICE_REGISTRATION_STATE, result, 11115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 11120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 11140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 11165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getVoiceRegistrationState(rr.mSerial); 11175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 11185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getVoiceRegistrationState", e); 11195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1123cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getDataRegistrationState(Message result) { 11255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 11265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 11275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DATA_REGISTRATION_STATE, result, 11285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 11335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getDataRegistrationState(rr.mSerial); 11345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 11355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getDataRegistrationState", e); 11365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1140cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getOperator(Message result) { 11425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 11435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 11445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_OPERATOR, result, 11455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 11485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 11495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 11505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getOperator(rr.mSerial); 11515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 11525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getOperator", e); 11535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1157cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setRadioPower(boolean on, Message result) { 11595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 11605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 11615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_RADIO_POWER, result, 11625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 11630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 11655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 11665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " on = " + on); 11675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 11705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setRadioPower(rr.mSerial, on); 11715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 11725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setRadioPower", e); 11735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1177cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendDtmf(char c, Message result) { 11795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 11805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 11815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DTMF, result, 11825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 11830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 11855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function arg for privacy 11865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 11875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 11905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendDtmf(rr.mSerial, c + ""); 11915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 11925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendDtmf", e); 11935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 11950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private GsmSmsMessage constructGsmSendSmsRilRequest(String smscPdu, String pdu) { 11985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe GsmSmsMessage msg = new GsmSmsMessage(); 11995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.smscPdu = smscPdu == null ? "" : smscPdu; 12005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.pdu = pdu == null ? "" : pdu; 12015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return msg; 12020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1204cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendSMS(String smscPdu, String pdu, Message result) { 12065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 12075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 12085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SEND_SMS, result, 12095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 12100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function args for privacy 12125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 12130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe GsmSmsMessage msg = constructGsmSendSmsRilRequest(smscPdu, pdu); 12150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 12175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendSms(rr.mSerial, msg); 12185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_GSM, 12195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsSession.Event.Format.SMS_FORMAT_3GPP); 12205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 12215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendSMS", e); 12225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 12235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1226cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendSMSExpectMore(String smscPdu, String pdu, Message result) { 12285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 12295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 12305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SEND_SMS_EXPECT_MORE, result, 12315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 12320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function arg for privacy 12345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 12350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe GsmSmsMessage msg = constructGsmSendSmsRilRequest(smscPdu, pdu); 12375054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 12385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 12395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendSMSExpectMore(rr.mSerial, msg); 12405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_GSM, 12415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsSession.Event.Format.SMS_FORMAT_3GPP); 12425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 12435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendSMSExpectMore", e); 12445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 12455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 12460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12488e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu /** 12498e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * Convert MVNO type string into MvnoType defined in types.hal. 12508e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * @param mvnoType MVNO type 12518e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * @return MVNO type in integer 12528e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu */ 12538e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu private static int convertToHalMvnoType(String mvnoType) { 12548e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu switch (mvnoType) { 12558e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu case "imsi" : return MvnoType.IMSI; 12568e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu case "gid" : return MvnoType.GID; 12578e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu case "spn" : return MvnoType.SPN; 12588e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu default: return MvnoType.NONE; 12598e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 12608e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 12618e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 12628e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu /** 12638e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * Convert to DataProfileInfo defined in types.hal 12648e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * @param dp Data profile 12658e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * @return A converted data profile 12668e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu */ 12678e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu private static DataProfileInfo convertToHalDataProfile(DataProfile dp) { 12688e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu DataProfileInfo dpi = new DataProfileInfo(); 12698e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 12708e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.profileId = dp.profileId; 12718e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.apn = dp.apn; 12728e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.protocol = dp.protocol; 12738e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.roamingProtocol = dp.roamingProtocol; 12748e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.authType = dp.authType; 12758e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.user = dp.user; 12768e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.password = dp.password; 12778e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.type = dp.type; 12788e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.maxConnsTime = dp.maxConnsTime; 12798e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.maxConns = dp.maxConns; 12808e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.waitTime = dp.waitTime; 12818e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.enabled = dp.enabled; 12828e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.supportedApnTypesBitmap = dp.supportedApnTypesBitmap; 12838e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.bearerBitmap = dp.bearerBitmap; 12848e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.mtu = dp.mtu; 12858e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.mvnoType = convertToHalMvnoType(dp.mvnoType); 12868e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.mvnoMatchData = dp.mvnoMatchData; 12878e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 12888e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu return dpi; 12898e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 12908e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 12918e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu /** 1292e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * Convert NV reset type into ResetNvType defined in types.hal. 1293e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * @param resetType NV reset type. 1294e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * @return Converted reset type in integer or -1 if param is invalid. 1295e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C */ 1296e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C private static int convertToHalResetNvType(int resetType) { 1297e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C /** 1298e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * resetType values 1299e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * 1 - reload all NV items 1300e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * 2 - erase NV reset (SCRTN) 1301e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C * 3 - factory reset (RTN) 1302e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C */ 1303e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C switch (resetType) { 1304e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C case 1: return ResetNvType.RELOAD; 1305e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C case 2: return ResetNvType.ERASE; 1306e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C case 3: return ResetNvType.FACTORY_RESET; 1307e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C } 1308e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C return -1; 1309e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C } 1310e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C 1311e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C /** 13128e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * Convert SetupDataCallResult defined in types.hal into DataCallResponse 13138e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * @param dcResult setup data call result 13148e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * @return converted DataCallResponse object 13158e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu */ 13168e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu static DataCallResponse convertDataCallResult(SetupDataCallResult dcResult) { 13178e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu return new DataCallResponse(dcResult.status, 13188e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dcResult.suggestedRetryTime, 13198e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dcResult.cid, 13208e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dcResult.active, 13218e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dcResult.type, 13228e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dcResult.ifname, 13238e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dcResult.addresses, 13248e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dcResult.dnses, 13258e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dcResult.gateways, 13268e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dcResult.pcscf, 13278e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dcResult.mtu 13288e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu ); 13298e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 13308e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 1331cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13328e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public void setupDataCall(int radioTechnology, DataProfile dataProfile, boolean isRoaming, 13338e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu boolean allowRoaming, Message result) { 13348e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 1335a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(result); 1336a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 13378e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 1338a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_SETUP_DATA_CALL, result, 1339a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 1340a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 13418e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu // Convert to HAL data profile 13428e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu DataProfileInfo dpi = convertToHalDataProfile(dataProfile); 13438e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 1344a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 13458e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 13468e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu + ",radioTechnology=" + radioTechnology + ",isRoaming=" 13478e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu + isRoaming + ",allowRoaming=" + allowRoaming + "," + dataProfile); 1348a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 1349a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 1350a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 13518e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu radioProxy.setupDataCall(rr.mSerial, radioTechnology, dpi, 13528e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dataProfile.modemCognitive, allowRoaming, isRoaming); 13538e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu mMetrics.writeRilSetupDataCall(mPhoneId, rr.mSerial, radioTechnology, dpi.profileId, 13548e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpi.apn, dpi.authType, dpi.protocol); 1355a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 1356a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "setupDataCall", e); 1357a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 13588e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu } 13590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1361cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void iccIO(int command, int fileId, String path, int p1, int p2, int p3, 13635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String data, String pin2, Message result) { 13645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIOForApp(command, fileId, path, p1, p2, p3, data, pin2, null, result); 13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1367cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void iccIOForApp(int command, int fileId, String path, int p1, int p2, int p3, 13695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String data, String pin2, String aid, Message result) { 13705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 13715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 13725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_IO, result, 13735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 13740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 13765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> iccIO: " 13775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) + " command = 0x" 13785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + Integer.toHexString(command) + " fileId = 0x" 13795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + Integer.toHexString(fileId) + " path = " + path + " p1 = " 13805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + p1 + " p2 = " + p2 + " p3 = " + " data = " + data 13815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " aid = " + aid); 13825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 13830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IccIo iccIo = new IccIo(); 13855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.command = command; 13865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.fileId = fileId; 13875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.path = convertNullToEmptyString(path); 13885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.p1 = p1; 13895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.p2 = p2; 13905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.p3 = p3; 13915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.data = convertNullToEmptyString(data); 13925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.pin2 = convertNullToEmptyString(pin2); 13935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe iccIo.aid = convertNullToEmptyString(aid); 13940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 13965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.iccIOForApp(rr.mSerial, iccIo); 13975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 13985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "iccIOForApp", e); 13995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1403cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendUSSD(String ussd, Message result) { 14055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 14065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 14075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SEND_USSD, result, 14085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 14115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String logUssd = "*******"; 14125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGV) logUssd = ussd; 14135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 14145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " ussd = " + logUssd); 14155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 14185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendUssd(rr.mSerial, convertNullToEmptyString(ussd)); 14195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 14205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendUSSD", e); 14215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1425cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void cancelPendingUssd(Message result) { 14275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 14285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 14295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CANCEL_USSD, result, 14305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 14310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 14335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() 14345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + "> " + requestToString(rr.mRequest)); 14355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 14385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.cancelPendingUssd(rr.mSerial); 14395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 14405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "cancelPendingUssd", e); 14415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1445cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getCLIR(Message result) { 14475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 14485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 14495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_CLIR, result, 14505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 14510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 14530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 14555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getClir(rr.mSerial); 14565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 14575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getCLIR", e); 14585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1462cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCLIR(int clirMode, Message result) { 14645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 14655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 14665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_CLIR, result, mRILDefaultWorkSource); 14670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 14695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 14705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " clirMode = " + clirMode); 14715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 14745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setClir(rr.mSerial, clirMode); 14755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 14765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCLIR", e); 14775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1481cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryCallForwardStatus(int cfReason, int serviceClass, 14835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String number, Message result) { 14845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 14855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 14865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, result, 14875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 14880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 14905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 14915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " cfreason = " + cfReason + " serviceClass = " + serviceClass); 14925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 14930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe android.hardware.radio.V1_0.CallForwardInfo cfInfo = 14955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new android.hardware.radio.V1_0.CallForwardInfo(); 14965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.reason = cfReason; 14975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.serviceClass = serviceClass; 14985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.toa = PhoneNumberUtils.toaFromString(number); 14995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.number = convertNullToEmptyString(number); 15005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.timeSeconds = 0; 15015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 15025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 15035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCallForwardStatus(rr.mSerial, cfInfo); 15045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 15055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryCallForwardStatus", e); 15065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1510cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCallForward(int action, int cfReason, int serviceClass, 15125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String number, int timeSeconds, Message result) { 15135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 15145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 15155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_CALL_FORWARD, result, 15165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 15170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 15195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 15205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " action = " + action + " cfReason = " + cfReason + " serviceClass = " 15215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + serviceClass + " timeSeconds = " + timeSeconds); 15225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe android.hardware.radio.V1_0.CallForwardInfo cfInfo = 15255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new android.hardware.radio.V1_0.CallForwardInfo(); 15265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.status = action; 15275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.reason = cfReason; 15285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.serviceClass = serviceClass; 15295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cfInfo.toa = PhoneNumberUtils.toaFromString(number); 1530a5b70e4dc179942acc958d650bab1017be443e14Sooraj Sasindran cfInfo.number = convertNullToEmptyString(number); 15318489fba4bf4086d89973231cd627ce5898f34b5cSanket Padawe cfInfo.timeSeconds = timeSeconds; 15325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 15335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 15345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCallForward(rr.mSerial, cfInfo); 15355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 15365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCallForward", e); 15375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 15385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1542cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryCallWaiting(int serviceClass, Message result) { 15445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 15455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 15465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_CALL_WAITING, result, 15475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 1548a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 15495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 15505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 15515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " serviceClass = " + serviceClass); 15525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 1553a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 15545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 15555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCallWaiting(rr.mSerial, serviceClass); 15565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 15575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryCallWaiting", e); 15585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 1560a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1561a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1562a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 15635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCallWaiting(boolean enable, int serviceClass, Message result) { 15645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 15655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 15665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_CALL_WAITING, result, 15675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 15680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 15705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 15715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " enable = " + enable + " serviceClass = " + serviceClass); 15725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 15755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCallWaiting(rr.mSerial, enable, serviceClass); 15765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 15775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCallWaiting", e); 15785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1582cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) { 15845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 15855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 15865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SMS_ACKNOWLEDGE, result, 15875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 15880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 15905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 15915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " success = " + success + " cause = " + cause); 15925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 15955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.acknowledgeLastIncomingGsmSms(rr.mSerial, success, cause); 15965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 15975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "acknowledgeLastIncomingGsmSms", e); 15985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 15995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1602cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void acceptCall(Message result) { 16045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 16055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 16065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ANSWER, result, 16075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 16080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 16105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 16115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 16145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.acceptCall(rr.mSerial); 16155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilAnswer(mPhoneId, rr.mSerial); 16165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 16175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "acceptCall", e); 16185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1622cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void deactivateDataCall(int cid, int reason, Message result) { 16245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 16255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 16265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DEACTIVATE_DATA_CALL, result, 16275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 16280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 16305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 16315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) + " cid = " + cid + " reason = " + reason); 16325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 16355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.deactivateDataCall(rr.mSerial, cid, (reason == 0) ? false : true); 16365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilDeactivateDataCall(mPhoneId, rr.mSerial, 16375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe cid, reason); 16385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 16395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "deactivateDataCall", e); 16405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 16455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryFacilityLock(String facility, String password, int serviceClass, 16465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Message result) { 16475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe queryFacilityLockForApp(facility, password, serviceClass, null, result); 16481260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 16491260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 16505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 16515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryFacilityLockForApp(String facility, String password, int serviceClass, 16525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String appId, Message result) { 16535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 16545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 16555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_FACILITY_LOCK, result, 16565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 16570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 16595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 16605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " facility = " + facility + " serviceClass = " + serviceClass 16615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " appId = " + appId); 16625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16635054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 16645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 16655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getFacilityLockForApp(rr.mSerial, 16665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(facility), 16675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(password), 16685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe serviceClass, 16695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(appId)); 16705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 16715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getFacilityLockForApp", e); 16725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 16740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16766ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi @Override 16775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setFacilityLock(String facility, boolean lockState, String password, 16785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int serviceClass, Message result) { 16795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe setFacilityLockForApp(facility, lockState, password, serviceClass, null, result); 16806ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi } 16816ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi 16825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 16835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setFacilityLockForApp(String facility, boolean lockState, String password, 16845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int serviceClass, String appId, Message result) { 16855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 16865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 16875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_FACILITY_LOCK, result, 16885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 16890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 16915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 16925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " facility = " + facility + " lockstate = " + lockState 16935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " serviceClass = " + serviceClass + " appId = " + appId); 16940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 16975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setFacilityLockForApp(rr.mSerial, 16985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(facility), 16995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe lockState, 17005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(password), 17015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe serviceClass, 17025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(appId)); 17035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 17045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setFacilityLockForApp", e); 17050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17071260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 17081260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 17095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 17105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void changeBarringPassword(String facility, String oldPwd, String newPwd, 17115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Message result) { 17125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 17135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 17145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CHANGE_BARRING_PASSWORD, result, 17155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 17161260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 17175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log all function args for privacy 17185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 17195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 17205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + "facility = " + facility); 17215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 17225054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 17235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 17245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setBarringPassword(rr.mSerial, 17255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(facility), 17265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(oldPwd), 17275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(newPwd)); 17285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 17295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "changeBarringPassword", e); 17305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 17315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 17321260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 17331260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 17345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 17355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getNetworkSelectionMode(Message result) { 17365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 17375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 17385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE, result, 17395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 17401260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 17415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 17425054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 17435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 17445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getNetworkSelectionMode(rr.mSerial); 17455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 17465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getNetworkSelectionMode", e); 17475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 17485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 17491260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 17501260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 17515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 17525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setNetworkSelectionModeAutomatic(Message result) { 17535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 17545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 17555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC, result, 17565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 17570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 17595054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 17605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 17615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setNetworkSelectionModeAutomatic(rr.mSerial); 17625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 17635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setNetworkSelectionModeAutomatic", e); 17645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 17655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 17660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1768cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 17695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setNetworkSelectionModeManual(String operatorNumeric, Message result) { 17705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 17715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 17725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL, result, 17735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 17740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 17765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 17775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " operatorNumeric = " + operatorNumeric); 17785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 17790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 17815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setNetworkSelectionModeManual(rr.mSerial, 17825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(operatorNumeric)); 17835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 17845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setNetworkSelectionModeManual", e); 17855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 17865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 17870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1789cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 17905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getAvailableNetworks(Message result) { 17915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 17925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 17935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_AVAILABLE_NETWORKS, result, 17945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 17950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 17970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 17995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getAvailableNetworks(rr.mSerial); 18005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 18015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getAvailableNetworks", e); 18025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1806cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 18075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void startDtmf(char c, Message result) { 18085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 18095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 18105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DTMF_START, result, 18115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 18120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function arg for privacy 18145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 18150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 18175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.startDtmf(rr.mSerial, c + ""); 18185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 18195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "startDtmf", e); 18205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1824cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 18255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void stopDtmf(Message result) { 18265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 18275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 18285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DTMF_STOP, result, 18295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 18300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 18320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 18345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.stopDtmf(rr.mSerial); 18355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 18365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "stopDtmf", e); 18375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 18425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void separateConnection(int gsmIndex, Message result) { 18435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 18445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 18455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SEPARATE_CONNECTION, result, 18465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 18470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 18495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 18505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " gsmIndex = " + gsmIndex); 18515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 18545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.separateConnection(rr.mSerial, gsmIndex); 18555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 18565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "separateConnection", e); 18575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1861cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 18625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getBasebandVersion(Message result) { 18635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 18645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 18655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_BASEBAND_VERSION, result, 18665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 18670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 18690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 18715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getBasebandVersion(rr.mSerial); 18725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 18735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getBasebandVersion", e); 18745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 18795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setMute(boolean enableMute, Message result) { 18805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 18815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 18825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_MUTE, result, 18835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 18840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 18865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 18875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " enableMute = " + enableMute); 18885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18895054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 18905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 18915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setMute(rr.mSerial, enableMute); 18925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 18935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setMute", e); 18945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 18960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1898cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 18995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getMute(Message result) { 19005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 19015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 19025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_MUTE, result, 19035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 19040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 19065054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 19075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 19085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getMute(rr.mSerial); 19095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 19105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getMute", e); 19115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1915cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 19165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryCLIP(Message result) { 19175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 19185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 19195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_CLIP, result, 19205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 19210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 19230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 19255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getClip(rr.mSerial); 19265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 19275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryCLIP", e); 19285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 19335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @deprecated 19345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 1935cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 19365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Deprecated 19375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getPDPContextList(Message result) { 19385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe getDataCallList(result); 193903586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla } 194003586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla 194103586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla @Override 19425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getDataCallList(Message result) { 1943a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(result); 1944a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 1945a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_DATA_CALL_LIST, result, 1946a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 19470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1948a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 19490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1950a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 1951a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.getDataCallList(rr.mSerial); 1952a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 1953a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "getDataCallList", e); 1954a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 1955a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 19560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1958cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 19595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void invokeOemRilRequestRaw(byte[] data, Message response) { 1960f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan IOemHook oemHookProxy = getOemHookProxy(response); 1961f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan if (oemHookProxy != null) { 1962f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_OEM_HOOK_RAW, response, 1963f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan mRILDefaultWorkSource); 19640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1965f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan if (RILJ_LOGD) { 1966f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 1967f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan + "[" + IccUtils.bytesToHexString(data) + "]"); 1968f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 19695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 1970f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan try { 1971f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan oemHookProxy.sendRequestRaw(rr.mSerial, primitiveArrayToArrayList(data)); 1972f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } catch (RemoteException | RuntimeException e) { 1973f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan handleRadioProxyExceptionForRR(rr, "invokeOemRilRequestStrings", e); 1974f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 1975f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 19760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 19770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1978cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 19795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void invokeOemRilRequestStrings(String[] strings, Message result) { 1980f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan IOemHook oemHookProxy = getOemHookProxy(result); 1981f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan if (oemHookProxy != null) { 19825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_OEM_HOOK_STRINGS, result, 19835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 19840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String logStr = ""; 19865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < strings.length; i++) { 19875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe logStr = logStr + strings[i] + " "; 19885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 19905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " strings = " 19915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + logStr); 19925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 19930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 1995f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan oemHookProxy.sendRequestStrings(rr.mSerial, 19965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new ArrayList<String>(Arrays.asList(strings))); 19975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 19985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "invokeOemRilRequestStrings", e); 19995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 20020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2003cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 20045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setSuppServiceNotifications(boolean enable, Message result) { 20055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 20065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 20075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, result, 20085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 20090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 20115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " enable = " 20125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + enable); 20135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 20165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setSuppServiceNotifications(rr.mSerial, enable); 20175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 20185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setSuppServiceNotifications", e); 20195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 20220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2023cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 20245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void writeSmsToSim(int status, String smsc, String pdu, Message result) { 20255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe status = translateStatus(status); 20265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 20275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 20285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_WRITE_SMS_TO_SIM, result, 20295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 20300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGV) { 20325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 20335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) 20345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " " + status); 20355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsWriteArgs args = new SmsWriteArgs(); 20385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe args.status = status; 20395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe args.smsc = convertNullToEmptyString(smsc); 20405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe args.pdu = convertNullToEmptyString(pdu); 20410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 20435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.writeSmsToSim(rr.mSerial, args); 20445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 20455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "writeSmsToSim", e); 20465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 20490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2050cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 20515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void deleteSmsOnSim(int index, Message result) { 20525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 20535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 20545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DELETE_SMS_ON_SIM, result, 20555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 20560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGV) { 20585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 20595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) + " index = " + index); 20605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 20635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.deleteSmsOnSim(rr.mSerial, index); 20645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 20655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "deleteSmsOnSim", e); 20665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 20690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2070cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 20715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setBandMode(int bandMode, Message result) { 20725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 20735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 20745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_BAND_MODE, result, 20755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 20760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 20785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 20795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " bandMode = " + bandMode); 20805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 20835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setBandMode(rr.mSerial, bandMode); 20845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 20855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setBandMode", e); 20865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 20880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 20890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2090cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 20915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryAvailableBandMode(Message result) { 20925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 20935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 20945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE, result, 20955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 20960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 20980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 20995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 21005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getAvailableBandModes(rr.mSerial); 21015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 21025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryAvailableBandMode", e); 21035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 21060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2107cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 21085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendEnvelope(String contents, Message result) { 21095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 21105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 21115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, result, 21125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 21130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 21155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " contents = " 21165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + contents); 21175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 21205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendEnvelope(rr.mSerial, convertNullToEmptyString(contents)); 21215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 21225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendEnvelope", e); 21235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 21260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2127cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 21285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendTerminalResponse(String contents, Message result) { 21295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 21305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 21315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, result, 21325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 21330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 21355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " contents = " 21365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + contents); 21375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 21405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendTerminalResponseToSim(rr.mSerial, 21415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(contents)); 21425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 21435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendTerminalResponse", e); 21445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 21470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2148cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 21495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendEnvelopeWithStatus(String contents, Message result) { 21505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 21515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 21525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, result, 21535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 21540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 21565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " contents = " 21575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + contents); 21585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 21615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendEnvelopeWithStatus(rr.mSerial, convertNullToEmptyString(contents)); 21625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 21635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendEnvelopeWithStatus", e); 21645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 21670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2168cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 21695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void explicitCallTransfer(Message result) { 21705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 21715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 21725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_EXPLICIT_CALL_TRANSFER, result, 21735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 21740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 21760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 21785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.explicitCallTransfer(rr.mSerial); 21795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 21805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "explicitCallTransfer", e); 21815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 21840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2185cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 21865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setPreferredNetworkType(int networkType , Message result) { 21875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 21885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 21895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, result, 21905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 21910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 21935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 21945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " networkType = " + networkType); 21955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 21965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mPreferredNetworkType = networkType; 21975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeSetPreferredNetworkType(mPhoneId, networkType); 21980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 21995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 22005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setPreferredNetworkType(rr.mSerial, networkType); 22015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 22025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setPreferredNetworkType", e); 22035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 22060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2207cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 22085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getPreferredNetworkType(Message result) { 22095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 22105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 22115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, result, 22125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 22130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 22150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 22175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getPreferredNetworkType(rr.mSerial); 22185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 22195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getPreferredNetworkType", e); 22205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 22230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2224cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 22255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getNeighboringCids(Message result, WorkSource workSource) { 22265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource = getDeafultWorkSourceIfInvalid(workSource); 22275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 22285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 22295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, result, 22305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource); 22310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 22330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 22355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getNeighboringCids(rr.mSerial); 22365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 22375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getNeighboringCids", e); 22385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 22410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 22435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setLocationUpdates(boolean enable, Message result) { 22445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 22455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 22465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_LOCATION_UPDATES, result, 22475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 22485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 22495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 22505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 22515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) + " enable = " + enable); 22525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 22545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 22555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setLocationUpdates(rr.mSerial, enable); 22565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 22575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setLocationUpdates", e); 22585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 22610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 22635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCdmaSubscriptionSource(int cdmaSubscription , Message result) { 22645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 22655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 22665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, result, 22675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 22680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 22705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 22715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " cdmaSubscription = " + cdmaSubscription); 22725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 22755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCdmaSubscriptionSource(rr.mSerial, cdmaSubscription); 22765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 22775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCdmaSubscriptionSource", e); 22785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 22835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryCdmaRoamingPreference(Message result) { 22845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 22855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 22865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, result, 22875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 22880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 22900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 22925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCdmaRoamingPreference(rr.mSerial); 22935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 22945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryCdmaRoamingPreference", e); 22955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 22970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 22980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 22990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 23005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCdmaRoamingPreference(int cdmaRoamingType, Message result) { 23015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, result, 23045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 23055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 23065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 23075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 23085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " cdmaRoamingType = " + cdmaRoamingType); 23095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 23115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 23125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCdmaRoamingPreference(rr.mSerial, cdmaRoamingType); 23135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 23145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCdmaRoamingPreference", e); 23155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 23180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 23205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void queryTTYMode(Message result) { 23215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_QUERY_TTY_MODE, result, 23245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 23250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 23270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 23295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getTTYMode(rr.mSerial); 23305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 23315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "queryTTYMode", e); 23325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 23375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setTTYMode(int ttyMode, Message result) { 23385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_TTY_MODE, result, 23415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 23420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 23445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 23455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " ttyMode = " + ttyMode); 23465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 23495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setTTYMode(rr.mSerial, ttyMode); 23505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 23515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setTTYMode", e); 23525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 23550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2356cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 23575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setPreferredVoicePrivacy(boolean enable, Message result) { 23585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE, result, 23615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 23620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 23645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 23655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " enable = " + enable); 23665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 23695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setPreferredVoicePrivacy(rr.mSerial, enable); 23705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 23715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setPreferredVoicePrivacy", e); 23725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 23750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2376cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 23775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getPreferredVoicePrivacy(Message result) { 23785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE, 23815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe result, mRILDefaultWorkSource); 23820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 23840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 23865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getPreferredVoicePrivacy(rr.mSerial); 23875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 23885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getPreferredVoicePrivacy", e); 23895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 23910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 23920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2393cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 23945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendCDMAFeatureCode(String featureCode, Message result) { 23955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 23965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 23975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_FLASH, result, 23985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 23990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 24015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 24025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " featureCode = " + featureCode); 24035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 24065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendCDMAFeatureCode(rr.mSerial, convertNullToEmptyString(featureCode)); 24075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 24085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendCDMAFeatureCode", e); 24095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 24120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2413cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 24145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendBurstDtmf(String dtmfString, int on, int off, Message result) { 24155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 24165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 24175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_BURST_DTMF, result, 24185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 24190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 24215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 24225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " dtmfString = " + dtmfString + " on = " + on + " off = " + off); 24235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 24265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendBurstDtmf(rr.mSerial, convertNullToEmptyString(dtmfString), on, off); 24275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 24285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendBurstDtmf", e); 24295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void constructCdmaSendSmsRilRequest(CdmaSmsMessage msg, byte[] pdu) { 24345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int addrNbrOfDigits; 24355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int subaddrNbrOfDigits; 24365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int bearerDataLength; 24375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ByteArrayInputStream bais = new ByteArrayInputStream(pdu); 24385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe DataInputStream dis = new DataInputStream(bais); 24395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 24405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 24415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.teleserviceId = dis.readInt(); // teleServiceId 24425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.isServicePresent = (byte) dis.readInt() == 1 ? true : false; // servicePresent 24435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.serviceCategory = dis.readInt(); // serviceCategory 24445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.address.digitMode = dis.read(); // address digit mode 24455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.address.numberMode = dis.read(); // address number mode 24465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.address.numberType = dis.read(); // address number type 24475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.address.numberPlan = dis.read(); // address number plan 24485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe addrNbrOfDigits = (byte) dis.read(); 24495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < addrNbrOfDigits; i++) { 24505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.address.digits.add(dis.readByte()); // address_orig_bytes[i] 24515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.subAddress.subaddressType = dis.read(); //subaddressType 24535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.subAddress.odd = (byte) dis.read() == 1 ? true : false; //subaddr odd 24545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe subaddrNbrOfDigits = (byte) dis.read(); 24555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < subaddrNbrOfDigits; i++) { 24565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.subAddress.digits.add(dis.readByte()); //subaddr_orig_bytes[i] 24575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe bearerDataLength = dis.read(); 24605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < bearerDataLength; i++) { 24615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.bearerData.add(dis.readByte()); //bearerData[i] 24625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (IOException ex) { 24645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 24655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("sendSmsCdma: conversion from input stream to object failed: " 24665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + ex); 24675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 24700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2471cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 24725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendCdmaSms(byte[] pdu, Message result) { 24735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 24745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 24755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SEND_SMS, result, 24765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 24770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function arg for privacy 24795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 24800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CdmaSmsMessage msg = new CdmaSmsMessage(); 24825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe constructCdmaSendSmsRilRequest(msg, pdu); 24830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 24845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 24855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendCdmaSms(rr.mSerial, msg); 24865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_CDMA, 24875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsSession.Event.Format.SMS_FORMAT_3GPP2); 24885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 24895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendCdmaSms", e); 24905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 24920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 24930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2494cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 24955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) { 24965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 24975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 24985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, result, 24995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 25000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 25025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 25035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " success = " + success + " cause = " + cause); 25045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CdmaSmsAck msg = new CdmaSmsAck(); 25075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.errorClass = success ? 0 : 1; 25085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.smsCauseCode = cause; 25090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 25115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.acknowledgeLastIncomingCdmaSms(rr.mSerial, msg); 25125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 25135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "acknowledgeLastIncomingCdmaSms", e); 25145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2518cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 25195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getGsmBroadcastConfig(Message result) { 25205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 25215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 25225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GSM_GET_BROADCAST_CONFIG, result, 25235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 25240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 25260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 25285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getGsmBroadcastConfig(rr.mSerial); 25295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 25305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getGsmBroadcastConfig", e); 25315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 25340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2535cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 25365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message result) { 25375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 25385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 25395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GSM_SET_BROADCAST_CONFIG, result, 25405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 25410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 25435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 25445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " with " + config.length + " configs : "); 25455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < config.length; i++) { 25465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(config[i].toString()); 25475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<GsmBroadcastSmsConfigInfo> configs = new ArrayList<>(); 25510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int numOfConfig = config.length; 25535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe GsmBroadcastSmsConfigInfo info; 25540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < numOfConfig; i++) { 25565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info = new GsmBroadcastSmsConfigInfo(); 25575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.fromServiceId = config[i].getFromServiceId(); 25585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.toServiceId = config[i].getToServiceId(); 25595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.fromCodeScheme = config[i].getFromCodeScheme(); 25605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.toCodeScheme = config[i].getToCodeScheme(); 25615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.selected = config[i].isSelected(); 25625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe configs.add(info); 25635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 25665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setGsmBroadcastConfig(rr.mSerial, configs); 25675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 25685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setGsmBroadcastConfig", e); 25695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 25720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2573cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 25745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setGsmBroadcastActivation(boolean activate, Message result) { 25755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 25765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 25775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GSM_BROADCAST_ACTIVATION, result, 25785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 25790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 25815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 25825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " activate = " + activate); 25835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 25855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 25865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setGsmBroadcastActivation(rr.mSerial, activate); 25875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 25885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setGsmBroadcastActivation", e); 25895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 25910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 25920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2593cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 25945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getCdmaBroadcastConfig(Message result) { 25955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 25965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 25975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG, result, 25985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 25990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 26010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 26035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCdmaBroadcastConfig(rr.mSerial); 26045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 26055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getCdmaBroadcastConfig", e); 26065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 26090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 26115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message result) { 26125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 26135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 26145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG, result, 26155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 26160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<CdmaBroadcastSmsConfigInfo> halConfigs = new ArrayList<>(); 26180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2619cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan for (CdmaSmsBroadcastConfigInfo config: configs) { 2620cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan for (int i = config.getFromServiceCategory(); 2621cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan i <= config.getToServiceCategory(); 2622cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan i++) { 2623cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan CdmaBroadcastSmsConfigInfo info = new CdmaBroadcastSmsConfigInfo(); 2624cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan info.serviceCategory = i; 2625cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan info.language = config.getLanguage(); 2626cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan info.selected = config.isSelected(); 2627cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan halConfigs.add(info); 2628cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan } 2629cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan } 26300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2631cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan if (RILJ_LOGD) { 2632cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 2633cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan + " with " + halConfigs.size() + " configs : "); 2634cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan for (CdmaBroadcastSmsConfigInfo config : halConfigs) { 2635cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan riljLog(config.toString()); 2636cb192e90e2692e094b8d9cef4e52c36af5777681Amit Mahajan } 26375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26389746fca2d7389f0fce6d5d031d87acd87b9de723Pavel Zhamaitsiak 26395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 26405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCdmaBroadcastConfig(rr.mSerial, halConfigs); 26415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 26425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCdmaBroadcastConfig", e); 26435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 26460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2647cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 26485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCdmaBroadcastActivation(boolean activate, Message result) { 26495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 26505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 26515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_BROADCAST_ACTIVATION, result, 26525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 26530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 26555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 26565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " activate = " + activate); 26575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 26605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCdmaBroadcastActivation(rr.mSerial, activate); 26615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 26625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCdmaBroadcastActivation", e); 26635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 26660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2667cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 26685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getCDMASubscription(Message result) { 26695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 26705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 26715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_SUBSCRIPTION, result, 26725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 26730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 26750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 26775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCDMASubscription(rr.mSerial); 26785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 26795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getCDMASubscription", e); 26805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 26830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2684cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 26855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void writeSmsToRuim(int status, String pdu, Message result) { 26865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe status = translateStatus(status); 26875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 26885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 26895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM, result, 26905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 26910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGV) { 26935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 26945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) 26955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " status = " + status); 26965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 26970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 26985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CdmaSmsWriteArgs args = new CdmaSmsWriteArgs(); 26995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe args.status = status; 27005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe constructCdmaSendSmsRilRequest(args.message, pdu.getBytes()); 27015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 27025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.writeSmsToRuim(rr.mSerial, args); 27045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "writeSmsToRuim", e); 27065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 27090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2710cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 27115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void deleteSmsOnRuim(int index, Message result) { 27125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 27135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 27145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM, result, 27155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 27160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGV) { 27185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 27195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) 27205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " index = " + index); 27215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.deleteSmsOnRuim(rr.mSerial, index); 27255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "deleteSmsOnRuim", e); 27275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 27300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2731cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 27325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getDeviceIdentity(Message result) { 27335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 27345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 27355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_DEVICE_IDENTITY, result, 27365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 27370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 27390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getDeviceIdentity(rr.mSerial); 27425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getDeviceIdentity", e); 27445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 27470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2748cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 27495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void exitEmergencyCallbackMode(Message result) { 27505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 27515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 27525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, result, 27535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 27540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 27560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.exitEmergencyCallbackMode(rr.mSerial); 27595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "exitEmergencyCallbackMode", e); 27615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 27640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2765cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 27665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getSmscAddress(Message result) { 27675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 27685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 27695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_SMSC_ADDRESS, result, 27705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 27710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 27730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getSmscAddress(rr.mSerial); 27765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getSmscAddress", e); 27785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 27810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2782cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 27835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setSmscAddress(String address, Message result) { 27845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 27855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 27865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_SMSC_ADDRESS, result, 27875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 27880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 27905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 27915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " address = " + address); 27925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 27955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setSmscAddress(rr.mSerial, convertNullToEmptyString(address)); 27965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 27975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setSmscAddress", e); 27985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 27995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2802cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 28035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void reportSmsMemoryStatus(boolean available, Message result) { 28045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 28055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 28065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, result, 28075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 28080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 28105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " 28115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest) + " available = " + available); 28125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 28155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.reportSmsMemoryStatus(rr.mSerial, available); 28165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 28175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "reportSmsMemoryStatus", e); 28180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2822cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 28235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void reportStkServiceIsRunning(Message result) { 2824522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan IRadio radioProxy = getRadioProxy(result); 2825522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan if (radioProxy != null) { 2826522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, result, 2827522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan mRILDefaultWorkSource); 28280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2829522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 28300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2831522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan try { 2832522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan radioProxy.reportStkServiceIsRunning(rr.mSerial); 2833522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan } catch (RemoteException | RuntimeException e) { 2834522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan handleRadioProxyExceptionForRR(rr, "reportStkServiceIsRunning", e); 2835522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan } 2836522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan } 28370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 28405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getCdmaSubscriptionSource(Message result) { 28415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 28425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 28435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, result, 28445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 28450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 28475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 28485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 28495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getCdmaSubscriptionSource(rr.mSerial); 28505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 28515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getCdmaSubscriptionSource", e); 285280795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown } 285380795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown } 285480795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown } 285580795c239d6281db5fbf0f5a23494bfa3fb938f5Jeff Brown 28565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 28575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void requestIsimAuthentication(String nonce, Message result) { 28585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 28595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 28605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ISIM_AUTHENTICATION, result, 28615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 28620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 28645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 28655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " nonce = " + nonce); 28665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 28695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.requestIsimAuthentication(rr.mSerial, convertNullToEmptyString(nonce)); 28705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 28715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "requestIsimAuthentication", e); 28725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 28740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 28750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2876cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 28775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) { 28785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 28795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 28805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU, result, 28815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 28820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 28845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 28855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " success = " + success); 28865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 2887d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 28885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 28895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.acknowledgeIncomingGsmSmsWithPdu(rr.mSerial, success, 28905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(ackPdu)); 28915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 28925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "acknowledgeIncomingGsmSmsWithPdu", e); 2893d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 2894c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 2895c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 28960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 28975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 28985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getVoiceRadioTechnology(Message result) { 28995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 29005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 29015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_VOICE_RADIO_TECH, result, 29025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 2903c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 29045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 2905c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 29065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 29075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getVoiceRadioTechnology(rr.mSerial); 29085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 29095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getVoiceRadioTechnology", e); 2910c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 2911d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 29125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 2913c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 29145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 29155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getCellInfoList(Message result, WorkSource workSource) { 29165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource = getDeafultWorkSourceIfInvalid(workSource); 2917a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(result); 2918a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 2919a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_GET_CELL_INFO_LIST, result, 2920a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan workSource); 2921c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 2922a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 2923a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 2924a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 2925d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 2926a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 2927a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.getCellInfoList(rr.mSerial); 2928a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 2929a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "getCellInfoList", e); 2930a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 2931a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 29320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 29330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 29345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 29355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setCellInfoListRate(int rateInMillis, Message result, WorkSource workSource) { 29365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource = getDeafultWorkSourceIfInvalid(workSource); 29375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 29385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 29395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE, result, 29405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource); 29415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 2942d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe if (RILJ_LOGD) { 29435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 29445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " rateInMillis = " + rateInMillis); 2945d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 29465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 29475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 29485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setCellInfoListRate(rr.mSerial, rateInMillis); 29495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 29505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setCellInfoListRate", e); 2951c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 2952c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 2953c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan } 2954c3242d2257c479fed9288dad3103e7697d9c75c6Amit Mahajan 29555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void setCellInfoListRate() { 29565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe setCellInfoListRate(Integer.MAX_VALUE, null, mRILDefaultWorkSource); 29575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 29585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 29595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 29608e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public void setInitialAttachApn(DataProfile dataProfile, boolean isRoaming, Message result) { 29618e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 29625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 2963d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe if (radioProxy != null) { 29645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_INITIAL_ATTACH_APN, result, 29655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 29665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 29675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 29688e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + dataProfile); 29695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 29705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 2971d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe try { 29728e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu radioProxy.setInitialAttachApn(rr.mSerial, convertToHalDataProfile(dataProfile), 29738e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dataProfile.modemCognitive, isRoaming); 29740012abc0db410ba41a198fc5bbcaae77b60ace51Amit Mahajan } catch (RemoteException | RuntimeException e) { 29755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setInitialAttachApn", e); 2976d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 2977d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe } 29788e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran } 29798e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran 29805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 29815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getImsRegistrationState(Message result) { 29825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 29835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 29845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_IMS_REGISTRATION_STATE, result, 29855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 29860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 29875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 29885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 2989a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe } 29900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 29915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 29925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getImsRegistrationState(rr.mSerial); 29935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 29945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getImsRegistrationState", e); 29955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 29965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 29975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 29988e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran 29995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 30005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendImsGsmSms(String smscPdu, String pdu, int retry, int messageRef, 30015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Message result) { 30025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 30035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 30045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_IMS_SEND_SMS, result, 30055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 30068e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran 30075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function args for privacy 30085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 300932c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 30105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ImsSmsMessage msg = new ImsSmsMessage(); 30115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.tech = RILConstants.GSM_PHONE; 30125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.retry = (byte) retry == 1 ? true : false; 30135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.messageRef = messageRef; 301432c5d16886f6ae4f250e4597fe5e70583ea5d912Nathan Harold 30155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe GsmSmsMessage gsmMsg = constructGsmSendSmsRilRequest(smscPdu, pdu); 30165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.gsmMessage.add(gsmMsg); 30175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 30185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendImsSms(rr.mSerial, msg); 30195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_IMS, 30205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsSession.Event.Format.SMS_FORMAT_3GPP); 30215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 30225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendImsGsmSms", e); 3023a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe } 30240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 30250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 30260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 30275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 30285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void sendImsCdmaSms(byte[] pdu, int retry, int messageRef, Message result) { 30295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 30305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 30315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_IMS_SEND_SMS, result, 30325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 30338e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran 30345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function args for privacy 30355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 30365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 30375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ImsSmsMessage msg = new ImsSmsMessage(); 30385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.tech = RILConstants.CDMA_PHONE; 30395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.retry = (byte) retry == 1 ? true : false; 30405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.messageRef = messageRef; 30415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 30425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CdmaSmsMessage cdmaMsg = new CdmaSmsMessage(); 30435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe constructCdmaSendSmsRilRequest(cdmaMsg, pdu); 30445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.cdmaMessage.add(cdmaMsg); 30455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 30465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 30475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.sendImsSms(rr.mSerial, msg); 30485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSendSms(mPhoneId, rr.mSerial, SmsSession.Event.Tech.SMS_IMS, 30495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SmsSession.Event.Format.SMS_FORMAT_3GPP); 30505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 30515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "sendImsCdmaSms", e); 30520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 30530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 30540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 30550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 30565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private SimApdu createSimApdu(int channel, int cla, int instruction, int p1, int p2, int p3, 30575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String data) { 30585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SimApdu msg = new SimApdu(); 30595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.sessionId = channel; 30605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.cla = cla; 30615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.instruction = instruction; 30625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.p1 = p1; 30635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.p2 = p2; 30645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.p3 = p3; 30655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.data = convertNullToEmptyString(data); 30665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return msg; 30677cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt } 30687cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt 30695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 30705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void iccTransmitApduBasicChannel(int cla, int instruction, int p1, int p2, 30715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int p3, String data, Message result) { 30725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 30735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 30745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC, result, 30755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 30760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 30775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 30785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 30795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " cla = " + cla + " instruction = " + instruction 30805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " p1 = " + p1 + " p2 = " + " p3 = " + p3 + " data = " + data); 30815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 30820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 30835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SimApdu msg = createSimApdu(0, cla, instruction, p1, p2, p3, data); 30845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 30855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.iccTransmitApduBasicChannel(rr.mSerial, msg); 30865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 30875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "iccTransmitApduBasicChannel", e); 30885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 30895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 30900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 30910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 30925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 3093c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi public void iccOpenLogicalChannel(String aid, int p2, Message result) { 30945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 30955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 30965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_OPEN_CHANNEL, result, 30975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 30980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 30995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 3100c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " aid = " + aid 3101c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi + " p2 = " + p2); 3102060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe } 3103060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe 31045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 3105c6676c9a97efb78950c8f71ca7330d0bb4b24efdAjay Nambi radioProxy.iccOpenLogicalChannel(rr.mSerial, convertNullToEmptyString(aid), p2); 31065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 31075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "iccOpenLogicalChannel", e); 31087cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt } 31090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 31135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void iccCloseLogicalChannel(int channel, Message result) { 31145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 31155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 31165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_CLOSE_CHANNEL, result, 31175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 31185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 31195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 31205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " channel = " 31215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + channel); 31220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 31255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.iccCloseLogicalChannel(rr.mSerial, channel); 31265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 31275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "iccCloseLogicalChannel", e); 31280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 31335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void iccTransmitApduLogicalChannel(int channel, int cla, int instruction, 31345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int p1, int p2, int p3, String data, 31355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Message result) { 31365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (channel <= 0) { 31375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe throw new RuntimeException( 31385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe "Invalid channel in iccTransmitApduLogicalChannel: " + channel); 31390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 31425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 31435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL, result, 31445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 31450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 31475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " channel = " 31485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + channel + " cla = " + cla + " instruction = " + instruction 31495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " p1 = " + p1 + " p2 = " + " p3 = " + p3 + " data = " + data); 31505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 3151d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe 31525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SimApdu msg = createSimApdu(channel, cla, instruction, p1, p2, p3, data); 31535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 31545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 31555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.iccTransmitApduLogicalChannel(rr.mSerial, msg); 31565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 31575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "iccTransmitApduLogicalChannel", e); 3158d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 3159d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 3160d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe } 3161d506d3daaa7f7ec94fdffcf31cb906b385534127Sanket Padawe 31625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 31635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void nvReadItem(int itemID, Message result) { 31645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 31655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 31665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_NV_READ_ITEM, result, 31675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 31680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 31705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 31715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " itemId = " + itemID); 31725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 31730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 31755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.nvReadItem(rr.mSerial, itemID); 31765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 31775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "nvReadItem", e); 31785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 31790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 31805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 31810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 31825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 31835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void nvWriteItem(int itemId, String itemValue, Message result) { 31845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 31855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 31865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_NV_WRITE_ITEM, result, 31878e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran mRILDefaultWorkSource); 31885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 3189a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe if (RILJ_LOGD) { 31905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 31915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " itemId = " + itemId + " itemValue = " + itemValue); 3192a05275d90833d2ff26a2571e2cc0f2ea91fd2b43Sanket Padawe } 3193060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe 31945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe NvWriteItem item = new NvWriteItem(); 31955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe item.itemId = itemId; 31965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe item.value = convertNullToEmptyString(itemValue); 3197060a6f0ba56dde532a9b9b28d4302df86a556691Sanket Padawe 31985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 31995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.nvWriteItem(rr.mSerial, item); 32005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 32015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "nvWriteItem", e); 32025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 32075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void nvWriteCdmaPrl(byte[] preferredRoamingList, Message result) { 32085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 32095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 32105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_NV_WRITE_CDMA_PRL, result, 32115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 3212d60a877c59822d2157b8af86f2c3834b04011051Sanket Padawe 32135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 32145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 32155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " PreferredRoamingList = 0x" 32165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + IccUtils.bytesToHexString(preferredRoamingList)); 32170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<Byte> arrList = new ArrayList<>(); 32205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < preferredRoamingList.length; i++) { 32215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe arrList.add(preferredRoamingList[i]); 32225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 32255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.nvWriteCdmaPrl(rr.mSerial, arrList); 32265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 32275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "nvWriteCdmaPrl", e); 32280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 32335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void nvResetConfig(int resetType, Message result) { 32345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 32355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 32365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_NV_RESET_CONFIG, result, 32375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 323803586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla 32395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 32405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 32415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " resetType = " + resetType); 3242f860a3f42f87c9c8572623aff33349168d689477Wink Saville } 3243f860a3f42f87c9c8572623aff33349168d689477Wink Saville 32445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 3245e16769120c06f1ea7e4e22d85b39d7c33c925697Jayachandran C radioProxy.nvResetConfig(rr.mSerial, convertToHalResetNvType(resetType)); 32465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 32475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "nvResetConfig", e); 32487cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt } 32490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32515054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 32525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 32535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setUiccSubscription(int slotId, int appIndex, int subId, 32545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int subStatus, Message result) { 32555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 32565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 32575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_UICC_SUBSCRIPTION, result, 32585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 32595054dfa7fd9b0520d30a102ed5a2107af11590c8Pavel Zhamaitsiak 32605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 32615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 32625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " slot = " + slotId + " appIndex = " + appIndex 32635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " subId = " + subId + " subStatus = " + subStatus); 32645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe SelectUiccSub info = new SelectUiccSub(); 32675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.slot = slotId; 32685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.appIndex = appIndex; 32695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.subType = subId; 32705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe info.actStatus = subStatus; 32713ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt 32725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 32735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setUiccSubscription(rr.mSerial, info); 32745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 32755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setUiccSubscription", e); 32765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 32773ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt } 32783ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt } 32793ad0c75dac907e8490b78d6fd8c0278d28b96f84Robert Greenwalt 32805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 32815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setDataAllowed(boolean allowed, Message result) { 32825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 32835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 32845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_ALLOW_DATA, result, 32855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 32860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 32875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 32885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 32895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " allowed = " + allowed); 32900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 32925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 32935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setDataAllowed(rr.mSerial, allowed); 32945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 32955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setDataAllowed", e); 3296a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 32970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 32990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 33015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void 33025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe getHardwareConfig (Message result) { 3303a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(result); 3304a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 3305a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_GET_HARDWARE_CONFIG, result, 3306a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 3307e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan 3308a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan // Do not log function args for privacy 3309a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3310e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan 3311a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 3312a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.getHardwareConfig(rr.mSerial); 3313a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 3314a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "getHardwareConfig", e); 3315a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3316a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 331721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 33181bb5864a6f2047b41da9ba6551ee4acfec4d7dd1Naveen Kalla 33195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 33205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void requestIccSimAuthentication(int authContext, String data, String aid, 33215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Message result) { 33225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 33235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 33245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SIM_AUTHENTICATION, result, 33255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 33260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Do not log function args for privacy 33285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 33295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 33305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 33315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.requestIccSimAuthentication(rr.mSerial, 33325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe authContext, 33335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(data), 33345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe convertNullToEmptyString(aid)); 33355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 33365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "requestIccSimAuthentication", e); 33375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 33380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 33390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 33400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 33428e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu public void setDataProfile(DataProfile[] dps, boolean isRoaming, Message result) { 33438e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu 33445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 33455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 33465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_DATA_PROFILE, result, 33475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 33480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 33505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 33518e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu + " with data profiles : "); 33528e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu for (DataProfile profile : dps) { 33538e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu riljLog(profile.toString()); 33545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 33555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 33560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33578e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu ArrayList<DataProfileInfo> dpis = new ArrayList<>(); 33588e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu for (DataProfile dp : dps) { 33598e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu dpis.add(convertToHalDataProfile(dp)); 33605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 33610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 33638e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu radioProxy.setDataProfile(rr.mSerial, dpis, isRoaming); 33645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 33655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setDataProfile", e); 33665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 336733cfb500a7cf192adfc5ca06792fe3847073b6c1Chao Liu } 33680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 33690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 33715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void requestShutdown(Message result) { 33725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 33735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 33745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SHUTDOWN, result, 33755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 33760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 33785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 33795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 33800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 33825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.requestShutdown(rr.mSerial); 33835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 33845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "requestShutdown", e); 33855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 33860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 33870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 33880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 33895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 33905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getRadioCapability(Message response) { 3391a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(response); 3392a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 3393a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_GET_RADIO_CAPABILITY, response, 3394a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 33950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3396a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 3397a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3398a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 33990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3400a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 3401a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.getRadioCapability(rr.mSerial); 3402a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 3403a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "getRadioCapability", e); 3404a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3405a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 34060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 34095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setRadioCapability(RadioCapability rc, Message response) { 3410a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(response); 3411a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 3412a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_SET_RADIO_CAPABILITY, response, 3413a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 34140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3415a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 3416a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 3417a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan + " RadioCapability = " + rc.toString()); 3418a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 34190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3420a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan android.hardware.radio.V1_0.RadioCapability halRc = 3421a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan new android.hardware.radio.V1_0.RadioCapability(); 342271173a876ff48d65e013f0a92e920d90fa7a26c7Sanket Padawe 3423a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan halRc.session = rc.getSession(); 3424a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan halRc.phase = rc.getPhase(); 3425a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan halRc.raf = rc.getRadioAccessFamily(); 3426a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan halRc.logicalModemUuid = convertNullToEmptyString(rc.getLogicalModemUuid()); 3427a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan halRc.status = rc.getStatus(); 3428a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 3429a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 3430a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.setRadioCapability(rr.mSerial, halRc); 3431a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (Exception e) { 3432a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "setRadioCapability", e); 3433a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3434a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 34350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 34385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void startLceService(int reportIntervalMs, boolean pullMode, Message result) { 34395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 34405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 34415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_START_LCE, result, 34425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 34430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 34455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) 34465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " reportIntervalMs = " + reportIntervalMs + " pullMode = " + pullMode); 34475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 34505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.startLceService(rr.mSerial, reportIntervalMs, pullMode); 34515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 34525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "startLceService", e); 34535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 34585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void stopLceService(Message result) { 34595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 34605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 34615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_STOP_LCE, result, 34625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 34630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 34655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 34665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 34695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.stopLceService(rr.mSerial); 34705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 34715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "stopLceService", e); 34725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 34775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void pullLceData(Message response) { 3478a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan IRadio radioProxy = getRadioProxy(response); 3479a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (radioProxy != null) { 3480a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = obtainRequest(RIL_REQUEST_PULL_LCEDATA, response, 3481a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan mRILDefaultWorkSource); 3482a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 3483a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 3484a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3485a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3486a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 3487a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan try { 3488a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan radioProxy.pullLceData(rr.mSerial); 3489a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } catch (RemoteException | RuntimeException e) { 3490a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan handleRadioProxyExceptionForRR(rr, "pullLceData", e); 3491a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 34925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 34930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 34940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 34955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 34965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getModemActivityInfo(Message result) { 34975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 34985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 34995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_ACTIVITY_INFO, result, 35005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 3501cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande 35025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 35035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 35045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 3505cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande 35065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 35075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getModemActivityInfo(rr.mSerial); 3508cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande 3509d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan Message msg = mRilHandler.obtainMessage(EVENT_BLOCKING_RESPONSE_TIMEOUT); 35105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.obj = null; 35115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.arg1 = rr.mSerial; 3512d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan mRilHandler.sendMessageDelayed(msg, DEFAULT_BLOCKING_MESSAGE_RESPONSE_TIMEOUT_MS); 35135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 35145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getModemActivityInfo", e); 35155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 35165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 3517cf916cfb2b4d8282def13e4553abff2ea73aca2bVinit Deshpande 35180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 35225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setAllowedCarriers(List<CarrierIdentifier> carriers, Message result) { 35233953d6e1205524261e887cea2b283d05213e61c1Sanket Padawe checkNotNull(carriers, "Allowed carriers list cannot be null."); 35245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 35255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 35265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_SET_ALLOWED_CARRIERS, result, 35275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 35280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 35305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String logStr = ""; 35315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < carriers.size(); i++) { 35325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe logStr = logStr + carriers.get(i) + " "; 35335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 35345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + "carriers = " 35355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + logStr); 35360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 35385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe boolean allAllowed; 35395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (carriers.size() == 0) { 35405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe allAllowed = true; 35415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 35425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe allAllowed = false; 35430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CarrierRestrictions carrierList = new CarrierRestrictions(); 35455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 35465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (CarrierIdentifier ci : carriers) { /* allowed carriers */ 35475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Carrier c = new Carrier(); 35489f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan c.mcc = convertNullToEmptyString(ci.getMcc()); 35499f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan c.mnc = convertNullToEmptyString(ci.getMnc()); 35505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int matchType = CarrierIdentifier.MatchType.ALL; 35515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String matchData = null; 35525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!TextUtils.isEmpty(ci.getSpn())) { 35535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchType = CarrierIdentifier.MatchType.SPN; 35545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchData = ci.getSpn(); 35555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (!TextUtils.isEmpty(ci.getImsi())) { 35565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchType = CarrierIdentifier.MatchType.IMSI_PREFIX; 35575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchData = ci.getImsi(); 35585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (!TextUtils.isEmpty(ci.getGid1())) { 35595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchType = CarrierIdentifier.MatchType.GID1; 35605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchData = ci.getGid1(); 35615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (!TextUtils.isEmpty(ci.getGid2())) { 35625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchType = CarrierIdentifier.MatchType.GID2; 35635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe matchData = ci.getGid2(); 35648f19c6d717bf0e00aeb33552a570a0f60af0ce3bAmit Mahajan } 35655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe c.matchType = matchType; 35669f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan c.matchData = convertNullToEmptyString(matchData); 35675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe carrierList.allowedCarriers.add(c); 3568a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 35690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35709f18938b5f973c5f6bb4409bf8941e0801c565eaAmit Mahajan /* TODO: add excluded carriers */ 35710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 35735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.setAllowedCarriers(rr.mSerial, allAllowed, carrierList); 35745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 35755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "setAllowedCarriers", e); 35765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 35770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 35815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getAllowedCarriers(Message result) { 35825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 35835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 35845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_GET_ALLOWED_CARRIERS, result, 35855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 35860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 35885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 3589a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 35905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 35915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 35925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.getAllowedCarriers(rr.mSerial); 35935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 35945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getAllowedCarriers", e); 35950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 35980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 35995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 3600baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu public void sendDeviceState(int stateType, boolean state, 3601baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu Message result) { 3602baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu IRadio radioProxy = getRadioProxy(result); 3603baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu if (radioProxy != null) { 3604baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu RILRequest rr = obtainRequest(RIL_REQUEST_SEND_DEVICE_STATE, result, 3605baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu mRILDefaultWorkSource); 3606baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3607baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu if (RILJ_LOGD) { 3608baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " 3609baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu + stateType + ":" + state); 3610baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3611baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3612baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu try { 3613baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu radioProxy.sendDeviceState(rr.mSerial, stateType, state); 3614baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } catch (RemoteException | RuntimeException e) { 3615baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu handleRadioProxyExceptionForRR(rr, "sendDeviceState", e); 3616baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3617baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3618baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3619baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3620baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu @Override 3621baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu public void setUnsolResponseFilter(int filter, Message result) { 3622baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu IRadio radioProxy = getRadioProxy(result); 3623baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu if (radioProxy != null) { 3624baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu RILRequest rr = obtainRequest(RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER, result, 3625baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu mRILDefaultWorkSource); 3626baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3627baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu if (RILJ_LOGD) { 3628baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + filter); 3629baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3630baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3631baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu try { 3632baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu radioProxy.setIndicationFilter(rr.mSerial, filter); 3633baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } catch (RemoteException | RuntimeException e) { 3634baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu handleRadioProxyExceptionForRR(rr, "setIndicationFilter", e); 3635baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3636baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3637baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 3638baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 3639baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu @Override 364099607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu public void setSimCardPower(boolean powerUp, Message result) { 364199607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu IRadio radioProxy = getRadioProxy(result); 364299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu if (radioProxy != null) { 364399607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu RILRequest rr = obtainRequest(RIL_REQUEST_SET_SIM_CARD_POWER, result, 364499607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu mRILDefaultWorkSource); 364599607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu 364699607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu if (RILJ_LOGD) { 3647baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu riljLog(rr.serialString() + "> " + requestToString(rr.mRequest) + " " + powerUp); 364899607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu } 364999607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu 365099607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu try { 365199607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu radioProxy.setSimCardPower(rr.mSerial, powerUp); 365299607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu } catch (RemoteException | RuntimeException e) { 365399607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu handleRadioProxyExceptionForRR(rr, "setSimCardPower", e); 365499607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu } 365599607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu } 365699607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu } 365799607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu 365899607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu @Override 36595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getIMEI(Message result) { 3660522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("getIMEI not expected to be called"); 36610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 36645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getIMEISV(Message result) { 3665522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("getIMEISV not expected to be called"); 36660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 36695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @deprecated 36705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 36715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Deprecated 36725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 36735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getLastPdpFailCause(Message result) { 3674522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("getLastPdpFailCause not expected to be called"); 36750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 36760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 36775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 36785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * The preferred new alternative to getLastPdpFailCause 36795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 36805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 36815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void getLastDataCallFailCause(Message result) { 3682522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("getLastDataCallFailCause not expected to be called"); 36835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 36845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 36855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 36865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * Translates EF_SMS status bits to a status value compatible with 36875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * SMS AT commands. See TS 27.005 3.1. 36885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 36895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private int translateStatus(int status) { 36905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch(status & 0x7) { 36915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case SmsManager.STATUS_ON_ICC_READ: 36925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return 1; 36935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case SmsManager.STATUS_ON_ICC_UNREAD: 36945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return 0; 36955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case SmsManager.STATUS_ON_ICC_SENT: 36965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return 3; 36975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case SmsManager.STATUS_ON_ICC_UNSENT: 36985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return 2; 36990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 37005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 37015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Default to READ. 37025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return 1; 37030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 37040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 37055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 37065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void resetRadio(Message result) { 3707522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("resetRadio not expected to be called"); 37085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 37095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 37105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 37115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * {@inheritDoc} 37125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 37135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 37145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void handleCallSetupRequestFromSim(boolean accept, Message result) { 37155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(result); 37165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 37175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = obtainRequest(RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM, 37185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe result, mRILDefaultWorkSource); 37195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 37205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 37215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "> " + requestToString(rr.mRequest)); 37220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 37230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 37245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 37255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.handleStkCallSetupRequestFromSim(rr.mSerial, accept); 37265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 37275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe handleRadioProxyExceptionForRR(rr, "getAllowedCarriers", e); 37285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 37290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 37305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 37310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 37325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe //***** Private Methods 37335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 37345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 37355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * This is a helper function to be called when a RadioIndication callback is called. 37365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * It takes care of acquiring wakelock and sending ack if needed. 37375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param indicationType RadioIndicationType received 37385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 37395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void processIndication(int indicationType) { 37405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (indicationType == RadioIndicationType.UNSOLICITED_ACK_EXP) { 37415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sendAck(); 37425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog("Unsol response received; Sending ack to ril.cpp"); 37435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 37445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // ack is not expected to be sent back. Nothing is required to be done here. 37455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 37465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 37470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 37485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void processRequestAck(int serial) { 37495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr; 37505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mRequestList) { 37515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr = mRequestList.get(serial); 37525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 37535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (rr == null) { 37545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.w(RIL.RILJ_LOG_TAG, "processRequestAck: Unexpected solicited ack response! " 37555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + "serial: " + serial); 37565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 37575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe decrementWakeLock(rr); 37585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RIL.RILJ_LOGD) { 37595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + " Ack < " + RIL.requestToString(rr.mRequest)); 37605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 37615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 37625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 37630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 37645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 37655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * This is a helper function to be called when a RadioResponse callback is called. 37665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * It takes care of acks, wakelocks, and finds and returns RILRequest corresponding to the 37675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * response if one is found. 37685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param responseInfo RadioResponseInfo received in response callback 37695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @return RILRequest corresponding to the response 37705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 37715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest processResponse(RadioResponseInfo responseInfo) { 37725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int serial = responseInfo.serial; 37735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int error = responseInfo.error; 37745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int type = responseInfo.type; 37755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 3776a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RILRequest rr = null; 3777a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 3778a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (type == RadioResponseType.SOLICITED_ACK) { 3779a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan synchronized (mRequestList) { 3780a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan rr = mRequestList.get(serial); 3781a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3782a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (rr == null) { 3783a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan Rlog.w(RILJ_LOG_TAG, "Unexpected solicited ack response! sn: " + serial); 3784a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } else { 3785a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan decrementWakeLock(rr); 3786a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan if (RILJ_LOGD) { 3787a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan riljLog(rr.serialString() + " Ack < " + requestToString(rr.mRequest)); 3788a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3789a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3790a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan return rr; 3791a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 3792a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 3793a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan rr = findAndRemoveRequestFromList(serial); 37945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (rr == null) { 37955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.e(RIL.RILJ_LOG_TAG, "processResponse: Unexpected response! serial: " + serial 37965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " error: " + error); 37975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return null; 37980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 37990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 38005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Time logging for RIL command and storing it in TelephonyHistogram. 38015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe addToRilHistogram(rr); 38020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 38035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (type == RadioResponseType.SOLICITED_ACK_EXP) { 38045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sendAck(); 38055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RIL.RILJ_LOGD) { 38065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("Response received for " + rr.serialString() + " " 38075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + RIL.requestToString(rr.mRequest) + " Sending ack to ril.cpp"); 38080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 38095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 38105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // ack sent for SOLICITED_ACK_EXP above; nothing to do for SOLICITED response 38115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 38135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Here and below fake RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, see b/7255789. 38145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // This is needed otherwise we don't automatically transition to the main lock 38155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // screen when the pin or puk is entered incorrectly. 38165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch (rr.mRequest) { 38175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PUK: 38185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PUK2: 38195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mIccStatusChangedRegistrants != null) { 38205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 38215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("ON enter sim puk fakeSimStatusChanged: reg count=" 38225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + mIccStatusChangedRegistrants.size()); 38235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mIccStatusChangedRegistrants.notifyRegistrants(); 38255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 38275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SHUTDOWN: 38285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe setRadioState(RadioState.RADIO_UNAVAILABLE); 38295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 38305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 38325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (error != RadioError.NONE) { 38335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch (rr.mRequest) { 38345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PIN: 38355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PIN2: 38365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CHANGE_SIM_PIN: 38375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CHANGE_SIM_PIN2: 38385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_FACILITY_LOCK: 38395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mIccStatusChangedRegistrants != null) { 38405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 38415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("ON some errors fakeSimStatusChanged: reg count=" 38425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + mIccStatusChangedRegistrants.size()); 38435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mIccStatusChangedRegistrants.notifyRegistrants(); 38455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 38475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 38480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 38495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 38505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch (rr.mRequest) { 38515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: 38525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mTestingEmergencyCall.getAndSet(false)) { 38535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mEmergencyCallbackModeRegistrant != null) { 38545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("testing emergency call, notify ECM Registrants"); 38555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mEmergencyCallbackModeRegistrant.notifyRegistrant(); 38565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 38595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return rr; 38615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 38635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 38645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * This is a helper function to be called at the end of all RadioResponse callbacks. 38655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * It takes care of sending error response, logging, decrementing wakelock if needed, and 38665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * releases the request from memory pool. 38675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param rr RILRequest for which response callback was called 38685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param responseInfo RadioResponseInfo received in the callback 38695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param ret object to be returned to request sender 38705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 38715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void processResponseDone(RILRequest rr, RadioResponseInfo responseInfo, Object ret) { 38725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (responseInfo.error == 0) { 38735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 38745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "< " + requestToString(rr.mRequest) 38755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " " + retToString(rr.mRequest, ret)); 38760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 38775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 38785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 38795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog(rr.serialString() + "< " + requestToString(rr.mRequest) 38805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + " error " + responseInfo.error); 38810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 38825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.onError(responseInfo.error, ret); 38835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeOnRilSolicitedResponse(mPhoneId, rr.mSerial, responseInfo.error, 38855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mRequest, ret); 38865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (rr != null) { 38875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (responseInfo.type == RadioResponseType.SOLICITED) { 38885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe decrementWakeLock(rr); 38890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 38905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.release(); 38915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 38935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 38945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 38955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * Function to send ack and acquire related wakelock 38965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 38975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void sendAck() { 38985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // TODO: Remove rr and clean up acquireWakelock for response and ack 38995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = RILRequest.obtain(RIL_RESPONSE_ACKNOWLEDGEMENT, null, 39005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRILDefaultWorkSource); 39015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe acquireWakeLock(rr, RIL.FOR_ACK_WAKELOCK); 39025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe IRadio radioProxy = getRadioProxy(null); 39035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (radioProxy != null) { 39045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe try { 39055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe radioProxy.responseAcknowledgement(); 39065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } catch (RemoteException | RuntimeException e) { 3907c9c763417554f30c4fa51d3285a9a19893ecd399Amit Mahajan handleRadioProxyExceptionForRR(rr, "sendAck", e); 39080d9b3d744534df7ee3792fdd84454176536590e6Amit Mahajan riljLoge("sendAck: " + e); 39095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 39115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.e(RILJ_LOG_TAG, "Error trying to send ack, radioProxy = null"); 39125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.release(); 39145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 39165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private WorkSource getDeafultWorkSourceIfInvalid(WorkSource workSource) { 39175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (workSource == null) { 39185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe workSource = mRILDefaultWorkSource; 39195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 39215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return workSource; 39225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 39245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private String getWorkSourceClientId(WorkSource workSource) { 39255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (workSource != null) { 39265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return String.valueOf(workSource.get(0)) + ":" + workSource.getName(0); 39275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 39295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return null; 39305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 39325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 39335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * Holds a PARTIAL_WAKE_LOCK whenever 39345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * a) There is outstanding RIL request sent to RIL deamon and no replied 39355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * b) There is a request pending to be sent out. 39365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * 39375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * There is a WAKE_LOCK_TIMEOUT to release the lock, though it shouldn't 39385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * happen often. 39395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 39405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 39415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void acquireWakeLock(RILRequest rr, int wakeLockType) { 39425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (rr) { 39435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (rr.mWakeLockType != INVALID_WAKELOCK) { 39445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.d(RILJ_LOG_TAG, "Failed to aquire wakelock for " + rr.serialString()); 39455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return; 39465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 39485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch(wakeLockType) { 39495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case FOR_WAKELOCK: 39505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mWakeLock) { 39515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLock.acquire(); 39525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLockCount++; 39535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWlSequenceNum++; 39545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 39555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String clientId = getWorkSourceClientId(rr.mWorkSource); 39565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!mClientWakelockTracker.isClientActive(clientId)) { 39575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mActiveWakelockWorkSource != null) { 39585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mActiveWakelockWorkSource.add(rr.mWorkSource); 39595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 39605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mActiveWakelockWorkSource = rr.mWorkSource; 39615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLock.setWorkSource(mActiveWakelockWorkSource); 39635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 39655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mClientWakelockTracker.startTracking(rr.mClientId, 39665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mRequest, rr.mSerial, mWakeLockCount); 39675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 3968d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan Message msg = mRilHandler.obtainMessage(EVENT_WAKE_LOCK_TIMEOUT); 39695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.arg1 = mWlSequenceNum; 3970d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan mRilHandler.sendMessageDelayed(msg, mWakeLockTimeout); 39715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 39735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case FOR_ACK_WAKELOCK: 39745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mAckWakeLock) { 39755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mAckWakeLock.acquire(); 39765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mAckWlSequenceNum++; 39775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 3978d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan Message msg = mRilHandler.obtainMessage(EVENT_ACK_WAKE_LOCK_TIMEOUT); 39795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe msg.arg1 = mAckWlSequenceNum; 3980d71af3fb18a6bf51e6aa346849c968fad511d610Amit Mahajan mRilHandler.sendMessageDelayed(msg, mAckWakeLockTimeout); 39815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 39835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe default: //WTF 39845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.w(RILJ_LOG_TAG, "Acquiring Invalid Wakelock type " + wakeLockType); 39855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return; 39865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mWakeLockType = wakeLockType; 39885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 39905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 39915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void decrementWakeLock(RILRequest rr) { 39925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (rr) { 39935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch(rr.mWakeLockType) { 39945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case FOR_WAKELOCK: 39955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mWakeLock) { 39965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mClientWakelockTracker.stopTracking(rr.mClientId, 39975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mRequest, rr.mSerial, 39985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe (mWakeLockCount > 1) ? mWakeLockCount - 1 : 0); 39995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String clientId = getWorkSourceClientId(rr.mWorkSource);; 40005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!mClientWakelockTracker.isClientActive(clientId) 40015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe && (mActiveWakelockWorkSource != null)) { 40025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mActiveWakelockWorkSource.remove(rr.mWorkSource); 40035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mActiveWakelockWorkSource.size() == 0) { 40045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mActiveWakelockWorkSource = null; 40055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLock.setWorkSource(mActiveWakelockWorkSource); 40075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mWakeLockCount > 1) { 40105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLockCount--; 40115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 40125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLockCount = 0; 40135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLock.release(); 40145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 40175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case FOR_ACK_WAKELOCK: 40185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe //We do not decrement the ACK wakelock 40195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 40205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case INVALID_WAKELOCK: 40215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe break; 40225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe default: 40235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.w(RILJ_LOG_TAG, "Decrementing Invalid Wakelock type " + rr.mWakeLockType); 40245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mWakeLockType = INVALID_WAKELOCK; 40265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private boolean clearWakeLock(int wakeLockType) { 40305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (wakeLockType == FOR_WAKELOCK) { 40315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mWakeLock) { 40325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mWakeLockCount == 0 && !mWakeLock.isHeld()) return false; 40335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.d(RILJ_LOG_TAG, "NOTE: mWakeLockCount is " + mWakeLockCount 40345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + "at time of clearing"); 40355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLockCount = 0; 40365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mWakeLock.release(); 40375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mClientWakelockTracker.stopTrackingAll(); 40385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mActiveWakelockWorkSource = null; 40395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return true; 40405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 40425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mAckWakeLock) { 40435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!mAckWakeLock.isHeld()) return false; 40445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mAckWakeLock.release(); 40455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return true; 40465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 40515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * Release each request in mRequestList then clear the list 40525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param error is the RIL_Errno sent back 40535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe * @param loggable true means to print all requests in mRequestList 40545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 40555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void clearRequestList(int error, boolean loggable) { 40565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr; 40575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mRequestList) { 40585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int count = mRequestList.size(); 40595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD && loggable) { 40605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.d(RILJ_LOG_TAG, "clearRequestList " + " mWakeLockCount=" 40615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + mWakeLockCount + " mRequestList=" + count); 40625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < count; i++) { 40655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr = mRequestList.valueAt(i); 40665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD && loggable) { 40675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.d(RILJ_LOG_TAG, i + ": [" + rr.mSerial + "] " 40685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + requestToString(rr.mRequest)); 40695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.onError(error, null); 40715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe decrementWakeLock(rr); 40725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.release(); 40735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRequestList.clear(); 40755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private RILRequest findAndRemoveRequestFromList(int serial) { 40795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RILRequest rr = null; 40805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mRequestList) { 40815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr = mRequestList.get(serial); 40825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (rr != null) { 40835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRequestList.remove(serial); 40845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return rr; 40885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 40895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe private void addToRilHistogram(RILRequest rr) { 40915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe long endTime = SystemClock.elapsedRealtime(); 40925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int totalTime = (int) (endTime - rr.mStartTimeMs); 40935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 40945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe synchronized (mRilTimeHistograms) { 40955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe TelephonyHistogram entry = mRilTimeHistograms.get(rr.mRequest); 40965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (entry == null) { 40975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // We would have total #RIL_HISTOGRAM_BUCKET_COUNT range buckets for RIL commands 40985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe entry = new TelephonyHistogram(TelephonyHistogram.TELEPHONY_CATEGORY_RIL, 40995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe rr.mRequest, RIL_HISTOGRAM_BUCKET_COUNT); 41005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRilTimeHistograms.put(rr.mRequest, entry); 41015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe entry.addTimeTaken(totalTime); 41035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 4106a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan RadioCapability makeStaticRadioCapability() { 41075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // default to UNKNOWN so we fail fast. 41085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int raf = RadioAccessFamily.RAF_UNKNOWN; 41095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 41105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String rafString = mContext.getResources().getString( 41115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe com.android.internal.R.string.config_radio_access_family); 41125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!TextUtils.isEmpty(rafString)) { 41135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe raf = RadioAccessFamily.rafTypeFromString(rafString); 41145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe RadioCapability rc = new RadioCapability(mPhoneId.intValue(), 0, 0, raf, 41165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe "", RadioCapability.RC_STATUS_SUCCESS); 41175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog("Faking RIL_REQUEST_GET_RADIO_CAPABILITY response using " + raf); 41185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return rc; 41195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 41215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe static String retToString(int req, Object ret) { 41225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (ret == null) return ""; 41235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch (req) { 41245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // Don't log these return values, for privacy's sake. 41255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMSI: 41265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMEI: 41275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMEISV: 41285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_OPEN_CHANNEL: 41295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: 41305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 41315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (!RILJ_LOGV) { 41325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe // If not versbose logging just return and don't display IMSI and IMEI, IMEISV 41335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return ""; 41345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe 41375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe StringBuilder sb; 41385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String s; 41395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int length; 41405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (ret instanceof int[]) { 41415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int[] intArray = (int[]) ret; 41425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe length = intArray.length; 41435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder("{"); 41445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (length > 0) { 41455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int i = 0; 41465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append(intArray[i++]); 41475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe while (i < length) { 41485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append(", ").append(intArray[i++]); 41495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("}"); 41525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 41535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (ret instanceof String[]) { 41545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe String[] strings = (String[]) ret; 41555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe length = strings.length; 41565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder("{"); 41575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (length > 0) { 41585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int i = 0; 41595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append(strings[i++]); 41605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe while (i < length) { 41615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append(", ").append(strings[i++]); 41625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("}"); 41655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 41665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (req == RIL_REQUEST_GET_CURRENT_CALLS) { 41675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<DriverCall> calls = (ArrayList<DriverCall>) ret; 41685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder("{"); 41695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (DriverCall dc : calls) { 41705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("[").append(dc).append("] "); 41715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("}"); 41735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 41745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (req == RIL_REQUEST_GET_NEIGHBORING_CELL_IDS) { 41755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<NeighboringCellInfo> cells = (ArrayList<NeighboringCellInfo>) ret; 41765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder("{"); 41775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (NeighboringCellInfo cell : cells) { 41785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("[").append(cell).append("] "); 41795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("}"); 41815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 41825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (req == RIL_REQUEST_QUERY_CALL_FORWARD_STATUS) { 41835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe CallForwardInfo[] cinfo = (CallForwardInfo[]) ret; 41845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe length = cinfo.length; 41855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder("{"); 41865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (int i = 0; i < length; i++) { 41875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("[").append(cinfo[i]).append("] "); 41885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 41895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("}"); 41905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 41915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (req == RIL_REQUEST_GET_HARDWARE_CONFIG) { 41925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ArrayList<HardwareConfig> hwcfgs = (ArrayList<HardwareConfig>) ret; 41935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb = new StringBuilder(" "); 41945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe for (HardwareConfig hwcfg : hwcfgs) { 41955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe sb.append("[").append(hwcfg).append("] "); 41960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 41975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = sb.toString(); 41985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else { 41995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe s = ret.toString(); 42000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 42015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return s; 42020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 42030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 42045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void writeMetricsNewSms(int tech, int format) { 42055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilNewSms(mPhoneId, tech, format); 42065fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville } 42075fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville 42085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void writeMetricsCallRing(char[] response) { 42095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilCallRing(mPhoneId, response); 42102b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville } 42112b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville 42125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void writeMetricsSrvcc(int state) { 42135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeRilSrvcc(mPhoneId, state); 421465bee39d7e417fb898c3948696d5d8a38046c449fenglu } 421565bee39d7e417fb898c3948696d5d8a38046c449fenglu 42165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void writeMetricsModemRestartEvent(String reason) { 42175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mMetrics.writeModemRestartEvent(mPhoneId, reason); 421865bee39d7e417fb898c3948696d5d8a38046c449fenglu } 421965bee39d7e417fb898c3948696d5d8a38046c449fenglu 42205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe /** 42218e9d1e601dce62cd0328701d7054e03db24727c7Jack Yu * Notify all registrants that the ril has connected or disconnected. 4222a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido * 4223a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido * @param rilVer is the version of the ril or -1 if disconnected. 42245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe */ 4225a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido void notifyRegistrantsRilConnectionChanged(int rilVer) { 4226a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido mRilVersion = rilVer; 42275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mRilConnectedRegistrants != null) { 42285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRilConnectedRegistrants.notifyRegistrants( 4229a56f405d3006b1d8378b5f7757a5613b75fa8fb4Adrian Salido new AsyncResult(null, new Integer(rilVer), null)); 423027eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham } 423127eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham } 423227eef341b171f925ef43dd088cc559280fd7d2b9Prerepa Viswanadham 42335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void 42345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe notifyRegistrantsCdmaInfoRec(CdmaInformationRecords infoRec) { 42355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe int response = RIL_UNSOL_CDMA_INFO_REC; 42365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (infoRec.record instanceof CdmaInformationRecords.CdmaDisplayInfoRec) { 42375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mDisplayInfoRegistrants != null) { 42385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 42395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mDisplayInfoRegistrants.notifyRegistrants( 42405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 42415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaSignalInfoRec) { 42435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mSignalInfoRegistrants != null) { 42445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 42455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mSignalInfoRegistrants.notifyRegistrants( 42465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 42475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaNumberInfoRec) { 42495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mNumberInfoRegistrants != null) { 42505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 42515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mNumberInfoRegistrants.notifyRegistrants( 42525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 42535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaRedirectingNumberInfoRec) { 42555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mRedirNumInfoRegistrants != null) { 42565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 42575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mRedirNumInfoRegistrants.notifyRegistrants( 42585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 42595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaLineControlInfoRec) { 42615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mLineControlInfoRegistrants != null) { 42625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 42635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mLineControlInfoRegistrants.notifyRegistrants( 42645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 42655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53ClirInfoRec) { 42675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mT53ClirInfoRegistrants != null) { 42685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) unsljLogRet(response, infoRec.record); 42695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mT53ClirInfoRegistrants.notifyRegistrants( 42705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 42715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } else if (infoRec.record instanceof CdmaInformationRecords.CdmaT53AudioControlInfoRec) { 42735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (mT53AudCntrlInfoRegistrants != null) { 42745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) { 42755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe unsljLogRet(response, infoRec.record); 42765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 42775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mT53AudCntrlInfoRegistrants.notifyRegistrants( 42785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe new AsyncResult(null, infoRec.record, null)); 4279a63f55cf17629426d976830429a7612387532195Rika Brooks } 4280a63f55cf17629426d976830429a7612387532195Rika Brooks } 42810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 42820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 42835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe static String requestToString(int request) { 42845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch(request) { 42855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_SIM_STATUS: 42865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_SIM_STATUS"; 42875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PIN: 42885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ENTER_SIM_PIN"; 42895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PUK: 42905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ENTER_SIM_PUK"; 42915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PIN2: 42925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ENTER_SIM_PIN2"; 42935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_SIM_PUK2: 42945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ENTER_SIM_PUK2"; 42955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CHANGE_SIM_PIN: 42965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CHANGE_SIM_PIN"; 42975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CHANGE_SIM_PIN2: 42985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CHANGE_SIM_PIN2"; 42995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: 43005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ENTER_NETWORK_DEPERSONALIZATION"; 43015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_CURRENT_CALLS: 43025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_CURRENT_CALLS"; 43035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DIAL: 43045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DIAL"; 43055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMSI: 43065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_IMSI"; 43075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_HANGUP: 43085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "HANGUP"; 43095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: 43105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "HANGUP_WAITING_OR_BACKGROUND"; 43115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: 43125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "HANGUP_FOREGROUND_RESUME_BACKGROUND"; 43135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: 43145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE"; 43155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CONFERENCE: 43165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CONFERENCE"; 43175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_UDUB: 43185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UDUB"; 43195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: 43205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "LAST_CALL_FAIL_CAUSE"; 43215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIGNAL_STRENGTH: 43225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SIGNAL_STRENGTH"; 43235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_VOICE_REGISTRATION_STATE: 43245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "VOICE_REGISTRATION_STATE"; 43255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DATA_REGISTRATION_STATE: 43265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DATA_REGISTRATION_STATE"; 43275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_OPERATOR: 43285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "OPERATOR"; 43295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_RADIO_POWER: 43305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RADIO_POWER"; 43315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DTMF: 43325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DTMF"; 43335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SEND_SMS: 43345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SEND_SMS"; 43355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SEND_SMS_EXPECT_MORE: 43365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SEND_SMS_EXPECT_MORE"; 43375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SETUP_DATA_CALL: 43385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SETUP_DATA_CALL"; 43395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_IO: 43405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SIM_IO"; 43415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SEND_USSD: 43425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SEND_USSD"; 43435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CANCEL_USSD: 43445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CANCEL_USSD"; 43455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_CLIR: 43465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_CLIR"; 43475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_CLIR: 43485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_CLIR"; 43495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: 43505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_CALL_FORWARD_STATUS"; 43515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_CALL_FORWARD: 43525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_CALL_FORWARD"; 43535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_CALL_WAITING: 43545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_CALL_WAITING"; 43555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_CALL_WAITING: 43565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_CALL_WAITING"; 43575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SMS_ACKNOWLEDGE: 43585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SMS_ACKNOWLEDGE"; 43595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMEI: 43605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_IMEI"; 43615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_IMEISV: 43625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_IMEISV"; 43635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ANSWER: 43645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "ANSWER"; 43655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DEACTIVATE_DATA_CALL: 43665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DEACTIVATE_DATA_CALL"; 43675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_FACILITY_LOCK: 43685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_FACILITY_LOCK"; 43695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_FACILITY_LOCK: 43705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_FACILITY_LOCK"; 43715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CHANGE_BARRING_PASSWORD: 43725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CHANGE_BARRING_PASSWORD"; 43735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: 43745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_NETWORK_SELECTION_MODE"; 43755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: 43765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_NETWORK_SELECTION_AUTOMATIC"; 43775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: 43785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_NETWORK_SELECTION_MANUAL"; 43795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : 43805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_AVAILABLE_NETWORKS "; 43815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DTMF_START: 43825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DTMF_START"; 43835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DTMF_STOP: 43845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DTMF_STOP"; 43855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_BASEBAND_VERSION: 43865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "BASEBAND_VERSION"; 43875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SEPARATE_CONNECTION: 43885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SEPARATE_CONNECTION"; 43895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_MUTE: 43905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_MUTE"; 43915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_MUTE: 43925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_MUTE"; 43935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_CLIP: 43945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_CLIP"; 43955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: 43965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "LAST_DATA_CALL_FAIL_CAUSE"; 43975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DATA_CALL_LIST: 43985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DATA_CALL_LIST"; 43995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_RESET_RADIO: 44005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RESET_RADIO"; 44015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_OEM_HOOK_RAW: 44025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "OEM_HOOK_RAW"; 44035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_OEM_HOOK_STRINGS: 44045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "OEM_HOOK_STRINGS"; 44055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SCREEN_STATE: 44065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SCREEN_STATE"; 44075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: 44085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_SUPP_SVC_NOTIFICATION"; 44095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_WRITE_SMS_TO_SIM: 44105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "WRITE_SMS_TO_SIM"; 44115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DELETE_SMS_ON_SIM: 44125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "DELETE_SMS_ON_SIM"; 44135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_BAND_MODE: 44145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "SET_BAND_MODE"; 44155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: 44165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "QUERY_AVAILABLE_BAND_MODE"; 44175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_GET_PROFILE: 44185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_STK_GET_PROFILE"; 44195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_SET_PROFILE: 44205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_STK_SET_PROFILE"; 44215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: 44225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_STK_SEND_ENVELOPE_COMMAND"; 44235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: 44245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_STK_SEND_TERMINAL_RESPONSE"; 44255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: 44265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM"; 44275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "REQUEST_EXPLICIT_CALL_TRANSFER"; 44285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: 44295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_SET_PREFERRED_NETWORK_TYPE"; 44305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: 44315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_GET_PREFERRED_NETWORK_TYPE"; 44325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: 44335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_GET_NEIGHBORING_CELL_IDS"; 44345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_LOCATION_UPDATES: 44355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_SET_LOCATION_UPDATES"; 44365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE: 44375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE"; 44385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE: 44395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE"; 44405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE: 44415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE"; 44425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_TTY_MODE: 44435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_TTY_MODE"; 44445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_QUERY_TTY_MODE: 44455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_QUERY_TTY_MODE"; 44465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE: 44475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE"; 44485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE: 44495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE"; 44505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_FLASH: 44515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_FLASH"; 44525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_BURST_DTMF: 44535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_BURST_DTMF"; 44545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SEND_SMS: 44555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SEND_SMS"; 44565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: 44575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE"; 44585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG: 44595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GSM_GET_BROADCAST_CONFIG"; 44605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG: 44615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GSM_SET_BROADCAST_CONFIG"; 44625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG: 44635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG"; 44645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG: 44655fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG"; 44665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GSM_BROADCAST_ACTIVATION: 44675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GSM_BROADCAST_ACTIVATION"; 44685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: 44695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY"; 44705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION: 44715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_BROADCAST_ACTIVATION"; 44725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_SUBSCRIPTION: 44735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_SUBSCRIPTION"; 44745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: 44755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM"; 44765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: 44775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM"; 44785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_DEVICE_IDENTITY: 44795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_DEVICE_IDENTITY"; 44805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_SMSC_ADDRESS: 44815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GET_SMSC_ADDRESS"; 44825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_SMSC_ADDRESS: 44835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_SMSC_ADDRESS"; 44845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: 44855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "REQUEST_EXIT_EMERGENCY_CALLBACK_MODE"; 44865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: 44875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_REPORT_SMS_MEMORY_STATUS"; 44885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: 44895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING"; 44905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: 44915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE"; 44925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ISIM_AUTHENTICATION: 44935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_ISIM_AUTHENTICATION"; 44945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: 44955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU"; 44965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: 44975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS"; 44985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_VOICE_RADIO_TECH: 44995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_VOICE_RADIO_TECH"; 45005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_CELL_INFO_LIST: 45015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GET_CELL_INFO_LIST"; 45025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: 45035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_CELL_INFO_LIST_RATE"; 45045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_INITIAL_ATTACH_APN: 45055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_INITIAL_ATTACH_APN"; 45065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_DATA_PROFILE: 45075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_DATA_PROFILE"; 45085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_IMS_REGISTRATION_STATE: 45095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_IMS_REGISTRATION_STATE"; 45105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_IMS_SEND_SMS: 45115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_IMS_SEND_SMS"; 45125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC: 45135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC"; 45145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_OPEN_CHANNEL: 45155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SIM_OPEN_CHANNEL"; 45165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_CLOSE_CHANNEL: 45175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SIM_CLOSE_CHANNEL"; 45185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: 45195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL"; 45205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_NV_READ_ITEM: 45215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_NV_READ_ITEM"; 45225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_NV_WRITE_ITEM: 45235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_NV_WRITE_ITEM"; 45245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_NV_WRITE_CDMA_PRL: 45255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_NV_WRITE_CDMA_PRL"; 45265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_NV_RESET_CONFIG: 45275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_NV_RESET_CONFIG"; 45285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_UICC_SUBSCRIPTION: 45295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_UICC_SUBSCRIPTION"; 45305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_ALLOW_DATA: 45315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_ALLOW_DATA"; 45325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_HARDWARE_CONFIG: 45335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "GET_HARDWARE_CONFIG"; 45345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SIM_AUTHENTICATION: 45355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SIM_AUTHENTICATION"; 45365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SHUTDOWN: 45375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SHUTDOWN"; 45385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_RADIO_CAPABILITY: 45395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_RADIO_CAPABILITY"; 45405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_RADIO_CAPABILITY: 45415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GET_RADIO_CAPABILITY"; 45425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_START_LCE: 45435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_START_LCE"; 45445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_STOP_LCE: 45455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_STOP_LCE"; 45465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_PULL_LCEDATA: 45475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_PULL_LCEDATA"; 45485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_ACTIVITY_INFO: 45495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GET_ACTIVITY_INFO"; 45505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_SET_ALLOWED_CARRIERS: 45515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_SET_ALLOWED_CARRIERS"; 45525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_REQUEST_GET_ALLOWED_CARRIERS: 45535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_REQUEST_GET_ALLOWED_CARRIERS"; 455499607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu case RIL_REQUEST_SET_SIM_CARD_POWER: 455599607db1bc0f46e73f39d5379c590b8bcb4bf947Jack Yu return "RIL_REQUEST_SET_SIM_CARD_POWER"; 4556baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu case RIL_REQUEST_SEND_DEVICE_STATE: 4557baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu return "RIL_REQUEST_SEND_DEVICE_STATE"; 4558baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu case RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER: 4559baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu return "RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER"; 45605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_RESPONSE_ACKNOWLEDGEMENT: 45615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_RESPONSE_ACKNOWLEDGEMENT"; 45625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe default: return "<unknown request>"; 45635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 45645fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville } 45655fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville 45665fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe static String responseToString(int request) { 45675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe switch(request) { 45685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: 45695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_RADIO_STATE_CHANGED"; 45705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: 45715fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_CALL_STATE_CHANGED"; 45725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_NETWORK_STATE_CHANGED: 45735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_NETWORK_STATE_CHANGED"; 45745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_NEW_SMS: 45755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_NEW_SMS"; 45765fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: 45775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT"; 45785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: 45795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_NEW_SMS_ON_SIM"; 45805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_ON_USSD: 45815fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_ON_USSD"; 45825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_ON_USSD_REQUEST: 45835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_ON_USSD_REQUEST"; 45845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_NITZ_TIME_RECEIVED: 45855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_NITZ_TIME_RECEIVED"; 45865fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_SIGNAL_STRENGTH: 45875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_SIGNAL_STRENGTH"; 45885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_DATA_CALL_LIST_CHANGED: 45895fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_DATA_CALL_LIST_CHANGED"; 45905fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_SUPP_SVC_NOTIFICATION: 45915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_SUPP_SVC_NOTIFICATION"; 45925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_STK_SESSION_END: 45935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_STK_SESSION_END"; 45945fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_STK_PROACTIVE_COMMAND: 45955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_STK_PROACTIVE_COMMAND"; 45965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_STK_EVENT_NOTIFY: 45975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_STK_EVENT_NOTIFY"; 45985fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_STK_CALL_SETUP: 45995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_STK_CALL_SETUP"; 46005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_SIM_SMS_STORAGE_FULL: 46015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_SIM_SMS_STORAGE_FULL"; 46025fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_SIM_REFRESH: 46035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_SIM_REFRESH"; 46045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CALL_RING: 46055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CALL_RING"; 46065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: 46075fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_SIM_STATUS_CHANGED"; 46085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: 46095fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_CDMA_NEW_SMS"; 46105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: 46115fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_NEW_BROADCAST_SMS"; 46125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: 46135fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL"; 46145fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESTRICTED_STATE_CHANGED: 46155fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESTRICTED_STATE_CHANGED"; 46165fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: 46175fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE"; 46185fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CDMA_CALL_WAITING: 46195fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CDMA_CALL_WAITING"; 46205fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: 46215fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CDMA_OTA_PROVISION_STATUS"; 46225fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CDMA_INFO_REC: 46235fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CDMA_INFO_REC"; 46245fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_OEM_HOOK_RAW: 46255fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_OEM_HOOK_RAW"; 46265fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RINGBACK_TONE: 46275fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RINGBACK_TONE"; 46285fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESEND_INCALL_MUTE: 46295fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESEND_INCALL_MUTE"; 46305fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: 46315fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "CDMA_SUBSCRIPTION_SOURCE_CHANGED"; 46325fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOl_CDMA_PRL_CHANGED: 46335fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CDMA_PRL_CHANGED"; 46345fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: 46355fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE"; 46365fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RIL_CONNECTED: 46375fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RIL_CONNECTED"; 46385fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: 46395fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_VOICE_RADIO_TECH_CHANGED"; 46405fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_CELL_INFO_LIST: 46415fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_CELL_INFO_LIST"; 46425fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED: 46435fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED"; 46445fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED: 46455fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED"; 46465fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_SRVCC_STATE_NOTIFY: 46475fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_SRVCC_STATE_NOTIFY"; 46485fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_HARDWARE_CONFIG_CHANGED: 46495fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_UNSOL_HARDWARE_CONFIG_CHANGED"; 46505fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_RADIO_CAPABILITY: 46515fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "RIL_UNSOL_RADIO_CAPABILITY"; 46525fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_ON_SS: 46535fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_ON_SS"; 46545fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_STK_CC_ALPHA_NOTIFY: 46555fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_STK_CC_ALPHA_NOTIFY"; 46565fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_LCEDATA_RECV: 46575fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_LCE_INFO_RECV"; 46585fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_PCO_DATA: 46595fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_PCO_DATA"; 46605fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe case RIL_UNSOL_MODEM_RESTART: 46615fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "UNSOL_MODEM_RESTART"; 46625fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe default: 46635fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe return "<unknown response>"; 46645fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 466521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 466621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 46675fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void riljLog(String msg) { 46685fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.d(RILJ_LOG_TAG, msg 46695fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : "")); 46705fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46715d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi 46725fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void riljLoge(String msg) { 46735fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.e(RILJ_LOG_TAG, msg 46745fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : "")); 46755fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46765d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi 46775fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void riljLoge(String msg, Exception e) { 46785fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.e(RILJ_LOG_TAG, msg 46795fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : ""), e); 46805fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46815d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi 46825fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void riljLogv(String msg) { 46835fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe Rlog.v(RILJ_LOG_TAG, msg 46845fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe + (mPhoneId != null ? (" [SUB" + mPhoneId + "]") : "")); 46855fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46865d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi 46875fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void unsljLog(int response) { 46885fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("[UNSL]< " + responseToString(response)); 46895d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi } 46905d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi 46915fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void unsljLogMore(int response, String more) { 46925fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("[UNSL]< " + responseToString(response) + " " + more); 46935fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46949d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan 46955fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void unsljLogRet(int response, Object ret) { 46965fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLog("[UNSL]< " + responseToString(response) + " " + retToString(response, ret)); 46975fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 46989d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan 46995fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe void unsljLogvRet(int response, Object ret) { 47005fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe riljLogv("[UNSL]< " + responseToString(response) + " " + retToString(response, ret)); 47015fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe } 47029d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan 47035fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe @Override 47045fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe public void setPhoneType(int phoneType) { // Called by GsmCdmaPhone 47055fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType); 47065fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe mPhoneType = phoneType; 47079d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan } 47089d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan 47090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* (non-Javadoc) 47100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @see com.android.internal.telephony.BaseCommands#testingEmergencyCall() 47110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 47120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 47130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testingEmergencyCall() { 47140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (RILJ_LOGD) riljLog("testingEmergencyCall"); 47150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mTestingEmergencyCall.set(true); 47160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 47170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 47180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 471905ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println("RIL: " + this); 47200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mWakeLock=" + mWakeLock); 47210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mWakeLockTimeout=" + mWakeLockTimeout); 4722892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt synchronized (mRequestList) { 47237cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt synchronized (mWakeLock) { 47247cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt pw.println(" mWakeLockCount=" + mWakeLockCount); 47257cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt } 4726892e1fecf3c3736c4c04cf219d01034f71307065Robert Greenwalt int count = mRequestList.size(); 47270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mRequestList count=" + count); 47280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < count; i++) { 47297cabec78b4c9ad40f23d8f9fd756722d33b4a639Robert Greenwalt RILRequest rr = mRequestList.valueAt(i); 47300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" [" + rr.mSerial + "] " + requestToString(rr.mRequest)); 47310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 47320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4733d39109502855e8d81e45e21161d8bf0cfacf42e0Sanket Padawe pw.println(" mLastNITZTimeInfo=" + Arrays.toString(mLastNITZTimeInfo)); 47340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mTestingEmergencyCall=" + mTestingEmergencyCall.get()); 47351b90799284785b26b0853ae367cac139ba37e18bNaveen Kalla mClientWakelockTracker.dumpClientRequestTracker(); 47360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 473740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal 47388e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran public List<ClientRequestStats> getClientRequestStats() { 47398e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran return mClientWakelockTracker.getClientRequestStats(); 47408e2a1c76f67ebaeebd8401c4ebf7d0515b522d5eSooraj Sasindran } 4741e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan 4742f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan public static ArrayList<Byte> primitiveArrayToArrayList(byte[] arr) { 4743f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan ArrayList<Byte> arrayList = new ArrayList<>(arr.length); 4744f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan for (byte b : arr) { 4745f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan arrayList.add(b); 4746f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 4747f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan return arrayList; 4748f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan } 4749f5865983b0be60ad2ab177ec37e57ffedfd20ac7Amit Mahajan 4750e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan public static byte[] arrayListToPrimitiveArray(ArrayList<Byte> bytes) { 4751e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan byte[] ret = new byte[bytes.size()]; 4752e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan for (int i = 0; i < ret.length; i++) { 4753e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan ret[i] = bytes.get(i); 4754e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan } 4755e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan return ret; 4756e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan } 4757e7c29ee85e324289d247d6e28a8c1a216c3658c4Amit Mahajan 475821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan static ArrayList<HardwareConfig> convertHalHwConfigList( 475921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ArrayList<android.hardware.radio.V1_0.HardwareConfig> hwListRil, 476021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan RIL ril) { 476121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int num; 476221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ArrayList<HardwareConfig> response; 476321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan HardwareConfig hw; 476421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 476521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan num = hwListRil.size(); 476621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan response = new ArrayList<HardwareConfig>(num); 476721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 476821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan if (RILJ_LOGV) { 476921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ril.riljLog("convertHalHwConfigList: num=" + num); 477021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 477121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan for (android.hardware.radio.V1_0.HardwareConfig hwRil : hwListRil) { 477221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int type = hwRil.type; 477321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan switch(type) { 477421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case HardwareConfig.DEV_HARDWARE_TYPE_MODEM: { 477521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan hw = new HardwareConfig(type); 477621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan HardwareConfigModem hwModem = hwRil.modem.get(0); 477721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan hw.assignModem(hwRil.uuid, hwRil.state, hwModem.rilModel, hwModem.rat, 477821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan hwModem.maxVoice, hwModem.maxData, hwModem.maxStandby); 477921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 478021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 478121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case HardwareConfig.DEV_HARDWARE_TYPE_SIM: { 478221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan hw = new HardwareConfig(type); 478321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan hw.assignSim(hwRil.uuid, hwRil.state, hwRil.sim.get(0).modemUuid); 478421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 478521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 478621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan default: { 478721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan throw new RuntimeException( 478821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan "RIL_REQUEST_GET_HARDWARE_CONFIG invalid hardward type:" + type); 478921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 479021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 479121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 479221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan response.add(hw); 479321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 479421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 479521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan return response; 479621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 479721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 479821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan static RadioCapability convertHalRadioCapability( 479921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan android.hardware.radio.V1_0.RadioCapability rcRil, RIL ril) { 480021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int session = rcRil.session; 480121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int phase = rcRil.phase; 480221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int rat = rcRil.raf; 480321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan String logicModemUuid = rcRil.logicalModemUuid; 480421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan int status = rcRil.status; 480521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 480621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ril.riljLog("convertHalRadioCapability: session=" + session + 480721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ", phase=" + phase + 480821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ", rat=" + rat + 480921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ", logicModemUuid=" + logicModemUuid + 481021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ", status=" + status); 481121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan RadioCapability rc = new RadioCapability( 48125fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe ril.mPhoneId, session, phase, rat, logicModemUuid, status); 481321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan return rc; 481421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 481521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 481621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan static ArrayList<Integer> convertHalLceData(LceDataInfo lce, RIL ril) { 481721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan final ArrayList<Integer> capacityResponse = new ArrayList<Integer>(); 481821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan final int capacityDownKbps = lce.lastHopCapacityKbps; 4819152ec067149afef2e05216fe7137bd21c1584ff0Amit Mahajan final int confidenceLevel = Byte.toUnsignedInt(lce.confidenceLevel); 482021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan final int lceSuspended = lce.lceSuspended ? 1 : 0; 482121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 482221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ril.riljLog("LCE capacity information received:" + 482321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan " capacity=" + capacityDownKbps + 482421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan " confidence=" + confidenceLevel + 482521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan " lceSuspended=" + lceSuspended); 482621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 482721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan capacityResponse.add(capacityDownKbps); 482821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan capacityResponse.add(confidenceLevel); 482921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan capacityResponse.add(lceSuspended); 483021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan return capacityResponse; 483121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 483221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 4833a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan static ArrayList<CellInfo> convertHalCellInfoList( 483421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ArrayList<android.hardware.radio.V1_0.CellInfo> records) { 483521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan ArrayList<CellInfo> response = new ArrayList<CellInfo>(records.size()); 483621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 483721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan for (android.hardware.radio.V1_0.CellInfo record : records) { 483821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan // first convert RIL CellInfo to Parcel 483921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan Parcel p = Parcel.obtain(); 484021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(record.cellInfoType); 484121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(record.registered ? 1 : 0); 484221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(record.timeStampType); 484321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeLong(record.timeStamp); 484421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan switch (record.cellInfoType) { 484521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case CellInfoType.GSM: { 484621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan CellInfoGsm cellInfoGsm = record.gsm.get(0); 484721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(Integer.parseInt(cellInfoGsm.cellIdentityGsm.mcc)); 484821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(Integer.parseInt(cellInfoGsm.cellIdentityGsm.mnc)); 484921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoGsm.cellIdentityGsm.lac); 485021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoGsm.cellIdentityGsm.cid); 485121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoGsm.cellIdentityGsm.arfcn); 4852920b42160e170581c29fe50ed9b3adef1582b6bdNathan Harold p.writeInt(Byte.toUnsignedInt(cellInfoGsm.cellIdentityGsm.bsic)); 485321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoGsm.signalStrengthGsm.signalStrength); 485421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoGsm.signalStrengthGsm.bitErrorRate); 485521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoGsm.signalStrengthGsm.timingAdvance); 485621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 485721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 485821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 485921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case CellInfoType.CDMA: { 486021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan CellInfoCdma cellInfoCdma = record.cdma.get(0); 486121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoCdma.cellIdentityCdma.networkId); 486221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoCdma.cellIdentityCdma.systemId); 4863b83528485c4fc93aa5dbaf557bb81a5bdcd0564cJack Yu p.writeInt(cellInfoCdma.cellIdentityCdma.baseStationId); 486421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoCdma.cellIdentityCdma.longitude); 486521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoCdma.cellIdentityCdma.latitude); 486621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoCdma.signalStrengthCdma.dbm); 486721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoCdma.signalStrengthCdma.ecio); 486821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoCdma.signalStrengthEvdo.dbm); 486921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoCdma.signalStrengthEvdo.ecio); 487021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoCdma.signalStrengthEvdo.signalNoiseRatio); 487121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 487221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 487321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 487421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case CellInfoType.LTE: { 487521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan CellInfoLte cellInfoLte = record.lte.get(0); 487621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(Integer.parseInt(cellInfoLte.cellIdentityLte.mcc)); 487721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(Integer.parseInt(cellInfoLte.cellIdentityLte.mnc)); 487821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoLte.cellIdentityLte.ci); 487921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoLte.cellIdentityLte.pci); 488021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoLte.cellIdentityLte.tac); 488121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoLte.cellIdentityLte.earfcn); 488221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoLte.signalStrengthLte.signalStrength); 488321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoLte.signalStrengthLte.rsrp); 488421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoLte.signalStrengthLte.rsrq); 488521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoLte.signalStrengthLte.rssnr); 488621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoLte.signalStrengthLte.cqi); 488721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoLte.signalStrengthLte.timingAdvance); 488821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 488921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 489021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 489121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan case CellInfoType.WCDMA: { 489221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan CellInfoWcdma cellInfoWcdma = record.wcdma.get(0); 489321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(Integer.parseInt(cellInfoWcdma.cellIdentityWcdma.mcc)); 489421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(Integer.parseInt(cellInfoWcdma.cellIdentityWcdma.mnc)); 489521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoWcdma.cellIdentityWcdma.lac); 489621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoWcdma.cellIdentityWcdma.cid); 489721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoWcdma.cellIdentityWcdma.psc); 489821c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoWcdma.cellIdentityWcdma.uarfcn); 489921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoWcdma.signalStrengthWcdma.signalStrength); 490021c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan p.writeInt(cellInfoWcdma.signalStrengthWcdma.bitErrorRate); 490121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan break; 490221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 4903522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan 4904522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan default: 4905522fc0602d60895881b33243030dd40d5778e4a9Amit Mahajan throw new RuntimeException("unexpected cellinfotype: " + record.cellInfoType); 490621c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 490721c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 49085fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe p.setDataPosition(0); 490921c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan CellInfo InfoRec = CellInfo.CREATOR.createFromParcel(p); 49105fbc7580aaf80e31de81ed1dde4437451d822102Sanket Padawe p.recycle(); 491121c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan response.add(InfoRec); 491221c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 491321c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan 491421c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan return response; 491521c9e33b0a3e19ee70ddf0301469f4c58b57d14cAmit Mahajan } 4916a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan 4917a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan static SignalStrength convertHalSignalStrength( 4918a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan android.hardware.radio.V1_0.SignalStrength signalStrength) { 4919a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan return new SignalStrength(signalStrength.gw.signalStrength, 4920a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.gw.bitErrorRate, 4921a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.cdma.dbm, 4922a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.cdma.ecio, 4923a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.evdo.dbm, 4924a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.evdo.ecio, 4925a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.evdo.signalNoiseRatio, 4926a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.lte.signalStrength, 4927a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.lte.rsrp, 4928a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.lte.rsrq, 4929a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.lte.rssnr, 4930a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.lte.cqi, 4931a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan signalStrength.tdScdma.rscp, 4932a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan false /* gsmFlag - don't care; will be changed by SST */); 4933a46dc426a10a9d3c95cca80a80d9c0759459cb4fAmit Mahajan } 49340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 4935