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}