Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 549a39c1 authored by Amy Zhang's avatar Amy Zhang Committed by Android (Google) Code Review
Browse files

Merge changes I8cbbf1e3,I4ed8ec1f

* changes:
  Add FrontendStatusExt1_1 and getStatusExt1_1 to get 1.1 Extended Frontend Status
  Add DTMB Frontend Type and Related Capabilities enums
parents df227a3b 422bb11c
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -82,4 +82,20 @@ interface IFrontend extends @1.0::IFrontend {
     *         UNKNOWN_ERROR if failed for other reasons.
     */
    linkCiCam(uint32_t ciCamId) generates (Result result);

    /**
     * Get the v1_1 extended statuses of the frontend.
     *
     * This retrieve the extended statuses of the frontend for given extended status types.
     *
     * @param statusTypes an array of the extended status types which the caller request.
     *
     * @return result Result status of the operation.
     *         SUCCESS if successful,
     *         INVALID_STATE if tuning can't be applied at current stage,
     *         UNKNOWN_ERROR if tuning failed for other reasons.
     * @return statuses an array of extended statuses the caller requests for.
     */
    getStatusExt1_1(vec<FrontendStatusTypeExt1_1> statusTypes)
        generates (Result result, vec<FrontendStatusExt1_1> statuses);
};
+8 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.hardware.tv.tuner@1.1;

import @1.0::FrontendId;
import @1.0::ITuner;
import @1.0::Result;

@@ -23,4 +24,10 @@ import @1.0::Result;
 * Top level interface to manage Frontend, Demux and Decrambler hardware
 * resources which are needed for Android TV.
 */
interface ITuner extends @1.0::ITuner {};
interface ITuner extends @1.0::ITuner {
    /**
     * Get Dtmb Frontend Capabilities. If no dtmb exists, Result::UNAVAILABLE would be returned.
     */
    getFrontendDtmbCapabilities(FrontendId frontendId)
        generates (Result result, FrontendDtmbCapabilities caps);
};
+77 −0
Original line number Diff line number Diff line
@@ -259,6 +259,83 @@ Return<void> Frontend::getStatus(const hidl_vec<FrontendStatusType>& statusTypes
    return Void();
}

Return<void> Frontend::getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeExt1_1>& statusTypes,
                                       V1_1::IFrontend::getStatusExt1_1_cb _hidl_cb) {
    ALOGV("%s", __FUNCTION__);

    vector<V1_1::FrontendStatusExt1_1> statuses;
    for (int i = 0; i < statusTypes.size(); i++) {
        V1_1::FrontendStatusTypeExt1_1 type = statusTypes[i];
        V1_1::FrontendStatusExt1_1 status;
        // assign randomly selected values for testing.
        switch (type) {
            case V1_1::FrontendStatusTypeExt1_1::MODULATIONS: {
                vector<V1_1::FrontendModulation> modulations;
                V1_1::FrontendModulation modulation;
                modulation.isdbt(FrontendIsdbtModulation::MOD_16QAM);  // value = 1 << 3
                modulations.push_back(modulation);
                status.modulations(modulations);
                break;
            }
            case V1_1::FrontendStatusTypeExt1_1::BERS: {
                vector<uint32_t> bers = {1};
                status.bers(bers);
                break;
            }
            case V1_1::FrontendStatusTypeExt1_1::CODERATES: {
                // value = 1 << 39
                vector<V1_1::FrontendInnerFec> codeRates = {V1_1::FrontendInnerFec::FEC_6_15};
                status.codeRates(codeRates);
                break;
            }
            case V1_1::FrontendStatusTypeExt1_1::GUARD_INTERVAL: {
                V1_1::FrontendGuardInterval interval;
                interval.dvbt(FrontendDvbtGuardInterval::INTERVAL_1_32);  // value = 1 << 1
                status.interval(interval);
                break;
            }
            case V1_1::FrontendStatusTypeExt1_1::TRANSMISSION_MODE: {
                V1_1::FrontendTransmissionMode transMode;
                transMode.dvbt(V1_1::FrontendDvbtTransmissionMode::AUTO);  // value = 1 << 0
                status.transmissionMode(transMode);
                break;
            }
            case V1_1::FrontendStatusTypeExt1_1::UEC: {
                status.uec(4);
                break;
            }
            case V1_1::FrontendStatusTypeExt1_1::T2_SYSTEM_ID: {
                status.systemId(5);
                break;
            }
            case V1_1::FrontendStatusTypeExt1_1::INTERLEAVINGS: {
                V1_1::FrontendInterleaveMode interleave;
                interleave.atsc3(FrontendAtsc3TimeInterleaveMode::AUTO);
                vector<V1_1::FrontendInterleaveMode> interleaving = {interleave};
                status.interleaving(interleaving);
                break;
            }
            case V1_1::FrontendStatusTypeExt1_1::ISDBT_SEGMENTS: {
                vector<uint8_t> segments = {2, 3};
                status.isdbtSegment(segments);
                break;
            }
            case V1_1::FrontendStatusTypeExt1_1::TS_DATA_RATES: {
                vector<uint32_t> dataRates = {4, 5};
                status.tsDataRate(dataRates);
                break;
            }
            default: {
                continue;
            }
        }
        statuses.push_back(status);
    }
    _hidl_cb(Result::SUCCESS, statuses);

    return Void();
}

Return<Result> Frontend::setLna(bool /* bEnable */) {
    ALOGV("%s", __FUNCTION__);

+4 −0
Original line number Diff line number Diff line
@@ -58,6 +58,10 @@ class Frontend : public V1_1::IFrontend {
    virtual Return<void> getStatus(const hidl_vec<FrontendStatusType>& statusTypes,
                                   getStatus_cb _hidl_cb) override;

    virtual Return<void> getStatusExt1_1(
            const hidl_vec<V1_1::FrontendStatusTypeExt1_1>& statusTypes,
            V1_1::IFrontend::getStatusExt1_1_cb _hidl_cb) override;

    virtual Return<Result> setLna(bool bEnable) override;

    virtual Return<Result> setLnb(uint32_t lnb) override;
+17 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ namespace implementation {
Tuner::Tuner() {
    // Static Frontends array to maintain local frontends information
    // Array index matches their FrontendId in the default impl
    mFrontendSize = 8;
    mFrontendSize = 9;
    mFrontends[0] = new Frontend(FrontendType::DVBT, 0, this);
    mFrontends[1] = new Frontend(FrontendType::ATSC, 1, this);
    mFrontends[2] = new Frontend(FrontendType::DVBC, 2, this);
@@ -42,6 +42,8 @@ Tuner::Tuner() {
    mFrontends[5] = new Frontend(FrontendType::ISDBT, 5, this);
    mFrontends[6] = new Frontend(FrontendType::ANALOG, 6, this);
    mFrontends[7] = new Frontend(FrontendType::ATSC, 7, this);
    mFrontends[8] =
            new Frontend(static_cast<V1_0::FrontendType>(V1_1::FrontendType::DTMB), 8, this);

    FrontendInfo::FrontendCapabilities caps;
    caps = FrontendInfo::FrontendCapabilities();
@@ -224,6 +226,20 @@ Return<void> Tuner::openLnbByName(const hidl_string& /*lnbName*/, openLnbByName_
    return Void();
}

Return<void> Tuner::getFrontendDtmbCapabilities(uint32_t frontendId,
                                                getFrontendDtmbCapabilities_cb _hidl_cb) {
    ALOGV("%s", __FUNCTION__);

    if (mFrontends[frontendId] != nullptr &&
        (mFrontends[frontendId]->getFrontendType() ==
         static_cast<V1_0::FrontendType>(V1_1::FrontendType::DTMB))) {
        _hidl_cb(Result::SUCCESS, mDtmbCaps);
    } else {
        _hidl_cb(Result::UNAVAILABLE, mDtmbCaps);
    }
    return Void();
}

void Tuner::setFrontendAsDemuxSource(uint32_t frontendId, uint32_t demuxId) {
    mFrontendToDemux[frontendId] = demuxId;
    if (mFrontends[frontendId] != nullptr && mFrontends[frontendId]->isLocked()) {
Loading