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.CarrierRestrictions;
24 import android.hardware.radio.V1_0.CdmaBroadcastSmsConfigInfo;
25 import android.hardware.radio.V1_0.DataRegStateResult;
26 import android.hardware.radio.V1_0.GsmBroadcastSmsConfigInfo;
27 import android.hardware.radio.V1_0.IRadioResponse;
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.SetupDataCallResult;
36 import android.hardware.radio.V1_0.VoiceRegStateResult;
37 import android.os.AsyncResult;
38 import android.os.Message;
39 import android.os.SystemClock;
40 import android.service.carrier.CarrierIdentifier;
41 import android.telephony.CellInfo;
42 import android.telephony.ModemActivityInfo;
43 import android.telephony.NeighboringCellInfo;
44 import android.telephony.PhoneNumberUtils;
45 import android.telephony.SignalStrength;
46 import android.telephony.SubscriptionManager;
47 import android.telephony.TelephonyManager;
48 
49 import com.android.internal.telephony.dataconnection.DataCallResponse;
50 import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
51 import com.android.internal.telephony.uicc.IccCardApplicationStatus;
52 import com.android.internal.telephony.uicc.IccCardStatus;
53 import com.android.internal.telephony.uicc.IccIoResult;
54 import com.android.internal.telephony.uicc.IccUtils;
55 
56 import java.util.ArrayList;
57 import java.util.Collections;
58 import java.util.List;
59 
60 public class RadioResponse extends IRadioResponse.Stub {
61     // The number of the required config values for broadcast SMS stored in the C struct
62     // RIL_CDMA_BroadcastServiceInfo
63     private static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3;
64 
65     private static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31;
66 
67     RIL mRil;
68 
RadioResponse(RIL ril)69     public RadioResponse(RIL ril) {
70         mRil = ril;
71     }
72 
73     /**
74      * Helper function to send response msg
75      * @param msg Response message to be sent
76      * @param ret Return object to be included in the response message
77      */
sendMessageResponse(Message msg, Object ret)78     static void sendMessageResponse(Message msg, Object ret) {
79         if (msg != null) {
80             AsyncResult.forMessage(msg, ret, null);
81             msg.sendToTarget();
82         }
83     }
84 
85     /**
86      * Acknowledge the receipt of radio request sent to the vendor. This must be sent only for
87      * radio request which take long time to respond.
88      * For more details, refer https://source.android.com/devices/tech/connect/ril.html
89      *
90      * @param serial Serial no. of the request whose acknowledgement is sent.
91      */
acknowledgeRequest(int serial)92     public void acknowledgeRequest(int serial) {
93         mRil.processRequestAck(serial);
94     }
95 
96     /**
97      * @param responseInfo Response info struct containing response type, serial no. and error
98      * @param cardStatus ICC card status as defined by CardStatus in types.hal
99      */
getIccCardStatusResponse(RadioResponseInfo responseInfo, CardStatus cardStatus)100     public void getIccCardStatusResponse(RadioResponseInfo responseInfo, CardStatus cardStatus) {
101         responseIccCardStatus(responseInfo, cardStatus);
102     }
103 
104     /**
105      * @param responseInfo Response info struct containing response type, serial no. and error
106      * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
107      */
supplyIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)108     public void supplyIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
109         responseInts(responseInfo, remainingAttempts);
110     }
111 
112     /**
113      * @param responseInfo Response info struct containing response type, serial no. and error
114      * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
115      */
supplyIccPukForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)116     public void supplyIccPukForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
117         responseInts(responseInfo, remainingAttempts);
118     }
119 
120     /**
121      * @param responseInfo Response info struct containing response type, serial no. and error
122      * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
123      */
supplyIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)124     public void supplyIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
125         responseInts(responseInfo, remainingAttempts);
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      */
supplyIccPuk2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)132     public void supplyIccPuk2ForAppResponse(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      */
changeIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)140     public void changeIccPinForAppResponse(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      */
changeIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)148     public void changeIccPin2ForAppResponse(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 retriesRemaining Number of retries remaining, must be equal to -1 if unknown.
155      */
supplyNetworkDepersonalizationResponse(RadioResponseInfo responseInfo, int retriesRemaining)156     public void supplyNetworkDepersonalizationResponse(RadioResponseInfo responseInfo,
157                                                        int retriesRemaining) {
158         responseInts(responseInfo, retriesRemaining);
159     }
160 
161     /**
162      * @param responseInfo Response info struct containing response type, serial no. and error
163      * @param calls Current call list
164      */
getCurrentCallsResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.Call> calls)165     public void getCurrentCallsResponse(RadioResponseInfo responseInfo,
166                                         ArrayList<android.hardware.radio.V1_0.Call> calls) {
167         responseCurrentCalls(responseInfo, calls);
168     }
169 
170     /**
171      * @param responseInfo Response info struct containing response type, serial no. and error
172      */
dialResponse(RadioResponseInfo responseInfo)173     public void dialResponse(RadioResponseInfo responseInfo) {
174         responseVoid(responseInfo);
175     }
176 
177     /**
178      * @param responseInfo Response info struct containing response type, serial no. and error
179      * @param imsi String containing the IMSI
180      */
getIMSIForAppResponse(RadioResponseInfo responseInfo, String imsi)181     public void getIMSIForAppResponse(RadioResponseInfo responseInfo, String imsi) {
182         responseString(responseInfo, imsi);
183     }
184 
185     /**
186      * @param responseInfo Response info struct containing response type, serial no. and error
187      */
hangupConnectionResponse(RadioResponseInfo responseInfo)188     public void hangupConnectionResponse(RadioResponseInfo responseInfo) {
189         responseVoid(responseInfo);
190     }
191 
192     /**
193      * @param responseInfo Response info struct containing response type, serial no. and error
194      */
hangupWaitingOrBackgroundResponse(RadioResponseInfo responseInfo)195     public void hangupWaitingOrBackgroundResponse(RadioResponseInfo responseInfo) {
196         responseVoid(responseInfo);
197     }
198 
199     /**
200      * @param responseInfo Response info struct containing response type, serial no. and error
201      */
hangupForegroundResumeBackgroundResponse(RadioResponseInfo responseInfo)202     public void hangupForegroundResumeBackgroundResponse(RadioResponseInfo responseInfo) {
203         responseVoid(responseInfo);
204     }
205 
206     /**
207      * @param responseInfo Response info struct containing response type, serial no. and error
208      */
switchWaitingOrHoldingAndActiveResponse(RadioResponseInfo responseInfo)209     public void switchWaitingOrHoldingAndActiveResponse(RadioResponseInfo responseInfo) {
210         responseVoid(responseInfo);
211     }
212 
213     /**
214      * @param responseInfo Response info struct containing response type, serial no. and error
215      */
conferenceResponse(RadioResponseInfo responseInfo)216     public void conferenceResponse(RadioResponseInfo responseInfo) {
217         responseVoid(responseInfo);
218     }
219 
220     /**
221      * @param responseInfo Response info struct containing response type, serial no. and error
222      */
rejectCallResponse(RadioResponseInfo responseInfo)223     public void rejectCallResponse(RadioResponseInfo responseInfo) {
224         responseVoid(responseInfo);
225     }
226 
227     /**
228      * @param responseInfo Response info struct containing response type, serial no. and error
229      * @param fcInfo Contains LastCallFailCause and vendor cause code. GSM failure reasons
230      *        are mapped to cause codes defined in TS 24.008 Annex H where possible. CDMA
231      *        failure reasons are derived from the possible call failure scenarios
232      *        described in the "CDMA IS-2000 Release A (C.S0005-A v6.0)" standard.
233      */
getLastCallFailCauseResponse(RadioResponseInfo responseInfo, LastCallFailCauseInfo fcInfo)234     public void getLastCallFailCauseResponse(RadioResponseInfo responseInfo,
235                                              LastCallFailCauseInfo fcInfo) {
236         responseLastCallFailCauseInfo(responseInfo, fcInfo);
237     }
238 
getSignalStrengthResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.SignalStrength sigStrength)239     public void getSignalStrengthResponse(RadioResponseInfo responseInfo,
240                                           android.hardware.radio.V1_0.SignalStrength sigStrength) {
241         responseSignalStrength(responseInfo, sigStrength);
242     }
243 
244     /*
245      * @param responseInfo Response info struct containing response type, serial no. and error
246      * @param voiceRegResponse Current Voice registration response as defined by VoiceRegStateResult
247      *        in types.hal
248      */
getVoiceRegistrationStateResponse(RadioResponseInfo responseInfo, VoiceRegStateResult voiceRegResponse)249     public void getVoiceRegistrationStateResponse(RadioResponseInfo responseInfo,
250                                                   VoiceRegStateResult voiceRegResponse) {
251         RILRequest rr = mRil.processResponse(responseInfo);
252 
253         if (rr != null) {
254             if (responseInfo.error == RadioError.NONE) {
255                 sendMessageResponse(rr.mResult, voiceRegResponse);
256             }
257             mRil.processResponseDone(rr, responseInfo, voiceRegResponse);
258         }
259     }
260 
261     /**
262      * @param responseInfo Response info struct containing response type, serial no. and error
263      * @param dataRegResponse Current Data registration response as defined by DataRegStateResult in
264      *        types.hal
265      */
getDataRegistrationStateResponse(RadioResponseInfo responseInfo, DataRegStateResult dataRegResponse)266     public void getDataRegistrationStateResponse(RadioResponseInfo responseInfo,
267                                                  DataRegStateResult dataRegResponse) {
268         RILRequest rr = mRil.processResponse(responseInfo);
269 
270         if (rr != null) {
271             if (responseInfo.error == RadioError.NONE) {
272                 sendMessageResponse(rr.mResult, dataRegResponse);
273             }
274             mRil.processResponseDone(rr, responseInfo, dataRegResponse);
275         }
276     }
277 
278     /**
279      * @param responseInfo Response info struct containing response type, serial no. and error
280      * @param longName is long alpha ONS or EONS or empty string if unregistered
281      * @param shortName is short alpha ONS or EONS or empty string if unregistered
282      * @param numeric is 5 or 6 digit numeric code (MCC + MNC) or empty string if unregistered
283      */
getOperatorResponse(RadioResponseInfo responseInfo, String longName, String shortName, String numeric)284     public void getOperatorResponse(RadioResponseInfo responseInfo,
285                                     String longName,
286                                     String shortName,
287                                     String numeric) {
288         responseStrings(responseInfo, longName, shortName, numeric);
289     }
290 
291     /**
292      * @param responseInfo Response info struct containing response type, serial no. and error
293      */
setRadioPowerResponse(RadioResponseInfo responseInfo)294     public void setRadioPowerResponse(RadioResponseInfo responseInfo) {
295         responseVoid(responseInfo);
296     }
297 
298     /**
299      * @param responseInfo Response info struct containing response type, serial no. and error
300      */
sendDtmfResponse(RadioResponseInfo responseInfo)301     public void sendDtmfResponse(RadioResponseInfo responseInfo) {
302         responseVoid(responseInfo);
303     }
304 
305     /**
306      * @param responseInfo Response info struct containing response type, serial no. and error
307      * @param sms Response to sms sent as defined by SendSmsResult in types.hal
308      */
sendSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms)309     public void sendSmsResponse(RadioResponseInfo responseInfo,
310                                 SendSmsResult sms) {
311         responseSms(responseInfo, sms);
312     }
313 
314     /**
315      * @param responseInfo Response info struct containing response type, serial no. and error
316      * @param sms Response to sms sent as defined by SendSmsResult in types.hal
317      */
sendSMSExpectMoreResponse(RadioResponseInfo responseInfo, SendSmsResult sms)318     public void sendSMSExpectMoreResponse(RadioResponseInfo responseInfo,
319                                           SendSmsResult sms) {
320         responseSms(responseInfo, sms);
321     }
322 
323     /**
324      * @param responseInfo Response info struct containing response type, serial no. and error
325      * @param setupDataCallResult Response to data call setup as defined by setupDataCallResult in
326      *                            types.hal
327      */
setupDataCallResponse(RadioResponseInfo responseInfo, SetupDataCallResult setupDataCallResult)328     public void setupDataCallResponse(RadioResponseInfo responseInfo,
329                                       SetupDataCallResult setupDataCallResult) {
330         responseSetupDataCall(responseInfo, setupDataCallResult);
331     }
332 
333     /**
334      * @param responseInfo Response info struct containing response type, serial no. and error
335      * @param iccIo ICC io operation response as defined by IccIoResult in types.hal
336      */
iccIOForAppResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult iccIo)337     public void iccIOForAppResponse(RadioResponseInfo responseInfo,
338                             android.hardware.radio.V1_0.IccIoResult iccIo) {
339         responseIccIo(responseInfo, iccIo);
340     }
341 
342     /**
343      * @param responseInfo Response info struct containing response type, serial no. and error
344      */
sendUssdResponse(RadioResponseInfo responseInfo)345     public void sendUssdResponse(RadioResponseInfo responseInfo) {
346         responseVoid(responseInfo);
347     }
348 
349     /**
350      * @param responseInfo Response info struct containing response type, serial no. and error
351      */
cancelPendingUssdResponse(RadioResponseInfo responseInfo)352     public void cancelPendingUssdResponse(RadioResponseInfo responseInfo) {
353         responseVoid(responseInfo);
354     }
355 
356     /**
357      * @param responseInfo Response info struct containing response type, serial no. and error
358      * @param n is "n" parameter from TS 27.007 7.7
359      * @param m is "m" parameter from TS 27.007 7.7
360      */
getClirResponse(RadioResponseInfo responseInfo, int n, int m)361     public void getClirResponse(RadioResponseInfo responseInfo, int n, int m) {
362         responseInts(responseInfo, n, m);
363     }
364 
365     /**
366      * @param responseInfo Response info struct containing response type, serial no. and error
367      */
setClirResponse(RadioResponseInfo responseInfo)368     public void setClirResponse(RadioResponseInfo responseInfo) {
369         responseVoid(responseInfo);
370     }
371 
372     /**
373      * @param responseInfo Response info struct containing response type, serial no. and error
374      * @param callForwardInfos points to a vector of CallForwardInfo, one for
375      *        each distinct registered phone number.
376      */
getCallForwardStatusResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CallForwardInfo> callForwardInfos)377     public void getCallForwardStatusResponse(RadioResponseInfo responseInfo,
378                                              ArrayList<android.hardware.radio.V1_0.CallForwardInfo>
379                                                      callForwardInfos) {
380         responseCallForwardInfo(responseInfo, callForwardInfos);
381     }
382 
383     /**
384      * @param responseInfo Response info struct containing response type, serial no. and error
385      */
setCallForwardResponse(RadioResponseInfo responseInfo)386     public void setCallForwardResponse(RadioResponseInfo responseInfo) {
387         responseVoid(responseInfo);
388     }
389 
390     /**
391      * @param responseInfo Response info struct containing response type, serial no. and error
392      * @param enable If current call waiting state is disabled, enable = false else true
393      * @param serviceClass If enable, then callWaitingResp[1]
394      *        must follow, with the TS 27.007 service class bit vector of services
395      *        for which call waiting is enabled.
396      *        For example, if callWaitingResp[0] is 1 and
397      *        callWaitingResp[1] is 3, then call waiting is enabled for data
398      *        and voice and disabled for everything else.
399      */
getCallWaitingResponse(RadioResponseInfo responseInfo, boolean enable, int serviceClass)400     public void getCallWaitingResponse(RadioResponseInfo responseInfo,
401                                    boolean enable,
402                                    int serviceClass) {
403         responseInts(responseInfo, enable ? 1 : 0, serviceClass);
404     }
405 
406     /**
407      * @param responseInfo Response info struct containing response type, serial no. and error
408      */
setCallWaitingResponse(RadioResponseInfo responseInfo)409     public void setCallWaitingResponse(RadioResponseInfo responseInfo) {
410         responseVoid(responseInfo);
411     }
412 
413     /**
414      * @param responseInfo Response info struct containing response type, serial no. and error
415      */
acknowledgeLastIncomingGsmSmsResponse(RadioResponseInfo responseInfo)416     public void acknowledgeLastIncomingGsmSmsResponse(RadioResponseInfo responseInfo) {
417         responseVoid(responseInfo);
418     }
419 
420     /**
421      * @param responseInfo Response info struct containing response type, serial no. and error
422      */
acceptCallResponse(RadioResponseInfo responseInfo)423     public void acceptCallResponse(RadioResponseInfo responseInfo) {
424         responseVoid(responseInfo);
425     }
426 
427     /**
428      * @param responseInfo Response info struct containing response type, serial no. and error
429      */
deactivateDataCallResponse(RadioResponseInfo responseInfo)430     public void deactivateDataCallResponse(RadioResponseInfo responseInfo) {
431         responseVoid(responseInfo);
432     }
433 
434     /**
435      *
436      * @param responseInfo Response info struct containing response type, serial no. and error
437      * @param response 0 is the TS 27.007 service class bit vector of
438      *        services for which the specified barring facility
439      *        is active. "0" means "disabled for all"
440      */
getFacilityLockForAppResponse(RadioResponseInfo responseInfo, int response)441     public void getFacilityLockForAppResponse(RadioResponseInfo responseInfo, int response) {
442         responseInts(responseInfo, response);
443     }
444 
445     /**
446      *
447      * @param responseInfo Response info struct containing response type, serial no. and error
448      * @param retry 0 is the number of retries remaining, or -1 if unknown
449      */
setFacilityLockForAppResponse(RadioResponseInfo responseInfo, int retry)450     public void setFacilityLockForAppResponse(RadioResponseInfo responseInfo, int retry) {
451         responseInts(responseInfo, retry);
452     }
453 
454     /**
455      * @param responseInfo Response info struct containing response type, serial no. and error
456      */
setBarringPasswordResponse(RadioResponseInfo responseInfo)457     public void setBarringPasswordResponse(RadioResponseInfo responseInfo) {
458         responseVoid(responseInfo);
459     }
460 
461     /**
462      *
463      * @param responseInfo Response info struct containing response type, serial no. and error
464      * @param selection false for automatic selection, true for manual selection
465      */
getNetworkSelectionModeResponse(RadioResponseInfo responseInfo, boolean selection)466     public void getNetworkSelectionModeResponse(RadioResponseInfo responseInfo, boolean selection) {
467         responseInts(responseInfo, selection ? 1 : 0);
468     }
469 
470     /**
471      * @param responseInfo Response info struct containing response type, serial no. and error
472      */
setNetworkSelectionModeAutomaticResponse(RadioResponseInfo responseInfo)473     public void setNetworkSelectionModeAutomaticResponse(RadioResponseInfo responseInfo) {
474         responseVoid(responseInfo);
475     }
476 
477     /**
478      * @param responseInfo Response info struct containing response type, serial no. and error
479      */
setNetworkSelectionModeManualResponse(RadioResponseInfo responseInfo)480     public void setNetworkSelectionModeManualResponse(RadioResponseInfo responseInfo) {
481         responseVoid(responseInfo);
482     }
483 
484     /**
485      *
486      * @param responseInfo Response info struct containing response type, serial no. and error
487      * @param networkInfos List of network operator information as OperatorInfos defined in
488      *                     types.hal
489      */
getAvailableNetworksResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.OperatorInfo> networkInfos)490     public void getAvailableNetworksResponse(RadioResponseInfo responseInfo,
491                                              ArrayList<android.hardware.radio.V1_0.OperatorInfo>
492                                                      networkInfos) {
493         responseOperatorInfos(responseInfo, networkInfos);
494     }
495 
496     /**
497      * @param responseInfo Response info struct containing response type, serial no. and error
498      */
startDtmfResponse(RadioResponseInfo responseInfo)499     public void startDtmfResponse(RadioResponseInfo responseInfo) {
500         responseVoid(responseInfo);
501     }
502 
503     /**
504      * @param responseInfo Response info struct containing response type, serial no. and error
505      */
stopDtmfResponse(RadioResponseInfo responseInfo)506     public void stopDtmfResponse(RadioResponseInfo responseInfo) {
507         responseVoid(responseInfo);
508     }
509 
510     /**
511      *
512      * @param responseInfo Response info struct containing response type, serial no. and error
513      * @param version string containing version string for log reporting
514      */
getBasebandVersionResponse(RadioResponseInfo responseInfo, String version)515     public void getBasebandVersionResponse(RadioResponseInfo responseInfo, String version) {
516         responseString(responseInfo, version);
517     }
518 
519     /**
520      * @param responseInfo Response info struct containing response type, serial no. and error
521      */
separateConnectionResponse(RadioResponseInfo responseInfo)522     public void separateConnectionResponse(RadioResponseInfo responseInfo) {
523         responseVoid(responseInfo);
524     }
525 
526     /**
527      * @param responseInfo Response info struct containing response type, serial no. and error
528      */
setMuteResponse(RadioResponseInfo responseInfo)529     public void setMuteResponse(RadioResponseInfo responseInfo) {
530         responseVoid(responseInfo);
531     }
532 
533     /**
534      *
535      * @param responseInfo Response info struct containing response type, serial no. and error
536      * @param enable true for "mute enabled" and false for "mute disabled"
537      */
getMuteResponse(RadioResponseInfo responseInfo, boolean enable)538     public void getMuteResponse(RadioResponseInfo responseInfo, boolean enable) {
539         responseInts(responseInfo, enable ? 1 : 0);
540     }
541 
542     /**
543      *
544      * @param responseInfo Response info struct containing response type, serial no. and error
545      * @param status indicates CLIP status
546      */
getClipResponse(RadioResponseInfo responseInfo, int status)547     public void getClipResponse(RadioResponseInfo responseInfo, int status) {
548         responseInts(responseInfo, status);
549     }
550 
551     /**
552      * @param responseInfo Response info struct containing response type, serial no. and error
553      * @param dataCallResultList Response to get data call list as defined by setupDataCallResult in
554      *                           types.hal
555      */
getDataCallListResponse(RadioResponseInfo responseInfo, ArrayList<SetupDataCallResult> dataCallResultList)556     public void getDataCallListResponse(RadioResponseInfo responseInfo,
557                                         ArrayList<SetupDataCallResult> dataCallResultList) {
558         responseDataCallList(responseInfo, dataCallResultList);
559     }
560 
sendOemRilRequestRawResponse(RadioResponseInfo responseInfo, ArrayList<Byte> var2)561     public void sendOemRilRequestRawResponse(RadioResponseInfo responseInfo,
562                                              ArrayList<Byte> var2) {}
563 
564     /**
565      * @param responseInfo Response info struct containing response type, serial no. and error
566      */
setSuppServiceNotificationsResponse(RadioResponseInfo responseInfo)567     public void setSuppServiceNotificationsResponse(RadioResponseInfo responseInfo) {
568         responseVoid(responseInfo);
569     }
570 
571     /**
572      * @param responseInfo Response info struct containing response type, serial no. and error
573      * @param index record index where the message is stored
574      */
writeSmsToSimResponse(RadioResponseInfo responseInfo, int index)575     public void writeSmsToSimResponse(RadioResponseInfo responseInfo, int index) {
576         responseInts(responseInfo, index);
577     }
578 
579     /**
580      * @param responseInfo Response info struct containing response type, serial no. and error
581      */
deleteSmsOnSimResponse(RadioResponseInfo responseInfo)582     public void deleteSmsOnSimResponse(RadioResponseInfo responseInfo) {
583         responseVoid(responseInfo);
584     }
585 
586     /**
587      * @param responseInfo Response info struct containing response type, serial no. and error
588      */
setBandModeResponse(RadioResponseInfo responseInfo)589     public void setBandModeResponse(RadioResponseInfo responseInfo) {
590         responseVoid(responseInfo);
591     }
592 
593     /**
594      *
595      * @param responseInfo Response info struct containing response type, serial no. and error
596      * @param bandModes List of RadioBandMode listing supported modes
597      */
getAvailableBandModesResponse(RadioResponseInfo responseInfo, ArrayList<Integer> bandModes)598     public void getAvailableBandModesResponse(RadioResponseInfo responseInfo,
599                                               ArrayList<Integer> bandModes) {
600         responseIntArrayList(responseInfo, bandModes);
601     }
602 
603     /**
604      *
605      * @param responseInfo Response info struct containing response type, serial no. and error
606      * @param commandResponse SAT/USAT response in hexadecimal format
607      *        string starting with first byte of response
608      */
sendEnvelopeResponse(RadioResponseInfo responseInfo, String commandResponse)609     public void sendEnvelopeResponse(RadioResponseInfo responseInfo, String commandResponse) {
610         responseString(responseInfo, commandResponse);
611     }
612 
613     /**
614      * @param responseInfo Response info struct containing response type, serial no. and error
615      */
sendTerminalResponseToSimResponse(RadioResponseInfo responseInfo)616     public void sendTerminalResponseToSimResponse(RadioResponseInfo responseInfo) {
617         responseVoid(responseInfo);
618     }
619 
620     /**
621      * @param responseInfo Response info struct containing response type, serial no. and error
622      */
handleStkCallSetupRequestFromSimResponse(RadioResponseInfo responseInfo)623     public void handleStkCallSetupRequestFromSimResponse(RadioResponseInfo responseInfo) {
624         responseVoid(responseInfo);
625     }
626 
627     /**
628      * @param responseInfo Response info struct containing response type, serial no. and error
629      */
explicitCallTransferResponse(RadioResponseInfo responseInfo)630     public void explicitCallTransferResponse(RadioResponseInfo responseInfo) {
631         responseVoid(responseInfo);
632     }
633 
634     /**
635      * @param responseInfo Response info struct containing response type, serial no. and error
636      */
setPreferredNetworkTypeResponse(RadioResponseInfo responseInfo)637     public void setPreferredNetworkTypeResponse(RadioResponseInfo responseInfo) {
638         responseVoid(responseInfo);
639     }
640 
641     /**
642      *
643      * @param responseInfo Response info struct containing response type, serial no. and error
644      * @param nwType RadioPreferredNetworkType defined in types.hal
645      */
getPreferredNetworkTypeResponse(RadioResponseInfo responseInfo, int nwType)646     public void getPreferredNetworkTypeResponse(RadioResponseInfo responseInfo, int nwType) {
647         mRil.mPreferredNetworkType = nwType;
648         responseInts(responseInfo, nwType);
649     }
650 
651     /**
652      *
653      * @param responseInfo Response info struct containing response type, serial no. and error
654      * @param cells Vector of neighboring radio cell information
655      */
getNeighboringCidsResponse(RadioResponseInfo responseInfo, ArrayList<NeighboringCell> cells)656     public void getNeighboringCidsResponse(RadioResponseInfo responseInfo,
657                                            ArrayList<NeighboringCell> cells) {
658         responseCellList(responseInfo, cells);
659     }
660 
661     /**
662      * @param responseInfo Response info struct containing response type, serial no. and error
663      */
setLocationUpdatesResponse(RadioResponseInfo responseInfo)664     public void setLocationUpdatesResponse(RadioResponseInfo responseInfo) {
665         responseVoid(responseInfo);
666     }
667 
668     /**
669      * @param responseInfo Response info struct containing response type, serial no. and error
670      */
setCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo)671     public void setCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo) {
672         responseVoid(responseInfo);
673     }
674 
675     /**
676      * @param responseInfo Response info struct containing response type, serial no. and error
677      */
setCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo)678     public void setCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo) {
679         responseVoid(responseInfo);
680     }
681 
682     /**
683      *
684      * @param responseInfo Response info struct containing response type, serial no. and error
685      * @param type CdmaRoamingType defined in types.hal
686      */
getCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo, int type)687     public void getCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo, int type) {
688         responseInts(responseInfo, type);
689     }
690 
691     /**
692      * @param responseInfo Response info struct containing response type, serial no. and error
693      */
setTTYModeResponse(RadioResponseInfo responseInfo)694     public void setTTYModeResponse(RadioResponseInfo responseInfo) {
695         responseVoid(responseInfo);
696     }
697 
698     /**
699      *
700      * @param responseInfo Response info struct containing response type, serial no. and error
701      * @param mode TTY mode
702      */
getTTYModeResponse(RadioResponseInfo responseInfo, int mode)703     public void getTTYModeResponse(RadioResponseInfo responseInfo, int mode) {
704         responseInts(responseInfo, mode);
705     }
706 
707     /**
708      * @param responseInfo Response info struct containing response type, serial no. and error
709      */
setPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo)710     public void setPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo) {
711         responseVoid(responseInfo);
712     }
713 
714     /**
715      *
716      * @param responseInfo Response info struct containing response type, serial no. and error
717      * @param enable false for Standard Privacy Mode (Public Long Code Mask)
718      *        true for Enhanced Privacy Mode (Private Long Code Mask)
719      */
getPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo, boolean enable)720     public void getPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo,
721                                                  boolean enable) {
722         responseInts(responseInfo, enable ? 1 : 0);
723     }
724 
725     /**
726      * @param responseInfo Response info struct containing response type, serial no. and error
727      */
sendCDMAFeatureCodeResponse(RadioResponseInfo responseInfo)728     public void sendCDMAFeatureCodeResponse(RadioResponseInfo responseInfo) {
729         responseVoid(responseInfo);
730     }
731 
732     /**
733      * @param responseInfo Response info struct containing response type, serial no. and error
734      */
sendBurstDtmfResponse(RadioResponseInfo responseInfo)735     public void sendBurstDtmfResponse(RadioResponseInfo responseInfo) {
736         responseVoid(responseInfo);
737     }
738 
739     /**
740      *
741      * @param responseInfo Response info struct containing response type, serial no. and error
742      * @param sms Sms result struct as defined by SendSmsResult in types.hal
743      */
sendCdmaSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms)744     public void sendCdmaSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms) {
745         responseSms(responseInfo, sms);
746     }
747 
748     /**
749      * @param responseInfo Response info struct containing response type, serial no. and error
750      */
acknowledgeLastIncomingCdmaSmsResponse(RadioResponseInfo responseInfo)751     public void acknowledgeLastIncomingCdmaSmsResponse(RadioResponseInfo responseInfo) {
752         responseVoid(responseInfo);
753     }
754 
755     /**
756      *
757      * @param responseInfo Response info struct containing response type, serial no. and error
758      * @param configs Vector of GSM/WCDMA Cell broadcast configs
759      */
getGsmBroadcastConfigResponse(RadioResponseInfo responseInfo, ArrayList<GsmBroadcastSmsConfigInfo> configs)760     public void getGsmBroadcastConfigResponse(RadioResponseInfo responseInfo,
761                                               ArrayList<GsmBroadcastSmsConfigInfo> configs) {
762         responseGmsBroadcastConfig(responseInfo, configs);
763     }
764 
765     /**
766      * @param responseInfo Response info struct containing response type, serial no. and error
767      */
setGsmBroadcastConfigResponse(RadioResponseInfo responseInfo)768     public void setGsmBroadcastConfigResponse(RadioResponseInfo responseInfo) {
769         responseVoid(responseInfo);
770     }
771 
772     /**
773      * @param responseInfo Response info struct containing response type, serial no. and error
774      */
setGsmBroadcastActivationResponse(RadioResponseInfo responseInfo)775     public void setGsmBroadcastActivationResponse(RadioResponseInfo responseInfo) {
776         responseVoid(responseInfo);
777     }
778 
779     /**
780      *
781      * @param responseInfo Response info struct containing response type, serial no. and error
782      * @param configs Vector of CDMA Broadcast SMS configs.
783      */
getCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo, ArrayList<CdmaBroadcastSmsConfigInfo> configs)784     public void getCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo,
785                                                ArrayList<CdmaBroadcastSmsConfigInfo> configs) {
786         responseCdmaBroadcastConfig(responseInfo, configs);
787     }
788 
789     /**
790      * @param responseInfo Response info struct containing response type, serial no. and error
791      */
setCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo)792     public void setCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo) {
793         responseVoid(responseInfo);
794     }
795 
796     /**
797      * @param responseInfo Response info struct containing response type, serial no. and error
798      */
setCdmaBroadcastActivationResponse(RadioResponseInfo responseInfo)799     public void setCdmaBroadcastActivationResponse(RadioResponseInfo responseInfo) {
800         responseVoid(responseInfo);
801     }
802 
803     /**
804      *
805      * @param responseInfo Response info struct containing response type, serial no. and error
806      * @param mdn MDN if CDMA subscription is available
807      * @param hSid is a comma separated list of H_SID (Home SID) if
808      *        CDMA subscription is available, in decimal format
809      * @param hNid is a comma separated list of H_NID (Home NID) if
810      *        CDMA subscription is available, in decimal format
811      * @param min MIN (10 digits, MIN2+MIN1) if CDMA subscription is available
812      * @param prl PRL version if CDMA subscription is available
813      */
getCDMASubscriptionResponse(RadioResponseInfo responseInfo, String mdn, String hSid, String hNid, String min, String prl)814     public void getCDMASubscriptionResponse(RadioResponseInfo responseInfo, String mdn,
815                                             String hSid, String hNid, String min, String prl) {
816         responseStrings(responseInfo, mdn, hSid, hNid, min, prl);
817     }
818 
819     /**
820      *
821      * @param responseInfo Response info struct containing response type, serial no. and error
822      * @param index record index where the cmda sms message is stored
823      */
writeSmsToRuimResponse(RadioResponseInfo responseInfo, int index)824     public void writeSmsToRuimResponse(RadioResponseInfo responseInfo, int index) {
825         responseInts(responseInfo, index);
826     }
827 
828     /**
829      * @param responseInfo Response info struct containing response type, serial no. and error
830      */
deleteSmsOnRuimResponse(RadioResponseInfo responseInfo)831     public void deleteSmsOnRuimResponse(RadioResponseInfo responseInfo) {
832         responseVoid(responseInfo);
833     }
834 
835     /**
836      * @param responseInfo Response info struct containing response type, serial no. and error
837      * @param imei IMEI if GSM subscription is available
838      * @param imeisv IMEISV if GSM subscription is available
839      * @param esn ESN if CDMA subscription is available
840      * @param meid MEID if CDMA subscription is available
841      */
getDeviceIdentityResponse(RadioResponseInfo responseInfo, String imei, String imeisv, String esn, String meid)842     public void getDeviceIdentityResponse(RadioResponseInfo responseInfo, String imei,
843                                           String imeisv, String esn, String meid) {
844         responseStrings(responseInfo, imei, imeisv, esn, meid);
845     }
846 
847     /**
848      * @param responseInfo Response info struct containing response type, serial no. and error
849      */
exitEmergencyCallbackModeResponse(RadioResponseInfo responseInfo)850     public void exitEmergencyCallbackModeResponse(RadioResponseInfo responseInfo) {
851         responseVoid(responseInfo);
852     }
853 
854     /**
855      * @param responseInfo Response info struct containing response type, serial no. and error
856      * @param smsc Short Message Service Center address on the device
857      */
getSmscAddressResponse(RadioResponseInfo responseInfo, String smsc)858     public void getSmscAddressResponse(RadioResponseInfo responseInfo, String smsc) {
859         responseString(responseInfo, smsc);
860     }
861 
862     /**
863      * @param responseInfo Response info struct containing response type, serial no. and error
864      */
setSmscAddressResponse(RadioResponseInfo responseInfo)865     public void setSmscAddressResponse(RadioResponseInfo responseInfo) {
866         responseVoid(responseInfo);
867     }
868 
869     /**
870      * @param responseInfo Response info struct containing response type, serial no. and error
871      */
reportSmsMemoryStatusResponse(RadioResponseInfo responseInfo)872     public void reportSmsMemoryStatusResponse(RadioResponseInfo responseInfo) {
873         responseVoid(responseInfo);
874     }
875 
876     /**
877      * @param responseInfo Response info struct containing response type, serial no. and error
878      */
reportStkServiceIsRunningResponse(RadioResponseInfo responseInfo)879     public void reportStkServiceIsRunningResponse(RadioResponseInfo responseInfo) {
880         responseVoid(responseInfo);
881     }
882 
883     /**
884      *
885      * @param responseInfo Response info struct containing response type, serial no. and error
886      * @param source CDMA subscription source
887      */
getCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo, int source)888     public void getCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo, int source) {
889         responseInts(responseInfo, source);
890     }
891 
892     /**
893      *
894      * @param responseInfo Response info struct containing response type, serial no. and error
895      * @param response response string of the challenge/response algo for ISIM auth in base64 format
896      */
requestIsimAuthenticationResponse(RadioResponseInfo responseInfo, String response)897     public void requestIsimAuthenticationResponse(RadioResponseInfo responseInfo, String response) {
898         responseString(responseInfo, response);
899     }
900 
901     /**
902      * @param responseInfo Response info struct containing response type, serial no. and error
903      */
acknowledgeIncomingGsmSmsWithPduResponse(RadioResponseInfo responseInfo)904     public void acknowledgeIncomingGsmSmsWithPduResponse(RadioResponseInfo responseInfo) {
905         responseVoid(responseInfo);
906     }
907 
908     /**
909      *
910      * @param responseInfo Response info struct containing response type, serial no. and error
911      * @param iccIo IccIoResult as defined in types.hal corresponding to ICC IO response
912      */
sendEnvelopeWithStatusResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult iccIo)913     public void sendEnvelopeWithStatusResponse(RadioResponseInfo responseInfo,
914                                                android.hardware.radio.V1_0.IccIoResult iccIo) {
915         responseIccIo(responseInfo, iccIo);
916     }
917 
918     /**
919      *
920      * @param responseInfo Response info struct containing response type, serial no. and error
921      * @param rat Current voice RAT
922      */
getVoiceRadioTechnologyResponse(RadioResponseInfo responseInfo, int rat)923     public void getVoiceRadioTechnologyResponse(RadioResponseInfo responseInfo, int rat) {
924         responseInts(responseInfo, rat);
925     }
926 
getCellInfoListResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo)927     public void getCellInfoListResponse(RadioResponseInfo responseInfo,
928                                         ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo) {
929         responseCellInfoList(responseInfo, cellInfo);
930     }
931 
932     /**
933      * @param responseInfo Response info struct containing response type, serial no. and error
934      */
setCellInfoListRateResponse(RadioResponseInfo responseInfo)935     public void setCellInfoListRateResponse(RadioResponseInfo responseInfo) {
936         responseVoid(responseInfo);
937     }
938 
939     /**
940      * @param responseInfo Response info struct containing response type, serial no. and error
941      */
setInitialAttachApnResponse(RadioResponseInfo responseInfo)942     public void setInitialAttachApnResponse(RadioResponseInfo responseInfo) {
943         responseVoid(responseInfo);
944     }
945 
946     /**
947      *
948      * @param responseInfo Response info struct containing response type, serial no. and error
949      * @param isRegistered false = not registered, true = registered
950      * @param ratFamily RadioTechnologyFamily as defined in types.hal. This value is valid only if
951      *        isRegistered is true.
952      */
getImsRegistrationStateResponse(RadioResponseInfo responseInfo, boolean isRegistered, int ratFamily)953     public void getImsRegistrationStateResponse(RadioResponseInfo responseInfo,
954                                                 boolean isRegistered, int ratFamily) {
955         responseInts(responseInfo, isRegistered ? 1 : 0, ratFamily);
956     }
957 
958     /**
959      *
960      * @param responseInfo Response info struct containing response type, serial no. and error
961      * @param sms Response to sms sent as defined by SendSmsResult in types.hal
962      */
sendImsSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms)963     public void sendImsSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms) {
964         responseSms(responseInfo, sms);
965     }
966 
967     /**
968      *
969      * @param responseInfo Response info struct containing response type, serial no. and error
970      * @param result IccIoResult as defined in types.hal
971      */
iccTransmitApduBasicChannelResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)972     public void iccTransmitApduBasicChannelResponse(RadioResponseInfo responseInfo,
973                                                     android.hardware.radio.V1_0.IccIoResult
974                                                             result) {
975         responseIccIo(responseInfo, result);
976     }
977 
978     /**
979      *
980      * @param responseInfo Response info struct containing response type, serial no. and error
981      * @param channelId session id of the logical channel.
982      * @param selectResponse Contains the select response for the open channel command with one
983      *        byte per integer
984      */
iccOpenLogicalChannelResponse(RadioResponseInfo responseInfo, int channelId, ArrayList<Byte> selectResponse)985     public void iccOpenLogicalChannelResponse(RadioResponseInfo responseInfo, int channelId,
986                                               ArrayList<Byte> selectResponse) {
987         ArrayList<Integer> arr = new ArrayList<>();
988         arr.add(channelId);
989         for (int i = 0; i < selectResponse.size(); i++) {
990             arr.add((int) selectResponse.get(i));
991         }
992         responseIntArrayList(responseInfo, arr);
993     }
994 
995     /**
996      * @param responseInfo Response info struct containing response type, serial no. and error
997      */
iccCloseLogicalChannelResponse(RadioResponseInfo responseInfo)998     public void iccCloseLogicalChannelResponse(RadioResponseInfo responseInfo) {
999         responseVoid(responseInfo);
1000     }
1001 
1002     /**
1003      *
1004      * @param responseInfo Response info struct containing response type, serial no. and error
1005      * @param result IccIoResult as defined in types.hal
1006      */
iccTransmitApduLogicalChannelResponse( RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1007     public void iccTransmitApduLogicalChannelResponse(
1008             RadioResponseInfo responseInfo,
1009             android.hardware.radio.V1_0.IccIoResult result) {
1010         responseIccIo(responseInfo, result);
1011     }
1012 
1013     /**
1014      *
1015      * @param responseInfo Response info struct containing response type, serial no. and error
1016      * @param result string containing the contents of the NV item
1017      */
nvReadItemResponse(RadioResponseInfo responseInfo, String result)1018     public void nvReadItemResponse(RadioResponseInfo responseInfo, String result) {
1019         responseString(responseInfo, result);
1020     }
1021 
1022     /**
1023      * @param responseInfo Response info struct containing response type, serial no. and error
1024      */
nvWriteItemResponse(RadioResponseInfo responseInfo)1025     public void nvWriteItemResponse(RadioResponseInfo responseInfo) {
1026         responseVoid(responseInfo);
1027     }
1028 
1029     /**
1030      * @param responseInfo Response info struct containing response type, serial no. and error
1031      */
nvWriteCdmaPrlResponse(RadioResponseInfo responseInfo)1032     public void nvWriteCdmaPrlResponse(RadioResponseInfo responseInfo) {
1033         responseVoid(responseInfo);
1034     }
1035 
1036     /**
1037      * @param responseInfo Response info struct containing response type, serial no. and error
1038      */
nvResetConfigResponse(RadioResponseInfo responseInfo)1039     public void nvResetConfigResponse(RadioResponseInfo responseInfo) {
1040         responseVoid(responseInfo);
1041     }
1042 
1043     /**
1044      * @param responseInfo Response info struct containing response type, serial no. and error
1045      */
setUiccSubscriptionResponse(RadioResponseInfo responseInfo)1046     public void setUiccSubscriptionResponse(RadioResponseInfo responseInfo) {
1047         responseVoid(responseInfo);
1048     }
1049 
1050     /**
1051      * @param responseInfo Response info struct containing response type, serial no. and error
1052      */
setDataAllowedResponse(RadioResponseInfo responseInfo)1053     public void setDataAllowedResponse(RadioResponseInfo responseInfo) {
1054         responseVoid(responseInfo);
1055     }
1056 
getHardwareConfigResponse( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.HardwareConfig> config)1057     public void getHardwareConfigResponse(
1058             RadioResponseInfo responseInfo,
1059             ArrayList<android.hardware.radio.V1_0.HardwareConfig> config) {
1060         responseHardwareConfig(responseInfo, config);
1061     }
1062 
1063     /**
1064      *
1065      * @param responseInfo Response info struct containing response type, serial no. and error
1066      * @param result IccIoResult as defined in types.hal
1067      */
requestIccSimAuthenticationResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1068     public void requestIccSimAuthenticationResponse(RadioResponseInfo responseInfo,
1069                                                     android.hardware.radio.V1_0.IccIoResult
1070                                                             result) {
1071         responseICC_IOBase64(responseInfo, result);
1072     }
1073 
1074     /**
1075      * @param responseInfo Response info struct containing response type, serial no. and error
1076      */
setDataProfileResponse(RadioResponseInfo responseInfo)1077     public void setDataProfileResponse(RadioResponseInfo responseInfo) {
1078         responseVoid(responseInfo);
1079     }
1080 
1081     /**
1082      * @param responseInfo Response info struct containing response type, serial no. and error
1083      */
requestShutdownResponse(RadioResponseInfo responseInfo)1084     public void requestShutdownResponse(RadioResponseInfo responseInfo) {
1085         responseVoid(responseInfo);
1086     }
1087 
getRadioCapabilityResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.RadioCapability rc)1088     public void getRadioCapabilityResponse(RadioResponseInfo responseInfo,
1089                                            android.hardware.radio.V1_0.RadioCapability rc) {
1090         RILRequest rr = mRil.processResponse(responseInfo);
1091 
1092         if (rr != null) {
1093             RadioCapability ret = RIL.convertHalRadioCapability(rc, mRil);
1094             if (responseInfo.error == RadioError.REQUEST_NOT_SUPPORTED
1095                     || responseInfo.error == RadioError.GENERIC_FAILURE) {
1096                 // we should construct the RAF bitmask the radio
1097                 // supports based on preferred network bitmasks
1098                 ret = mRil.makeStaticRadioCapability();
1099                 responseInfo.error = RadioError.NONE;
1100             }
1101             if (responseInfo.error == RadioError.NONE) {
1102                 sendMessageResponse(rr.mResult, ret);
1103             }
1104             mRil.processResponseDone(rr, responseInfo, ret);
1105         }
1106     }
1107 
setRadioCapabilityResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.RadioCapability rc)1108     public void setRadioCapabilityResponse(RadioResponseInfo responseInfo,
1109                                            android.hardware.radio.V1_0.RadioCapability rc) {
1110         responseRadioCapability(responseInfo, rc);
1111     }
1112 
1113     /**
1114      *
1115      * @param responseInfo Response info struct containing response type, serial no. and error
1116      * @param statusInfo LceStatusInfo indicating LCE status
1117      */
startLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo)1118     public void startLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo) {
1119         responseLceStatus(responseInfo, statusInfo);
1120     }
1121 
1122     /**
1123      *
1124      * @param responseInfo Response info struct containing response type, serial no. and error
1125      * @param statusInfo LceStatusInfo indicating LCE status
1126      */
stopLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo)1127     public void stopLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo) {
1128         responseLceStatus(responseInfo, statusInfo);
1129     }
1130 
pullLceDataResponse(RadioResponseInfo responseInfo, LceDataInfo lceInfo)1131     public void pullLceDataResponse(RadioResponseInfo responseInfo, LceDataInfo lceInfo) {
1132         responseLceData(responseInfo, lceInfo);
1133     }
1134 
1135     /**
1136      *
1137      * @param responseInfo Response info struct containing response type, serial no. and error
1138      * @param activityInfo modem activity information
1139      */
getModemActivityInfoResponse(RadioResponseInfo responseInfo, ActivityStatsInfo activityInfo)1140     public void getModemActivityInfoResponse(RadioResponseInfo responseInfo,
1141                                              ActivityStatsInfo activityInfo) {
1142         responseActivityData(responseInfo, activityInfo);
1143     }
1144 
1145     /**
1146      *
1147      * @param responseInfo Response info struct containing response type, serial no. and error
1148      * @param numAllowed number of allowed carriers which have been set correctly.
1149      *        On success, it must match the length of list Carriers->allowedCarriers.
1150      *        if Length of allowed carriers list is 0, numAllowed = 0.
1151      */
setAllowedCarriersResponse(RadioResponseInfo responseInfo, int numAllowed)1152     public void setAllowedCarriersResponse(RadioResponseInfo responseInfo, int numAllowed) {
1153         responseInts(responseInfo, numAllowed);
1154     }
1155 
1156     /**
1157      *
1158      * @param responseInfo Response info struct containing response type, serial no. and error
1159      * @param allAllowed true only when all carriers are allowed. Ignore "carriers" struct.
1160      *                   If false, consider "carriers" struct
1161      * @param carriers Carrier restriction information.
1162      */
getAllowedCarriersResponse(RadioResponseInfo responseInfo, boolean allAllowed, CarrierRestrictions carriers)1163     public void getAllowedCarriersResponse(RadioResponseInfo responseInfo, boolean allAllowed,
1164                                            CarrierRestrictions carriers) {
1165         responseCarrierIdentifiers(responseInfo, allAllowed, carriers);
1166     }
1167 
1168     /**
1169      * @param responseInfo Response info struct containing response type, serial no. and error
1170      */
sendDeviceStateResponse(RadioResponseInfo responseInfo)1171     public void sendDeviceStateResponse(RadioResponseInfo responseInfo) {
1172         responseVoid(responseInfo);
1173     }
1174 
1175     /**
1176      * @param responseInfo Response info struct containing response type, serial no. and error
1177      */
setIndicationFilterResponse(RadioResponseInfo responseInfo)1178     public void setIndicationFilterResponse(RadioResponseInfo responseInfo) {
1179         responseVoid(responseInfo);
1180     }
1181 
1182     /**
1183      * @param responseInfo Response info struct containing response type, serial no. and error
1184      */
setSimCardPowerResponse(RadioResponseInfo responseInfo)1185     public void setSimCardPowerResponse(RadioResponseInfo responseInfo) {
1186         responseVoid(responseInfo);
1187     }
1188 
responseIccCardStatus(RadioResponseInfo responseInfo, CardStatus cardStatus)1189     private void responseIccCardStatus(RadioResponseInfo responseInfo, CardStatus cardStatus) {
1190         RILRequest rr = mRil.processResponse(responseInfo);
1191 
1192         if (rr != null) {
1193             IccCardStatus iccCardStatus = new IccCardStatus();
1194             iccCardStatus.setCardState(cardStatus.cardState);
1195             iccCardStatus.setUniversalPinState(cardStatus.universalPinState);
1196             iccCardStatus.mGsmUmtsSubscriptionAppIndex = cardStatus.gsmUmtsSubscriptionAppIndex;
1197             iccCardStatus.mCdmaSubscriptionAppIndex = cardStatus.cdmaSubscriptionAppIndex;
1198             iccCardStatus.mImsSubscriptionAppIndex = cardStatus.imsSubscriptionAppIndex;
1199             int numApplications = cardStatus.applications.size();
1200 
1201             // limit to maximum allowed applications
1202             if (numApplications
1203                     > com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS) {
1204                 numApplications =
1205                         com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS;
1206             }
1207             iccCardStatus.mApplications = new IccCardApplicationStatus[numApplications];
1208             for (int i = 0; i < numApplications; i++) {
1209                 AppStatus rilAppStatus = cardStatus.applications.get(i);
1210                 IccCardApplicationStatus appStatus = new IccCardApplicationStatus();
1211                 appStatus.app_type       = appStatus.AppTypeFromRILInt(rilAppStatus.appType);
1212                 appStatus.app_state      = appStatus.AppStateFromRILInt(rilAppStatus.appState);
1213                 appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(
1214                         rilAppStatus.persoSubstate);
1215                 appStatus.aid            = rilAppStatus.aidPtr;
1216                 appStatus.app_label      = rilAppStatus.appLabelPtr;
1217                 appStatus.pin1_replaced  = rilAppStatus.pin1Replaced;
1218                 appStatus.pin1           = appStatus.PinStateFromRILInt(rilAppStatus.pin1);
1219                 appStatus.pin2           = appStatus.PinStateFromRILInt(rilAppStatus.pin2);
1220                 iccCardStatus.mApplications[i] = appStatus;
1221             }
1222             mRil.riljLog("responseIccCardStatus: from HIDL: " + iccCardStatus);
1223             if (responseInfo.error == RadioError.NONE) {
1224                 sendMessageResponse(rr.mResult, iccCardStatus);
1225             }
1226             mRil.processResponseDone(rr, responseInfo, iccCardStatus);
1227         }
1228     }
1229 
responseInts(RadioResponseInfo responseInfo, int ...var)1230     private void responseInts(RadioResponseInfo responseInfo, int ...var) {
1231         final ArrayList<Integer> ints = new ArrayList<>();
1232         for (int i = 0; i < var.length; i++) {
1233             ints.add(var[i]);
1234         }
1235         responseIntArrayList(responseInfo, ints);
1236     }
1237 
responseIntArrayList(RadioResponseInfo responseInfo, ArrayList<Integer> var)1238     private void responseIntArrayList(RadioResponseInfo responseInfo, ArrayList<Integer> var) {
1239         RILRequest rr = mRil.processResponse(responseInfo);
1240 
1241         if (rr != null) {
1242             int[] ret = new int[var.size()];
1243             for (int i = 0; i < var.size(); i++) {
1244                 ret[i] = var.get(i);
1245             }
1246             if (responseInfo.error == RadioError.NONE) {
1247                 sendMessageResponse(rr.mResult, ret);
1248             }
1249             mRil.processResponseDone(rr, responseInfo, ret);
1250         }
1251     }
1252 
responseCurrentCalls(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.Call> calls)1253     private void responseCurrentCalls(RadioResponseInfo responseInfo,
1254                                       ArrayList<android.hardware.radio.V1_0.Call> calls) {
1255         RILRequest rr = mRil.processResponse(responseInfo);
1256 
1257         if (rr != null) {
1258             int num = calls.size();
1259             ArrayList<DriverCall> dcCalls = new ArrayList<DriverCall>(num);
1260             DriverCall dc;
1261 
1262             for (int i = 0; i < num; i++) {
1263                 dc = new DriverCall();
1264                 // TODO: change name of function stateFromCLCC() in DriverCall.java to name
1265                 // clarifying what is CLCC
1266                 dc.state = DriverCall.stateFromCLCC((int) (calls.get(i).state));
1267                 dc.index = calls.get(i).index;
1268                 dc.TOA = calls.get(i).toa;
1269                 dc.isMpty = calls.get(i).isMpty;
1270                 dc.isMT = calls.get(i).isMT;
1271                 dc.als = calls.get(i).als;
1272                 dc.isVoice = calls.get(i).isVoice;
1273                 dc.isVoicePrivacy = calls.get(i).isVoicePrivacy;
1274                 dc.number = calls.get(i).number;
1275                 dc.numberPresentation =
1276                         DriverCall.presentationFromCLIP(
1277                                 (int) (calls.get(i).numberPresentation));
1278                 dc.name = calls.get(i).name;
1279                 dc.namePresentation =
1280                         DriverCall.presentationFromCLIP((int) (calls.get(i).namePresentation));
1281                 if (calls.get(i).uusInfo.size() == 1) {
1282                     dc.uusInfo = new UUSInfo();
1283                     dc.uusInfo.setType(calls.get(i).uusInfo.get(0).uusType);
1284                     dc.uusInfo.setDcs(calls.get(i).uusInfo.get(0).uusDcs);
1285                     if (calls.get(i).uusInfo.get(0).uusData != null) {
1286                         byte[] userData = calls.get(i).uusInfo.get(0).uusData.getBytes();
1287                         dc.uusInfo.setUserData(userData);
1288                     } else {
1289                         mRil.riljLog("responseCurrentCalls: uusInfo data is null");
1290                     }
1291 
1292                     mRil.riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
1293                             dc.uusInfo.getType(), dc.uusInfo.getDcs(),
1294                             dc.uusInfo.getUserData().length));
1295                     mRil.riljLogv("Incoming UUS : data (hex): "
1296                             + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
1297                 } else {
1298                     mRil.riljLogv("Incoming UUS : NOT present!");
1299                 }
1300 
1301                 // Make sure there's a leading + on addresses with a TOA of 145
1302                 dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
1303 
1304                 dcCalls.add(dc);
1305 
1306                 if (dc.isVoicePrivacy) {
1307                     mRil.mVoicePrivacyOnRegistrants.notifyRegistrants();
1308                     mRil.riljLog("InCall VoicePrivacy is enabled");
1309                 } else {
1310                     mRil.mVoicePrivacyOffRegistrants.notifyRegistrants();
1311                     mRil.riljLog("InCall VoicePrivacy is disabled");
1312                 }
1313             }
1314 
1315             Collections.sort(dcCalls);
1316 
1317             if ((num == 0) && mRil.mTestingEmergencyCall.getAndSet(false)) {
1318                 if (mRil.mEmergencyCallbackModeRegistrant != null) {
1319                     mRil.riljLog("responseCurrentCalls: call ended, testing emergency call,"
1320                             + " notify ECM Registrants");
1321                     mRil.mEmergencyCallbackModeRegistrant.notifyRegistrant();
1322                 }
1323             }
1324 
1325             if (responseInfo.error == RadioError.NONE) {
1326                 sendMessageResponse(rr.mResult, dcCalls);
1327             }
1328             mRil.processResponseDone(rr, responseInfo, dcCalls);
1329         }
1330     }
1331 
responseVoid(RadioResponseInfo responseInfo)1332     private void responseVoid(RadioResponseInfo responseInfo) {
1333         RILRequest rr = mRil.processResponse(responseInfo);
1334 
1335         if (rr != null) {
1336             Object ret = null;
1337             if (responseInfo.error == RadioError.NONE) {
1338                 sendMessageResponse(rr.mResult, ret);
1339             }
1340             mRil.processResponseDone(rr, responseInfo, ret);
1341         }
1342     }
1343 
responseString(RadioResponseInfo responseInfo, String str)1344     private void responseString(RadioResponseInfo responseInfo, String str) {
1345         RILRequest rr = mRil.processResponse(responseInfo);
1346 
1347         if (rr != null) {
1348             if (responseInfo.error == RadioError.NONE) {
1349                 sendMessageResponse(rr.mResult, str);
1350             }
1351             mRil.processResponseDone(rr, responseInfo, str);
1352         }
1353     }
1354 
responseStrings(RadioResponseInfo responseInfo, String ...str)1355     private void responseStrings(RadioResponseInfo responseInfo, String ...str) {
1356         ArrayList<String> strings = new ArrayList<>();
1357         for (int i = 0; i < str.length; i++) {
1358             strings.add(str[i]);
1359         }
1360         responseStringArrayList(mRil, responseInfo, strings);
1361     }
1362 
responseStringArrayList(RIL ril, RadioResponseInfo responseInfo, ArrayList<String> strings)1363     static void responseStringArrayList(RIL ril, RadioResponseInfo responseInfo,
1364                                         ArrayList<String> strings) {
1365         RILRequest rr = ril.processResponse(responseInfo);
1366 
1367         if (rr != null) {
1368             String[] ret = new String[strings.size()];
1369             for (int i = 0; i < strings.size(); i++) {
1370                 ret[i] = strings.get(i);
1371             }
1372             if (responseInfo.error == RadioError.NONE) {
1373                 sendMessageResponse(rr.mResult, ret);
1374             }
1375             ril.processResponseDone(rr, responseInfo, ret);
1376         }
1377     }
1378 
responseLastCallFailCauseInfo(RadioResponseInfo responseInfo, LastCallFailCauseInfo fcInfo)1379     private void responseLastCallFailCauseInfo(RadioResponseInfo responseInfo,
1380                                                LastCallFailCauseInfo fcInfo) {
1381         RILRequest rr = mRil.processResponse(responseInfo);
1382 
1383         if (rr != null) {
1384             LastCallFailCause ret = new LastCallFailCause();
1385             ret.causeCode = fcInfo.causeCode;
1386             ret.vendorCause = fcInfo.vendorCause;
1387             if (responseInfo.error == RadioError.NONE) {
1388                 sendMessageResponse(rr.mResult, ret);
1389             }
1390             mRil.processResponseDone(rr, responseInfo, ret);
1391         }
1392     }
1393 
responseSignalStrength(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.SignalStrength sigStrength)1394     private void responseSignalStrength(RadioResponseInfo responseInfo,
1395                                         android.hardware.radio.V1_0.SignalStrength sigStrength) {
1396         RILRequest rr = mRil.processResponse(responseInfo);
1397 
1398         if (rr != null) {
1399             SignalStrength ret = RIL.convertHalSignalStrength(sigStrength);
1400             if (responseInfo.error == RadioError.NONE) {
1401                 sendMessageResponse(rr.mResult, ret);
1402             }
1403             mRil.processResponseDone(rr, responseInfo, ret);
1404         }
1405     }
1406 
responseSms(RadioResponseInfo responseInfo, SendSmsResult sms)1407     private void responseSms(RadioResponseInfo responseInfo, SendSmsResult sms) {
1408         RILRequest rr = mRil.processResponse(responseInfo);
1409 
1410         if (rr != null) {
1411             SmsResponse ret = new SmsResponse(sms.messageRef, sms.ackPDU, sms.errorCode);
1412             if (responseInfo.error == RadioError.NONE) {
1413                 sendMessageResponse(rr.mResult, ret);
1414             }
1415             mRil.processResponseDone(rr, responseInfo, ret);
1416         }
1417     }
1418 
responseSetupDataCall(RadioResponseInfo responseInfo, SetupDataCallResult setupDataCallResult)1419     private void responseSetupDataCall(RadioResponseInfo responseInfo,
1420                                        SetupDataCallResult setupDataCallResult) {
1421         RILRequest rr = mRil.processResponse(responseInfo);
1422 
1423         if (rr != null) {
1424             DataCallResponse ret = RIL.convertDataCallResult(setupDataCallResult);
1425             if (responseInfo.error == RadioError.NONE) {
1426                 sendMessageResponse(rr.mResult, ret);
1427             }
1428             mRil.processResponseDone(rr, responseInfo, ret);
1429         }
1430     }
1431 
responseIccIo(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1432     private void responseIccIo(RadioResponseInfo responseInfo,
1433                                android.hardware.radio.V1_0.IccIoResult result) {
1434         RILRequest rr = mRil.processResponse(responseInfo);
1435 
1436         if (rr != null) {
1437             IccIoResult ret = new IccIoResult(result.sw1, result.sw2, result.simResponse);
1438             if (responseInfo.error == RadioError.NONE) {
1439                 sendMessageResponse(rr.mResult, ret);
1440             }
1441             mRil.processResponseDone(rr, responseInfo, ret);
1442         }
1443     }
1444 
responseCallForwardInfo(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CallForwardInfo> callForwardInfos)1445     private void responseCallForwardInfo(RadioResponseInfo responseInfo,
1446                                          ArrayList<android.hardware.radio.V1_0.CallForwardInfo>
1447                                                  callForwardInfos) {
1448         RILRequest rr = mRil.processResponse(responseInfo);
1449         if (rr != null) {
1450             CallForwardInfo[] ret = new CallForwardInfo[callForwardInfos.size()];
1451             for (int i = 0; i < callForwardInfos.size(); i++) {
1452                 ret[i] = new CallForwardInfo();
1453                 ret[i].status = callForwardInfos.get(i).status;
1454                 ret[i].reason = callForwardInfos.get(i).reason;
1455                 ret[i].serviceClass = callForwardInfos.get(i).serviceClass;
1456                 ret[i].toa = callForwardInfos.get(i).toa;
1457                 ret[i].number = callForwardInfos.get(i).number;
1458                 ret[i].timeSeconds = callForwardInfos.get(i).timeSeconds;
1459             }
1460             if (responseInfo.error == RadioError.NONE) {
1461                 sendMessageResponse(rr.mResult, ret);
1462             }
1463             mRil.processResponseDone(rr, responseInfo, ret);
1464         }
1465     }
1466 
convertOpertatorInfoToString(int status)1467     private static String convertOpertatorInfoToString(int status) {
1468         if (status == android.hardware.radio.V1_0.OperatorStatus.UNKNOWN) {
1469             return "unknown";
1470         } else if (status == android.hardware.radio.V1_0.OperatorStatus.AVAILABLE) {
1471             return "available";
1472         } else if (status == android.hardware.radio.V1_0.OperatorStatus.CURRENT) {
1473             return "current";
1474         } else if (status == android.hardware.radio.V1_0.OperatorStatus.FORBIDDEN) {
1475             return "forbidden";
1476         } else {
1477             return "";
1478         }
1479     }
1480 
responseOperatorInfos(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.OperatorInfo> networkInfos)1481     private void responseOperatorInfos(RadioResponseInfo responseInfo,
1482                                        ArrayList<android.hardware.radio.V1_0.OperatorInfo>
1483                                                networkInfos) {
1484         RILRequest rr = mRil.processResponse(responseInfo);
1485 
1486         if (rr != null) {
1487             ArrayList<OperatorInfo> ret = new ArrayList<OperatorInfo>();
1488             for (int i = 0; i < networkInfos.size(); i++) {
1489                 ret.add(new OperatorInfo(networkInfos.get(i).alphaLong,
1490                         networkInfos.get(i).alphaShort, networkInfos.get(i).operatorNumeric,
1491                         convertOpertatorInfoToString(networkInfos.get(i).status)));
1492             }
1493             if (responseInfo.error == RadioError.NONE) {
1494                 sendMessageResponse(rr.mResult, ret);
1495             }
1496             mRil.processResponseDone(rr, responseInfo, ret);
1497         }
1498     }
1499 
responseDataCallList(RadioResponseInfo responseInfo, ArrayList<SetupDataCallResult> dataCallResultList)1500     private void responseDataCallList(RadioResponseInfo responseInfo,
1501                                       ArrayList<SetupDataCallResult> dataCallResultList) {
1502         RILRequest rr = mRil.processResponse(responseInfo);
1503 
1504         if (rr != null) {
1505             ArrayList<DataCallResponse> dcResponseList = new ArrayList<>();
1506             for (SetupDataCallResult dcResult : dataCallResultList) {
1507                 dcResponseList.add(RIL.convertDataCallResult(dcResult));
1508             }
1509             if (responseInfo.error == RadioError.NONE) {
1510                 sendMessageResponse(rr.mResult, dcResponseList);
1511             }
1512             mRil.processResponseDone(rr, responseInfo, dcResponseList);
1513         }
1514     }
1515 
responseCellList(RadioResponseInfo responseInfo, ArrayList<NeighboringCell> cells)1516     private void responseCellList(RadioResponseInfo responseInfo,
1517                                   ArrayList<NeighboringCell> cells) {
1518         RILRequest rr = mRil.processResponse(responseInfo);
1519 
1520         if (rr != null) {
1521             int rssi;
1522             String location;
1523             ArrayList<NeighboringCellInfo> ret = new ArrayList<NeighboringCellInfo>();
1524             NeighboringCellInfo cell;
1525 
1526             int[] subId = SubscriptionManager.getSubId(mRil.mPhoneId);
1527             int radioType =
1528                     ((TelephonyManager) mRil.mContext.getSystemService(
1529                             Context.TELEPHONY_SERVICE)).getDataNetworkType(subId[0]);
1530 
1531             if (radioType != TelephonyManager.NETWORK_TYPE_UNKNOWN) {
1532                 for (int i = 0; i < cells.size(); i++) {
1533                     rssi = cells.get(i).rssi;
1534                     location = cells.get(i).cid;
1535                     cell = new NeighboringCellInfo(rssi, location, radioType);
1536                     ret.add(cell);
1537                 }
1538             }
1539             if (responseInfo.error == RadioError.NONE) {
1540                 sendMessageResponse(rr.mResult, ret);
1541             }
1542             mRil.processResponseDone(rr, responseInfo, ret);
1543         }
1544     }
1545 
responseGmsBroadcastConfig(RadioResponseInfo responseInfo, ArrayList<GsmBroadcastSmsConfigInfo> configs)1546     private void responseGmsBroadcastConfig(RadioResponseInfo responseInfo,
1547                                             ArrayList<GsmBroadcastSmsConfigInfo> configs) {
1548         RILRequest rr = mRil.processResponse(responseInfo);
1549 
1550         if (rr != null) {
1551             ArrayList<SmsBroadcastConfigInfo> ret = new ArrayList<SmsBroadcastConfigInfo>();
1552             for (int i = 0; i < configs.size(); i++) {
1553                 ret.add(new SmsBroadcastConfigInfo(configs.get(i).fromServiceId,
1554                         configs.get(i).toServiceId, configs.get(i).fromCodeScheme,
1555                         configs.get(i).toCodeScheme, configs.get(i).selected));
1556             }
1557             if (responseInfo.error == RadioError.NONE) {
1558                 sendMessageResponse(rr.mResult, ret);
1559             }
1560             mRil.processResponseDone(rr, responseInfo, ret);
1561         }
1562     }
1563 
responseCdmaBroadcastConfig(RadioResponseInfo responseInfo, ArrayList<CdmaBroadcastSmsConfigInfo> configs)1564     private void responseCdmaBroadcastConfig(RadioResponseInfo responseInfo,
1565                                             ArrayList<CdmaBroadcastSmsConfigInfo> configs) {
1566         RILRequest rr = mRil.processResponse(responseInfo);
1567 
1568         if (rr != null) {
1569             int[] ret = null;
1570 
1571             int numServiceCategories = configs.size();
1572 
1573             if (numServiceCategories == 0) {
1574                 // TODO: The logic of providing default values should
1575                 // not be done by this transport layer. And needs to
1576                 // be done by the vendor ril or application logic.
1577                 int numInts;
1578                 numInts = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES
1579                         * CDMA_BSI_NO_OF_INTS_STRUCT + 1;
1580                 ret = new int[numInts];
1581 
1582                 // Faking a default record for all possible records.
1583                 ret[0] = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES;
1584 
1585                 // Loop over CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES set 'english' as
1586                 // default language and selection status to false for all.
1587                 for (int i = 1; i < numInts; i += CDMA_BSI_NO_OF_INTS_STRUCT) {
1588                     ret[i + 0] = i / CDMA_BSI_NO_OF_INTS_STRUCT;
1589                     ret[i + 1] = 1;
1590                     ret[i + 2] = 0;
1591                 }
1592             } else {
1593                 int numInts;
1594                 numInts = (numServiceCategories * CDMA_BSI_NO_OF_INTS_STRUCT) + 1;
1595                 ret = new int[numInts];
1596 
1597                 ret[0] = numServiceCategories;
1598                 for (int i = 1, j = 0; j < configs.size();
1599                         j++, i = i + CDMA_BSI_NO_OF_INTS_STRUCT) {
1600                     ret[i] = configs.get(j).serviceCategory;
1601                     ret[i + 1] = configs.get(j).language;
1602                     ret[i + 2] = configs.get(j).selected ? 1 : 0;
1603                 }
1604             }
1605             if (responseInfo.error == RadioError.NONE) {
1606                 sendMessageResponse(rr.mResult, ret);
1607             }
1608             mRil.processResponseDone(rr, responseInfo, ret);
1609         }
1610     }
1611 
responseCellInfoList(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo)1612     private void responseCellInfoList(RadioResponseInfo responseInfo,
1613                                       ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo) {
1614         RILRequest rr = mRil.processResponse(responseInfo);
1615 
1616         if (rr != null) {
1617             ArrayList<CellInfo> ret = RIL.convertHalCellInfoList(cellInfo);
1618             if (responseInfo.error == RadioError.NONE) {
1619                 sendMessageResponse(rr.mResult, ret);
1620             }
1621             mRil.processResponseDone(rr, responseInfo, ret);
1622         }
1623     }
1624 
responseActivityData(RadioResponseInfo responseInfo, ActivityStatsInfo activityInfo)1625     private void responseActivityData(RadioResponseInfo responseInfo,
1626                                       ActivityStatsInfo activityInfo) {
1627         RILRequest rr = mRil.processResponse(responseInfo);
1628 
1629         if (rr != null) {
1630             ModemActivityInfo ret = null;
1631             if (responseInfo.error == RadioError.NONE) {
1632                 final int sleepModeTimeMs = activityInfo.sleepModeTimeMs;
1633                 final int idleModeTimeMs = activityInfo.idleModeTimeMs;
1634                 int [] txModeTimeMs = new int[ModemActivityInfo.TX_POWER_LEVELS];
1635                 for (int i = 0; i < ModemActivityInfo.TX_POWER_LEVELS; i++) {
1636                     txModeTimeMs[i] = activityInfo.txmModetimeMs[i];
1637                 }
1638                 final int rxModeTimeMs = activityInfo.rxModeTimeMs;
1639                 ret = new ModemActivityInfo(SystemClock.elapsedRealtime(), sleepModeTimeMs,
1640                         idleModeTimeMs, txModeTimeMs, rxModeTimeMs, 0);
1641             } else {
1642                 ret = new ModemActivityInfo(0, 0, 0, new int [ModemActivityInfo.TX_POWER_LEVELS],
1643                         0, 0);
1644                 responseInfo.error = RadioError.NONE;
1645             }
1646             sendMessageResponse(rr.mResult, ret);
1647             mRil.processResponseDone(rr, responseInfo, ret);
1648         }
1649     }
1650 
responseHardwareConfig( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.HardwareConfig> config)1651     private void responseHardwareConfig(
1652             RadioResponseInfo responseInfo,
1653             ArrayList<android.hardware.radio.V1_0.HardwareConfig> config) {
1654         RILRequest rr = mRil.processResponse(responseInfo);
1655 
1656         if (rr != null) {
1657             ArrayList<HardwareConfig> ret = RIL.convertHalHwConfigList(config, mRil);
1658             if (responseInfo.error == RadioError.NONE) {
1659                 sendMessageResponse(rr.mResult, ret);
1660             }
1661             mRil.processResponseDone(rr, responseInfo, ret);
1662         }
1663     }
1664 
responseICC_IOBase64(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1665     private void responseICC_IOBase64(RadioResponseInfo responseInfo,
1666                                       android.hardware.radio.V1_0.IccIoResult result) {
1667         RILRequest rr = mRil.processResponse(responseInfo);
1668 
1669         if (rr != null) {
1670             IccIoResult ret = new IccIoResult(
1671                     result.sw1,
1672                     result.sw2,
1673                     (!(result.simResponse).equals(""))
1674                             ? android.util.Base64.decode(result.simResponse,
1675                             android.util.Base64.DEFAULT) : (byte[]) null);
1676             if (responseInfo.error == RadioError.NONE) {
1677                 sendMessageResponse(rr.mResult, ret);
1678             }
1679             mRil.processResponseDone(rr, responseInfo, ret);
1680         }
1681     }
1682 
responseRadioCapability(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.RadioCapability rc)1683     private void responseRadioCapability(RadioResponseInfo responseInfo,
1684                                          android.hardware.radio.V1_0.RadioCapability rc) {
1685         RILRequest rr = mRil.processResponse(responseInfo);
1686 
1687         if (rr != null) {
1688             RadioCapability ret = RIL.convertHalRadioCapability(rc, mRil);
1689             if (responseInfo.error == RadioError.NONE) {
1690                 sendMessageResponse(rr.mResult, ret);
1691             }
1692             mRil.processResponseDone(rr, responseInfo, ret);
1693         }
1694     }
1695 
responseLceStatus(RadioResponseInfo responseInfo, LceStatusInfo statusInfo)1696     private void responseLceStatus(RadioResponseInfo responseInfo, LceStatusInfo statusInfo) {
1697         RILRequest rr = mRil.processResponse(responseInfo);
1698 
1699         if (rr != null) {
1700             ArrayList<Integer> ret = new ArrayList<Integer>();
1701             ret.add(statusInfo.lceStatus);
1702             ret.add(Byte.toUnsignedInt(statusInfo.actualIntervalMs));
1703             if (responseInfo.error == RadioError.NONE) {
1704                 sendMessageResponse(rr.mResult, ret);
1705             }
1706             mRil.processResponseDone(rr, responseInfo, ret);
1707         }
1708     }
1709 
responseLceData(RadioResponseInfo responseInfo, LceDataInfo lceInfo)1710     private void responseLceData(RadioResponseInfo responseInfo, LceDataInfo lceInfo) {
1711         RILRequest rr = mRil.processResponse(responseInfo);
1712 
1713         if (rr != null) {
1714             ArrayList<Integer> ret = RIL.convertHalLceData(lceInfo, mRil);
1715             if (responseInfo.error == RadioError.NONE) {
1716                 sendMessageResponse(rr.mResult, ret);
1717             }
1718             mRil.processResponseDone(rr, responseInfo, ret);
1719         }
1720     }
1721 
responseCarrierIdentifiers(RadioResponseInfo responseInfo, boolean allAllowed, CarrierRestrictions carriers)1722     private void responseCarrierIdentifiers(RadioResponseInfo responseInfo, boolean allAllowed,
1723                                             CarrierRestrictions carriers) {
1724         RILRequest rr = mRil.processResponse(responseInfo);
1725 
1726         if (rr != null) {
1727             List<CarrierIdentifier> ret = new ArrayList<CarrierIdentifier>();
1728             for (int i = 0; i < carriers.allowedCarriers.size(); i++) {
1729                 String mcc = carriers.allowedCarriers.get(i).mcc;
1730                 String mnc = carriers.allowedCarriers.get(i).mnc;
1731                 String spn = null, imsi = null, gid1 = null, gid2 = null;
1732                 int matchType = carriers.allowedCarriers.get(i).matchType;
1733                 String matchData = carriers.allowedCarriers.get(i).matchData;
1734                 if (matchType == CarrierIdentifier.MatchType.SPN) {
1735                     spn = matchData;
1736                 } else if (matchType == CarrierIdentifier.MatchType.IMSI_PREFIX) {
1737                     imsi = matchData;
1738                 } else if (matchType == CarrierIdentifier.MatchType.GID1) {
1739                     gid1 = matchData;
1740                 } else if (matchType == CarrierIdentifier.MatchType.GID2) {
1741                     gid2 = matchData;
1742                 }
1743                 ret.add(new CarrierIdentifier(mcc, mnc, spn, imsi, gid1, gid2));
1744             }
1745             if (responseInfo.error == RadioError.NONE) {
1746                 /* TODO: Handle excluded carriers */
1747                 sendMessageResponse(rr.mResult, ret);
1748             }
1749             mRil.processResponseDone(rr, responseInfo, ret);
1750         }
1751     }
1752 }
1753