/* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.1 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.1 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "Radio.h" namespace android { namespace hardware { namespace radio { namespace V1_2 { namespace implementation { // Methods from ::android::hardware::radio::V1_0::IRadio follow. Return Radio::setResponseFunctions( const sp<::android::hardware::radio::V1_0::IRadioResponse>& radioResponse, const sp<::android::hardware::radio::V1_0::IRadioIndication>& radioIndication) { mRadioResponse = radioResponse; mRadioIndication = radioIndication; mRadioResponseV1_1 = ::android::hardware::radio::V1_1::IRadioResponse::castFrom(mRadioResponse) .withDefault(nullptr); mRadioIndicationV1_1 = ::android::hardware::radio::V1_1::IRadioIndication::castFrom(mRadioIndication) .withDefault(nullptr); if (mRadioResponseV1_1 == nullptr || mRadioIndicationV1_1 == nullptr) { mRadioResponseV1_1 = nullptr; mRadioIndicationV1_1 = nullptr; } mRadioResponseV1_2 = ::android::hardware::radio::V1_2::IRadioResponse::castFrom(mRadioResponse) .withDefault(nullptr); mRadioIndicationV1_2 = ::android::hardware::radio::V1_2::IRadioIndication::castFrom(mRadioIndication) .withDefault(nullptr); if (mRadioResponseV1_2 == nullptr || mRadioIndicationV1_2 == nullptr) { mRadioResponseV1_2 = nullptr; mRadioIndicationV1_2 = nullptr; } return Void(); } Return Radio::getIccCardStatus(int32_t serial) { /** * IRadio-defined request is called from the client and talk to the radio to get * IRadioResponse-defined response or/and IRadioIndication-defined indication back to the * client. This implementation omits and replaces the design and implementation of vendor * codes that needs to handle the receipt of the request and the return of the response from the * radio; this just directly returns a fake response back to the client. */ ALOGD("Radio Request: getIccCardStatus is entering"); if (mRadioResponse != nullptr || mRadioResponseV1_1 != nullptr || mRadioResponseV1_2 != nullptr) { // Fake RadioResponseInfo as part of response to return in 1.0, 1.1 and 1.2 ::android::hardware::radio::V1_0::RadioResponseInfo info; info.serial = serial; info.type = ::android::hardware::radio::V1_0::RadioResponseType::SOLICITED; info.error = ::android::hardware::radio::V1_0::RadioError::NONE; /** * In IRadio and IRadioResponse 1.2, getIccCardStatus can trigger radio to return * getIccCardStatusResponse_1_2. In their 1.0 and 1.1, getIccCardStatus can trigger radio to * return getIccCardStatusResponse. */ if (mRadioResponseV1_2 != nullptr) { // Fake CardStatus as part of getIccCardStatusResponse_1_2 response to return ::android::hardware::radio::V1_2::CardStatus card_status; card_status.base.cardState = ::android::hardware::radio::V1_0::CardState::ABSENT; card_status.base.gsmUmtsSubscriptionAppIndex = 0; card_status.base.cdmaSubscriptionAppIndex = 0; mRadioResponseV1_2->getIccCardStatusResponse_1_2(info, card_status); ALOGD("Radio Response: getIccCardStatusResponse_1_2 is sent"); } else if (mRadioResponseV1_1 != nullptr) { // Fake CardStatus as part of getIccCardStatusResponse response to return ::android::hardware::radio::V1_0::CardStatus card_status_V1_0; card_status_V1_0.cardState = ::android::hardware::radio::V1_0::CardState::ABSENT; card_status_V1_0.gsmUmtsSubscriptionAppIndex = 0; card_status_V1_0.cdmaSubscriptionAppIndex = 0; mRadioResponseV1_1->getIccCardStatusResponse(info, card_status_V1_0); ALOGD("Radio Response: getIccCardStatusResponse is sent"); } else { // Fake CardStatus as part of getIccCardStatusResponse response to return ::android::hardware::radio::V1_0::CardStatus card_status_V1_0; card_status_V1_0.cardState = ::android::hardware::radio::V1_0::CardState::ABSENT; card_status_V1_0.gsmUmtsSubscriptionAppIndex = 0; card_status_V1_0.cdmaSubscriptionAppIndex = 0; mRadioResponse->getIccCardStatusResponse(info, card_status_V1_0); ALOGD("Radio Response: getIccCardStatusResponse is sent"); } } else { ALOGD("mRadioResponse, mRadioResponseV1_1, and mRadioResponseV1_2 are NULL"); } return Void(); } Return Radio::supplyIccPinForApp(int32_t /* serial */, const hidl_string& /* pin */, const hidl_string& /* aid */) { // TODO implement return Void(); } Return Radio::supplyIccPukForApp(int32_t /* serial */, const hidl_string& /* puk */, const hidl_string& /* pin */, const hidl_string& /* aid */) { // TODO implement return Void(); } Return Radio::supplyIccPin2ForApp(int32_t /* serial */, const hidl_string& /* pin2 */, const hidl_string& /* aid */) { // TODO implement return Void(); } Return Radio::supplyIccPuk2ForApp(int32_t /* serial */, const hidl_string& /* puk2 */, const hidl_string& /* pin2 */, const hidl_string& /* aid */) { // TODO implement return Void(); } Return Radio::changeIccPinForApp(int32_t /* serial */, const hidl_string& /* oldPin */, const hidl_string& /* newPin */, const hidl_string& /* aid */) { // TODO implement return Void(); } Return Radio::changeIccPin2ForApp(int32_t /* serial */, const hidl_string& /* oldPin2 */, const hidl_string& /* newPin2 */, const hidl_string& /* aid */) { // TODO implement return Void(); } Return Radio::supplyNetworkDepersonalization(int32_t /* serial */, const hidl_string& /* netPin */) { // TODO implement return Void(); } Return Radio::getCurrentCalls(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::dial(int32_t /* serial */, const ::android::hardware::radio::V1_0::Dial& /* dialInfo */) { // TODO implement return Void(); } Return Radio::getImsiForApp(int32_t /* serial */, const hidl_string& /* aid */) { // TODO implement return Void(); } Return Radio::hangup(int32_t /* serial */, int32_t /* gsmIndex */) { // TODO implement return Void(); } Return Radio::hangupWaitingOrBackground(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::hangupForegroundResumeBackground(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::switchWaitingOrHoldingAndActive(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::conference(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::rejectCall(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getLastCallFailCause(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getSignalStrength(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getVoiceRegistrationState(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getDataRegistrationState(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getOperator(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setRadioPower(int32_t /* serial */, bool /* on */) { // TODO implement return Void(); } Return Radio::sendDtmf(int32_t /* serial */, const hidl_string& /* s */) { // TODO implement return Void(); } Return Radio::sendSms(int32_t /* serial */, const ::android::hardware::radio::V1_0::GsmSmsMessage& /* message */) { // TODO implement return Void(); } Return Radio::sendSMSExpectMore( int32_t /* serial */, const ::android::hardware::radio::V1_0::GsmSmsMessage& /* message */) { // TODO implement return Void(); } Return Radio::setupDataCall( int32_t /* serial */, ::android::hardware::radio::V1_0::RadioTechnology /* radioTechnology */, const ::android::hardware::radio::V1_0::DataProfileInfo& /* dataProfileInfo */, bool /* modemCognitive */, bool /* roamingAllowed */, bool /* isRoaming */) { // TODO implement return Void(); } Return Radio::iccIOForApp(int32_t /* serial */, const ::android::hardware::radio::V1_0::IccIo& /* iccIo */) { // TODO implement return Void(); } Return Radio::sendUssd(int32_t /* serial */, const hidl_string& /* ussd */) { // TODO implement return Void(); } Return Radio::cancelPendingUssd(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getClir(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setClir(int32_t /* serial */, int32_t /* status */) { // TODO implement return Void(); } Return Radio::getCallForwardStatus( int32_t /* serial */, const ::android::hardware::radio::V1_0::CallForwardInfo& /* callInfo */) { // TODO implement return Void(); } Return Radio::setCallForward( int32_t /* serial */, const ::android::hardware::radio::V1_0::CallForwardInfo& /* callInfo */) { // TODO implement return Void(); } Return Radio::getCallWaiting(int32_t /* serial */, int32_t /* serviceClass */) { // TODO implement return Void(); } Return Radio::setCallWaiting(int32_t /* serial */, bool /* enable */, int32_t /* serviceClass */) { // TODO implement return Void(); } Return Radio::acknowledgeLastIncomingGsmSms( int32_t /* serial */, bool /* success */, ::android::hardware::radio::V1_0::SmsAcknowledgeFailCause /* cause */) { // TODO implement return Void(); } Return Radio::acceptCall(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::deactivateDataCall(int32_t /* serial */, int32_t /* cid */, bool /* reasonRadioShutDown */) { // TODO implement return Void(); } Return Radio::getFacilityLockForApp(int32_t /* serial */, const hidl_string& /* facility */, const hidl_string& /* password */, int32_t /* serviceClass */, const hidl_string& /* appId */) { // TODO implement return Void(); } Return Radio::setFacilityLockForApp(int32_t /* serial */, const hidl_string& /* facility */, bool /* lockState */, const hidl_string& /* password */, int32_t /* serviceClass */, const hidl_string& /* appId */) { // TODO implement return Void(); } Return Radio::setBarringPassword(int32_t /* serial */, const hidl_string& /* facility */, const hidl_string& /* oldPassword */, const hidl_string& /* newPassword */) { // TODO implement return Void(); } Return Radio::getNetworkSelectionMode(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setNetworkSelectionModeAutomatic(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setNetworkSelectionModeManual(int32_t /* serial */, const hidl_string& /* operatorNumeric */) { // TODO implement return Void(); } Return Radio::getAvailableNetworks(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::startDtmf(int32_t /* serial */, const hidl_string& /* s */) { // TODO implement return Void(); } Return Radio::stopDtmf(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getBasebandVersion(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::separateConnection(int32_t /* serial */, int32_t /* gsmIndex */) { // TODO implement return Void(); } Return Radio::setMute(int32_t /* serial */, bool /* enable */) { // TODO implement return Void(); } Return Radio::getMute(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getClip(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getDataCallList(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setSuppServiceNotifications(int32_t /* serial */, bool /* enable */) { // TODO implement return Void(); } Return Radio::writeSmsToSim( int32_t /* serial */, const ::android::hardware::radio::V1_0::SmsWriteArgs& /* smsWriteArgs */) { // TODO implement return Void(); } Return Radio::deleteSmsOnSim(int32_t /* serial */, int32_t /* index */) { // TODO implement return Void(); } Return Radio::setBandMode(int32_t /* serial */, ::android::hardware::radio::V1_0::RadioBandMode /* mode */) { // TODO implement return Void(); } Return Radio::getAvailableBandModes(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::sendEnvelope(int32_t /* serial */, const hidl_string& /* command */) { // TODO implement return Void(); } Return Radio::sendTerminalResponseToSim(int32_t /* serial */, const hidl_string& /* commandResponse */) { // TODO implement return Void(); } Return Radio::handleStkCallSetupRequestFromSim(int32_t /* serial */, bool /* accept */) { // TODO implement return Void(); } Return Radio::explicitCallTransfer(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setPreferredNetworkType( int32_t /* serial */, ::android::hardware::radio::V1_0::PreferredNetworkType /* nwType */) { // TODO implement return Void(); } Return Radio::getPreferredNetworkType(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getNeighboringCids(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setLocationUpdates(int32_t /* serial */, bool /* enable */) { // TODO implement return Void(); } Return Radio::setCdmaSubscriptionSource( int32_t /* serial */, ::android::hardware::radio::V1_0::CdmaSubscriptionSource /* cdmaSub */) { // TODO implement return Void(); } Return Radio::setCdmaRoamingPreference( int32_t /* serial */, ::android::hardware::radio::V1_0::CdmaRoamingType /* type */) { // TODO implement return Void(); } Return Radio::getCdmaRoamingPreference(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setTTYMode(int32_t /* serial */, ::android::hardware::radio::V1_0::TtyMode /* mode */) { // TODO implement return Void(); } Return Radio::getTTYMode(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setPreferredVoicePrivacy(int32_t /* serial */, bool /* enable */) { // TODO implement return Void(); } Return Radio::getPreferredVoicePrivacy(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::sendCDMAFeatureCode(int32_t /* serial */, const hidl_string& /* featureCode */) { // TODO implement return Void(); } Return Radio::sendBurstDtmf(int32_t /* serial */, const hidl_string& /* dtmf*/, int32_t /*on*/, int32_t /*off */) { // TODO implement return Void(); } Return Radio::sendCdmaSms(int32_t /* serial */, const ::android::hardware::radio::V1_0::CdmaSmsMessage& /* sms */) { // TODO implement return Void(); } Return Radio::acknowledgeLastIncomingCdmaSms( int32_t /* serial */, const ::android::hardware::radio::V1_0::CdmaSmsAck& /* smsAck */) { // TODO implement return Void(); } Return Radio::getGsmBroadcastConfig(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setGsmBroadcastConfig( int32_t /* serial */, const hidl_vec<::android::hardware::radio::V1_0::GsmBroadcastSmsConfigInfo>& /* configInfo */) { // TODO implement return Void(); } Return Radio::setGsmBroadcastActivation(int32_t /* serial */, bool /* activate */) { // TODO implement return Void(); } Return Radio::getCdmaBroadcastConfig(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setCdmaBroadcastConfig( int32_t /* serial */, const hidl_vec< ::android::hardware::radio::V1_0::CdmaBroadcastSmsConfigInfo>& /* configInfo */) { // TODO implement return Void(); } Return Radio::setCdmaBroadcastActivation(int32_t /* serial */, bool /* activate */) { // TODO implement return Void(); } Return Radio::getCDMASubscription(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::writeSmsToRuim( int32_t /* serial */, const ::android::hardware::radio::V1_0::CdmaSmsWriteArgs& /* cdmaSms */) { // TODO implement return Void(); } Return Radio::deleteSmsOnRuim(int32_t /* serial */, int32_t /* index */) { // TODO implement return Void(); } Return Radio::getDeviceIdentity(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::exitEmergencyCallbackMode(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getSmscAddress(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setSmscAddress(int32_t /* serial */, const hidl_string& /* smsc */) { // TODO implement return Void(); } Return Radio::reportSmsMemoryStatus(int32_t /* serial */, bool /* available */) { // TODO implement return Void(); } Return Radio::reportStkServiceIsRunning(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getCdmaSubscriptionSource(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::requestIsimAuthentication(int32_t /* serial */, const hidl_string& /* challenge */) { // TODO implement return Void(); } Return Radio::acknowledgeIncomingGsmSmsWithPdu(int32_t /* serial */, bool /* success */, const hidl_string& /* ackPdu */) { // TODO implement return Void(); } Return Radio::sendEnvelopeWithStatus(int32_t /* serial */, const hidl_string& /* contents */) { // TODO implement return Void(); } Return Radio::getVoiceRadioTechnology(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getCellInfoList(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setCellInfoListRate(int32_t /* serial */, int32_t /*rate */) { // TODO implement return Void(); } Return Radio::setInitialAttachApn( int32_t /* serial */, const ::android::hardware::radio::V1_0::DataProfileInfo& /* dataProfileInfo */, bool /* modemCognitive */, bool /* isRoaming */) { // TODO implement return Void(); } Return Radio::getImsRegistrationState(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::sendImsSms( int32_t /* serial */, const ::android::hardware::radio::V1_0::ImsSmsMessage& /* message */) { // TODO implement return Void(); } Return Radio::iccTransmitApduBasicChannel( int32_t /* serial */, const ::android::hardware::radio::V1_0::SimApdu& /* message */) { // TODO implement return Void(); } Return Radio::iccOpenLogicalChannel(int32_t /* serial */, const hidl_string& /* aid*/, int32_t /*p2 */) { // TODO implement return Void(); } Return Radio::iccCloseLogicalChannel(int32_t /* serial */, int32_t /* channelId */) { // TODO implement return Void(); } Return Radio::iccTransmitApduLogicalChannel( int32_t /* serial */, const ::android::hardware::radio::V1_0::SimApdu& /* message */) { // TODO implement return Void(); } Return Radio::nvReadItem(int32_t /* serial */, ::android::hardware::radio::V1_0::NvItem /* itemId */) { // TODO implement return Void(); } Return Radio::nvWriteItem(int32_t /* serial */, const ::android::hardware::radio::V1_0::NvWriteItem& /* item */) { // TODO implement return Void(); } Return Radio::nvWriteCdmaPrl(int32_t /* serial */, const hidl_vec& /* prl */) { // TODO implement return Void(); } Return Radio::nvResetConfig(int32_t /* serial */, ::android::hardware::radio::V1_0::ResetNvType /* resetType */) { // TODO implement return Void(); } Return Radio::setUiccSubscription( int32_t /* serial */, const ::android::hardware::radio::V1_0::SelectUiccSub& /* uiccSub */) { // TODO implement return Void(); } Return Radio::setDataAllowed(int32_t /* serial */, bool /* allow */) { // TODO implement return Void(); } Return Radio::getHardwareConfig(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::requestIccSimAuthentication(int32_t /* serial */, int32_t /* authContext */, const hidl_string& /* authData */, const hidl_string& /* aid */) { // TODO implement return Void(); } Return Radio::setDataProfile( int32_t /* serial */, const hidl_vec<::android::hardware::radio::V1_0::DataProfileInfo>& /* profiles */, bool /* isRoaming */) { // TODO implement return Void(); } Return Radio::requestShutdown(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getRadioCapability(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setRadioCapability( int32_t /* serial */, const ::android::hardware::radio::V1_0::RadioCapability& /* rc */) { // TODO implement return Void(); } Return Radio::startLceService(int32_t /* serial */, int32_t /* reportInterval */, bool /* pullMode */) { // TODO implement return Void(); } Return Radio::stopLceService(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::pullLceData(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::getModemActivityInfo(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::setAllowedCarriers( int32_t /* serial */, bool /* allAllowed */, const ::android::hardware::radio::V1_0::CarrierRestrictions& /* carriers */) { // TODO implement return Void(); } Return Radio::getAllowedCarriers(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::sendDeviceState( int32_t /* serial */, ::android::hardware::radio::V1_0::DeviceStateType /* deviceStateType */, bool /* state */) { // TODO implement return Void(); } Return Radio::setIndicationFilter(int32_t /* serial */, hidl_bitfield /* indicationFilter */) { // TODO implement return Void(); } Return Radio::setSimCardPower(int32_t /* serial */, bool /* powerUp */) { // TODO implement return Void(); } Return Radio::responseAcknowledgement() { // TODO implement return Void(); } // Methods from ::android::hardware::radio::V1_1::IRadio follow. Return Radio::setCarrierInfoForImsiEncryption( int32_t /* serial */, const ::android::hardware::radio::V1_1::ImsiEncryptionInfo& /* imsiEncryptionInfo */) { // TODO implement return Void(); } Return Radio::setSimCardPower_1_1( int32_t /* serial */, ::android::hardware::radio::V1_1::CardPowerState /* powerUp */) { // TODO implement return Void(); } Return Radio::startNetworkScan( int32_t /* serial */, const ::android::hardware::radio::V1_1::NetworkScanRequest& /* request */) { // TODO implement return Void(); } Return Radio::stopNetworkScan(int32_t /* serial */) { // TODO implement return Void(); } Return Radio::startKeepalive( int32_t /* serial */, const ::android::hardware::radio::V1_1::KeepaliveRequest& /* keepalive */) { // TODO implement return Void(); } Return Radio::stopKeepalive(int32_t /* serial */, int32_t /* sessionHandle */) { // TODO implement return Void(); } // Methods from ::android::hardware::radio::V1_2::IRadio follow. Return Radio::startNetworkScan_1_2( int32_t /* serial */, const ::android::hardware::radio::V1_2::NetworkScanRequest& /* request */) { // TODO implement return Void(); } Return Radio::setIndicationFilter_1_2( int32_t /* serial */, hidl_bitfield /* indicationFilter */) { // TODO implement return Void(); } Return Radio::setSignalStrengthReportingCriteria( int32_t /* serial */, int32_t /*hysteresisMs*/, int32_t /*hysteresisDb */, const hidl_vec& /* thresholdsDbm */, ::android::hardware::radio::V1_2::AccessNetwork /* accessNetwork */) { // TODO implement return Void(); } Return Radio::setLinkCapacityReportingCriteria( int32_t /* serial */, int32_t /*hysteresisMs*/, int32_t /*hysteresisDlKbps*/, int32_t /*hysteresisUlKbps */, const hidl_vec& /* thresholdsDownlinkKbps */, const hidl_vec& /* thresholdsUplinkKbps */, ::android::hardware::radio::V1_2::AccessNetwork /* accessNetwork */) { // TODO implement return Void(); } Return Radio::setupDataCall_1_2( int32_t /* serial */, ::android::hardware::radio::V1_2::AccessNetwork /* accessNetwork */, const ::android::hardware::radio::V1_0::DataProfileInfo& /* dataProfileInfo */, bool /* modemCognitive */, bool /* roamingAllowed */, bool /* isRoaming */, ::android::hardware::radio::V1_2::DataRequestReason /* reason */, const hidl_vec& /* addresses */, const hidl_vec& /* dnses */) { // TODO implement return Void(); } Return Radio::deactivateDataCall_1_2( int32_t /* serial */, int32_t /* cid */, ::android::hardware::radio::V1_2::DataRequestReason /* reason */) { // TODO implement return Void(); } } // namespace implementation } // namespace V1_2 } // namespace radio } // namespace hardware } // namespace android