From 379cb48dcf56fcb640ed0b0495474c241de486d6 Mon Sep 17 00:00:00 2001 From: Amy Zhang Date: Thu, 4 Feb 2021 21:05:11 -0800 Subject: [PATCH] Fully connect TunerFrontend with FrontendClient Test: make Bug: 174095851 Change-Id: I29264464763cdd06b4ef16656b414148eb309618 --- media/jni/tuner/FrontendClient.cpp | 27 ++++--- media/jni/tuner/LnbClient.h | 2 +- media/jni/tuner/TunerClient.cpp | 121 +++++++++++++++++++++++++++-- media/jni/tuner/TunerClient.h | 2 +- 4 files changed, 131 insertions(+), 21 deletions(-) diff --git a/media/jni/tuner/FrontendClient.cpp b/media/jni/tuner/FrontendClient.cpp index f454907851a4a..3a00133c69e28 100644 --- a/media/jni/tuner/FrontendClient.cpp +++ b/media/jni/tuner/FrontendClient.cpp @@ -91,8 +91,8 @@ Result FrontendClient::setCallback(sp frontendClientCall if (mTunerFrontend != NULL) { mAidlCallback = ::ndk::SharedRefBase::make(frontendClientCallback); mAidlCallback->setFrontendType(mType); - mTunerFrontend->setCallback(mAidlCallback); - return Result::SUCCESS; + Status s = mTunerFrontend->setCallback(mAidlCallback); + return ClientHelper::getServiceSpecificErrorCode(s); } mHidlCallback = new HidlFrontendCallback(frontendClientCallback); @@ -243,9 +243,8 @@ vector FrontendClient::getStatusExtended_1_1( Result FrontendClient::setLnb(sp lnbClient) { if (mTunerFrontend != NULL) { - // TODO: handle error message. - /*mTunerFrontend->setLnb(lnbClient->getAidlLnb()); - return Result::SUCCESS;*/ + Status s = mTunerFrontend->setLnb(lnbClient->getAidlLnb()); + return ClientHelper::getServiceSpecificErrorCode(s); } if (mFrontend != NULL) { @@ -258,9 +257,8 @@ Result FrontendClient::setLnb(sp lnbClient) { Result FrontendClient::setLna(bool bEnable) { if (mTunerFrontend != NULL) { - // TODO: handle error message. - /*mTunerFrontend->setLna(bEnable); - return Result::SUCCESS;*/ + Status s = mTunerFrontend->setLna(bEnable); + return ClientHelper::getServiceSpecificErrorCode(s); } if (mFrontend != NULL) { @@ -275,9 +273,11 @@ int FrontendClient::linkCiCamToFrontend(int ciCamId) { int ltsId = (int)Constant::INVALID_LTS_ID; if (mTunerFrontend != NULL) { - // TODO: handle error message. - /*mTunerFrontend->linkCiCamToFrontend(ciCamId, ltsId); - return ltsId;*/ + Status s = mTunerFrontend->linkCiCamToFrontend(ciCamId, <sId); + if (ClientHelper::getServiceSpecificErrorCode(s) == Result::SUCCESS) { + return ltsId; + } + return (int)Constant::INVALID_LTS_ID; } if (mFrontend_1_1 != NULL) { @@ -297,9 +297,8 @@ int FrontendClient::linkCiCamToFrontend(int ciCamId) { Result FrontendClient::unlinkCiCamToFrontend(int ciCamId) { if (mTunerFrontend != NULL) { - // TODO: handle error message. - /*mTunerFrontend->unlinkCiCamToFrontend(ciCamId); - return Result::SUCCESS;*/ + Status s = mTunerFrontend->unlinkCiCamToFrontend(ciCamId); + return ClientHelper::getServiceSpecificErrorCode(s); } if (mFrontend_1_1 != NULL) { diff --git a/media/jni/tuner/LnbClient.h b/media/jni/tuner/LnbClient.h index e7869e890e8ff..465dc2331ecfa 100644 --- a/media/jni/tuner/LnbClient.h +++ b/media/jni/tuner/LnbClient.h @@ -108,7 +108,7 @@ public: */ Result close(); - //shared_ptr getAidlLnb() { return mTunerLnb; } + shared_ptr getAidlLnb() { return mTunerLnb; } void setId(LnbId id) { mId = id; } LnbId getId() { return mId; } diff --git a/media/jni/tuner/TunerClient.cpp b/media/jni/tuner/TunerClient.cpp index 240b144047478..7f954b561567c 100644 --- a/media/jni/tuner/TunerClient.cpp +++ b/media/jni/tuner/TunerClient.cpp @@ -22,7 +22,10 @@ #include "TunerClient.h" +using ::aidl::android::media::tv::tuner::TunerFrontendCapabilities; +using ::aidl::android::media::tv::tuner::TunerFrontendDtmbCapabilities; using ::android::hardware::tv::tuner::V1_0::FrontendId; +using ::android::hardware::tv::tuner::V1_0::FrontendStatusType; using ::android::hardware::tv::tuner::V1_0::FrontendType; namespace android { @@ -136,12 +139,11 @@ sp TunerClient::openFrontend(int frontendHandle) { shared_ptr TunerClient::getFrontendInfo(int id) { if (mTunerService != NULL) { TunerFrontendInfo aidlFrontendInfo; - // TODO: handle error code Status s = mTunerService->getFrontendInfo(id, &aidlFrontendInfo); if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { return NULL; } - return make_shared(FrontendInfoAidlToHidl(aidlFrontendInfo)); + return make_shared(frontendInfoAidlToHidl(aidlFrontendInfo)); } if (mTuner != NULL) { @@ -157,7 +159,22 @@ shared_ptr TunerClient::getFrontendInfo(int id) { } shared_ptr TunerClient::getFrontendDtmbCapabilities(int id) { - // pending aidl interface + if (mTunerService != NULL) { + TunerFrontendDtmbCapabilities dtmbCaps; + Status s = mTunerService->getFrontendDtmbCapabilities(id, &dtmbCaps); + if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { + return NULL; + } + FrontendDtmbCapabilities hidlCaps{ + .transmissionModeCap = static_cast(dtmbCaps.transmissionModeCap), + .bandwidthCap = static_cast(dtmbCaps.bandwidthCap), + .modulationCap = static_cast(dtmbCaps.modulationCap), + .codeRateCap = static_cast(dtmbCaps.codeRateCap), + .guardIntervalCap = static_cast(dtmbCaps.guardIntervalCap), + .interleaveModeCap = static_cast(dtmbCaps.interleaveModeCap), + }; + return make_shared(hidlCaps); + } if (mTuner_1_1 != NULL) { Result result; @@ -487,7 +504,7 @@ DemuxCapabilities TunerClient::getHidlDemuxCaps(TunerDemuxCapabilities& aidlCaps return caps; } -FrontendInfo TunerClient::FrontendInfoAidlToHidl(TunerFrontendInfo aidlFrontendInfo) { +FrontendInfo TunerClient::frontendInfoAidlToHidl(TunerFrontendInfo aidlFrontendInfo) { FrontendInfo hidlFrontendInfo { .type = static_cast(aidlFrontendInfo.type), .minFrequency = static_cast(aidlFrontendInfo.minFrequency), @@ -497,8 +514,102 @@ FrontendInfo TunerClient::FrontendInfoAidlToHidl(TunerFrontendInfo aidlFrontendI .acquireRange = static_cast(aidlFrontendInfo.acquireRange), .exclusiveGroupId = static_cast(aidlFrontendInfo.exclusiveGroupId), }; - // TODO: handle Frontend caps + int size = aidlFrontendInfo.statusCaps.size(); + hidlFrontendInfo.statusCaps.resize(size); + for (int i = 0; i < size; i++) { + hidlFrontendInfo.statusCaps[i] = + static_cast(aidlFrontendInfo.statusCaps[i]); + } + + switch (aidlFrontendInfo.caps.getTag()) { + case TunerFrontendCapabilities::analogCaps: { + auto analog = aidlFrontendInfo.caps.get(); + hidlFrontendInfo.frontendCaps.analogCaps({ + .typeCap = static_cast(analog.typeCap), + .sifStandardCap = static_cast(analog.sifStandardCap), + }); + break; + } + case TunerFrontendCapabilities::atscCaps: { + auto atsc = aidlFrontendInfo.caps.get(); + hidlFrontendInfo.frontendCaps.atscCaps({ + .modulationCap = static_cast(atsc.modulationCap), + }); + break; + } + case TunerFrontendCapabilities::atsc3Caps: { + auto atsc3 = aidlFrontendInfo.caps.get(); + hidlFrontendInfo.frontendCaps.atsc3Caps({ + .bandwidthCap = static_cast(atsc3.bandwidthCap), + .modulationCap = static_cast(atsc3.modulationCap), + .timeInterleaveModeCap = static_cast(atsc3.timeInterleaveModeCap), + .codeRateCap = static_cast(atsc3.codeRateCap), + .fecCap = static_cast(atsc3.fecCap), + .demodOutputFormatCap = static_cast(atsc3.demodOutputFormatCap), + }); + break; + } + case TunerFrontendCapabilities::cableCaps: { + auto cable = aidlFrontendInfo.caps.get(); + hidlFrontendInfo.frontendCaps.dvbcCaps({ + .modulationCap = static_cast(cable.modulationCap), + .fecCap = static_cast(cable.codeRateCap), + .annexCap = static_cast(cable.annexCap), + }); + break; + } + case TunerFrontendCapabilities::dvbsCaps: { + auto dvbs = aidlFrontendInfo.caps.get(); + hidlFrontendInfo.frontendCaps.dvbsCaps({ + .modulationCap = static_cast(dvbs.modulationCap), + .innerfecCap = static_cast(dvbs.codeRateCap), + .standard = static_cast(dvbs.standard), + }); + break; + } + case TunerFrontendCapabilities::dvbtCaps: { + auto dvbt = aidlFrontendInfo.caps.get(); + hidlFrontendInfo.frontendCaps.dvbtCaps({ + .transmissionModeCap = static_cast(dvbt.transmissionModeCap), + .bandwidthCap = static_cast(dvbt.bandwidthCap), + .constellationCap = static_cast(dvbt.constellationCap), + .coderateCap = static_cast(dvbt.codeRateCap), + .hierarchyCap = static_cast(dvbt.hierarchyCap), + .guardIntervalCap = static_cast(dvbt.guardIntervalCap), + .isT2Supported = dvbt.isT2Supported, + .isMisoSupported = dvbt.isMisoSupported, + }); + break; + } + case TunerFrontendCapabilities::isdbsCaps: { + auto isdbs = aidlFrontendInfo.caps.get(); + hidlFrontendInfo.frontendCaps.isdbsCaps({ + .modulationCap = static_cast(isdbs.modulationCap), + .coderateCap = static_cast(isdbs.codeRateCap), + }); + break; + } + case TunerFrontendCapabilities::isdbs3Caps: { + auto isdbs3 = aidlFrontendInfo.caps.get(); + hidlFrontendInfo.frontendCaps.isdbs3Caps({ + .modulationCap = static_cast(isdbs3.modulationCap), + .coderateCap = static_cast(isdbs3.codeRateCap), + }); + break; + } + case TunerFrontendCapabilities::isdbtCaps: { + auto isdbt = aidlFrontendInfo.caps.get(); + hidlFrontendInfo.frontendCaps.isdbtCaps({ + .modeCap = static_cast(isdbt.modeCap), + .bandwidthCap = static_cast(isdbt.bandwidthCap), + .modulationCap = static_cast(isdbt.modulationCap), + .coderateCap = static_cast(isdbt.codeRateCap), + .guardIntervalCap = static_cast(isdbt.guardIntervalCap), + }); + break; + } + } return hidlFrontendInfo; } diff --git a/media/jni/tuner/TunerClient.h b/media/jni/tuner/TunerClient.h index acd018eb1e448..744bf20587660 100644 --- a/media/jni/tuner/TunerClient.h +++ b/media/jni/tuner/TunerClient.h @@ -147,7 +147,7 @@ private: sp openHidlDescrambler(); vector getLnbHandles(); DemuxCapabilities getHidlDemuxCaps(TunerDemuxCapabilities& aidlCaps); - FrontendInfo FrontendInfoAidlToHidl(TunerFrontendInfo aidlFrontendInfo); + FrontendInfo frontendInfoAidlToHidl(TunerFrontendInfo aidlFrontendInfo); void updateTunerResources(); void updateFrontendResources(); void updateLnbResources();