• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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