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

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

Merge "Connect Frontend Settings between TunerFrontend and FrontendClient" into sc-dev

parents 951b54e2 2f3c64a1
Loading
Loading
Loading
Loading
+219 −25
Original line number Diff line number Diff line
@@ -21,8 +21,8 @@

#include "FrontendClient.h"

using ::aidl::android::media::tv::tuner::TunerFrontendDvbtSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendScanAtsc3PlpInfo;
using ::aidl::android::media::tv::tuner::TunerFrontendUnionSettings;

using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard;
using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType;
@@ -43,6 +43,7 @@ using ::android::hardware::tv::tuner::V1_1::Constant;
using ::android::hardware::tv::tuner::V1_1::FrontendDtmbModulation;
using ::android::hardware::tv::tuner::V1_1::FrontendDvbtConstellation;
using ::android::hardware::tv::tuner::V1_1::FrontendModulation;
using ::android::hardware::tv::tuner::V1_1::FrontendSpectralInversion;

namespace android {

@@ -86,14 +87,13 @@ void FrontendClient::setHidlFrontend(sp<IFrontend> frontend) {
Result FrontendClient::tune(const FrontendSettings& settings,
        const FrontendSettingsExt1_1& settingsExt1_1) {
    if (mTunerFrontend != NULL) {
        // TODO: aidl frontend settings to include Tuner HAL 1.1 settings
        TunerFrontendSettings tunerFeSettings = getAidlFrontendSettings(settings, settingsExt1_1);
        Status s = mTunerFrontend->tune(tunerFeSettings);
        return ClientHelper::getServiceSpecificErrorCode(s);
    }

    Result result;
    if (mFrontend_1_1 != NULL) {
    if (mFrontend_1_1 != NULL && validateExtendedSettings(settingsExt1_1)) {
        result = mFrontend_1_1->tune_1_1(settings, settingsExt1_1);
        return result;
    }
@@ -123,14 +123,13 @@ Result FrontendClient::stopTune() {
Result FrontendClient::scan(const FrontendSettings& settings, FrontendScanType type,
        const FrontendSettingsExt1_1& settingsExt1_1) {
    if (mTunerFrontend != NULL) {
        // TODO: aidl frontend settings to include Tuner HAL 1.1 settings
        TunerFrontendSettings tunerFeSettings = getAidlFrontendSettings(settings, settingsExt1_1);
        Status s = mTunerFrontend->scan(tunerFeSettings, (int)type);
        return ClientHelper::getServiceSpecificErrorCode(s);
    }

    Result result;
    if (mFrontend_1_1 != NULL) {
    if (mFrontend_1_1 != NULL && validateExtendedSettings(settingsExt1_1)) {
        result = mFrontend_1_1->scan_1_1(settings, type, settingsExt1_1);
        return result;
    }
@@ -293,6 +292,8 @@ Result FrontendClient::close() {
    return Result::INVALID_STATE;
}

/////////////// TunerFrontend Helper Methods ///////////////////////

shared_ptr<ITunerFrontend> FrontendClient::getAidlFrontend() {
    return mTunerFrontend;
}
@@ -302,26 +303,137 @@ int FrontendClient::getId() {
}

TunerFrontendSettings FrontendClient::getAidlFrontendSettings(const FrontendSettings& settings,
        const FrontendSettingsExt1_1& /*settingsExt1_1*/) {
    // TODO: complete hidl to aidl frontend settings conversion
    TunerFrontendSettings s;
        const FrontendSettingsExt1_1& settingsExt1_1) {
    bool isExtended = validateExtendedSettings(settingsExt1_1);
    TunerFrontendSettings s{
        .isExtended = isExtended,
        .endFrequency = (int) settingsExt1_1.endFrequency,
        .inversion = (int) settingsExt1_1.inversion,
    };

    if (settingsExt1_1.settingExt.getDiscriminator()
            == FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dtmb) {
        s.settings.set<TunerFrontendUnionSettings::dtmb>(getAidlDtmbSettings(settingsExt1_1));
        return s;
    }

    switch (settings.getDiscriminator()) {
        case FrontendSettings::hidl_discriminator::analog: {
            s.settings.set<TunerFrontendUnionSettings::analog>(
                    getAidlAnalogSettings(settings, settingsExt1_1));
            break;
        }
        case FrontendSettings::hidl_discriminator::atsc: {
            s.settings.set<TunerFrontendUnionSettings::atsc>(getAidlAtscSettings(settings));
            break;
        }
        case FrontendSettings::hidl_discriminator::atsc3: {
            s.settings.set<TunerFrontendUnionSettings::atsc3>(getAidlAtsc3Settings(settings));
            break;
        }
        case FrontendSettings::hidl_discriminator::dvbs: {
            s.settings.set<TunerFrontendUnionSettings::dvbs>(
                    getAidlDvbsSettings(settings, settingsExt1_1));
            break;
        }
        case FrontendSettings::hidl_discriminator::dvbc: {
            s.settings.set<TunerFrontendUnionSettings::cable>(
                    getAidlCableSettings(settings, settingsExt1_1));
            break;
        }
        case FrontendSettings::hidl_discriminator::dvbt: {
            s.settings.set<TunerFrontendUnionSettings::dvbt>(
                    getAidlDvbtSettings(settings, settingsExt1_1));
            break;
        }
        case FrontendSettings::hidl_discriminator::isdbs: {
            s.settings.set<TunerFrontendUnionSettings::isdbs>(getAidlIsdbsSettings(settings));
            break;
        }
        case FrontendSettings::hidl_discriminator::isdbs3: {
            s.settings.set<TunerFrontendUnionSettings::isdbs3>(getAidlIsdbs3Settings(settings));
            break;
        }
        case FrontendSettings::hidl_discriminator::isdbt: {
            s.settings.set<TunerFrontendUnionSettings::isdbt>(getAidlIsdbtSettings(settings));
            break;
        }
        default:
            break;
    }
    return s;
}

TunerFrontendAnalogSettings FrontendClient::getAidlAnalogSettings(const FrontendSettings& settings,
        const FrontendSettingsExt1_1& settingsExt1_1) {
    TunerFrontendAnalogSettings analogSettings{
        .frequency = (int)settings.analog().frequency,
        .signalType = (int)settings.analog().type,
        .sifStandard = (int)settings.analog().sifStandard,
    };
    if (settingsExt1_1.settingExt.getDiscriminator()
            == FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::analog) {
        analogSettings.isExtended = true;
        analogSettings.aftFlag = (int)settingsExt1_1.settingExt.analog().aftFlag;
    } else {
        analogSettings.isExtended = false;
    }
    return analogSettings;
}

TunerFrontendDvbsSettings FrontendClient::getAidlDvbsSettings(const FrontendSettings& settings,
        const FrontendSettingsExt1_1& settingsExt1_1) {
    TunerFrontendDvbsSettings dvbsSettings{
        .frequency = (int)settings.dvbs().frequency,
        .modulation = (int)settings.dvbs().modulation,
        .codeRate = {
            .fec = (long)settings.dvbs().coderate.fec,
            .isLinear = settings.dvbs().coderate.isLinear,
            .isShortFrames = settings.dvbs().coderate.isShortFrames,
            .bitsPer1000Symbol = (int)settings.dvbs().coderate.bitsPer1000Symbol,
        },
        .symbolRate = (int)settings.dvbs().symbolRate,
        .rolloff = (int)settings.dvbs().rolloff,
        .pilot = (int)settings.dvbs().pilot,
        .inputStreamId = (int)settings.dvbs().inputStreamId,
        .standard = (int)settings.dvbs().standard,
        .vcm = (int)settings.dvbs().vcmMode,
    };
    if (settingsExt1_1.settingExt.getDiscriminator()
            == FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dvbs) {
        dvbsSettings.isExtended = true;
        dvbsSettings.scanType = (int)settingsExt1_1.settingExt.dvbs().scanType;
        dvbsSettings.isDiseqcRxMessage = settingsExt1_1.settingExt.dvbs().isDiseqcRxMessage;
    } else {
        dvbsSettings.isExtended = false;
    }
    return dvbsSettings;
}

TunerFrontendCableSettings FrontendClient::getAidlCableSettings(const FrontendSettings& settings,
        const FrontendSettingsExt1_1& settingsExt1_1) {
    TunerFrontendCableSettings cableSettings{
        .frequency = (int)settings.dvbc().frequency,
        .modulation = (int)settings.dvbc().modulation,
        .innerFec = (long)settings.dvbc().fec,
        .symbolRate = (int)settings.dvbc().symbolRate,
        .outerFec = (int)settings.dvbc().outerFec,
        .annex = (int)settings.dvbc().annex,
        .spectralInversion = (int)settings.dvbc().spectralInversion,
    };
    if (settingsExt1_1.settingExt.getDiscriminator()
            == FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dvbc) {
        cableSettings.isExtended = true;
        cableSettings.interleaveMode = (int)settingsExt1_1.settingExt.dvbc().interleaveMode;
        cableSettings.bandwidth = (int)settingsExt1_1.settingExt.dvbc().bandwidth;
    } else {
        cableSettings.isExtended = false;
    }
    return cableSettings;
}

TunerFrontendDvbtSettings FrontendClient::getAidlDvbtSettings(const FrontendSettings& settings,
        const FrontendSettingsExt1_1& settingsExt1_1) {
    TunerFrontendDvbtSettings dvbtSettings{
        .frequency = (int)settings.dvbt().frequency,
        .transmissionMode = (int)settings.dvbt().transmissionMode,
@@ -338,22 +450,104 @@ TunerFrontendSettings FrontendClient::getAidlFrontendSettings(const FrontendSett
        .plpId = (int)settings.dvbt().plpId,
        .plpGroupId = (int)settings.dvbt().plpGroupId,
    };
            s.set<TunerFrontendSettings::dvbt>(dvbtSettings);
            break;
    if (settingsExt1_1.settingExt.getDiscriminator()
            == FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dvbt) {
        dvbtSettings.isExtended = true;
        dvbtSettings.constellation = (int)settingsExt1_1.settingExt.dvbt().constellation;
        dvbtSettings.transmissionMode =
                (int)settingsExt1_1.settingExt.dvbt().transmissionMode;
    } else {
        dvbtSettings.isExtended = false;
    }
        case FrontendSettings::hidl_discriminator::isdbs: {
            break;
    return dvbtSettings;
}
        case FrontendSettings::hidl_discriminator::isdbs3: {
            break;

TunerFrontendDtmbSettings FrontendClient::getAidlDtmbSettings(
        const FrontendSettingsExt1_1& settingsExt1_1) {
    TunerFrontendDtmbSettings dtmbSettings{
        .frequency = (int)settingsExt1_1.settingExt.dtmb().frequency,
        .transmissionMode = (int)settingsExt1_1.settingExt.dtmb().transmissionMode,
        .bandwidth = (int)settingsExt1_1.settingExt.dtmb().bandwidth,
        .modulation = (int)settingsExt1_1.settingExt.dtmb().modulation,
        .codeRate = (int)settingsExt1_1.settingExt.dtmb().codeRate,
        .guardInterval = (int)settingsExt1_1.settingExt.dtmb().guardInterval,
        .interleaveMode = (int)settingsExt1_1.settingExt.dtmb().interleaveMode,
    };
    return dtmbSettings;
}
        case FrontendSettings::hidl_discriminator::isdbt: {
            break;

TunerFrontendAtscSettings FrontendClient::getAidlAtscSettings(const FrontendSettings& settings) {
    TunerFrontendAtscSettings atscSettings{
        .frequency = (int)settings.atsc().frequency,
        .modulation = (int)settings.atsc().modulation,
    };
    return atscSettings;
}
        default:
            break;

TunerFrontendAtsc3Settings FrontendClient::getAidlAtsc3Settings(const FrontendSettings& settings) {
    TunerFrontendAtsc3Settings atsc3Settings{
        .frequency = (int)settings.atsc3().frequency,
        .bandwidth = (int)settings.atsc3().bandwidth,
        .demodOutputFormat = (int)settings.atsc3().demodOutputFormat,
    };
    atsc3Settings.plpSettings.resize(settings.atsc3().plpSettings.size());
    for (auto plpSetting : settings.atsc3().plpSettings) {
        atsc3Settings.plpSettings.push_back({
            .plpId = (int)plpSetting.plpId,
            .modulation = (int)plpSetting.modulation,
            .interleaveMode = (int)plpSetting.interleaveMode,
            .codeRate = (int)plpSetting.codeRate,
            .fec = (int)plpSetting.fec,
        });
    }
    return s;
    return atsc3Settings;
}

TunerFrontendIsdbsSettings FrontendClient::getAidlIsdbsSettings(const FrontendSettings& settings) {
    TunerFrontendIsdbsSettings isdbsSettings{
        .frequency = (int)settings.isdbs().frequency,
        .streamId = (int)settings.isdbs().streamId,
        .streamIdType = (int)settings.isdbs().streamIdType,
        .modulation = (int)settings.isdbs().modulation,
        .codeRate = (int)settings.isdbs().coderate,
        .symbolRate = (int)settings.isdbs().symbolRate,
        .rolloff = (int)settings.isdbs().rolloff,
    };
    return isdbsSettings;
}

TunerFrontendIsdbs3Settings FrontendClient::getAidlIsdbs3Settings(
        const FrontendSettings& settings) {
    TunerFrontendIsdbs3Settings isdbs3Settings{
        .frequency = (int)settings.isdbs3().frequency,
        .streamId = (int)settings.isdbs3().streamId,
        .streamIdType = (int)settings.isdbs3().streamIdType,
        .modulation = (int)settings.isdbs3().modulation,
        .codeRate = (int)settings.isdbs3().coderate,
        .symbolRate = (int)settings.isdbs3().symbolRate,
        .rolloff = (int)settings.isdbs3().rolloff,
    };
    return isdbs3Settings;
}

TunerFrontendIsdbtSettings FrontendClient::getAidlIsdbtSettings(const FrontendSettings& settings) {
    TunerFrontendIsdbtSettings isdbtSettings{
        .frequency = (int)settings.isdbt().frequency,
        .modulation = (int)settings.isdbt().modulation,
        .bandwidth = (int)settings.isdbt().bandwidth,
        .mode = (int)settings.isdbt().mode,
        .codeRate = (int)settings.isdbt().coderate,
        .guardInterval = (int)settings.isdbt().guardInterval,
        .serviceAreaId = (int)settings.isdbt().serviceAreaId,
    };
    return isdbtSettings;
}

bool FrontendClient::validateExtendedSettings(const FrontendSettingsExt1_1& settingsExt1_1) {
    return settingsExt1_1.endFrequency != (uint32_t)Constant::INVALID_FRONTEND_SETTING_FREQUENCY
            || settingsExt1_1.inversion != FrontendSpectralInversion::UNDEFINED
            || settingsExt1_1.settingExt.getDiscriminator()
                    != FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::noinit;
}

/////////////// TunerFrontendCallback ///////////////////////
+28 −2
Original line number Diff line number Diff line
@@ -31,6 +31,16 @@ using Status = ::ndk::ScopedAStatus;

using ::aidl::android::media::tv::tuner::BnTunerFrontendCallback;
using ::aidl::android::media::tv::tuner::ITunerFrontend;
using ::aidl::android::media::tv::tuner::TunerFrontendAnalogSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendAtscSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3Settings;
using ::aidl::android::media::tv::tuner::TunerFrontendCableSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendDvbsSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendDvbtSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendDtmbSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendIsdbsSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendIsdbs3Settings;
using ::aidl::android::media::tv::tuner::TunerFrontendIsdbtSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendScanMessage;
using ::aidl::android::media::tv::tuner::TunerFrontendSettings;

@@ -172,8 +182,24 @@ public:
    int getId();

private:
    TunerFrontendSettings getAidlFrontendSettings(const FrontendSettings& settings,
            const FrontendSettingsExt1_1& settingsExt1_1);
    TunerFrontendSettings getAidlFrontendSettings(
            const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
    TunerFrontendAnalogSettings getAidlAnalogSettings(
            const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
    TunerFrontendDvbsSettings getAidlDvbsSettings(
            const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
    TunerFrontendCableSettings getAidlCableSettings(
            const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
    TunerFrontendDvbtSettings getAidlDvbtSettings(
            const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
    TunerFrontendDtmbSettings getAidlDtmbSettings(const FrontendSettingsExt1_1& settingsExt1_1);
    TunerFrontendAtscSettings getAidlAtscSettings(const FrontendSettings& settings);
    TunerFrontendAtsc3Settings getAidlAtsc3Settings(const FrontendSettings& settings);
    TunerFrontendIsdbsSettings getAidlIsdbsSettings(const FrontendSettings& settings);
    TunerFrontendIsdbs3Settings getAidlIsdbs3Settings(const FrontendSettings& settings);
    TunerFrontendIsdbtSettings getAidlIsdbtSettings(const FrontendSettings& settings);

    bool validateExtendedSettings(const FrontendSettingsExt1_1& settingsExt1_1);

    /**
     * An AIDL Tuner Frontend Singleton assigned at the first time when the Tuner Client