1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.internal.telephony; 18 19 import android.content.Context; 20 import android.hardware.radio.V1_0.ActivityStatsInfo; 21 import android.hardware.radio.V1_0.AppStatus; 22 import android.hardware.radio.V1_0.CardStatus; 23 import android.hardware.radio.V1_0.Carrier; 24 import android.hardware.radio.V1_0.CarrierRestrictions; 25 import android.hardware.radio.V1_0.CdmaBroadcastSmsConfigInfo; 26 import android.hardware.radio.V1_0.DataRegStateResult; 27 import android.hardware.radio.V1_0.GsmBroadcastSmsConfigInfo; 28 import android.hardware.radio.V1_0.LastCallFailCauseInfo; 29 import android.hardware.radio.V1_0.LceDataInfo; 30 import android.hardware.radio.V1_0.LceStatusInfo; 31 import android.hardware.radio.V1_0.NeighboringCell; 32 import android.hardware.radio.V1_0.RadioError; 33 import android.hardware.radio.V1_0.RadioResponseInfo; 34 import android.hardware.radio.V1_0.SendSmsResult; 35 import android.hardware.radio.V1_0.VoiceRegStateResult; 36 import android.hardware.radio.V1_4.CarrierRestrictionsWithPriority; 37 import android.hardware.radio.V1_4.IRadioResponse; 38 import android.hardware.radio.V1_4.SimLockMultiSimPolicy; 39 import android.os.AsyncResult; 40 import android.os.Message; 41 import android.os.SystemClock; 42 import android.service.carrier.CarrierIdentifier; 43 import android.telephony.CarrierRestrictionRules; 44 import android.telephony.CellInfo; 45 import android.telephony.ModemActivityInfo; 46 import android.telephony.NeighboringCellInfo; 47 import android.telephony.PhoneNumberUtils; 48 import android.telephony.RadioAccessFamily; 49 import android.telephony.SignalStrength; 50 import android.telephony.SubscriptionManager; 51 import android.telephony.TelephonyManager; 52 import android.telephony.data.DataCallResponse; 53 import android.text.TextUtils; 54 55 import com.android.internal.telephony.dataconnection.KeepaliveStatus; 56 import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; 57 import com.android.internal.telephony.uicc.IccCardApplicationStatus; 58 import com.android.internal.telephony.uicc.IccCardStatus; 59 import com.android.internal.telephony.uicc.IccIoResult; 60 import com.android.internal.telephony.uicc.IccUtils; 61 62 import java.util.ArrayList; 63 import java.util.Collections; 64 import java.util.List; 65 66 public class RadioResponse extends IRadioResponse.Stub { 67 // The number of the required config values for broadcast SMS stored in the C struct 68 // RIL_CDMA_BroadcastServiceInfo 69 private static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3; 70 71 private static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31; 72 73 RIL mRil; 74 RadioResponse(RIL ril)75 public RadioResponse(RIL ril) { 76 mRil = ril; 77 } 78 79 /** 80 * Helper function to send response msg 81 * @param msg Response message to be sent 82 * @param ret Return object to be included in the response message 83 */ sendMessageResponse(Message msg, Object ret)84 static void sendMessageResponse(Message msg, Object ret) { 85 if (msg != null) { 86 AsyncResult.forMessage(msg, ret, null); 87 msg.sendToTarget(); 88 } 89 } 90 91 /** 92 * Acknowledge the receipt of radio request sent to the vendor. This must be sent only for 93 * radio request which take long time to respond. 94 * For more details, refer https://source.android.com/devices/tech/connect/ril.html 95 * 96 * @param serial Serial no. of the request whose acknowledgement is sent. 97 */ acknowledgeRequest(int serial)98 public void acknowledgeRequest(int serial) { 99 mRil.processRequestAck(serial); 100 } 101 102 /** 103 * @param responseInfo Response info struct containing response type, serial no. and error 104 * @param cardStatus ICC card status as defined by CardStatus in types.hal 105 */ getIccCardStatusResponse(RadioResponseInfo responseInfo, CardStatus cardStatus)106 public void getIccCardStatusResponse(RadioResponseInfo responseInfo, CardStatus cardStatus) { 107 responseIccCardStatus(responseInfo, cardStatus); 108 } 109 110 /** 111 * @param responseInfo Response info struct containing response type, serial no. and error 112 * @param cardStatus ICC card status as defined by CardStatus in 1.2/types.hal 113 */ getIccCardStatusResponse_1_2(RadioResponseInfo responseInfo, android.hardware.radio.V1_2.CardStatus cardStatus)114 public void getIccCardStatusResponse_1_2(RadioResponseInfo responseInfo, 115 android.hardware.radio.V1_2.CardStatus cardStatus) { 116 responseIccCardStatus_1_2(responseInfo, cardStatus); 117 } 118 119 /** 120 * @param responseInfo Response info struct containing response type, serial no. and error 121 * @param cardStatus ICC card status as defined by CardStatus in 1.4/types.hal 122 */ getIccCardStatusResponse_1_4(RadioResponseInfo responseInfo, android.hardware.radio.V1_4.CardStatus cardStatus)123 public void getIccCardStatusResponse_1_4(RadioResponseInfo responseInfo, 124 android.hardware.radio.V1_4.CardStatus cardStatus) { 125 responseIccCardStatus_1_4(responseInfo, cardStatus); 126 } 127 128 /** 129 * @param responseInfo Response info struct containing response type, serial no. and error 130 * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown. 131 */ supplyIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)132 public void supplyIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) { 133 responseInts(responseInfo, remainingAttempts); 134 } 135 136 /** 137 * @param responseInfo Response info struct containing response type, serial no. and error 138 * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown. 139 */ supplyIccPukForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)140 public void supplyIccPukForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) { 141 responseInts(responseInfo, remainingAttempts); 142 } 143 144 /** 145 * @param responseInfo Response info struct containing response type, serial no. and error 146 * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown. 147 */ supplyIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)148 public void supplyIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) { 149 responseInts(responseInfo, remainingAttempts); 150 } 151 152 /** 153 * @param responseInfo Response info struct containing response type, serial no. and error 154 * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown. 155 */ supplyIccPuk2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)156 public void supplyIccPuk2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) { 157 responseInts(responseInfo, remainingAttempts); 158 } 159 160 /** 161 * @param responseInfo Response info struct containing response type, serial no. and error 162 * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown. 163 */ changeIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)164 public void changeIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) { 165 responseInts(responseInfo, remainingAttempts); 166 } 167 168 /** 169 * @param responseInfo Response info struct containing response type, serial no. and error 170 * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown. 171 */ changeIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)172 public void changeIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) { 173 responseInts(responseInfo, remainingAttempts); 174 } 175 176 /** 177 * @param responseInfo Response info struct containing response type, serial no. and error 178 * @param retriesRemaining Number of retries remaining, must be equal to -1 if unknown. 179 */ supplyNetworkDepersonalizationResponse(RadioResponseInfo responseInfo, int retriesRemaining)180 public void supplyNetworkDepersonalizationResponse(RadioResponseInfo responseInfo, 181 int retriesRemaining) { 182 responseInts(responseInfo, retriesRemaining); 183 } 184 185 /** 186 * @param responseInfo Response info struct containing response type, serial no. and error 187 * @param calls Current call list 188 */ getCurrentCallsResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.Call> calls)189 public void getCurrentCallsResponse(RadioResponseInfo responseInfo, 190 ArrayList<android.hardware.radio.V1_0.Call> calls) { 191 responseCurrentCalls(responseInfo, calls); 192 } 193 194 /** 195 * @param responseInfo Response info struct containing response type, serial no. and error 196 * @param calls Current call list 197 */ getCurrentCallsResponse_1_2(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_2.Call> calls)198 public void getCurrentCallsResponse_1_2(RadioResponseInfo responseInfo, 199 ArrayList<android.hardware.radio.V1_2.Call> calls) { 200 responseCurrentCalls_1_2(responseInfo, calls); 201 } 202 203 /** 204 * @param responseInfo Response info struct containing response type, serial no. and error 205 */ dialResponse(RadioResponseInfo responseInfo)206 public void dialResponse(RadioResponseInfo responseInfo) { 207 responseVoid(responseInfo); 208 } 209 210 /** 211 * @param responseInfo Response info struct containing response type, serial no. and error 212 * @param imsi String containing the IMSI 213 */ getIMSIForAppResponse(RadioResponseInfo responseInfo, String imsi)214 public void getIMSIForAppResponse(RadioResponseInfo responseInfo, String imsi) { 215 responseString(responseInfo, imsi); 216 } 217 218 /** 219 * @param responseInfo Response info struct containing response type, serial no. and error 220 */ hangupConnectionResponse(RadioResponseInfo responseInfo)221 public void hangupConnectionResponse(RadioResponseInfo responseInfo) { 222 responseVoid(responseInfo); 223 } 224 225 /** 226 * @param responseInfo Response info struct containing response type, serial no. and error 227 */ hangupWaitingOrBackgroundResponse(RadioResponseInfo responseInfo)228 public void hangupWaitingOrBackgroundResponse(RadioResponseInfo responseInfo) { 229 responseVoid(responseInfo); 230 } 231 232 /** 233 * @param responseInfo Response info struct containing response type, serial no. and error 234 */ hangupForegroundResumeBackgroundResponse(RadioResponseInfo responseInfo)235 public void hangupForegroundResumeBackgroundResponse(RadioResponseInfo responseInfo) { 236 responseVoid(responseInfo); 237 } 238 239 /** 240 * @param responseInfo Response info struct containing response type, serial no. and error 241 */ switchWaitingOrHoldingAndActiveResponse(RadioResponseInfo responseInfo)242 public void switchWaitingOrHoldingAndActiveResponse(RadioResponseInfo responseInfo) { 243 responseVoid(responseInfo); 244 } 245 246 /** 247 * @param responseInfo Response info struct containing response type, serial no. and error 248 */ conferenceResponse(RadioResponseInfo responseInfo)249 public void conferenceResponse(RadioResponseInfo responseInfo) { 250 responseVoid(responseInfo); 251 } 252 253 /** 254 * @param responseInfo Response info struct containing response type, serial no. and error 255 */ rejectCallResponse(RadioResponseInfo responseInfo)256 public void rejectCallResponse(RadioResponseInfo responseInfo) { 257 responseVoid(responseInfo); 258 } 259 260 /** 261 * @param responseInfo Response info struct containing response type, serial no. and error 262 * @param fcInfo Contains LastCallFailCause and vendor cause code. GSM failure reasons 263 * are mapped to cause codes defined in TS 24.008 Annex H where possible. CDMA 264 * failure reasons are derived from the possible call failure scenarios 265 * described in the "CDMA IS-2000 Release A (C.S0005-A v6.0)" standard. 266 */ getLastCallFailCauseResponse(RadioResponseInfo responseInfo, LastCallFailCauseInfo fcInfo)267 public void getLastCallFailCauseResponse(RadioResponseInfo responseInfo, 268 LastCallFailCauseInfo fcInfo) { 269 responseLastCallFailCauseInfo(responseInfo, fcInfo); 270 } 271 getSignalStrengthResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.SignalStrength sigStrength)272 public void getSignalStrengthResponse(RadioResponseInfo responseInfo, 273 android.hardware.radio.V1_0.SignalStrength sigStrength) { 274 responseSignalStrength(responseInfo, sigStrength); 275 } 276 277 /** 278 * @param responseInfo Response info struct containing response type, serial no. and error 279 * @param signalStrength Current signal strength of camped/connected cells 280 */ getSignalStrengthResponse_1_2( RadioResponseInfo responseInfo, android.hardware.radio.V1_2.SignalStrength signalStrength)281 public void getSignalStrengthResponse_1_2( 282 RadioResponseInfo responseInfo, 283 android.hardware.radio.V1_2.SignalStrength signalStrength) { 284 responseSignalStrength_1_2(responseInfo, signalStrength); 285 } 286 /** 287 * @param responseInfo Response info struct containing response type, serial no. and error 288 * @param signalStrength Current signal strength of camped/connected cells 289 */ getSignalStrengthResponse_1_4( RadioResponseInfo responseInfo, android.hardware.radio.V1_4.SignalStrength signalStrength)290 public void getSignalStrengthResponse_1_4( 291 RadioResponseInfo responseInfo, 292 android.hardware.radio.V1_4.SignalStrength signalStrength) { 293 responseSignalStrength_1_4(responseInfo, signalStrength); 294 } 295 296 /** 297 * @param responseInfo Response info struct containing response type, serial no. and error 298 * @param voiceRegResponse Current Voice registration response as defined by VoiceRegStateResult 299 * in types.hal 300 */ getVoiceRegistrationStateResponse(RadioResponseInfo responseInfo, VoiceRegStateResult voiceRegResponse)301 public void getVoiceRegistrationStateResponse(RadioResponseInfo responseInfo, 302 VoiceRegStateResult voiceRegResponse) { 303 RILRequest rr = mRil.processResponse(responseInfo); 304 305 if (rr != null) { 306 if (responseInfo.error == RadioError.NONE) { 307 sendMessageResponse(rr.mResult, voiceRegResponse); 308 } 309 mRil.processResponseDone(rr, responseInfo, voiceRegResponse); 310 } 311 } 312 313 /** 314 * @param responseInfo Response info struct containing response type, serial no. and error 315 * @param voiceRegResponse Current Voice registration response as defined by VoiceRegStateResult 316 * in 1.2/types.hal 317 */ getVoiceRegistrationStateResponse_1_2(RadioResponseInfo responseInfo, android.hardware.radio.V1_2.VoiceRegStateResult voiceRegResponse)318 public void getVoiceRegistrationStateResponse_1_2(RadioResponseInfo responseInfo, 319 android.hardware.radio.V1_2.VoiceRegStateResult voiceRegResponse) { 320 RILRequest rr = mRil.processResponse(responseInfo); 321 322 if (rr != null) { 323 if (responseInfo.error == RadioError.NONE) { 324 sendMessageResponse(rr.mResult, voiceRegResponse); 325 } 326 mRil.processResponseDone(rr, responseInfo, voiceRegResponse); 327 } 328 } 329 330 /** 331 * @param responseInfo Response info struct containing response type, serial no. and error 332 * @param dataRegResponse Current Data registration response as defined by DataRegStateResult in 333 * types.hal 334 */ getDataRegistrationStateResponse(RadioResponseInfo responseInfo, DataRegStateResult dataRegResponse)335 public void getDataRegistrationStateResponse(RadioResponseInfo responseInfo, 336 DataRegStateResult dataRegResponse) { 337 RILRequest rr = mRil.processResponse(responseInfo); 338 339 if (rr != null) { 340 if (responseInfo.error == RadioError.NONE) { 341 sendMessageResponse(rr.mResult, dataRegResponse); 342 } 343 mRil.processResponseDone(rr, responseInfo, dataRegResponse); 344 } 345 } 346 347 /** 348 * @param responseInfo Response info struct containing response type, serial no. and error 349 * @param dataRegResponse Current Data registration response as defined by DataRegStateResult in 350 * 1.2/types.hal 351 */ getDataRegistrationStateResponse_1_2(RadioResponseInfo responseInfo, android.hardware.radio.V1_2.DataRegStateResult dataRegResponse)352 public void getDataRegistrationStateResponse_1_2(RadioResponseInfo responseInfo, 353 android.hardware.radio.V1_2.DataRegStateResult dataRegResponse) { 354 RILRequest rr = mRil.processResponse(responseInfo); 355 356 if (rr != null) { 357 if (responseInfo.error == RadioError.NONE) { 358 sendMessageResponse(rr.mResult, dataRegResponse); 359 } 360 mRil.processResponseDone(rr, responseInfo, dataRegResponse); 361 } 362 } 363 364 /** 365 * @param responseInfo Response info struct containing response type, serial no. and error 366 * @param dataRegResponse Current Data registration response as defined by DataRegStateResult in 367 * 1.4/types.hal 368 */ getDataRegistrationStateResponse_1_4(RadioResponseInfo responseInfo, android.hardware.radio.V1_4.DataRegStateResult dataRegResponse)369 public void getDataRegistrationStateResponse_1_4(RadioResponseInfo responseInfo, 370 android.hardware.radio.V1_4.DataRegStateResult dataRegResponse) { 371 RILRequest rr = mRil.processResponse(responseInfo); 372 373 if (rr != null) { 374 if (responseInfo.error == RadioError.NONE) { 375 sendMessageResponse(rr.mResult, dataRegResponse); 376 } 377 mRil.processResponseDone(rr, responseInfo, dataRegResponse); 378 } 379 } 380 381 382 /** 383 * @param responseInfo Response info struct containing response type, serial no. and error 384 * @param longName is long alpha ONS or EONS or empty string if unregistered 385 * @param shortName is short alpha ONS or EONS or empty string if unregistered 386 * @param numeric is 5 or 6 digit numeric code (MCC + MNC) or empty string if unregistered 387 */ getOperatorResponse(RadioResponseInfo responseInfo, String longName, String shortName, String numeric)388 public void getOperatorResponse(RadioResponseInfo responseInfo, 389 String longName, 390 String shortName, 391 String numeric) { 392 responseStrings(responseInfo, longName, shortName, numeric); 393 } 394 395 /** 396 * @param responseInfo Response info struct containing response type, serial no. and error 397 */ setRadioPowerResponse(RadioResponseInfo responseInfo)398 public void setRadioPowerResponse(RadioResponseInfo responseInfo) { 399 responseVoid(responseInfo); 400 } 401 402 /** 403 * @param responseInfo Response info struct containing response type, serial no. and error 404 */ sendDtmfResponse(RadioResponseInfo responseInfo)405 public void sendDtmfResponse(RadioResponseInfo responseInfo) { 406 responseVoid(responseInfo); 407 } 408 409 /** 410 * @param responseInfo Response info struct containing response type, serial no. and error 411 * @param sms Response to sms sent as defined by SendSmsResult in types.hal 412 */ sendSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms)413 public void sendSmsResponse(RadioResponseInfo responseInfo, 414 SendSmsResult sms) { 415 responseSms(responseInfo, sms); 416 } 417 418 /** 419 * @param responseInfo Response info struct containing response type, serial no. and error 420 * @param sms Response to sms sent as defined by SendSmsResult in types.hal 421 */ sendSMSExpectMoreResponse(RadioResponseInfo responseInfo, SendSmsResult sms)422 public void sendSMSExpectMoreResponse(RadioResponseInfo responseInfo, 423 SendSmsResult sms) { 424 responseSms(responseInfo, sms); 425 } 426 427 /** 428 * @param responseInfo Response info struct containing response type, serial no. and error 429 * @param setupDataCallResult Response to data call setup as defined by setupDataCallResult in 430 * types.hal 431 */ setupDataCallResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.SetupDataCallResult setupDataCallResult)432 public void setupDataCallResponse(RadioResponseInfo responseInfo, 433 android.hardware.radio.V1_0.SetupDataCallResult setupDataCallResult) { 434 responseSetupDataCall(responseInfo, setupDataCallResult); 435 } 436 437 /** 438 * @param responseInfo Response info struct containing response type, serial no. and error 439 * @param setupDataCallResult Response to data call setup as defined by setupDataCallResult in 440 * 1.4/types.hal 441 */ setupDataCallResponse_1_4(RadioResponseInfo responseInfo, android.hardware.radio.V1_4.SetupDataCallResult setupDataCallResult)442 public void setupDataCallResponse_1_4(RadioResponseInfo responseInfo, 443 android.hardware.radio.V1_4.SetupDataCallResult setupDataCallResult) { 444 responseSetupDataCall(responseInfo, setupDataCallResult); 445 } 446 447 /** 448 * @param responseInfo Response info struct containing response type, serial no. and error 449 * @param iccIo ICC io operation response as defined by IccIoResult in types.hal 450 */ iccIOForAppResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult iccIo)451 public void iccIOForAppResponse(RadioResponseInfo responseInfo, 452 android.hardware.radio.V1_0.IccIoResult iccIo) { 453 responseIccIo(responseInfo, iccIo); 454 } 455 456 /** 457 * @param responseInfo Response info struct containing response type, serial no. and error 458 */ sendUssdResponse(RadioResponseInfo responseInfo)459 public void sendUssdResponse(RadioResponseInfo responseInfo) { 460 responseVoid(responseInfo); 461 } 462 463 /** 464 * @param responseInfo Response info struct containing response type, serial no. and error 465 */ cancelPendingUssdResponse(RadioResponseInfo responseInfo)466 public void cancelPendingUssdResponse(RadioResponseInfo responseInfo) { 467 responseVoid(responseInfo); 468 } 469 470 /** 471 * @param responseInfo Response info struct containing response type, serial no. and error 472 * @param n is "n" parameter from TS 27.007 7.7 473 * @param m is "m" parameter from TS 27.007 7.7 474 */ getClirResponse(RadioResponseInfo responseInfo, int n, int m)475 public void getClirResponse(RadioResponseInfo responseInfo, int n, int m) { 476 responseInts(responseInfo, n, m); 477 } 478 479 /** 480 * @param responseInfo Response info struct containing response type, serial no. and error 481 */ setClirResponse(RadioResponseInfo responseInfo)482 public void setClirResponse(RadioResponseInfo responseInfo) { 483 responseVoid(responseInfo); 484 } 485 486 /** 487 * @param responseInfo Response info struct containing response type, serial no. and error 488 * @param callForwardInfos points to a vector of CallForwardInfo, one for 489 * each distinct registered phone number. 490 */ getCallForwardStatusResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CallForwardInfo> callForwardInfos)491 public void getCallForwardStatusResponse(RadioResponseInfo responseInfo, 492 ArrayList<android.hardware.radio.V1_0.CallForwardInfo> 493 callForwardInfos) { 494 responseCallForwardInfo(responseInfo, callForwardInfos); 495 } 496 497 /** 498 * @param responseInfo Response info struct containing response type, serial no. and error 499 */ setCallForwardResponse(RadioResponseInfo responseInfo)500 public void setCallForwardResponse(RadioResponseInfo responseInfo) { 501 responseVoid(responseInfo); 502 } 503 504 /** 505 * @param responseInfo Response info struct containing response type, serial no. and error 506 * @param enable If current call waiting state is disabled, enable = false else true 507 * @param serviceClass If enable, then callWaitingResp[1] 508 * must follow, with the TS 27.007 service class bit vector of services 509 * for which call waiting is enabled. 510 * For example, if callWaitingResp[0] is 1 and 511 * callWaitingResp[1] is 3, then call waiting is enabled for data 512 * and voice and disabled for everything else. 513 */ getCallWaitingResponse(RadioResponseInfo responseInfo, boolean enable, int serviceClass)514 public void getCallWaitingResponse(RadioResponseInfo responseInfo, 515 boolean enable, 516 int serviceClass) { 517 responseInts(responseInfo, enable ? 1 : 0, serviceClass); 518 } 519 520 /** 521 * @param responseInfo Response info struct containing response type, serial no. and error 522 */ setCallWaitingResponse(RadioResponseInfo responseInfo)523 public void setCallWaitingResponse(RadioResponseInfo responseInfo) { 524 responseVoid(responseInfo); 525 } 526 527 /** 528 * @param responseInfo Response info struct containing response type, serial no. and error 529 */ acknowledgeLastIncomingGsmSmsResponse(RadioResponseInfo responseInfo)530 public void acknowledgeLastIncomingGsmSmsResponse(RadioResponseInfo responseInfo) { 531 responseVoid(responseInfo); 532 } 533 534 /** 535 * @param responseInfo Response info struct containing response type, serial no. and error 536 */ acceptCallResponse(RadioResponseInfo responseInfo)537 public void acceptCallResponse(RadioResponseInfo responseInfo) { 538 responseVoid(responseInfo); 539 } 540 541 /** 542 * @param responseInfo Response info struct containing response type, serial no. and error 543 */ deactivateDataCallResponse(RadioResponseInfo responseInfo)544 public void deactivateDataCallResponse(RadioResponseInfo responseInfo) { 545 responseVoid(responseInfo); 546 } 547 548 /** 549 * 550 * @param responseInfo Response info struct containing response type, serial no. and error 551 * @param response 0 is the TS 27.007 service class bit vector of 552 * services for which the specified barring facility 553 * is active. "0" means "disabled for all" 554 */ getFacilityLockForAppResponse(RadioResponseInfo responseInfo, int response)555 public void getFacilityLockForAppResponse(RadioResponseInfo responseInfo, int response) { 556 responseInts(responseInfo, response); 557 } 558 559 /** 560 * 561 * @param responseInfo Response info struct containing response type, serial no. and error 562 * @param retry 0 is the number of retries remaining, or -1 if unknown 563 */ setFacilityLockForAppResponse(RadioResponseInfo responseInfo, int retry)564 public void setFacilityLockForAppResponse(RadioResponseInfo responseInfo, int retry) { 565 responseInts(responseInfo, retry); 566 } 567 568 /** 569 * @param responseInfo Response info struct containing response type, serial no. and error 570 */ setBarringPasswordResponse(RadioResponseInfo responseInfo)571 public void setBarringPasswordResponse(RadioResponseInfo responseInfo) { 572 responseVoid(responseInfo); 573 } 574 575 /** 576 * 577 * @param responseInfo Response info struct containing response type, serial no. and error 578 * @param selection false for automatic selection, true for manual selection 579 */ getNetworkSelectionModeResponse(RadioResponseInfo responseInfo, boolean selection)580 public void getNetworkSelectionModeResponse(RadioResponseInfo responseInfo, boolean selection) { 581 responseInts(responseInfo, selection ? 1 : 0); 582 } 583 584 /** 585 * @param responseInfo Response info struct containing response type, serial no. and error 586 */ setNetworkSelectionModeAutomaticResponse(RadioResponseInfo responseInfo)587 public void setNetworkSelectionModeAutomaticResponse(RadioResponseInfo responseInfo) { 588 responseVoid(responseInfo); 589 } 590 591 /** 592 * @param responseInfo Response info struct containing response type, serial no. and error 593 */ setNetworkSelectionModeManualResponse(RadioResponseInfo responseInfo)594 public void setNetworkSelectionModeManualResponse(RadioResponseInfo responseInfo) { 595 responseVoid(responseInfo); 596 } 597 598 /** 599 * 600 * @param responseInfo Response info struct containing response type, serial no. and error 601 * @param networkInfos List of network operator information as OperatorInfos defined in 602 * types.hal 603 */ getAvailableNetworksResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.OperatorInfo> networkInfos)604 public void getAvailableNetworksResponse(RadioResponseInfo responseInfo, 605 ArrayList<android.hardware.radio.V1_0.OperatorInfo> 606 networkInfos) { 607 responseOperatorInfos(responseInfo, networkInfos); 608 } 609 610 /** 611 * 612 * @param responseInfo Response info struct containing response type, serial no. and error 613 */ startNetworkScanResponse(RadioResponseInfo responseInfo)614 public void startNetworkScanResponse(RadioResponseInfo responseInfo) { 615 responseScanStatus(responseInfo); 616 } 617 618 /** 619 * The same method as startNetworkScanResponse, except disallowing error codes 620 * OPERATION_NOT_ALLOWED and REQUEST_NOT_SUPPORTED. 621 * 622 * @param responseInfo Response info struct containing response type, serial no. and error 623 */ startNetworkScanResponse_1_4(RadioResponseInfo responseInfo)624 public void startNetworkScanResponse_1_4(RadioResponseInfo responseInfo) { 625 responseScanStatus(responseInfo); 626 } 627 628 /** 629 * 630 * @param responseInfo Response info struct containing response type, serial no. and error 631 */ stopNetworkScanResponse(RadioResponseInfo responseInfo)632 public void stopNetworkScanResponse(RadioResponseInfo responseInfo) { 633 responseScanStatus(responseInfo); 634 } 635 636 /** 637 * @param responseInfo Response info struct containing response type, serial no. and error 638 */ startDtmfResponse(RadioResponseInfo responseInfo)639 public void startDtmfResponse(RadioResponseInfo responseInfo) { 640 responseVoid(responseInfo); 641 } 642 643 /** 644 * @param responseInfo Response info struct containing response type, serial no. and error 645 */ stopDtmfResponse(RadioResponseInfo responseInfo)646 public void stopDtmfResponse(RadioResponseInfo responseInfo) { 647 responseVoid(responseInfo); 648 } 649 650 /** 651 * 652 * @param responseInfo Response info struct containing response type, serial no. and error 653 * @param version string containing version string for log reporting 654 */ getBasebandVersionResponse(RadioResponseInfo responseInfo, String version)655 public void getBasebandVersionResponse(RadioResponseInfo responseInfo, String version) { 656 responseString(responseInfo, version); 657 } 658 659 /** 660 * @param responseInfo Response info struct containing response type, serial no. and error 661 */ separateConnectionResponse(RadioResponseInfo responseInfo)662 public void separateConnectionResponse(RadioResponseInfo responseInfo) { 663 responseVoid(responseInfo); 664 } 665 666 /** 667 * @param responseInfo Response info struct containing response type, serial no. and error 668 */ setMuteResponse(RadioResponseInfo responseInfo)669 public void setMuteResponse(RadioResponseInfo responseInfo) { 670 responseVoid(responseInfo); 671 } 672 673 /** 674 * 675 * @param responseInfo Response info struct containing response type, serial no. and error 676 * @param enable true for "mute enabled" and false for "mute disabled" 677 */ getMuteResponse(RadioResponseInfo responseInfo, boolean enable)678 public void getMuteResponse(RadioResponseInfo responseInfo, boolean enable) { 679 responseInts(responseInfo, enable ? 1 : 0); 680 } 681 682 /** 683 * 684 * @param responseInfo Response info struct containing response type, serial no. and error 685 * @param status indicates CLIP status 686 */ getClipResponse(RadioResponseInfo responseInfo, int status)687 public void getClipResponse(RadioResponseInfo responseInfo, int status) { 688 responseInts(responseInfo, status); 689 } 690 691 /** 692 * @param responseInfo Response info struct containing response type, serial no. and error 693 * @param dataCallResultList Response to get data call list as defined by setupDataCallResult in 694 * types.hal 695 */ getDataCallListResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.SetupDataCallResult> dataCallResultList)696 public void getDataCallListResponse(RadioResponseInfo responseInfo, 697 ArrayList<android.hardware.radio.V1_0.SetupDataCallResult> dataCallResultList) { 698 responseDataCallList(responseInfo, dataCallResultList); 699 } 700 701 /** 702 * @param responseInfo Response info struct containing response type, serial no. and error 703 * @param dataCallResultList Response to get data call list as defined by setupDataCallResult in 704 * 1.4/types.hal 705 */ getDataCallListResponse_1_4(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_4.SetupDataCallResult> dataCallResultList)706 public void getDataCallListResponse_1_4(RadioResponseInfo responseInfo, 707 ArrayList<android.hardware.radio.V1_4.SetupDataCallResult> dataCallResultList) { 708 responseDataCallList(responseInfo, dataCallResultList); 709 } 710 sendOemRilRequestRawResponse(RadioResponseInfo responseInfo, ArrayList<Byte> var2)711 public void sendOemRilRequestRawResponse(RadioResponseInfo responseInfo, 712 ArrayList<Byte> var2) {} 713 714 /** 715 * @param responseInfo Response info struct containing response type, serial no. and error 716 */ setSuppServiceNotificationsResponse(RadioResponseInfo responseInfo)717 public void setSuppServiceNotificationsResponse(RadioResponseInfo responseInfo) { 718 responseVoid(responseInfo); 719 } 720 721 /** 722 * @param responseInfo Response info struct containing response type, serial no. and error 723 * @param index record index where the message is stored 724 */ writeSmsToSimResponse(RadioResponseInfo responseInfo, int index)725 public void writeSmsToSimResponse(RadioResponseInfo responseInfo, int index) { 726 responseInts(responseInfo, index); 727 } 728 729 /** 730 * @param responseInfo Response info struct containing response type, serial no. and error 731 */ deleteSmsOnSimResponse(RadioResponseInfo responseInfo)732 public void deleteSmsOnSimResponse(RadioResponseInfo responseInfo) { 733 responseVoid(responseInfo); 734 } 735 736 /** 737 * @param responseInfo Response info struct containing response type, serial no. and error 738 */ setBandModeResponse(RadioResponseInfo responseInfo)739 public void setBandModeResponse(RadioResponseInfo responseInfo) { 740 responseVoid(responseInfo); 741 } 742 743 /** 744 * 745 * @param responseInfo Response info struct containing response type, serial no. and error 746 * @param bandModes List of RadioBandMode listing supported modes 747 */ getAvailableBandModesResponse(RadioResponseInfo responseInfo, ArrayList<Integer> bandModes)748 public void getAvailableBandModesResponse(RadioResponseInfo responseInfo, 749 ArrayList<Integer> bandModes) { 750 responseIntArrayList(responseInfo, bandModes); 751 } 752 753 /** 754 * 755 * @param responseInfo Response info struct containing response type, serial no. and error 756 * @param commandResponse SAT/USAT response in hexadecimal format 757 * string starting with first byte of response 758 */ sendEnvelopeResponse(RadioResponseInfo responseInfo, String commandResponse)759 public void sendEnvelopeResponse(RadioResponseInfo responseInfo, String commandResponse) { 760 responseString(responseInfo, commandResponse); 761 } 762 763 /** 764 * @param responseInfo Response info struct containing response type, serial no. and error 765 */ sendTerminalResponseToSimResponse(RadioResponseInfo responseInfo)766 public void sendTerminalResponseToSimResponse(RadioResponseInfo responseInfo) { 767 responseVoid(responseInfo); 768 } 769 770 /** 771 * @param responseInfo Response info struct containing response type, serial no. and error 772 */ handleStkCallSetupRequestFromSimResponse(RadioResponseInfo responseInfo)773 public void handleStkCallSetupRequestFromSimResponse(RadioResponseInfo responseInfo) { 774 responseVoid(responseInfo); 775 } 776 777 /** 778 * @param responseInfo Response info struct containing response type, serial no. and error 779 */ explicitCallTransferResponse(RadioResponseInfo responseInfo)780 public void explicitCallTransferResponse(RadioResponseInfo responseInfo) { 781 responseVoid(responseInfo); 782 } 783 784 /** 785 * @param responseInfo Response info struct containing response type, serial no. and error 786 */ setPreferredNetworkTypeResponse(RadioResponseInfo responseInfo)787 public void setPreferredNetworkTypeResponse(RadioResponseInfo responseInfo) { 788 responseVoid(responseInfo); 789 } 790 791 /** 792 * Callback of setPreferredNetworkTypeBitmap defined in IRadio.hal. 793 * @param responseInfo Response info struct containing response type, serial no. and error 794 */ setPreferredNetworkTypeBitmapResponse(RadioResponseInfo responseInfo)795 public void setPreferredNetworkTypeBitmapResponse(RadioResponseInfo responseInfo) { 796 responseVoid(responseInfo); 797 } 798 799 /** 800 * 801 * @param responseInfo Response info struct containing response type, serial no. and error 802 * @param nwType RadioPreferredNetworkType defined in types.hal 803 */ getPreferredNetworkTypeResponse(RadioResponseInfo responseInfo, int nwType)804 public void getPreferredNetworkTypeResponse(RadioResponseInfo responseInfo, int nwType) { 805 mRil.mPreferredNetworkType = nwType; 806 responseInts(responseInfo, nwType); 807 } 808 809 /** 810 * Callback of the getPreferredNetworkTypeBitmap defined in the IRadio.hal. 811 * @param responseInfo Response info struct containing response type, serial no. and error 812 * @param halRadioAccessFamilyBitmap a 32-bit bitmap of 813 * {@link android.hardware.radio.V1_0.RadioAccessFamily}. 814 */ getPreferredNetworkTypeBitmapResponse( RadioResponseInfo responseInfo, int halRadioAccessFamilyBitmap)815 public void getPreferredNetworkTypeBitmapResponse( 816 RadioResponseInfo responseInfo, int halRadioAccessFamilyBitmap) { 817 818 int networkType = RadioAccessFamily.getNetworkTypeFromRaf( 819 RIL.convertToNetworkTypeBitMask(halRadioAccessFamilyBitmap)); 820 mRil.mPreferredNetworkType = networkType; 821 responseInts(responseInfo, networkType); 822 } 823 824 /** 825 * 826 * @param responseInfo Response info struct containing response type, serial no. and error 827 * @param cells Vector of neighboring radio cell information 828 */ getNeighboringCidsResponse(RadioResponseInfo responseInfo, ArrayList<NeighboringCell> cells)829 public void getNeighboringCidsResponse(RadioResponseInfo responseInfo, 830 ArrayList<NeighboringCell> cells) { 831 responseCellList(responseInfo, cells); 832 } 833 834 /** 835 * @param responseInfo Response info struct containing response type, serial no. and error 836 */ setLocationUpdatesResponse(RadioResponseInfo responseInfo)837 public void setLocationUpdatesResponse(RadioResponseInfo responseInfo) { 838 responseVoid(responseInfo); 839 } 840 841 /** 842 * @param responseInfo Response info struct containing response type, serial no. and error 843 */ setCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo)844 public void setCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo) { 845 responseVoid(responseInfo); 846 } 847 848 /** 849 * @param responseInfo Response info struct containing response type, serial no. and error 850 */ setCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo)851 public void setCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo) { 852 responseVoid(responseInfo); 853 } 854 855 /** 856 * 857 * @param responseInfo Response info struct containing response type, serial no. and error 858 * @param type CdmaRoamingType defined in types.hal 859 */ getCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo, int type)860 public void getCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo, int type) { 861 responseInts(responseInfo, type); 862 } 863 864 /** 865 * @param responseInfo Response info struct containing response type, serial no. and error 866 */ setTTYModeResponse(RadioResponseInfo responseInfo)867 public void setTTYModeResponse(RadioResponseInfo responseInfo) { 868 responseVoid(responseInfo); 869 } 870 871 /** 872 * 873 * @param responseInfo Response info struct containing response type, serial no. and error 874 * @param mode TTY mode 875 */ getTTYModeResponse(RadioResponseInfo responseInfo, int mode)876 public void getTTYModeResponse(RadioResponseInfo responseInfo, int mode) { 877 responseInts(responseInfo, mode); 878 } 879 880 /** 881 * @param responseInfo Response info struct containing response type, serial no. and error 882 */ setPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo)883 public void setPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo) { 884 responseVoid(responseInfo); 885 } 886 887 /** 888 * 889 * @param responseInfo Response info struct containing response type, serial no. and error 890 * @param enable false for Standard Privacy Mode (Public Long Code Mask) 891 * true for Enhanced Privacy Mode (Private Long Code Mask) 892 */ getPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo, boolean enable)893 public void getPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo, 894 boolean enable) { 895 responseInts(responseInfo, enable ? 1 : 0); 896 } 897 898 /** 899 * @param responseInfo Response info struct containing response type, serial no. and error 900 */ sendCDMAFeatureCodeResponse(RadioResponseInfo responseInfo)901 public void sendCDMAFeatureCodeResponse(RadioResponseInfo responseInfo) { 902 responseVoid(responseInfo); 903 } 904 905 /** 906 * @param responseInfo Response info struct containing response type, serial no. and error 907 */ sendBurstDtmfResponse(RadioResponseInfo responseInfo)908 public void sendBurstDtmfResponse(RadioResponseInfo responseInfo) { 909 responseVoid(responseInfo); 910 } 911 912 /** 913 * 914 * @param responseInfo Response info struct containing response type, serial no. and error 915 * @param sms Sms result struct as defined by SendSmsResult in types.hal 916 */ sendCdmaSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms)917 public void sendCdmaSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms) { 918 responseSms(responseInfo, sms); 919 } 920 921 /** 922 * @param responseInfo Response info struct containing response type, serial no. and error 923 */ acknowledgeLastIncomingCdmaSmsResponse(RadioResponseInfo responseInfo)924 public void acknowledgeLastIncomingCdmaSmsResponse(RadioResponseInfo responseInfo) { 925 responseVoid(responseInfo); 926 } 927 928 /** 929 * 930 * @param responseInfo Response info struct containing response type, serial no. and error 931 * @param configs Vector of GSM/WCDMA Cell broadcast configs 932 */ getGsmBroadcastConfigResponse(RadioResponseInfo responseInfo, ArrayList<GsmBroadcastSmsConfigInfo> configs)933 public void getGsmBroadcastConfigResponse(RadioResponseInfo responseInfo, 934 ArrayList<GsmBroadcastSmsConfigInfo> configs) { 935 responseGmsBroadcastConfig(responseInfo, configs); 936 } 937 938 /** 939 * @param responseInfo Response info struct containing response type, serial no. and error 940 */ setGsmBroadcastConfigResponse(RadioResponseInfo responseInfo)941 public void setGsmBroadcastConfigResponse(RadioResponseInfo responseInfo) { 942 responseVoid(responseInfo); 943 } 944 945 /** 946 * @param responseInfo Response info struct containing response type, serial no. and error 947 */ setGsmBroadcastActivationResponse(RadioResponseInfo responseInfo)948 public void setGsmBroadcastActivationResponse(RadioResponseInfo responseInfo) { 949 responseVoid(responseInfo); 950 } 951 952 /** 953 * 954 * @param responseInfo Response info struct containing response type, serial no. and error 955 * @param configs Vector of CDMA Broadcast SMS configs. 956 */ getCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo, ArrayList<CdmaBroadcastSmsConfigInfo> configs)957 public void getCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo, 958 ArrayList<CdmaBroadcastSmsConfigInfo> configs) { 959 responseCdmaBroadcastConfig(responseInfo, configs); 960 } 961 962 /** 963 * @param responseInfo Response info struct containing response type, serial no. and error 964 */ setCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo)965 public void setCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo) { 966 responseVoid(responseInfo); 967 } 968 969 /** 970 * @param responseInfo Response info struct containing response type, serial no. and error 971 */ setCdmaBroadcastActivationResponse(RadioResponseInfo responseInfo)972 public void setCdmaBroadcastActivationResponse(RadioResponseInfo responseInfo) { 973 responseVoid(responseInfo); 974 } 975 976 /** 977 * 978 * @param responseInfo Response info struct containing response type, serial no. and error 979 * @param mdn MDN if CDMA subscription is available 980 * @param hSid is a comma separated list of H_SID (Home SID) if 981 * CDMA subscription is available, in decimal format 982 * @param hNid is a comma separated list of H_NID (Home NID) if 983 * CDMA subscription is available, in decimal format 984 * @param min MIN (10 digits, MIN2+MIN1) if CDMA subscription is available 985 * @param prl PRL version if CDMA subscription is available 986 */ getCDMASubscriptionResponse(RadioResponseInfo responseInfo, String mdn, String hSid, String hNid, String min, String prl)987 public void getCDMASubscriptionResponse(RadioResponseInfo responseInfo, String mdn, 988 String hSid, String hNid, String min, String prl) { 989 responseStrings(responseInfo, mdn, hSid, hNid, min, prl); 990 } 991 992 /** 993 * 994 * @param responseInfo Response info struct containing response type, serial no. and error 995 * @param index record index where the cmda sms message is stored 996 */ writeSmsToRuimResponse(RadioResponseInfo responseInfo, int index)997 public void writeSmsToRuimResponse(RadioResponseInfo responseInfo, int index) { 998 responseInts(responseInfo, index); 999 } 1000 1001 /** 1002 * @param responseInfo Response info struct containing response type, serial no. and error 1003 */ deleteSmsOnRuimResponse(RadioResponseInfo responseInfo)1004 public void deleteSmsOnRuimResponse(RadioResponseInfo responseInfo) { 1005 responseVoid(responseInfo); 1006 } 1007 1008 /** 1009 * @param responseInfo Response info struct containing response type, serial no. and error 1010 * @param imei IMEI if GSM subscription is available 1011 * @param imeisv IMEISV if GSM subscription is available 1012 * @param esn ESN if CDMA subscription is available 1013 * @param meid MEID if CDMA subscription is available 1014 */ getDeviceIdentityResponse(RadioResponseInfo responseInfo, String imei, String imeisv, String esn, String meid)1015 public void getDeviceIdentityResponse(RadioResponseInfo responseInfo, String imei, 1016 String imeisv, String esn, String meid) { 1017 responseStrings(responseInfo, imei, imeisv, esn, meid); 1018 } 1019 1020 /** 1021 * @param responseInfo Response info struct containing response type, serial no. and error 1022 */ exitEmergencyCallbackModeResponse(RadioResponseInfo responseInfo)1023 public void exitEmergencyCallbackModeResponse(RadioResponseInfo responseInfo) { 1024 responseVoid(responseInfo); 1025 } 1026 1027 /** 1028 * @param responseInfo Response info struct containing response type, serial no. and error 1029 * @param smsc Short Message Service Center address on the device 1030 */ getSmscAddressResponse(RadioResponseInfo responseInfo, String smsc)1031 public void getSmscAddressResponse(RadioResponseInfo responseInfo, String smsc) { 1032 responseString(responseInfo, smsc); 1033 } 1034 1035 /** 1036 * @param responseInfo Response info struct containing response type, serial no. and error 1037 */ setSmscAddressResponse(RadioResponseInfo responseInfo)1038 public void setSmscAddressResponse(RadioResponseInfo responseInfo) { 1039 responseVoid(responseInfo); 1040 } 1041 1042 /** 1043 * @param responseInfo Response info struct containing response type, serial no. and error 1044 */ reportSmsMemoryStatusResponse(RadioResponseInfo responseInfo)1045 public void reportSmsMemoryStatusResponse(RadioResponseInfo responseInfo) { 1046 responseVoid(responseInfo); 1047 } 1048 1049 /** 1050 * @param responseInfo Response info struct containing response type, serial no. and error 1051 */ reportStkServiceIsRunningResponse(RadioResponseInfo responseInfo)1052 public void reportStkServiceIsRunningResponse(RadioResponseInfo responseInfo) { 1053 responseVoid(responseInfo); 1054 } 1055 1056 /** 1057 * 1058 * @param responseInfo Response info struct containing response type, serial no. and error 1059 * @param source CDMA subscription source 1060 */ getCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo, int source)1061 public void getCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo, int source) { 1062 responseInts(responseInfo, source); 1063 } 1064 1065 /** 1066 * This method is deprecated and should not be used. 1067 * 1068 * @param responseInfo Response info struct containing response type, serial no. and error 1069 * @param response response string of the challenge/response algo for ISIM auth in base64 format 1070 */ requestIsimAuthenticationResponse(RadioResponseInfo responseInfo, String response)1071 public void requestIsimAuthenticationResponse(RadioResponseInfo responseInfo, String response) { 1072 throw new RuntimeException("Inexplicable response received for requestIsimAuthentication"); 1073 } 1074 1075 /** 1076 * @param responseInfo Response info struct containing response type, serial no. and error 1077 */ acknowledgeIncomingGsmSmsWithPduResponse(RadioResponseInfo responseInfo)1078 public void acknowledgeIncomingGsmSmsWithPduResponse(RadioResponseInfo responseInfo) { 1079 responseVoid(responseInfo); 1080 } 1081 1082 /** 1083 * 1084 * @param responseInfo Response info struct containing response type, serial no. and error 1085 * @param iccIo IccIoResult as defined in types.hal corresponding to ICC IO response 1086 */ sendEnvelopeWithStatusResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult iccIo)1087 public void sendEnvelopeWithStatusResponse(RadioResponseInfo responseInfo, 1088 android.hardware.radio.V1_0.IccIoResult iccIo) { 1089 responseIccIo(responseInfo, iccIo); 1090 } 1091 1092 /** 1093 * 1094 * @param responseInfo Response info struct containing response type, serial no. and error 1095 * @param rat Current voice RAT 1096 */ getVoiceRadioTechnologyResponse(RadioResponseInfo responseInfo, int rat)1097 public void getVoiceRadioTechnologyResponse(RadioResponseInfo responseInfo, int rat) { 1098 responseInts(responseInfo, rat); 1099 } 1100 getCellInfoListResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo)1101 public void getCellInfoListResponse(RadioResponseInfo responseInfo, 1102 ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo) { 1103 responseCellInfoList(responseInfo, cellInfo); 1104 } 1105 1106 /** 1107 * @param responseInfo Response info struct containing response type, serial no. and error 1108 * @param cellInfo List of current cell information known to radio 1109 */ getCellInfoListResponse_1_2( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_2.CellInfo> cellInfo)1110 public void getCellInfoListResponse_1_2( 1111 RadioResponseInfo responseInfo, 1112 ArrayList<android.hardware.radio.V1_2.CellInfo> cellInfo) { 1113 responseCellInfoList_1_2(responseInfo, cellInfo); 1114 } 1115 1116 /** 1117 * @param responseInfo Response info struct containing response type, serial no. and error. 1118 * @param cellInfo List of current cell information known to radio. 1119 */ getCellInfoListResponse_1_4( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_4.CellInfo> cellInfo)1120 public void getCellInfoListResponse_1_4( 1121 RadioResponseInfo responseInfo, 1122 ArrayList<android.hardware.radio.V1_4.CellInfo> cellInfo) { 1123 responseCellInfoList_1_4(responseInfo, cellInfo); 1124 } 1125 1126 /** 1127 * @param responseInfo Response info struct containing response type, serial no. and error 1128 */ setCellInfoListRateResponse(RadioResponseInfo responseInfo)1129 public void setCellInfoListRateResponse(RadioResponseInfo responseInfo) { 1130 responseVoid(responseInfo); 1131 } 1132 1133 /** 1134 * @param responseInfo Response info struct containing response type, serial no. and error 1135 */ setInitialAttachApnResponse(RadioResponseInfo responseInfo)1136 public void setInitialAttachApnResponse(RadioResponseInfo responseInfo) { 1137 responseVoid(responseInfo); 1138 } 1139 1140 /** 1141 * 1142 * @param responseInfo Response info struct containing response type, serial no. and error 1143 * @param isRegistered false = not registered, true = registered 1144 * @param ratFamily RadioTechnologyFamily as defined in types.hal. This value is valid only if 1145 * isRegistered is true. 1146 */ getImsRegistrationStateResponse(RadioResponseInfo responseInfo, boolean isRegistered, int ratFamily)1147 public void getImsRegistrationStateResponse(RadioResponseInfo responseInfo, 1148 boolean isRegistered, int ratFamily) { 1149 responseInts(responseInfo, isRegistered ? 1 : 0, ratFamily); 1150 } 1151 1152 /** 1153 * 1154 * @param responseInfo Response info struct containing response type, serial no. and error 1155 * @param sms Response to sms sent as defined by SendSmsResult in types.hal 1156 */ sendImsSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms)1157 public void sendImsSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms) { 1158 responseSms(responseInfo, sms); 1159 } 1160 1161 /** 1162 * 1163 * @param responseInfo Response info struct containing response type, serial no. and error 1164 * @param result IccIoResult as defined in types.hal 1165 */ iccTransmitApduBasicChannelResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1166 public void iccTransmitApduBasicChannelResponse(RadioResponseInfo responseInfo, 1167 android.hardware.radio.V1_0.IccIoResult 1168 result) { 1169 responseIccIo(responseInfo, result); 1170 } 1171 1172 /** 1173 * 1174 * @param responseInfo Response info struct containing response type, serial no. and error 1175 * @param channelId session id of the logical channel. 1176 * @param selectResponse Contains the select response for the open channel command with one 1177 * byte per integer 1178 */ iccOpenLogicalChannelResponse(RadioResponseInfo responseInfo, int channelId, ArrayList<Byte> selectResponse)1179 public void iccOpenLogicalChannelResponse(RadioResponseInfo responseInfo, int channelId, 1180 ArrayList<Byte> selectResponse) { 1181 ArrayList<Integer> arr = new ArrayList<>(); 1182 arr.add(channelId); 1183 for (int i = 0; i < selectResponse.size(); i++) { 1184 arr.add((int) selectResponse.get(i)); 1185 } 1186 responseIntArrayList(responseInfo, arr); 1187 } 1188 1189 /** 1190 * @param responseInfo Response info struct containing response type, serial no. and error 1191 */ iccCloseLogicalChannelResponse(RadioResponseInfo responseInfo)1192 public void iccCloseLogicalChannelResponse(RadioResponseInfo responseInfo) { 1193 responseVoid(responseInfo); 1194 } 1195 1196 /** 1197 * 1198 * @param responseInfo Response info struct containing response type, serial no. and error 1199 * @param result IccIoResult as defined in types.hal 1200 */ iccTransmitApduLogicalChannelResponse( RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1201 public void iccTransmitApduLogicalChannelResponse( 1202 RadioResponseInfo responseInfo, 1203 android.hardware.radio.V1_0.IccIoResult result) { 1204 responseIccIo(responseInfo, result); 1205 } 1206 1207 /** 1208 * 1209 * @param responseInfo Response info struct containing response type, serial no. and error 1210 * @param result string containing the contents of the NV item 1211 */ nvReadItemResponse(RadioResponseInfo responseInfo, String result)1212 public void nvReadItemResponse(RadioResponseInfo responseInfo, String result) { 1213 responseString(responseInfo, result); 1214 } 1215 1216 /** 1217 * @param responseInfo Response info struct containing response type, serial no. and error 1218 */ nvWriteItemResponse(RadioResponseInfo responseInfo)1219 public void nvWriteItemResponse(RadioResponseInfo responseInfo) { 1220 responseVoid(responseInfo); 1221 } 1222 1223 /** 1224 * @param responseInfo Response info struct containing response type, serial no. and error 1225 */ nvWriteCdmaPrlResponse(RadioResponseInfo responseInfo)1226 public void nvWriteCdmaPrlResponse(RadioResponseInfo responseInfo) { 1227 responseVoid(responseInfo); 1228 } 1229 1230 /** 1231 * @param responseInfo Response info struct containing response type, serial no. and error 1232 */ nvResetConfigResponse(RadioResponseInfo responseInfo)1233 public void nvResetConfigResponse(RadioResponseInfo responseInfo) { 1234 responseVoid(responseInfo); 1235 } 1236 1237 /** 1238 * @param responseInfo Response info struct containing response type, serial no. and error 1239 */ setUiccSubscriptionResponse(RadioResponseInfo responseInfo)1240 public void setUiccSubscriptionResponse(RadioResponseInfo responseInfo) { 1241 responseVoid(responseInfo); 1242 } 1243 1244 /** 1245 * @param responseInfo Response info struct containing response type, serial no. and error 1246 */ setDataAllowedResponse(RadioResponseInfo responseInfo)1247 public void setDataAllowedResponse(RadioResponseInfo responseInfo) { 1248 responseVoid(responseInfo); 1249 } 1250 getHardwareConfigResponse( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.HardwareConfig> config)1251 public void getHardwareConfigResponse( 1252 RadioResponseInfo responseInfo, 1253 ArrayList<android.hardware.radio.V1_0.HardwareConfig> config) { 1254 responseHardwareConfig(responseInfo, config); 1255 } 1256 1257 /** 1258 * 1259 * @param responseInfo Response info struct containing response type, serial no. and error 1260 * @param result IccIoResult as defined in types.hal 1261 */ requestIccSimAuthenticationResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1262 public void requestIccSimAuthenticationResponse(RadioResponseInfo responseInfo, 1263 android.hardware.radio.V1_0.IccIoResult 1264 result) { 1265 responseICC_IOBase64(responseInfo, result); 1266 } 1267 1268 /** 1269 * @param responseInfo Response info struct containing response type, serial no. and error 1270 */ setDataProfileResponse(RadioResponseInfo responseInfo)1271 public void setDataProfileResponse(RadioResponseInfo responseInfo) { 1272 responseVoid(responseInfo); 1273 } 1274 1275 /** 1276 * @param responseInfo Response info struct containing response type, serial no. and error 1277 */ requestShutdownResponse(RadioResponseInfo responseInfo)1278 public void requestShutdownResponse(RadioResponseInfo responseInfo) { 1279 responseVoid(responseInfo); 1280 } 1281 getRadioCapabilityResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.RadioCapability rc)1282 public void getRadioCapabilityResponse(RadioResponseInfo responseInfo, 1283 android.hardware.radio.V1_0.RadioCapability rc) { 1284 RILRequest rr = mRil.processResponse(responseInfo); 1285 1286 if (rr != null) { 1287 RadioCapability ret = RIL.convertHalRadioCapability(rc, mRil); 1288 if (responseInfo.error == RadioError.REQUEST_NOT_SUPPORTED 1289 || responseInfo.error == RadioError.GENERIC_FAILURE) { 1290 // we should construct the RAF bitmask the radio 1291 // supports based on preferred network bitmasks 1292 ret = mRil.makeStaticRadioCapability(); 1293 responseInfo.error = RadioError.NONE; 1294 } 1295 if (responseInfo.error == RadioError.NONE) { 1296 sendMessageResponse(rr.mResult, ret); 1297 } 1298 mRil.processResponseDone(rr, responseInfo, ret); 1299 } 1300 } 1301 setRadioCapabilityResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.RadioCapability rc)1302 public void setRadioCapabilityResponse(RadioResponseInfo responseInfo, 1303 android.hardware.radio.V1_0.RadioCapability rc) { 1304 responseRadioCapability(responseInfo, rc); 1305 } 1306 1307 /** 1308 * 1309 * @param responseInfo Response info struct containing response type, serial no. and error 1310 * @param statusInfo LceStatusInfo indicating LCE status 1311 */ startLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo)1312 public void startLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo) { 1313 responseLceStatus(responseInfo, statusInfo); 1314 } 1315 1316 /** 1317 * 1318 * @param responseInfo Response info struct containing response type, serial no. and error 1319 * @param statusInfo LceStatusInfo indicating LCE status 1320 */ stopLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo)1321 public void stopLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo) { 1322 responseLceStatus(responseInfo, statusInfo); 1323 } 1324 pullLceDataResponse(RadioResponseInfo responseInfo, LceDataInfo lceInfo)1325 public void pullLceDataResponse(RadioResponseInfo responseInfo, LceDataInfo lceInfo) { 1326 responseLceData(responseInfo, lceInfo); 1327 } 1328 1329 /** 1330 * 1331 * @param responseInfo Response info struct containing response type, serial no. and error 1332 * @param activityInfo modem activity information 1333 */ getModemActivityInfoResponse(RadioResponseInfo responseInfo, ActivityStatsInfo activityInfo)1334 public void getModemActivityInfoResponse(RadioResponseInfo responseInfo, 1335 ActivityStatsInfo activityInfo) { 1336 responseActivityData(responseInfo, activityInfo); 1337 } 1338 1339 /** 1340 * 1341 * @param responseInfo Response info struct containing response type, serial no. and error 1342 * @param numAllowed number of allowed carriers which have been set correctly. 1343 * On success, it must match the length of list Carriers->allowedCarriers. 1344 * if Length of allowed carriers list is 0, numAllowed = 0. 1345 */ setAllowedCarriersResponse(RadioResponseInfo responseInfo, int numAllowed)1346 public void setAllowedCarriersResponse(RadioResponseInfo responseInfo, int numAllowed) { 1347 // The number of allowed carriers set correctly is not really useful. Even if one is 1348 // missing, the operation has failed, as the list should be treated as a single 1349 // configuration item. So, ignoring the value of numAllowed and considering only the 1350 // value of the responseInfo.error. 1351 int ret = TelephonyManager.SET_CARRIER_RESTRICTION_ERROR; 1352 RILRequest rr = mRil.processResponse(responseInfo); 1353 if (rr != null) { 1354 mRil.riljLog("setAllowedCarriersResponse - error = " + responseInfo.error); 1355 1356 if (responseInfo.error == RadioError.NONE) { 1357 ret = TelephonyManager.SET_CARRIER_RESTRICTION_SUCCESS; 1358 sendMessageResponse(rr.mResult, ret); 1359 } else if (responseInfo.error == RadioError.REQUEST_NOT_SUPPORTED) { 1360 // Handle the case REQUEST_NOT_SUPPORTED as a valid response 1361 responseInfo.error = RadioError.NONE; 1362 ret = TelephonyManager.SET_CARRIER_RESTRICTION_NOT_SUPPORTED; 1363 sendMessageResponse(rr.mResult, ret); 1364 } 1365 mRil.processResponseDone(rr, responseInfo, ret); 1366 } 1367 } 1368 1369 /** 1370 * 1371 * @param responseInfo Response info struct containing response type, serial no. and error 1372 */ setAllowedCarriersResponse_1_4(RadioResponseInfo responseInfo)1373 public void setAllowedCarriersResponse_1_4(RadioResponseInfo responseInfo) { 1374 int ret = TelephonyManager.SET_CARRIER_RESTRICTION_ERROR; 1375 RILRequest rr = mRil.processResponse(responseInfo); 1376 if (rr != null) { 1377 mRil.riljLog("setAllowedCarriersResponse_1_4 - error = " + responseInfo.error); 1378 1379 if (responseInfo.error == RadioError.NONE) { 1380 ret = TelephonyManager.SET_CARRIER_RESTRICTION_SUCCESS; 1381 sendMessageResponse(rr.mResult, ret); 1382 } 1383 mRil.processResponseDone(rr, responseInfo, ret); 1384 } 1385 } 1386 1387 /** 1388 * @param responseInfo Response info struct containing response type, serial no. and error 1389 * @param allAllowed true only when all carriers are allowed. Ignore "carriers" struct. 1390 * If false, consider "carriers" struct 1391 * @param carriers Carrier restriction information. 1392 */ getAllowedCarriersResponse(RadioResponseInfo responseInfo, boolean allAllowed, CarrierRestrictions carriers)1393 public void getAllowedCarriersResponse(RadioResponseInfo responseInfo, boolean allAllowed, 1394 CarrierRestrictions carriers) { 1395 CarrierRestrictionsWithPriority carrierRestrictions = new CarrierRestrictionsWithPriority(); 1396 carrierRestrictions.allowedCarriers = carriers.allowedCarriers; 1397 carrierRestrictions.excludedCarriers = carriers.excludedCarriers; 1398 carrierRestrictions.allowedCarriersPrioritized = true; 1399 1400 responseCarrierRestrictions(responseInfo, allAllowed, carrierRestrictions, 1401 SimLockMultiSimPolicy.NO_MULTISIM_POLICY); 1402 } 1403 1404 /** 1405 * @param responseInfo Response info struct containing response type, serial no. and error 1406 * @param carrierRestrictions Carrier restriction information. 1407 * @param multiSimPolicy Policy for multi-sim devices. 1408 */ getAllowedCarriersResponse_1_4(RadioResponseInfo responseInfo, CarrierRestrictionsWithPriority carrierRestrictions, int multiSimPolicy)1409 public void getAllowedCarriersResponse_1_4(RadioResponseInfo responseInfo, 1410 CarrierRestrictionsWithPriority carrierRestrictions, 1411 int multiSimPolicy) { 1412 // The API in IRadio 1.4 does not support the flag allAllowed, so setting it to false, so 1413 // that values in carrierRestrictions are used. 1414 responseCarrierRestrictions(responseInfo, false, carrierRestrictions, multiSimPolicy); 1415 } 1416 1417 /** 1418 * @param responseInfo Response info struct containing response type, serial no. and error 1419 */ sendDeviceStateResponse(RadioResponseInfo responseInfo)1420 public void sendDeviceStateResponse(RadioResponseInfo responseInfo) { 1421 responseVoid(responseInfo); 1422 } 1423 1424 /** 1425 * @param responseInfo Response info struct containing response type, serial no. and error 1426 */ setCarrierInfoForImsiEncryptionResponse(RadioResponseInfo responseInfo)1427 public void setCarrierInfoForImsiEncryptionResponse(RadioResponseInfo responseInfo) { 1428 responseVoid(responseInfo); 1429 } 1430 1431 /** 1432 * @param responseInfo Response info struct containing response type, serial no. and error 1433 */ setIndicationFilterResponse(RadioResponseInfo responseInfo)1434 public void setIndicationFilterResponse(RadioResponseInfo responseInfo) { 1435 responseVoid(responseInfo); 1436 } 1437 1438 /** 1439 * @param responseInfo Response info struct containing response type, serial no. and error 1440 */ setSimCardPowerResponse(RadioResponseInfo responseInfo)1441 public void setSimCardPowerResponse(RadioResponseInfo responseInfo) { 1442 responseVoid(responseInfo); 1443 } 1444 1445 /** 1446 * @param responseInfo Response info struct containing response type, serial no. and error 1447 */ setSignalStrengthReportingCriteriaResponse(RadioResponseInfo responseInfo)1448 public void setSignalStrengthReportingCriteriaResponse(RadioResponseInfo responseInfo) { 1449 responseVoid(responseInfo); 1450 } 1451 1452 /** 1453 * @param responseInfo Response info struct containing response type, serial no. and error 1454 */ setLinkCapacityReportingCriteriaResponse(RadioResponseInfo responseInfo)1455 public void setLinkCapacityReportingCriteriaResponse(RadioResponseInfo responseInfo) { 1456 responseVoid(responseInfo); 1457 } 1458 1459 /** 1460 * @param responseInfo Response info struct containing response type, serial no. and error 1461 */ setSimCardPowerResponse_1_1(RadioResponseInfo responseInfo)1462 public void setSimCardPowerResponse_1_1(RadioResponseInfo responseInfo) { 1463 responseVoid(responseInfo); 1464 } 1465 1466 1467 /** 1468 * @param responseInfo Response info struct containing response type, serial no. and error 1469 * @param keepaliveStatus status of the keepalive with a handle for the session 1470 */ startKeepaliveResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_1.KeepaliveStatus keepaliveStatus)1471 public void startKeepaliveResponse(RadioResponseInfo responseInfo, 1472 android.hardware.radio.V1_1.KeepaliveStatus keepaliveStatus) { 1473 1474 RILRequest rr = mRil.processResponse(responseInfo); 1475 if (rr == null) return; 1476 1477 KeepaliveStatus ret = null; 1478 try { 1479 switch(responseInfo.error) { 1480 case RadioError.NONE: 1481 int convertedStatus = convertHalKeepaliveStatusCode(keepaliveStatus.code); 1482 if (convertedStatus < 0) { 1483 ret = new KeepaliveStatus(KeepaliveStatus.ERROR_UNSUPPORTED); 1484 } else { 1485 ret = new KeepaliveStatus(keepaliveStatus.sessionHandle, convertedStatus); 1486 } 1487 // If responseInfo.error is NONE, response function sends the response message 1488 // even if result is actually an error. 1489 sendMessageResponse(rr.mResult, ret); 1490 break; 1491 case RadioError.REQUEST_NOT_SUPPORTED: 1492 ret = new KeepaliveStatus(KeepaliveStatus.ERROR_UNSUPPORTED); 1493 break; 1494 case RadioError.NO_RESOURCES: 1495 ret = new KeepaliveStatus(KeepaliveStatus.ERROR_NO_RESOURCES); 1496 break; 1497 default: 1498 ret = new KeepaliveStatus(KeepaliveStatus.ERROR_UNKNOWN); 1499 break; 1500 } 1501 } finally { 1502 // If responseInfo.error != NONE, the processResponseDone sends the response message. 1503 mRil.processResponseDone(rr, responseInfo, ret); 1504 } 1505 } 1506 1507 /** 1508 * @param responseInfo Response info struct containing response type, serial no. and error 1509 */ stopKeepaliveResponse(RadioResponseInfo responseInfo)1510 public void stopKeepaliveResponse(RadioResponseInfo responseInfo) { 1511 RILRequest rr = mRil.processResponse(responseInfo); 1512 if (rr == null) return; 1513 1514 try { 1515 if (responseInfo.error == RadioError.NONE) { 1516 sendMessageResponse(rr.mResult, null); 1517 } else { 1518 //TODO: Error code translation 1519 } 1520 } finally { 1521 mRil.processResponseDone(rr, responseInfo, null); 1522 } 1523 } 1524 convertHalKeepaliveStatusCode(int halCode)1525 private int convertHalKeepaliveStatusCode(int halCode) { 1526 switch (halCode) { 1527 case android.hardware.radio.V1_1.KeepaliveStatusCode.ACTIVE: 1528 return KeepaliveStatus.STATUS_ACTIVE; 1529 case android.hardware.radio.V1_1.KeepaliveStatusCode.INACTIVE: 1530 return KeepaliveStatus.STATUS_INACTIVE; 1531 case android.hardware.radio.V1_1.KeepaliveStatusCode.PENDING: 1532 return KeepaliveStatus.STATUS_PENDING; 1533 default: 1534 mRil.riljLog("Invalid Keepalive Status" + halCode); 1535 return -1; 1536 } 1537 } 1538 convertHalCardStatus(CardStatus cardStatus)1539 private IccCardStatus convertHalCardStatus(CardStatus cardStatus) { 1540 IccCardStatus iccCardStatus = new IccCardStatus(); 1541 iccCardStatus.setCardState(cardStatus.cardState); 1542 iccCardStatus.setUniversalPinState(cardStatus.universalPinState); 1543 iccCardStatus.mGsmUmtsSubscriptionAppIndex = cardStatus.gsmUmtsSubscriptionAppIndex; 1544 iccCardStatus.mCdmaSubscriptionAppIndex = cardStatus.cdmaSubscriptionAppIndex; 1545 iccCardStatus.mImsSubscriptionAppIndex = cardStatus.imsSubscriptionAppIndex; 1546 int numApplications = cardStatus.applications.size(); 1547 1548 // limit to maximum allowed applications 1549 if (numApplications 1550 > com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS) { 1551 numApplications = 1552 com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS; 1553 } 1554 iccCardStatus.mApplications = new IccCardApplicationStatus[numApplications]; 1555 for (int i = 0; i < numApplications; i++) { 1556 AppStatus rilAppStatus = cardStatus.applications.get(i); 1557 IccCardApplicationStatus appStatus = new IccCardApplicationStatus(); 1558 appStatus.app_type = appStatus.AppTypeFromRILInt(rilAppStatus.appType); 1559 appStatus.app_state = appStatus.AppStateFromRILInt(rilAppStatus.appState); 1560 appStatus.perso_substate = appStatus.PersoSubstateFromRILInt( 1561 rilAppStatus.persoSubstate); 1562 appStatus.aid = rilAppStatus.aidPtr; 1563 appStatus.app_label = rilAppStatus.appLabelPtr; 1564 appStatus.pin1_replaced = rilAppStatus.pin1Replaced; 1565 appStatus.pin1 = appStatus.PinStateFromRILInt(rilAppStatus.pin1); 1566 appStatus.pin2 = appStatus.PinStateFromRILInt(rilAppStatus.pin2); 1567 iccCardStatus.mApplications[i] = appStatus; 1568 mRil.riljLog("IccCardApplicationStatus " + i + ":" + appStatus.toString()); 1569 } 1570 return iccCardStatus; 1571 } 1572 responseIccCardStatus(RadioResponseInfo responseInfo, CardStatus cardStatus)1573 private void responseIccCardStatus(RadioResponseInfo responseInfo, CardStatus cardStatus) { 1574 RILRequest rr = mRil.processResponse(responseInfo); 1575 1576 if (rr != null) { 1577 IccCardStatus iccCardStatus = convertHalCardStatus(cardStatus); 1578 mRil.riljLog("responseIccCardStatus: from HIDL: " + iccCardStatus); 1579 if (responseInfo.error == RadioError.NONE) { 1580 sendMessageResponse(rr.mResult, iccCardStatus); 1581 } 1582 mRil.processResponseDone(rr, responseInfo, iccCardStatus); 1583 } 1584 } 1585 responseIccCardStatus_1_2(RadioResponseInfo responseInfo, android.hardware.radio.V1_2.CardStatus cardStatus)1586 private void responseIccCardStatus_1_2(RadioResponseInfo responseInfo, 1587 android.hardware.radio.V1_2.CardStatus cardStatus) { 1588 RILRequest rr = mRil.processResponse(responseInfo); 1589 1590 if (rr != null) { 1591 IccCardStatus iccCardStatus = convertHalCardStatus(cardStatus.base); 1592 iccCardStatus.physicalSlotIndex = cardStatus.physicalSlotId; 1593 iccCardStatus.atr = cardStatus.atr; 1594 iccCardStatus.iccid = cardStatus.iccid; 1595 mRil.riljLog("responseIccCardStatus: from HIDL: " + iccCardStatus); 1596 if (responseInfo.error == RadioError.NONE) { 1597 sendMessageResponse(rr.mResult, iccCardStatus); 1598 } 1599 mRil.processResponseDone(rr, responseInfo, iccCardStatus); 1600 } 1601 } 1602 responseIccCardStatus_1_4(RadioResponseInfo responseInfo, android.hardware.radio.V1_4.CardStatus cardStatus)1603 private void responseIccCardStatus_1_4(RadioResponseInfo responseInfo, 1604 android.hardware.radio.V1_4.CardStatus cardStatus) { 1605 RILRequest rr = mRil.processResponse(responseInfo); 1606 1607 if (rr != null) { 1608 IccCardStatus iccCardStatus = convertHalCardStatus(cardStatus.base.base); 1609 iccCardStatus.physicalSlotIndex = cardStatus.base.physicalSlotId; 1610 iccCardStatus.atr = cardStatus.base.atr; 1611 iccCardStatus.iccid = cardStatus.base.iccid; 1612 iccCardStatus.eid = cardStatus.eid; 1613 mRil.riljLog("responseIccCardStatus: from HIDL: " + iccCardStatus); 1614 if (responseInfo.error == RadioError.NONE) { 1615 sendMessageResponse(rr.mResult, iccCardStatus); 1616 } 1617 mRil.processResponseDone(rr, responseInfo, iccCardStatus); 1618 } 1619 } 1620 1621 /** 1622 * @param responseInfo Response info struct containing response type, serial no. and error 1623 */ emergencyDialResponse(RadioResponseInfo responseInfo)1624 public void emergencyDialResponse(RadioResponseInfo responseInfo) { 1625 responseVoid(responseInfo); 1626 } 1627 responseInts(RadioResponseInfo responseInfo, int ...var)1628 private void responseInts(RadioResponseInfo responseInfo, int ...var) { 1629 final ArrayList<Integer> ints = new ArrayList<>(); 1630 for (int i = 0; i < var.length; i++) { 1631 ints.add(var[i]); 1632 } 1633 responseIntArrayList(responseInfo, ints); 1634 } 1635 responseIntArrayList(RadioResponseInfo responseInfo, ArrayList<Integer> var)1636 private void responseIntArrayList(RadioResponseInfo responseInfo, ArrayList<Integer> var) { 1637 RILRequest rr = mRil.processResponse(responseInfo); 1638 1639 if (rr != null) { 1640 int[] ret = new int[var.size()]; 1641 for (int i = 0; i < var.size(); i++) { 1642 ret[i] = var.get(i); 1643 } 1644 if (responseInfo.error == RadioError.NONE) { 1645 sendMessageResponse(rr.mResult, ret); 1646 } 1647 mRil.processResponseDone(rr, responseInfo, ret); 1648 } 1649 } 1650 responseCurrentCalls(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.Call> calls)1651 private void responseCurrentCalls(RadioResponseInfo responseInfo, 1652 ArrayList<android.hardware.radio.V1_0.Call> calls) { 1653 RILRequest rr = mRil.processResponse(responseInfo); 1654 1655 if (rr != null) { 1656 int num = calls.size(); 1657 ArrayList<DriverCall> dcCalls = new ArrayList<DriverCall>(num); 1658 DriverCall dc; 1659 1660 for (int i = 0; i < num; i++) { 1661 dc = new DriverCall(); 1662 // TODO: change name of function stateFromCLCC() in DriverCall.java to name 1663 // clarifying what is CLCC 1664 dc.state = DriverCall.stateFromCLCC((int) (calls.get(i).state)); 1665 dc.index = calls.get(i).index; 1666 dc.TOA = calls.get(i).toa; 1667 dc.isMpty = calls.get(i).isMpty; 1668 dc.isMT = calls.get(i).isMT; 1669 dc.als = calls.get(i).als; 1670 dc.isVoice = calls.get(i).isVoice; 1671 dc.isVoicePrivacy = calls.get(i).isVoicePrivacy; 1672 dc.number = calls.get(i).number; 1673 dc.numberPresentation = 1674 DriverCall.presentationFromCLIP( 1675 (int) (calls.get(i).numberPresentation)); 1676 dc.name = calls.get(i).name; 1677 dc.namePresentation = 1678 DriverCall.presentationFromCLIP((int) (calls.get(i).namePresentation)); 1679 if (calls.get(i).uusInfo.size() == 1) { 1680 dc.uusInfo = new UUSInfo(); 1681 dc.uusInfo.setType(calls.get(i).uusInfo.get(0).uusType); 1682 dc.uusInfo.setDcs(calls.get(i).uusInfo.get(0).uusDcs); 1683 if (!TextUtils.isEmpty(calls.get(i).uusInfo.get(0).uusData)) { 1684 byte[] userData = calls.get(i).uusInfo.get(0).uusData.getBytes(); 1685 dc.uusInfo.setUserData(userData); 1686 } else { 1687 mRil.riljLog("responseCurrentCalls: uusInfo data is null or empty"); 1688 } 1689 1690 mRil.riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d", 1691 dc.uusInfo.getType(), dc.uusInfo.getDcs(), 1692 dc.uusInfo.getUserData().length)); 1693 mRil.riljLogv("Incoming UUS : data (hex): " 1694 + IccUtils.bytesToHexString(dc.uusInfo.getUserData())); 1695 } else { 1696 mRil.riljLogv("Incoming UUS : NOT present!"); 1697 } 1698 1699 // Make sure there's a leading + on addresses with a TOA of 145 1700 dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA); 1701 1702 dcCalls.add(dc); 1703 1704 if (dc.isVoicePrivacy) { 1705 mRil.mVoicePrivacyOnRegistrants.notifyRegistrants(); 1706 mRil.riljLog("InCall VoicePrivacy is enabled"); 1707 } else { 1708 mRil.mVoicePrivacyOffRegistrants.notifyRegistrants(); 1709 mRil.riljLog("InCall VoicePrivacy is disabled"); 1710 } 1711 } 1712 1713 Collections.sort(dcCalls); 1714 1715 if ((num == 0) && mRil.mTestingEmergencyCall.getAndSet(false)) { 1716 if (mRil.mEmergencyCallbackModeRegistrant != null) { 1717 mRil.riljLog("responseCurrentCalls: call ended, testing emergency call," 1718 + " notify ECM Registrants"); 1719 mRil.mEmergencyCallbackModeRegistrant.notifyRegistrant(); 1720 } 1721 } 1722 1723 if (responseInfo.error == RadioError.NONE) { 1724 sendMessageResponse(rr.mResult, dcCalls); 1725 } 1726 mRil.processResponseDone(rr, responseInfo, dcCalls); 1727 } 1728 } 1729 responseCurrentCalls_1_2(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_2.Call> calls)1730 private void responseCurrentCalls_1_2(RadioResponseInfo responseInfo, 1731 ArrayList<android.hardware.radio.V1_2.Call> calls) { 1732 RILRequest rr = mRil.processResponse(responseInfo); 1733 1734 if (rr != null) { 1735 int num = calls.size(); 1736 ArrayList<DriverCall> dcCalls = new ArrayList<DriverCall>(num); 1737 DriverCall dc; 1738 1739 for (int i = 0; i < num; i++) { 1740 dc = new DriverCall(); 1741 // TODO: change name of function stateFromCLCC() in DriverCall.java to name 1742 // clarifying what is CLCC 1743 dc.state = DriverCall.stateFromCLCC((int) (calls.get(i).base.state)); 1744 dc.index = calls.get(i).base.index; 1745 dc.TOA = calls.get(i).base.toa; 1746 dc.isMpty = calls.get(i).base.isMpty; 1747 dc.isMT = calls.get(i).base.isMT; 1748 dc.als = calls.get(i).base.als; 1749 dc.isVoice = calls.get(i).base.isVoice; 1750 dc.isVoicePrivacy = calls.get(i).base.isVoicePrivacy; 1751 dc.number = calls.get(i).base.number; 1752 dc.numberPresentation = 1753 DriverCall.presentationFromCLIP( 1754 (int) (calls.get(i).base.numberPresentation)); 1755 dc.name = calls.get(i).base.name; 1756 dc.namePresentation = 1757 DriverCall.presentationFromCLIP((int) (calls.get(i).base.namePresentation)); 1758 if (calls.get(i).base.uusInfo.size() == 1) { 1759 dc.uusInfo = new UUSInfo(); 1760 dc.uusInfo.setType(calls.get(i).base.uusInfo.get(0).uusType); 1761 dc.uusInfo.setDcs(calls.get(i).base.uusInfo.get(0).uusDcs); 1762 if (!TextUtils.isEmpty(calls.get(i).base.uusInfo.get(0).uusData)) { 1763 byte[] userData = calls.get(i).base.uusInfo.get(0).uusData.getBytes(); 1764 dc.uusInfo.setUserData(userData); 1765 } else { 1766 mRil.riljLog("responseCurrentCalls: uusInfo data is null or empty"); 1767 } 1768 1769 mRil.riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d", 1770 dc.uusInfo.getType(), dc.uusInfo.getDcs(), 1771 dc.uusInfo.getUserData().length)); 1772 mRil.riljLogv("Incoming UUS : data (hex): " 1773 + IccUtils.bytesToHexString(dc.uusInfo.getUserData())); 1774 } else { 1775 mRil.riljLogv("Incoming UUS : NOT present!"); 1776 } 1777 1778 // Make sure there's a leading + on addresses with a TOA of 145 1779 dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA); 1780 1781 dc.audioQuality = (int) (calls.get(i).audioQuality); 1782 1783 dcCalls.add(dc); 1784 1785 if (dc.isVoicePrivacy) { 1786 mRil.mVoicePrivacyOnRegistrants.notifyRegistrants(); 1787 mRil.riljLog("InCall VoicePrivacy is enabled"); 1788 } else { 1789 mRil.mVoicePrivacyOffRegistrants.notifyRegistrants(); 1790 mRil.riljLog("InCall VoicePrivacy is disabled"); 1791 } 1792 } 1793 1794 Collections.sort(dcCalls); 1795 1796 if ((num == 0) && mRil.mTestingEmergencyCall.getAndSet(false)) { 1797 if (mRil.mEmergencyCallbackModeRegistrant != null) { 1798 mRil.riljLog("responseCurrentCalls: call ended, testing emergency call," 1799 + " notify ECM Registrants"); 1800 mRil.mEmergencyCallbackModeRegistrant.notifyRegistrant(); 1801 } 1802 } 1803 1804 if (responseInfo.error == RadioError.NONE) { 1805 sendMessageResponse(rr.mResult, dcCalls); 1806 } 1807 mRil.processResponseDone(rr, responseInfo, dcCalls); 1808 } 1809 } 1810 1811 responseVoid(RadioResponseInfo responseInfo)1812 private void responseVoid(RadioResponseInfo responseInfo) { 1813 RILRequest rr = mRil.processResponse(responseInfo); 1814 1815 if (rr != null) { 1816 Object ret = null; 1817 if (responseInfo.error == RadioError.NONE) { 1818 sendMessageResponse(rr.mResult, ret); 1819 } 1820 mRil.processResponseDone(rr, responseInfo, ret); 1821 } 1822 } 1823 responseString(RadioResponseInfo responseInfo, String str)1824 private void responseString(RadioResponseInfo responseInfo, String str) { 1825 RILRequest rr = mRil.processResponse(responseInfo); 1826 1827 if (rr != null) { 1828 if (responseInfo.error == RadioError.NONE) { 1829 sendMessageResponse(rr.mResult, str); 1830 } 1831 mRil.processResponseDone(rr, responseInfo, str); 1832 } 1833 } 1834 responseStrings(RadioResponseInfo responseInfo, String ...str)1835 private void responseStrings(RadioResponseInfo responseInfo, String ...str) { 1836 ArrayList<String> strings = new ArrayList<>(); 1837 for (int i = 0; i < str.length; i++) { 1838 strings.add(str[i]); 1839 } 1840 responseStringArrayList(mRil, responseInfo, strings); 1841 } 1842 responseStringArrayList(RIL ril, RadioResponseInfo responseInfo, ArrayList<String> strings)1843 static void responseStringArrayList(RIL ril, RadioResponseInfo responseInfo, 1844 ArrayList<String> strings) { 1845 RILRequest rr = ril.processResponse(responseInfo); 1846 1847 if (rr != null) { 1848 String[] ret = new String[strings.size()]; 1849 for (int i = 0; i < strings.size(); i++) { 1850 ret[i] = strings.get(i); 1851 } 1852 if (responseInfo.error == RadioError.NONE) { 1853 sendMessageResponse(rr.mResult, ret); 1854 } 1855 ril.processResponseDone(rr, responseInfo, ret); 1856 } 1857 } 1858 responseLastCallFailCauseInfo(RadioResponseInfo responseInfo, LastCallFailCauseInfo fcInfo)1859 private void responseLastCallFailCauseInfo(RadioResponseInfo responseInfo, 1860 LastCallFailCauseInfo fcInfo) { 1861 RILRequest rr = mRil.processResponse(responseInfo); 1862 1863 if (rr != null) { 1864 LastCallFailCause ret = new LastCallFailCause(); 1865 ret.causeCode = fcInfo.causeCode; 1866 ret.vendorCause = fcInfo.vendorCause; 1867 if (responseInfo.error == RadioError.NONE) { 1868 sendMessageResponse(rr.mResult, ret); 1869 } 1870 mRil.processResponseDone(rr, responseInfo, ret); 1871 } 1872 } 1873 responseSignalStrength( RadioResponseInfo responseInfo, android.hardware.radio.V1_0.SignalStrength signalStrength)1874 private void responseSignalStrength( 1875 RadioResponseInfo responseInfo, 1876 android.hardware.radio.V1_0.SignalStrength signalStrength) { 1877 RILRequest rr = mRil.processResponse(responseInfo); 1878 1879 if (rr != null) { 1880 SignalStrength ret = new SignalStrength(signalStrength); 1881 if (responseInfo.error == RadioError.NONE) { 1882 sendMessageResponse(rr.mResult, ret); 1883 } 1884 mRil.processResponseDone(rr, responseInfo, ret); 1885 } 1886 } 1887 responseSignalStrength_1_2( RadioResponseInfo responseInfo, android.hardware.radio.V1_2.SignalStrength signalStrength)1888 private void responseSignalStrength_1_2( 1889 RadioResponseInfo responseInfo, 1890 android.hardware.radio.V1_2.SignalStrength signalStrength) { 1891 RILRequest rr = mRil.processResponse(responseInfo); 1892 1893 if (rr != null) { 1894 SignalStrength ret = new SignalStrength(signalStrength); 1895 if (responseInfo.error == RadioError.NONE) { 1896 sendMessageResponse(rr.mResult, ret); 1897 } 1898 mRil.processResponseDone(rr, responseInfo, ret); 1899 } 1900 } 1901 responseSignalStrength_1_4( RadioResponseInfo responseInfo, android.hardware.radio.V1_4.SignalStrength signalStrength)1902 private void responseSignalStrength_1_4( 1903 RadioResponseInfo responseInfo, 1904 android.hardware.radio.V1_4.SignalStrength signalStrength) { 1905 RILRequest rr = mRil.processResponse(responseInfo); 1906 1907 if (rr != null) { 1908 SignalStrength ret = new SignalStrength(signalStrength); 1909 if (responseInfo.error == RadioError.NONE) { 1910 sendMessageResponse(rr.mResult, ret); 1911 } 1912 mRil.processResponseDone(rr, responseInfo, ret); 1913 } 1914 } 1915 responseSms(RadioResponseInfo responseInfo, SendSmsResult sms)1916 private void responseSms(RadioResponseInfo responseInfo, SendSmsResult sms) { 1917 RILRequest rr = mRil.processResponse(responseInfo); 1918 1919 if (rr != null) { 1920 SmsResponse ret = new SmsResponse(sms.messageRef, sms.ackPDU, sms.errorCode); 1921 if (responseInfo.error == RadioError.NONE) { 1922 sendMessageResponse(rr.mResult, ret); 1923 } 1924 mRil.processResponseDone(rr, responseInfo, ret); 1925 } 1926 } 1927 responseSetupDataCall(RadioResponseInfo responseInfo, Object setupDataCallResult)1928 private void responseSetupDataCall(RadioResponseInfo responseInfo, 1929 Object setupDataCallResult) { 1930 RILRequest rr = mRil.processResponse(responseInfo); 1931 1932 if (rr != null) { 1933 DataCallResponse response = RIL.convertDataCallResult(setupDataCallResult); 1934 if (responseInfo.error == RadioError.NONE) { 1935 sendMessageResponse(rr.mResult, response); 1936 } 1937 mRil.processResponseDone(rr, responseInfo, response); 1938 } 1939 } 1940 responseIccIo(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1941 private void responseIccIo(RadioResponseInfo responseInfo, 1942 android.hardware.radio.V1_0.IccIoResult result) { 1943 RILRequest rr = mRil.processResponse(responseInfo); 1944 1945 if (rr != null) { 1946 IccIoResult ret = new IccIoResult(result.sw1, result.sw2, result.simResponse); 1947 if (responseInfo.error == RadioError.NONE) { 1948 sendMessageResponse(rr.mResult, ret); 1949 } 1950 mRil.processResponseDone(rr, responseInfo, ret); 1951 } 1952 } 1953 responseCallForwardInfo(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CallForwardInfo> callForwardInfos)1954 private void responseCallForwardInfo(RadioResponseInfo responseInfo, 1955 ArrayList<android.hardware.radio.V1_0.CallForwardInfo> 1956 callForwardInfos) { 1957 RILRequest rr = mRil.processResponse(responseInfo); 1958 if (rr != null) { 1959 CallForwardInfo[] ret = new CallForwardInfo[callForwardInfos.size()]; 1960 for (int i = 0; i < callForwardInfos.size(); i++) { 1961 ret[i] = new CallForwardInfo(); 1962 ret[i].status = callForwardInfos.get(i).status; 1963 ret[i].reason = callForwardInfos.get(i).reason; 1964 ret[i].serviceClass = callForwardInfos.get(i).serviceClass; 1965 ret[i].toa = callForwardInfos.get(i).toa; 1966 ret[i].number = callForwardInfos.get(i).number; 1967 ret[i].timeSeconds = callForwardInfos.get(i).timeSeconds; 1968 } 1969 if (responseInfo.error == RadioError.NONE) { 1970 sendMessageResponse(rr.mResult, ret); 1971 } 1972 mRil.processResponseDone(rr, responseInfo, ret); 1973 } 1974 } 1975 convertOpertatorInfoToString(int status)1976 private static String convertOpertatorInfoToString(int status) { 1977 if (status == android.hardware.radio.V1_0.OperatorStatus.UNKNOWN) { 1978 return "unknown"; 1979 } else if (status == android.hardware.radio.V1_0.OperatorStatus.AVAILABLE) { 1980 return "available"; 1981 } else if (status == android.hardware.radio.V1_0.OperatorStatus.CURRENT) { 1982 return "current"; 1983 } else if (status == android.hardware.radio.V1_0.OperatorStatus.FORBIDDEN) { 1984 return "forbidden"; 1985 } else { 1986 return ""; 1987 } 1988 } 1989 responseOperatorInfos(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.OperatorInfo> networkInfos)1990 private void responseOperatorInfos(RadioResponseInfo responseInfo, 1991 ArrayList<android.hardware.radio.V1_0.OperatorInfo> 1992 networkInfos) { 1993 RILRequest rr = mRil.processResponse(responseInfo); 1994 1995 if (rr != null) { 1996 ArrayList<OperatorInfo> ret = new ArrayList<OperatorInfo>(); 1997 for (int i = 0; i < networkInfos.size(); i++) { 1998 ret.add(new OperatorInfo(networkInfos.get(i).alphaLong, 1999 networkInfos.get(i).alphaShort, networkInfos.get(i).operatorNumeric, 2000 convertOpertatorInfoToString(networkInfos.get(i).status))); 2001 } 2002 if (responseInfo.error == RadioError.NONE) { 2003 sendMessageResponse(rr.mResult, ret); 2004 } 2005 mRil.processResponseDone(rr, responseInfo, ret); 2006 } 2007 } 2008 responseScanStatus(RadioResponseInfo responseInfo)2009 private void responseScanStatus(RadioResponseInfo responseInfo) { 2010 RILRequest rr = mRil.processResponse(responseInfo); 2011 2012 if (rr != null) { 2013 NetworkScanResult nsr = null; 2014 if (responseInfo.error == RadioError.NONE) { 2015 nsr = new NetworkScanResult( 2016 NetworkScanResult.SCAN_STATUS_PARTIAL, RadioError.NONE, null); 2017 sendMessageResponse(rr.mResult, nsr); 2018 } 2019 mRil.processResponseDone(rr, responseInfo, nsr); 2020 } 2021 } 2022 responseDataCallList(RadioResponseInfo responseInfo, List<? extends Object> dataCallResultList)2023 private void responseDataCallList(RadioResponseInfo responseInfo, 2024 List<? extends Object> dataCallResultList) { 2025 RILRequest rr = mRil.processResponse(responseInfo); 2026 2027 if (rr != null) { 2028 ArrayList<DataCallResponse> response = 2029 RIL.convertDataCallResultList(dataCallResultList); 2030 if (responseInfo.error == RadioError.NONE) { 2031 sendMessageResponse(rr.mResult, response); 2032 } 2033 mRil.processResponseDone(rr, responseInfo, response); 2034 } 2035 } 2036 responseCellList(RadioResponseInfo responseInfo, ArrayList<NeighboringCell> cells)2037 private void responseCellList(RadioResponseInfo responseInfo, 2038 ArrayList<NeighboringCell> cells) { 2039 RILRequest rr = mRil.processResponse(responseInfo); 2040 2041 if (rr != null) { 2042 int rssi; 2043 String location; 2044 ArrayList<NeighboringCellInfo> ret = new ArrayList<NeighboringCellInfo>(); 2045 NeighboringCellInfo cell; 2046 2047 int[] subId = SubscriptionManager.getSubId(mRil.mPhoneId); 2048 int radioType = 2049 ((TelephonyManager) mRil.mContext.getSystemService( 2050 Context.TELEPHONY_SERVICE)).getDataNetworkType(subId[0]); 2051 2052 if (radioType != TelephonyManager.NETWORK_TYPE_UNKNOWN) { 2053 for (int i = 0; i < cells.size(); i++) { 2054 rssi = cells.get(i).rssi; 2055 location = cells.get(i).cid; 2056 cell = new NeighboringCellInfo(rssi, location, radioType); 2057 ret.add(cell); 2058 } 2059 } 2060 if (responseInfo.error == RadioError.NONE) { 2061 sendMessageResponse(rr.mResult, ret); 2062 } 2063 mRil.processResponseDone(rr, responseInfo, ret); 2064 } 2065 } 2066 responseGmsBroadcastConfig(RadioResponseInfo responseInfo, ArrayList<GsmBroadcastSmsConfigInfo> configs)2067 private void responseGmsBroadcastConfig(RadioResponseInfo responseInfo, 2068 ArrayList<GsmBroadcastSmsConfigInfo> configs) { 2069 RILRequest rr = mRil.processResponse(responseInfo); 2070 2071 if (rr != null) { 2072 ArrayList<SmsBroadcastConfigInfo> ret = new ArrayList<SmsBroadcastConfigInfo>(); 2073 for (int i = 0; i < configs.size(); i++) { 2074 ret.add(new SmsBroadcastConfigInfo(configs.get(i).fromServiceId, 2075 configs.get(i).toServiceId, configs.get(i).fromCodeScheme, 2076 configs.get(i).toCodeScheme, configs.get(i).selected)); 2077 } 2078 if (responseInfo.error == RadioError.NONE) { 2079 sendMessageResponse(rr.mResult, ret); 2080 } 2081 mRil.processResponseDone(rr, responseInfo, ret); 2082 } 2083 } 2084 responseCdmaBroadcastConfig(RadioResponseInfo responseInfo, ArrayList<CdmaBroadcastSmsConfigInfo> configs)2085 private void responseCdmaBroadcastConfig(RadioResponseInfo responseInfo, 2086 ArrayList<CdmaBroadcastSmsConfigInfo> configs) { 2087 RILRequest rr = mRil.processResponse(responseInfo); 2088 2089 if (rr != null) { 2090 int[] ret = null; 2091 2092 int numServiceCategories = configs.size(); 2093 2094 if (numServiceCategories == 0) { 2095 // TODO: The logic of providing default values should 2096 // not be done by this transport layer. And needs to 2097 // be done by the vendor ril or application logic. 2098 int numInts; 2099 numInts = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES 2100 * CDMA_BSI_NO_OF_INTS_STRUCT + 1; 2101 ret = new int[numInts]; 2102 2103 // Faking a default record for all possible records. 2104 ret[0] = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES; 2105 2106 // Loop over CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES set 'english' as 2107 // default language and selection status to false for all. 2108 for (int i = 1; i < numInts; i += CDMA_BSI_NO_OF_INTS_STRUCT) { 2109 ret[i + 0] = i / CDMA_BSI_NO_OF_INTS_STRUCT; 2110 ret[i + 1] = 1; 2111 ret[i + 2] = 0; 2112 } 2113 } else { 2114 int numInts; 2115 numInts = (numServiceCategories * CDMA_BSI_NO_OF_INTS_STRUCT) + 1; 2116 ret = new int[numInts]; 2117 2118 ret[0] = numServiceCategories; 2119 for (int i = 1, j = 0; j < configs.size(); 2120 j++, i = i + CDMA_BSI_NO_OF_INTS_STRUCT) { 2121 ret[i] = configs.get(j).serviceCategory; 2122 ret[i + 1] = configs.get(j).language; 2123 ret[i + 2] = configs.get(j).selected ? 1 : 0; 2124 } 2125 } 2126 if (responseInfo.error == RadioError.NONE) { 2127 sendMessageResponse(rr.mResult, ret); 2128 } 2129 mRil.processResponseDone(rr, responseInfo, ret); 2130 } 2131 } 2132 responseCellInfoList(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo)2133 private void responseCellInfoList(RadioResponseInfo responseInfo, 2134 ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo) { 2135 RILRequest rr = mRil.processResponse(responseInfo); 2136 2137 if (rr != null) { 2138 ArrayList<CellInfo> ret = RIL.convertHalCellInfoList(cellInfo); 2139 if (responseInfo.error == RadioError.NONE) { 2140 sendMessageResponse(rr.mResult, ret); 2141 } 2142 mRil.processResponseDone(rr, responseInfo, ret); 2143 } 2144 } 2145 responseCellInfoList_1_2( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_2.CellInfo> cellInfo)2146 private void responseCellInfoList_1_2( 2147 RadioResponseInfo responseInfo, 2148 ArrayList<android.hardware.radio.V1_2.CellInfo> cellInfo) { 2149 RILRequest rr = mRil.processResponse(responseInfo); 2150 2151 if (rr != null) { 2152 ArrayList<CellInfo> ret = RIL.convertHalCellInfoList_1_2(cellInfo); 2153 if (responseInfo.error == RadioError.NONE) { 2154 sendMessageResponse(rr.mResult, ret); 2155 } 2156 mRil.processResponseDone(rr, responseInfo, ret); 2157 } 2158 } 2159 responseCellInfoList_1_4( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_4.CellInfo> cellInfo)2160 private void responseCellInfoList_1_4( 2161 RadioResponseInfo responseInfo, 2162 ArrayList<android.hardware.radio.V1_4.CellInfo> cellInfo) { 2163 RILRequest rr = mRil.processResponse(responseInfo); 2164 2165 if (rr != null) { 2166 ArrayList<CellInfo> ret = RIL.convertHalCellInfoList_1_4(cellInfo); 2167 if (responseInfo.error == RadioError.NONE) { 2168 sendMessageResponse(rr.mResult, ret); 2169 } 2170 mRil.processResponseDone(rr, responseInfo, ret); 2171 } 2172 } 2173 responseActivityData(RadioResponseInfo responseInfo, ActivityStatsInfo activityInfo)2174 private void responseActivityData(RadioResponseInfo responseInfo, 2175 ActivityStatsInfo activityInfo) { 2176 RILRequest rr = mRil.processResponse(responseInfo); 2177 2178 if (rr != null) { 2179 ModemActivityInfo ret = null; 2180 if (responseInfo.error == RadioError.NONE) { 2181 final int sleepModeTimeMs = activityInfo.sleepModeTimeMs; 2182 final int idleModeTimeMs = activityInfo.idleModeTimeMs; 2183 int [] txModeTimeMs = new int[ModemActivityInfo.TX_POWER_LEVELS]; 2184 for (int i = 0; i < ModemActivityInfo.TX_POWER_LEVELS; i++) { 2185 txModeTimeMs[i] = activityInfo.txmModetimeMs[i]; 2186 } 2187 final int rxModeTimeMs = activityInfo.rxModeTimeMs; 2188 ret = new ModemActivityInfo(SystemClock.elapsedRealtime(), sleepModeTimeMs, 2189 idleModeTimeMs, txModeTimeMs, rxModeTimeMs, 0); 2190 } else { 2191 ret = new ModemActivityInfo(0, 0, 0, new int [ModemActivityInfo.TX_POWER_LEVELS], 2192 0, 0); 2193 responseInfo.error = RadioError.NONE; 2194 } 2195 sendMessageResponse(rr.mResult, ret); 2196 mRil.processResponseDone(rr, responseInfo, ret); 2197 } 2198 } 2199 responseHardwareConfig( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.HardwareConfig> config)2200 private void responseHardwareConfig( 2201 RadioResponseInfo responseInfo, 2202 ArrayList<android.hardware.radio.V1_0.HardwareConfig> config) { 2203 RILRequest rr = mRil.processResponse(responseInfo); 2204 2205 if (rr != null) { 2206 ArrayList<HardwareConfig> ret = RIL.convertHalHwConfigList(config, mRil); 2207 if (responseInfo.error == RadioError.NONE) { 2208 sendMessageResponse(rr.mResult, ret); 2209 } 2210 mRil.processResponseDone(rr, responseInfo, ret); 2211 } 2212 } 2213 responseICC_IOBase64(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)2214 private void responseICC_IOBase64(RadioResponseInfo responseInfo, 2215 android.hardware.radio.V1_0.IccIoResult result) { 2216 RILRequest rr = mRil.processResponse(responseInfo); 2217 2218 if (rr != null) { 2219 IccIoResult ret = new IccIoResult( 2220 result.sw1, 2221 result.sw2, 2222 (!(result.simResponse).equals("")) 2223 ? android.util.Base64.decode(result.simResponse, 2224 android.util.Base64.DEFAULT) : (byte[]) null); 2225 if (responseInfo.error == RadioError.NONE) { 2226 sendMessageResponse(rr.mResult, ret); 2227 } 2228 mRil.processResponseDone(rr, responseInfo, ret); 2229 } 2230 } 2231 responseRadioCapability(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.RadioCapability rc)2232 private void responseRadioCapability(RadioResponseInfo responseInfo, 2233 android.hardware.radio.V1_0.RadioCapability rc) { 2234 RILRequest rr = mRil.processResponse(responseInfo); 2235 2236 if (rr != null) { 2237 RadioCapability ret = RIL.convertHalRadioCapability(rc, mRil); 2238 if (responseInfo.error == RadioError.NONE) { 2239 sendMessageResponse(rr.mResult, ret); 2240 } 2241 mRil.processResponseDone(rr, responseInfo, ret); 2242 } 2243 } 2244 responseLceStatus(RadioResponseInfo responseInfo, LceStatusInfo statusInfo)2245 private void responseLceStatus(RadioResponseInfo responseInfo, LceStatusInfo statusInfo) { 2246 RILRequest rr = mRil.processResponse(responseInfo); 2247 2248 if (rr != null) { 2249 ArrayList<Integer> ret = new ArrayList<Integer>(); 2250 ret.add(statusInfo.lceStatus); 2251 ret.add(Byte.toUnsignedInt(statusInfo.actualIntervalMs)); 2252 if (responseInfo.error == RadioError.NONE) { 2253 sendMessageResponse(rr.mResult, ret); 2254 } 2255 mRil.processResponseDone(rr, responseInfo, ret); 2256 } 2257 } 2258 responseLceData(RadioResponseInfo responseInfo, LceDataInfo lceInfo)2259 private void responseLceData(RadioResponseInfo responseInfo, LceDataInfo lceInfo) { 2260 RILRequest rr = mRil.processResponse(responseInfo); 2261 2262 if (rr != null) { 2263 LinkCapacityEstimate ret = RIL.convertHalLceData(lceInfo, mRil); 2264 if (responseInfo.error == RadioError.NONE) { 2265 sendMessageResponse(rr.mResult, ret); 2266 } 2267 mRil.processResponseDone(rr, responseInfo, ret); 2268 } 2269 } 2270 convertCarrierList(List<Carrier> carrierList)2271 private static List<CarrierIdentifier> convertCarrierList(List<Carrier> carrierList) { 2272 List<CarrierIdentifier> ret = new ArrayList<>(); 2273 for (int i = 0; i < carrierList.size(); i++) { 2274 String mcc = carrierList.get(i).mcc; 2275 String mnc = carrierList.get(i).mnc; 2276 String spn = null, imsi = null, gid1 = null, gid2 = null; 2277 int matchType = carrierList.get(i).matchType; 2278 String matchData = carrierList.get(i).matchData; 2279 if (matchType == CarrierIdentifier.MatchType.SPN) { 2280 spn = matchData; 2281 } else if (matchType == CarrierIdentifier.MatchType.IMSI_PREFIX) { 2282 imsi = matchData; 2283 } else if (matchType == CarrierIdentifier.MatchType.GID1) { 2284 gid1 = matchData; 2285 } else if (matchType == CarrierIdentifier.MatchType.GID2) { 2286 gid2 = matchData; 2287 } 2288 ret.add(new CarrierIdentifier(mcc, mnc, spn, imsi, gid1, gid2)); 2289 } 2290 return ret; 2291 } 2292 responseCarrierRestrictions(RadioResponseInfo responseInfo, boolean allAllowed, CarrierRestrictionsWithPriority carriers, int multiSimPolicy)2293 private void responseCarrierRestrictions(RadioResponseInfo responseInfo, boolean allAllowed, 2294 CarrierRestrictionsWithPriority carriers, 2295 int multiSimPolicy) { 2296 RILRequest rr = mRil.processResponse(responseInfo); 2297 if (rr == null) { 2298 return; 2299 } 2300 CarrierRestrictionRules ret; 2301 2302 if (allAllowed) { 2303 ret = CarrierRestrictionRules.newBuilder().setAllCarriersAllowed().build(); 2304 } else { 2305 int policy = CarrierRestrictionRules.MULTISIM_POLICY_NONE; 2306 if (multiSimPolicy == SimLockMultiSimPolicy.ONE_VALID_SIM_MUST_BE_PRESENT) { 2307 policy = CarrierRestrictionRules.MULTISIM_POLICY_ONE_VALID_SIM_MUST_BE_PRESENT; 2308 } 2309 2310 int carrierRestrictionDefault = 2311 CarrierRestrictionRules.CARRIER_RESTRICTION_DEFAULT_NOT_ALLOWED; 2312 if (!carriers.allowedCarriersPrioritized) { 2313 carrierRestrictionDefault = 2314 CarrierRestrictionRules.CARRIER_RESTRICTION_DEFAULT_ALLOWED; 2315 } 2316 2317 ret = CarrierRestrictionRules.newBuilder() 2318 .setAllowedCarriers(convertCarrierList(carriers.allowedCarriers)) 2319 .setExcludedCarriers(convertCarrierList(carriers.excludedCarriers)) 2320 .setDefaultCarrierRestriction(carrierRestrictionDefault) 2321 .setMultiSimPolicy(policy) 2322 .build(); 2323 } 2324 2325 if (responseInfo.error == RadioError.NONE) { 2326 sendMessageResponse(rr.mResult, ret); 2327 } 2328 mRil.processResponseDone(rr, responseInfo, ret); 2329 } 2330 2331 /** 2332 * @param responseInfo Response info struct containing response type, serial number and error. 2333 */ enableModemResponse(RadioResponseInfo responseInfo)2334 public void enableModemResponse(RadioResponseInfo responseInfo) { 2335 responseVoid(responseInfo); 2336 } 2337 2338 /** 2339 * @param responseInfo Response info struct containing response type, serial no. and error 2340 * @param isEnabled whether the modem stack is enabled. 2341 */ getModemStackStatusResponse(RadioResponseInfo responseInfo, boolean isEnabled)2342 public void getModemStackStatusResponse(RadioResponseInfo responseInfo, boolean isEnabled) { 2343 RILRequest rr = mRil.processResponse(responseInfo); 2344 2345 if (rr != null) { 2346 if (responseInfo.error == RadioError.NONE) { 2347 sendMessageResponse(rr.mResult, isEnabled); 2348 } 2349 mRil.processResponseDone(rr, responseInfo, isEnabled); 2350 } 2351 } 2352 2353 /** 2354 * @param responseInfo Response info struct containing response type, serial number and error. 2355 */ setSystemSelectionChannelsResponse(RadioResponseInfo responseInfo)2356 public void setSystemSelectionChannelsResponse(RadioResponseInfo responseInfo) { 2357 responseVoid(responseInfo); 2358 } 2359 } 2360