ril_service.cpp revision cd77a5b914ec21e6914416af2adb19d76a2ebb76
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#include <android/hardware/radio/1.0/IRadio.h>
18
19#include <hwbinder/IPCThreadState.h>
20#include <hwbinder/ProcessState.h>
21#include <ril_service.h>
22#include <hidl/HidlTransportSupport.h>
23
24using namespace android::hardware::radio::V1_0;
25using ::android::hardware::configureRpcThreadpool;
26using ::android::hardware::joinRpcThreadpool;
27using ::android::hardware::Return;
28using ::android::hardware::Status;
29using ::android::hardware::hidl_string;
30using ::android::hardware::hidl_vec;
31using ::android::hardware::hidl_array;
32using ::android::hardware::Void;
33using android::CommandInfo;
34using android::RequestInfo;
35using android::requestToString;
36using android::sp;
37
38RIL_RadioFunctions *s_callbacks = NULL;
39static CommandInfo *s_commands;
40
41struct RadioImpl;
42
43#if (SIM_COUNT >= 2)
44sp<RadioImpl> radioService[SIM_COUNT];
45#else
46sp<RadioImpl> radioService[1];
47#endif
48
49struct RadioImpl : public IRadio {
50    int32_t slotId;
51    sp<IRadioResponse> radioResponse;
52    sp<IRadioIndication> radioIndication;
53
54    Return<void> setResponseFunctions(
55            const ::android::sp<IRadioResponse>& radioResponse,
56            const ::android::sp<IRadioIndication>& radioIndication);
57
58    Return<void> getIccCardStatus(int32_t serial);
59
60    Return<void> supplyIccPinForApp(int32_t serial,
61            const ::android::hardware::hidl_string& pin,
62            const ::android::hardware::hidl_string& aid);
63
64    Return<void> supplyIccPukForApp(int32_t serial,
65            const ::android::hardware::hidl_string& puk,
66            const ::android::hardware::hidl_string& pin,
67            const ::android::hardware::hidl_string& aid);
68
69    Return<void> supplyIccPin2ForApp(int32_t serial,
70            const ::android::hardware::hidl_string& pin2,
71            const ::android::hardware::hidl_string& aid);
72
73    Return<void> supplyIccPuk2ForApp(int32_t serial,
74            const ::android::hardware::hidl_string& puk2,
75            const ::android::hardware::hidl_string& pin2,
76            const ::android::hardware::hidl_string& aid);
77
78    Return<void> changeIccPinForApp(int32_t serial,
79            const ::android::hardware::hidl_string& oldPin,
80            const ::android::hardware::hidl_string& newPin,
81            const ::android::hardware::hidl_string& aid);
82
83    Return<void> changeIccPin2ForApp(int32_t serial,
84            const ::android::hardware::hidl_string& oldPin2,
85            const ::android::hardware::hidl_string& newPin2,
86            const ::android::hardware::hidl_string& aid);
87
88    Return<void> supplyNetworkDepersonalization(int32_t serial,
89            const ::android::hardware::hidl_string& netPin);
90
91    Return<void> getCurrentCalls(int32_t serial);
92
93    Return<void> dial(int32_t serial,
94            const Dial& dialInfo);
95
96    Return<void> getImsiForApp(int32_t serial,
97            const ::android::hardware::hidl_string& aid);
98
99    Return<void> hangup(int32_t serial, int32_t gsmIndex);
100
101    Return<void> hangupWaitingOrBackground(int32_t serial);
102
103    Return<void> hangupForegroundResumeBackground(int32_t serial);
104
105    Return<void> switchWaitingOrHoldingAndActive(int32_t serial);
106
107    Return<void> conference(int32_t serial);
108
109    Return<void> rejectCall(int32_t serial);
110
111    Return<void> getLastCallFailCause(int32_t serial);
112
113    Return<void> getSignalStrength(int32_t serial);
114
115    Return<void> getVoiceRegistrationState(int32_t serial);
116
117    Return<void> getDataRegistrationState(int32_t serial);
118
119    Return<void> getOperator(int32_t serial);
120
121    Return<void> setRadioPower(int32_t serial, bool on);
122
123    Return<void> sendDtmf(int32_t serial,
124            const ::android::hardware::hidl_string& s);
125
126    Return<void> sendSms(int32_t serial, const GsmSmsMessage& message);
127
128    Return<void> sendSMSExpectMore(int32_t serial, const GsmSmsMessage& message);
129
130    Return<void> setupDataCall(int32_t serial,
131            int32_t radioTechnology,
132            int32_t profile,
133            const ::android::hardware::hidl_string& apn,
134            const ::android::hardware::hidl_string& user,
135            const ::android::hardware::hidl_string& password,
136            ApnAuthType authType,
137            const ::android::hardware::hidl_string& protocol);
138
139    Return<void> iccIOForApp(int32_t serial,
140            const IccIo& iccIo);
141
142    Return<void> sendUssd(int32_t serial,
143            const ::android::hardware::hidl_string& ussd);
144
145    Return<void> cancelPendingUssd(int32_t serial);
146
147    Return<void> getClir(int32_t serial);
148
149    Return<void> setClir(int32_t serial, int32_t status);
150
151    Return<void> getCallForwardStatus(int32_t serial,
152            const CallForwardInfo& callInfo);
153
154    Return<void> setCallForward(int32_t serial,
155            const CallForwardInfo& callInfo);
156
157    Return<void> getCallWaiting(int32_t serial, int32_t serviceClass);
158
159    Return<void> setCallWaiting(int32_t serial, bool enable, int32_t serviceClass);
160
161    Return<void> acknowledgeLastIncomingGsmSms(int32_t serial,
162            bool success, SmsAcknowledgeFailCause cause);
163
164    Return<void> acceptCall(int32_t serial);
165
166    Return<void> deactivateDataCall(int32_t serial,
167            int32_t cid, bool reasonRadioShutDown);
168
169    Return<void> getFacilityLockForApp(int32_t serial,
170            const ::android::hardware::hidl_string& facility,
171            const ::android::hardware::hidl_string& password,
172            int32_t serviceClass,
173            const ::android::hardware::hidl_string& appId);
174
175    Return<void> setFacilityLockForApp(int32_t serial,
176            const ::android::hardware::hidl_string& facility,
177            bool lockState,
178            const ::android::hardware::hidl_string& password,
179            int32_t serviceClass,
180            const ::android::hardware::hidl_string& appId);
181
182    Return<void> setBarringPassword(int32_t serial,
183            const ::android::hardware::hidl_string& facility,
184            const ::android::hardware::hidl_string& oldPassword,
185            const ::android::hardware::hidl_string& newPassword);
186
187    Return<void> getNetworkSelectionMode(int32_t serial);
188
189    Return<void> setNetworkSelectionModeAutomatic(int32_t serial);
190
191    Return<void> setNetworkSelectionModeManual(int32_t serial,
192            const ::android::hardware::hidl_string& operatorNumeric);
193
194    Return<void> getAvailableNetworks(int32_t serial);
195
196    Return<void> startDtmf(int32_t serial,
197            const ::android::hardware::hidl_string& s);
198
199    Return<void> stopDtmf(int32_t serial);
200
201    Return<void> getBasebandVersion(int32_t serial);
202
203    Return<void> separateConnection(int32_t serial, int32_t gsmIndex);
204
205    Return<void> setMute(int32_t serial, bool enable);
206
207    Return<void> getMute(int32_t serial);
208
209    Return<void> getClip(int32_t serial);
210
211    Return<void> getDataCallList(int32_t serial);
212
213    Return<void> sendOemRadioRequestRaw(int32_t serial,
214            const ::android::hardware::hidl_vec<uint8_t>& data);
215
216    Return<void> sendOemRadioRequestStrings(int32_t serial,
217            const ::android::hardware::hidl_vec<::android::hardware::hidl_string>& data);
218
219    Return<void> sendScreenState(int32_t serial, bool enable);
220
221    Return<void> setSuppServiceNotifications(int32_t serial, bool enable);
222
223    Return<void> writeSmsToSim(int32_t serial,
224            const SmsWriteArgs& smsWriteArgs);
225
226    Return<void> deleteSmsOnSim(int32_t serial, int32_t index);
227
228    Return<void> setBandMode(int32_t serial, RadioBandMode mode);
229
230    Return<void> getAvailableBandModes(int32_t serial);
231
232    Return<void> sendEnvelope(int32_t serial,
233            const ::android::hardware::hidl_string& command);
234
235    Return<void> sendTerminalResponseToSim(int32_t serial,
236            const ::android::hardware::hidl_string& commandResponse);
237
238    Return<void> handleStkCallSetupRequestFromSim(int32_t serial, bool accept);
239
240    Return<void> explicitCallTransfer(int32_t serial);
241
242    Return<void> setPreferredNetworkType(int32_t serial, PreferredNetworkType nwType);
243
244    Return<void> getPreferredNetworkType(int32_t serial);
245
246    Return<void> getNeighboringCids(int32_t serial);
247
248    Return<void> setLocationUpdates(int32_t serial, bool enable);
249
250    Return<void> setCdmaSubscriptionSource(int32_t serial,
251            CdmaSubscriptionSource cdmaSub);
252
253    Return<void> setCdmaRoamingPreference(int32_t serial, CdmaRoamingType type);
254
255    Return<void> getCdmaRoamingPreference(int32_t serial);
256
257    Return<void> setTTYMode(int32_t serial, TtyMode mode);
258
259    Return<void> getTTYMode(int32_t serial);
260
261    Return<void> setPreferredVoicePrivacy(int32_t serial, bool enable);
262
263    Return<void> getPreferredVoicePrivacy(int32_t serial);
264
265    Return<void> sendCDMAFeatureCode(int32_t serial,
266            const ::android::hardware::hidl_string& featureCode);
267
268    Return<void> sendBurstDtmf(int32_t serial,
269            const ::android::hardware::hidl_string& dtmf,
270            int32_t on,
271            int32_t off);
272
273    Return<void> sendCdmaSms(int32_t serial, const CdmaSmsMessage& sms);
274
275    Return<void> acknowledgeLastIncomingCdmaSms(int32_t serial,
276            const CdmaSmsAck& smsAck);
277
278    Return<void> getGsmBroadcastConfig(int32_t serial);
279
280    Return<void> setGsmBroadcastConfig(int32_t serial,
281            const hidl_vec<GsmBroadcastSmsConfigInfo>& configInfo);
282
283    Return<void> setGsmBroadcastActivation(int32_t serial, bool activate);
284
285    Return<void> getCdmaBroadcastConfig(int32_t serial);
286
287    Return<void> setCdmaBroadcastConfig(int32_t serial,
288            const hidl_vec<CdmaBroadcastSmsConfigInfo>& configInfo);
289
290    Return<void> setCdmaBroadcastActivation(int32_t serial, bool activate);
291
292    Return<void> getCDMASubscription(int32_t serial);
293
294    Return<void> writeSmsToRuim(int32_t serial, const CdmaSmsWriteArgs& cdmaSms);
295
296    Return<void> deleteSmsOnRuim(int32_t serial, int32_t index);
297
298    Return<void> getDeviceIdentity(int32_t serial);
299
300    Return<void> exitEmergencyCallbackMode(int32_t serial);
301
302    Return<void> getSmscAddress(int32_t serial);
303
304    Return<void> setSmscAddress(int32_t serial,
305            const ::android::hardware::hidl_string& smsc);
306
307    Return<void> reportSmsMemoryStatus(int32_t serial, bool available);
308
309    Return<void> reportStkServiceIsRunning(int32_t serial);
310
311    Return<void> getCdmaSubscriptionSource(int32_t serial);
312
313    Return<void> requestIsimAuthentication(int32_t serial,
314            const ::android::hardware::hidl_string& challenge);
315
316    Return<void> acknowledgeIncomingGsmSmsWithPdu(int32_t serial,
317            bool success,
318            const ::android::hardware::hidl_string& ackPdu);
319
320    Return<void> sendEnvelopeWithStatus(int32_t serial,
321            const ::android::hardware::hidl_string& contents);
322
323    Return<void> getVoiceRadioTechnology(int32_t serial);
324
325    Return<void> getCellInfoList(int32_t serial);
326
327    Return<void> setCellInfoListRate(int32_t serial, int32_t rate);
328
329    Return<void> setInitialAttachApn(int32_t serial,
330            const ::android::hardware::hidl_string& apn,
331            const ::android::hardware::hidl_string& protocol,
332            ApnAuthType authType,
333            const ::android::hardware::hidl_string& username,
334            const ::android::hardware::hidl_string& password);
335
336    Return<void> getImsRegistrationState(int32_t serial);
337
338    Return<void> sendImsSms(int32_t serial, const ImsSmsMessage& message);
339
340    Return<void> iccTransmitApduBasicChannel(int32_t serial, const SimApdu& message);
341
342    Return<void> iccOpenLogicalChannel(int32_t serial,
343            const ::android::hardware::hidl_string& aid);
344
345    Return<void> iccCloseLogicalChannel(int32_t serial, int32_t channelId);
346
347    Return<void> iccTransmitApduLogicalChannel(int32_t serial, const SimApdu& message);
348
349    Return<void> nvReadItem(int32_t serial, NvItem itemId);
350
351    Return<void> nvWriteItem(int32_t serial, const NvWriteItem& item);
352
353    Return<void> nvWriteCdmaPrl(int32_t serial,
354            const ::android::hardware::hidl_vec<uint8_t>& prl);
355
356    Return<void> nvResetConfig(int32_t serial, ResetNvType resetType);
357
358    Return<void> setUiccSubscription(int32_t serial, const SelectUiccSub& uiccSub);
359
360    Return<void> setDataAllowed(int32_t serial, bool allow);
361
362    Return<void> getHardwareConfig(int32_t serial);
363
364    Return<void> requestIccSimAuthentication(int32_t serial,
365            int32_t authContext,
366            const ::android::hardware::hidl_string& authData,
367            const ::android::hardware::hidl_string& aid);
368
369    Return<void> setDataProfile(int32_t serial,
370            const ::android::hardware::hidl_vec<DataProfileInfo>& profiles);
371
372    Return<void> requestShutdown(int32_t serial);
373
374    Return<void> getRadioCapability(int32_t serial);
375
376    Return<void> setRadioCapability(int32_t serial, const RadioCapability& rc);
377
378    Return<void> startLceService(int32_t serial, int32_t reportInterval, bool pullMode);
379
380    Return<void> stopLceService(int32_t serial);
381
382    Return<void> pullLceData(int32_t serial);
383
384    Return<void> getModemActivityInfo(int32_t serial);
385
386    Return<void> setAllowedCarriers(int32_t serial,
387            bool allAllowed,
388            const CarrierRestrictions& carriers);
389
390    Return<void> getAllowedCarriers(int32_t serial);
391
392    Return<void> responseAcknowledgement();
393};
394
395Return<void> RadioImpl::setResponseFunctions(
396        const ::android::sp<IRadioResponse>& radioResponseParam,
397        const ::android::sp<IRadioIndication>& radioIndicationParam) {
398    RLOGD("RadioImpl::setResponseFunctions");
399    radioResponse = radioResponseParam;
400    radioIndication = radioIndicationParam;
401    return Status::ok();
402}
403
404Return<void> RadioImpl::getIccCardStatus(int32_t serial) {
405    RLOGD("RadioImpl::getIccCardStatus: serial %d", serial);
406    RequestInfo *pRI;
407    pRI = (RequestInfo *)calloc(1, sizeof(RequestInfo));
408    if (pRI == NULL) {
409        RLOGE("RadioImpl::getIccCardStatus: Memory allocation failed for request %s",
410                requestToString(RIL_REQUEST_GET_SIM_STATUS));
411        return Void();
412    }
413
414    pRI->token = serial;
415    pRI->pCI = &(s_commands[RIL_REQUEST_GET_SIM_STATUS]);
416    pRI->socket_id = (RIL_SOCKET_ID) slotId;
417    android::addRequestToList(pRI, RIL_REQUEST_GET_SIM_STATUS, serial, pRI->socket_id);
418
419    s_callbacks->onRequest(RIL_REQUEST_GET_SIM_STATUS, NULL, 0, pRI);
420
421    return Status::ok();
422}
423
424Return<void> RadioImpl::supplyIccPinForApp(int32_t serial,
425        const ::android::hardware::hidl_string& pin,
426        const ::android::hardware::hidl_string& aid) {return Status::ok();}
427
428Return<void> RadioImpl::supplyIccPukForApp(int32_t serial,
429        const ::android::hardware::hidl_string& puk,
430        const ::android::hardware::hidl_string& pin,
431        const ::android::hardware::hidl_string& aid) {return Status::ok();}
432
433Return<void> RadioImpl::supplyIccPin2ForApp(int32_t serial,
434        const ::android::hardware::hidl_string& pin2,
435        const ::android::hardware::hidl_string& aid) {return Status::ok();}
436
437Return<void> RadioImpl::supplyIccPuk2ForApp(int32_t serial,
438        const ::android::hardware::hidl_string& puk2,
439        const ::android::hardware::hidl_string& pin2,
440        const ::android::hardware::hidl_string& aid) {return Status::ok();}
441
442Return<void> RadioImpl::changeIccPinForApp(int32_t serial,
443        const ::android::hardware::hidl_string& oldPin,
444        const ::android::hardware::hidl_string& newPin,
445        const ::android::hardware::hidl_string& aid) {return Status::ok();}
446
447Return<void> RadioImpl::changeIccPin2ForApp(int32_t serial,
448        const ::android::hardware::hidl_string& oldPin2,
449        const ::android::hardware::hidl_string& newPin2,
450        const ::android::hardware::hidl_string& aid) {return Status::ok();}
451
452Return<void> RadioImpl::supplyNetworkDepersonalization(int32_t serial,
453        const ::android::hardware::hidl_string& netPin) {return Status::ok();}
454
455Return<void> RadioImpl::getCurrentCalls(int32_t serial) {return Status::ok();}
456
457Return<void> RadioImpl::dial(int32_t serial,
458        const Dial& dialInfo) {return Status::ok();}
459
460Return<void> RadioImpl::getImsiForApp(int32_t serial,
461        const ::android::hardware::hidl_string& aid) {return Status::ok();}
462
463Return<void> RadioImpl::hangup(int32_t serial, int32_t gsmIndex) {return Status::ok();}
464
465Return<void> RadioImpl::hangupWaitingOrBackground(int32_t serial) {return Status::ok();}
466
467Return<void> RadioImpl::hangupForegroundResumeBackground(int32_t serial) {return Status::ok();}
468
469Return<void> RadioImpl::switchWaitingOrHoldingAndActive(int32_t serial) {return Status::ok();}
470
471Return<void> RadioImpl::conference(int32_t serial) {return Status::ok();}
472
473Return<void> RadioImpl::rejectCall(int32_t serial) {return Status::ok();}
474
475Return<void> RadioImpl::getLastCallFailCause(int32_t serial) {return Status::ok();}
476
477Return<void> RadioImpl::getSignalStrength(int32_t serial) {return Status::ok();}
478
479Return<void> RadioImpl::getVoiceRegistrationState(int32_t serial) {return Status::ok();}
480
481Return<void> RadioImpl::getDataRegistrationState(int32_t serial) {return Status::ok();}
482
483Return<void> RadioImpl::getOperator(int32_t serial) {return Status::ok();}
484
485Return<void> RadioImpl::setRadioPower(int32_t serial, bool on) {return Status::ok();}
486
487Return<void> RadioImpl::sendDtmf(int32_t serial,
488        const ::android::hardware::hidl_string& s) {return Status::ok();}
489
490Return<void> RadioImpl::sendSms(int32_t serial, const GsmSmsMessage& message) {return Status::ok();}
491
492Return<void> RadioImpl::sendSMSExpectMore(int32_t serial, const GsmSmsMessage& message) {return Status::ok();}
493
494Return<void> RadioImpl::setupDataCall(int32_t serial,
495        int32_t radioTechnology,
496        int32_t profile,
497        const ::android::hardware::hidl_string& apn,
498        const ::android::hardware::hidl_string& user,
499        const ::android::hardware::hidl_string& password,
500        ApnAuthType authType,
501        const ::android::hardware::hidl_string& protocol) {return Status::ok();}
502
503Return<void> RadioImpl::iccIOForApp(int32_t serial,
504        const IccIo& iccIo) {return Status::ok();}
505
506Return<void> RadioImpl::sendUssd(int32_t serial,
507        const ::android::hardware::hidl_string& ussd) {return Status::ok();}
508
509Return<void> RadioImpl::cancelPendingUssd(int32_t serial) {return Status::ok();}
510
511Return<void> RadioImpl::getClir(int32_t serial) {return Status::ok();}
512
513Return<void> RadioImpl::setClir(int32_t serial, int32_t status) {return Status::ok();}
514
515Return<void> RadioImpl::getCallForwardStatus(int32_t serial,
516        const CallForwardInfo& callInfo) {return Status::ok();}
517
518Return<void> RadioImpl::setCallForward(int32_t serial,
519        const CallForwardInfo& callInfo) {return Status::ok();}
520
521Return<void> RadioImpl::getCallWaiting(int32_t serial, int32_t serviceClass) {return Status::ok();}
522
523Return<void> RadioImpl::setCallWaiting(int32_t serial, bool enable, int32_t serviceClass) {return Status::ok();}
524
525Return<void> RadioImpl::acknowledgeLastIncomingGsmSms(int32_t serial,
526        bool success, SmsAcknowledgeFailCause cause) {return Status::ok();}
527
528Return<void> RadioImpl::acceptCall(int32_t serial) {return Status::ok();}
529
530Return<void> RadioImpl::deactivateDataCall(int32_t serial,
531        int32_t cid, bool reasonRadioShutDown) {return Status::ok();}
532
533Return<void> RadioImpl::getFacilityLockForApp(int32_t serial,
534        const ::android::hardware::hidl_string& facility,
535        const ::android::hardware::hidl_string& password,
536        int32_t serviceClass,
537        const ::android::hardware::hidl_string& appId) {return Status::ok();}
538
539Return<void> RadioImpl::setFacilityLockForApp(int32_t serial,
540        const ::android::hardware::hidl_string& facility,
541        bool lockState,
542        const ::android::hardware::hidl_string& password,
543        int32_t serviceClass,
544        const ::android::hardware::hidl_string& appId) {return Status::ok();}
545
546Return<void> RadioImpl::setBarringPassword(int32_t serial,
547        const ::android::hardware::hidl_string& facility,
548        const ::android::hardware::hidl_string& oldPassword,
549        const ::android::hardware::hidl_string& newPassword) {return Status::ok();}
550
551Return<void> RadioImpl::getNetworkSelectionMode(int32_t serial) {return Status::ok();}
552
553Return<void> RadioImpl::setNetworkSelectionModeAutomatic(int32_t serial) {return Status::ok();}
554
555Return<void> RadioImpl::setNetworkSelectionModeManual(int32_t serial,
556        const ::android::hardware::hidl_string& operatorNumeric) {return Status::ok();}
557
558Return<void> RadioImpl::getAvailableNetworks(int32_t serial) {return Status::ok();}
559
560Return<void> RadioImpl::startDtmf(int32_t serial,
561        const ::android::hardware::hidl_string& s) {return Status::ok();}
562
563Return<void> RadioImpl::stopDtmf(int32_t serial) {return Status::ok();}
564
565Return<void> RadioImpl::getBasebandVersion(int32_t serial) {return Status::ok();}
566
567Return<void> RadioImpl::separateConnection(int32_t serial, int32_t gsmIndex) {return Status::ok();}
568
569Return<void> RadioImpl::setMute(int32_t serial, bool enable) {return Status::ok();}
570
571Return<void> RadioImpl::getMute(int32_t serial) {return Status::ok();}
572
573Return<void> RadioImpl::getClip(int32_t serial) {return Status::ok();}
574
575Return<void> RadioImpl::getDataCallList(int32_t serial) {return Status::ok();}
576
577Return<void> RadioImpl::sendOemRadioRequestRaw(int32_t serial,
578        const ::android::hardware::hidl_vec<uint8_t>& data) {return Status::ok();}
579
580Return<void> RadioImpl::sendOemRadioRequestStrings(int32_t serial,
581        const ::android::hardware::hidl_vec<::android::hardware::hidl_string>& data) {return Status::ok();}
582
583Return<void> RadioImpl::sendScreenState(int32_t serial, bool enable) {return Status::ok();}
584
585Return<void> RadioImpl::setSuppServiceNotifications(int32_t serial, bool enable) {return Status::ok();}
586
587Return<void> RadioImpl::writeSmsToSim(int32_t serial,
588        const SmsWriteArgs& smsWriteArgs) {return Status::ok();}
589
590Return<void> RadioImpl::deleteSmsOnSim(int32_t serial, int32_t index) {return Status::ok();}
591
592Return<void> RadioImpl::setBandMode(int32_t serial, RadioBandMode mode) {return Status::ok();}
593
594Return<void> RadioImpl::getAvailableBandModes(int32_t serial) {return Status::ok();}
595
596Return<void> RadioImpl::sendEnvelope(int32_t serial,
597        const ::android::hardware::hidl_string& command) {return Status::ok();}
598
599Return<void> RadioImpl::sendTerminalResponseToSim(int32_t serial,
600        const ::android::hardware::hidl_string& commandResponse) {return Status::ok();}
601
602Return<void> RadioImpl::handleStkCallSetupRequestFromSim(int32_t serial, bool accept) {return Status::ok();}
603
604Return<void> RadioImpl::explicitCallTransfer(int32_t serial) {return Status::ok();}
605
606Return<void> RadioImpl::setPreferredNetworkType(int32_t serial, PreferredNetworkType nwType) {return Status::ok();}
607
608Return<void> RadioImpl::getPreferredNetworkType(int32_t serial) {return Status::ok();}
609
610Return<void> RadioImpl::getNeighboringCids(int32_t serial) {return Status::ok();}
611
612Return<void> RadioImpl::setLocationUpdates(int32_t serial, bool enable) {return Status::ok();}
613
614Return<void> RadioImpl::setCdmaSubscriptionSource(int32_t serial, CdmaSubscriptionSource cdmaSub) {return Status::ok();}
615
616Return<void> RadioImpl::setCdmaRoamingPreference(int32_t serial, CdmaRoamingType type) {return Status::ok();}
617
618Return<void> RadioImpl::getCdmaRoamingPreference(int32_t serial) {return Status::ok();}
619
620Return<void> RadioImpl::setTTYMode(int32_t serial, TtyMode mode) {return Status::ok();}
621
622Return<void> RadioImpl::getTTYMode(int32_t serial) {return Status::ok();}
623
624Return<void> RadioImpl::setPreferredVoicePrivacy(int32_t serial, bool enable) {return Status::ok();}
625
626Return<void> RadioImpl::getPreferredVoicePrivacy(int32_t serial) {return Status::ok();}
627
628Return<void> RadioImpl::sendCDMAFeatureCode(int32_t serial,
629        const ::android::hardware::hidl_string& featureCode) {return Status::ok();}
630
631Return<void> RadioImpl::sendBurstDtmf(int32_t serial,
632        const ::android::hardware::hidl_string& dtmf,
633        int32_t on,
634        int32_t off) {return Status::ok();}
635
636Return<void> RadioImpl::sendCdmaSms(int32_t serial, const CdmaSmsMessage& sms) {return Status::ok();}
637
638Return<void> RadioImpl::acknowledgeLastIncomingCdmaSms(int32_t serial, const CdmaSmsAck& smsAck) {return Status::ok();}
639
640Return<void> RadioImpl::getGsmBroadcastConfig(int32_t serial) {return Status::ok();}
641
642Return<void> RadioImpl::setGsmBroadcastConfig(int32_t serial,
643        const hidl_vec<GsmBroadcastSmsConfigInfo>& configInfo) {return Status::ok();}
644
645Return<void> RadioImpl::setGsmBroadcastActivation(int32_t serial, bool activate) {return Status::ok();}
646
647Return<void> RadioImpl::getCdmaBroadcastConfig(int32_t serial) {return Status::ok();}
648
649Return<void> RadioImpl::setCdmaBroadcastConfig(int32_t serial,
650        const hidl_vec<CdmaBroadcastSmsConfigInfo>& configInfo) {return Status::ok();}
651
652Return<void> RadioImpl::setCdmaBroadcastActivation(int32_t serial, bool activate) {return Status::ok();}
653
654Return<void> RadioImpl::getCDMASubscription(int32_t serial) {return Status::ok();}
655
656Return<void> RadioImpl::writeSmsToRuim(int32_t serial, const CdmaSmsWriteArgs& cdmaSms) {return Status::ok();}
657
658Return<void> RadioImpl::deleteSmsOnRuim(int32_t serial, int32_t index) {return Status::ok();}
659
660Return<void> RadioImpl::getDeviceIdentity(int32_t serial) {return Status::ok();}
661
662Return<void> RadioImpl::exitEmergencyCallbackMode(int32_t serial) {return Status::ok();}
663
664Return<void> RadioImpl::getSmscAddress(int32_t serial) {return Status::ok();}
665
666Return<void> RadioImpl::setSmscAddress(int32_t serial,
667        const ::android::hardware::hidl_string& smsc) {return Status::ok();}
668
669Return<void> RadioImpl::reportSmsMemoryStatus(int32_t serial, bool available) {return Status::ok();}
670
671Return<void> RadioImpl::reportStkServiceIsRunning(int32_t serial) {return Status::ok();}
672
673Return<void> RadioImpl::getCdmaSubscriptionSource(int32_t serial) {return Status::ok();}
674
675Return<void> RadioImpl::requestIsimAuthentication(int32_t serial,
676        const ::android::hardware::hidl_string& challenge) {return Status::ok();}
677
678Return<void> RadioImpl::acknowledgeIncomingGsmSmsWithPdu(int32_t serial,
679        bool success,
680        const ::android::hardware::hidl_string& ackPdu) {return Status::ok();}
681
682Return<void> RadioImpl::sendEnvelopeWithStatus(int32_t serial,
683        const ::android::hardware::hidl_string& contents) {return Status::ok();}
684
685Return<void> RadioImpl::getVoiceRadioTechnology(int32_t serial) {return Status::ok();}
686
687Return<void> RadioImpl::getCellInfoList(int32_t serial) {return Status::ok();}
688
689Return<void> RadioImpl::setCellInfoListRate(int32_t serial, int32_t rate) {return Status::ok();}
690
691Return<void> RadioImpl::setInitialAttachApn(int32_t serial,
692        const ::android::hardware::hidl_string& apn,
693        const ::android::hardware::hidl_string& protocol,
694        ApnAuthType authType,
695        const ::android::hardware::hidl_string& username,
696        const ::android::hardware::hidl_string& password) {return Status::ok();}
697
698Return<void> RadioImpl::getImsRegistrationState(int32_t serial) {return Status::ok();}
699
700Return<void> RadioImpl::sendImsSms(int32_t serial, const ImsSmsMessage& message) {return Status::ok();}
701
702Return<void> RadioImpl::iccTransmitApduBasicChannel(int32_t serial, const SimApdu& message) {return Status::ok();}
703
704Return<void> RadioImpl::iccOpenLogicalChannel(int32_t serial,
705        const ::android::hardware::hidl_string& aid) {return Status::ok();}
706
707Return<void> RadioImpl::iccCloseLogicalChannel(int32_t serial, int32_t channelId) {return Status::ok();}
708
709Return<void> RadioImpl::iccTransmitApduLogicalChannel(int32_t serial, const SimApdu& message) {return Status::ok();}
710
711Return<void> RadioImpl::nvReadItem(int32_t serial, NvItem itemId) {return Status::ok();}
712
713Return<void> RadioImpl::nvWriteItem(int32_t serial, const NvWriteItem& item) {return Status::ok();}
714
715Return<void> RadioImpl::nvWriteCdmaPrl(int32_t serial,
716        const ::android::hardware::hidl_vec<uint8_t>& prl) {return Status::ok();}
717
718Return<void> RadioImpl::nvResetConfig(int32_t serial, ResetNvType resetType) {return Status::ok();}
719
720Return<void> RadioImpl::setUiccSubscription(int32_t serial, const SelectUiccSub& uiccSub) {return Status::ok();}
721
722Return<void> RadioImpl::setDataAllowed(int32_t serial, bool allow) {return Status::ok();}
723
724Return<void> RadioImpl::getHardwareConfig(int32_t serial) {return Status::ok();}
725
726Return<void> RadioImpl::requestIccSimAuthentication(int32_t serial,
727        int32_t authContext,
728        const ::android::hardware::hidl_string& authData,
729        const ::android::hardware::hidl_string& aid) {return Status::ok();}
730
731Return<void> RadioImpl::setDataProfile(int32_t serial,
732        const ::android::hardware::hidl_vec<DataProfileInfo>& profiles) {return Status::ok();}
733
734Return<void> RadioImpl::requestShutdown(int32_t serial) {return Status::ok();}
735
736Return<void> RadioImpl::getRadioCapability(int32_t serial) {return Status::ok();}
737
738Return<void> RadioImpl::setRadioCapability(int32_t serial, const RadioCapability& rc) {return Status::ok();}
739
740Return<void> RadioImpl::startLceService(int32_t serial, int32_t reportInterval, bool pullMode) {return Status::ok();}
741
742Return<void> RadioImpl::stopLceService(int32_t serial) {return Status::ok();}
743
744Return<void> RadioImpl::pullLceData(int32_t serial) {return Status::ok();}
745
746Return<void> RadioImpl::getModemActivityInfo(int32_t serial) {return Status::ok();}
747
748Return<void> RadioImpl::setAllowedCarriers(int32_t serial,
749        bool allAllowed,
750        const CarrierRestrictions& carriers) {return Status::ok();}
751
752Return<void> RadioImpl::getAllowedCarriers(int32_t serial) {return Status::ok();}
753
754Return<void> RadioImpl::responseAcknowledgement() {return Status::ok();}
755
756hidl_string convertCharPtrToHidlString(char *ptr) {
757    hidl_string ret;
758    if (ptr != NULL) {
759        ret.setToExternal(ptr, strlen(ptr));
760    }
761    return ret;
762}
763
764int radio::iccCardStatusResponse(android::Parcel &p, int slotId, int requestNumber,
765        int responseType, int serial, RIL_Errno e, void *response, size_t responselen) {
766    RLOGD("iccCardStatusResponse: serial %d", serial);
767
768    if (radioService[slotId]->radioResponse != NULL) {
769        RadioResponseInfo responseInfo;
770        CardStatus cardStatus;
771        responseInfo.serial = serial;
772
773        switch (responseType) {
774            case RESPONSE_SOLICITED:
775                responseInfo.type = RadioResponseType::SOLICITED;
776                break;
777            case RESPONSE_SOLICITED_ACK:
778                responseInfo.type = RadioResponseType::SOLICITED_ACK;
779                break;
780            case RESPONSE_SOLICITED_ACK_EXP:
781                responseInfo.type = RadioResponseType::SOLICITED_ACK_EXP;
782                break;
783        }
784
785        if (response == NULL && responselen != 0) {
786            RLOGE("iccCardStatusResponse: invalid response: NULL");
787            //todo: it used to be -1 (RIL_ERRNO_INVALID_RESPONSE) but adding that to interface
788            // doesn't make sense since this will eventually be part of vendor ril. Options to
789            // handle this:
790            // 1. Add -1 to interface and use that, and update interface to say it's a valid error
791            // 2. Add GENERIC_FAILURE as valid error to interface
792            // 3. Assume this will never happen and not handle it
793            responseInfo.error = RadioError::GENERIC_FAILURE;
794        } else {
795            responseInfo.error = (RadioError) e;
796
797            RIL_CardStatus_v6 *p_cur = ((RIL_CardStatus_v6 *) response);
798            cardStatus.cardState = (CardState) p_cur->card_state;
799            cardStatus.universalPinState = (PinState) p_cur->universal_pin_state;
800            cardStatus.gsmUmtsSubscriptionAppIndex = p_cur->gsm_umts_subscription_app_index;
801            cardStatus.cdmaSubscriptionAppIndex = p_cur->cdma_subscription_app_index;
802            cardStatus.imsSubscriptionAppIndex = p_cur->ims_subscription_app_index;
803
804            RIL_AppStatus *rilAppStatus = p_cur->applications;
805            cardStatus.applications.resize(p_cur->num_applications);
806            AppStatus *appStatus = cardStatus.applications.data();
807            RLOGD("iccCardStatusResponse: num_applications %d", p_cur->num_applications);
808            for (int i = 0; i < p_cur->num_applications; i++) {
809                appStatus[i].appType = (AppType) rilAppStatus[i].app_type;
810                appStatus[i].appState = (AppState) rilAppStatus[i].app_state;
811                appStatus[i].persoSubstate = (PersoSubstate) rilAppStatus[i].perso_substate;
812                appStatus[i].aidPtr = convertCharPtrToHidlString(rilAppStatus[i].aid_ptr);
813                appStatus[i].appLabelPtr = convertCharPtrToHidlString(
814                        rilAppStatus[i].app_label_ptr);
815                appStatus[i].pin1Replaced = rilAppStatus[i].pin1_replaced;
816                appStatus[i].pin1 = (PinState) rilAppStatus[i].pin1;
817                appStatus[i].pin2 = (PinState) rilAppStatus[i].pin2;
818            }
819        }
820
821        radioService[slotId]->radioResponse->getIccCardStatusResponse(responseInfo, cardStatus);
822    } else {
823        RLOGE("iccCardStatusResponse: radioService[%d]->radioResponse == NULL", slotId);
824    }
825
826    return 0;
827}
828
829void radio::radioStateChanged(int slotId, int indicationType, RIL_RadioState radioState) {
830    RLOGD("radioStateChanged: radioState %d", radioState);
831    if (radioService[slotId]->radioIndication != NULL) {
832        RadioIndicationType type = indicationType == RESPONSE_UNSOLICITED ?
833                (RadioIndicationType::UNSOLICITED) :
834                (RadioIndicationType::UNSOLICITED_ACK_EXP);
835        radioService[slotId]->radioIndication->radioStateChanged(type, (RadioState) radioState);
836    } else {
837        RLOGE("radioStateChanged: radioService[%d]->radioIndication == NULL", slotId);
838    }
839}
840
841void radio::registerService(RIL_RadioFunctions *callbacks, CommandInfo *commands) {
842    using namespace android::hardware;
843    int simCount = 1;
844    char *serviceNames[] = {
845            android::RIL_getRilSocketName()
846            #if (SIM_COUNT >= 2)
847            , SOCKET2_NAME_RIL
848            #if (SIM_COUNT >= 3)
849            , SOCKET3_NAME_RIL
850            #if (SIM_COUNT >= 4)
851            , SOCKET4_NAME_RIL
852            #endif
853            #endif
854            #endif
855            };
856
857    #if (SIM_COUNT >= 2)
858    simCount = SIM_COUNT;
859    #endif
860
861    configureRpcThreadpool(1, true /* callerWillJoin */);
862    for (int i = 0; i < simCount; i++) {
863        radioService[i] = new RadioImpl;
864        radioService[i]->slotId = i;
865        RLOGD("registerService: starting IRadio %s", serviceNames[i]);
866        android::status_t status = radioService[i]->registerAsService(serviceNames[i]);
867    }
868
869    s_callbacks = callbacks;
870    s_commands = commands;
871}
872
873void rilc_thread_pool() {
874    joinRpcThreadpool();
875}