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

Commit 523e5455 authored by Frankie Lizcano's avatar Frankie Lizcano
Browse files

Tuner HAL VTS: Added LnbDescrambling

This CL implements a new dataflow: LnbDescrambling, which aims to test
descrambling a broadcast brought into the tuner with an Lnb attached.
The struct for the configuration and a function to read this dataflow
from the vendor's input file were added. Additionally, the api was
updated to allow the automatic xml parser to read this new dataflow.
Note, no tests were added for this object yet. Those come later in the
chain. The vendor, at this moment, can only harcode this dataflow. It
will be dynamically configurable later in the chain.

Bug: b/240476983

Test: ts-tradefed run vts --module VtsHalTvTunerTargetTest
Change-Id: I545be7d4b2bea0b80a67fd542a80bba7fa38c4ca
parent 78b42119
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ static DescramblingHardwareConnections descrambling;
static LnbLiveHardwareConnections lnbLive;
static LnbRecordHardwareConnections lnbRecord;
static TimeFilterHardwareConnections timeFilter;
static LnbDescramblingHardwareConnections lnbDescrambling;

/*
 * This function takes in a 2d vector of device Id's
@@ -730,6 +731,7 @@ inline void connectHardwaresToTestCases() {
    TunerTestingConfigAidlReader1_0::connectLnbLive(lnbLive);
    TunerTestingConfigAidlReader1_0::connectLnbRecord(lnbRecord);
    TunerTestingConfigAidlReader1_0::connectDvrPlayback(playback);
    TunerTestingConfigAidlReader1_0::connectLnbDescrambling(lnbDescrambling);
};

inline void determineDataFlows() {
@@ -766,6 +768,10 @@ inline bool validateConnections() {
    feIsValid &=
            lnbRecord.support ? frontendMap.find(lnbRecord.frontendId) != frontendMap.end() : true;

    feIsValid &= lnbDescrambling.support
                         ? frontendMap.find(lnbDescrambling.frontendId) != frontendMap.end()
                         : true;

    if (!feIsValid) {
        ALOGW("[vts config] dynamic config fe connection is invalid.");
        return false;
@@ -850,6 +856,12 @@ inline bool validateConnections() {
                playback.hasExtraFilters ? filterMap.find(filterId) != filterMap.end() : true;
    }

    filterIsValid &=
            lnbDescrambling.support
                    ? filterMap.find(lnbDescrambling.audioFilterId) != filterMap.end() &&
                              filterMap.find(lnbDescrambling.videoFilterId) != filterMap.end()
                    : true;

    if (!filterIsValid) {
        ALOGW("[vts config] dynamic config filter connection is invalid.");
        return false;
@@ -880,6 +892,11 @@ inline bool validateConnections() {
                    ? descramblerMap.find(descrambling.descramblerId) != descramblerMap.end()
                    : true;

    descramblerIsValid &=
            lnbDescrambling.support
                    ? descramblerMap.find(lnbDescrambling.descramblerId) != descramblerMap.end()
                    : true;

    if (!descramblerIsValid) {
        ALOGW("[vts config] dynamic config descrambler connection is invalid.");
        return false;
@@ -889,6 +906,9 @@ inline bool validateConnections() {

    lnbIsValid &= lnbRecord.support ? lnbMap.find(lnbRecord.lnbId) != lnbMap.end() : true;

    lnbIsValid &=
            lnbDescrambling.support ? lnbMap.find(lnbDescrambling.lnbId) != lnbMap.end() : true;

    if (!lnbIsValid) {
        ALOGW("[vts config] dynamic config lnb connection is invalid.");
        return false;
@@ -904,6 +924,10 @@ inline bool validateConnections() {
        diseqcMsgsIsValid &= diseqcMsgMap.find(msg) != diseqcMsgMap.end();
    }

    for (auto& msg : lnbDescrambling.diseqcMsgs) {
        diseqcMsgsIsValid &= diseqcMsgMap.find(msg) != diseqcMsgMap.end();
    }

    if (!diseqcMsgsIsValid) {
        ALOGW("[vts config] dynamic config diseqcMsg is invalid.");
        return false;
+33 −0
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ static bool configuredPlayback = false;
static bool configuredLnbRecord = false;
static bool configuredTimeFilter = false;
static bool configuredDescrambling = false;
static bool configuredLnbDescrambling = false;

const string emptyHardwareId = "";

@@ -229,6 +230,16 @@ struct TimeFilterHardwareConnections {
    string timeFilterId;
};

struct LnbDescramblingHardwareConnections {
    bool support;
    string frontendId;
    string audioFilterId;
    string videoFilterId;
    string lnbId;
    string descramblerId;
    vector<string> diseqcMsgs;
};

struct TunerTestingConfigAidlReader1_0 {
  public:
    static void setConfigFilePath(string path) { mConfigFilePath = path; }
@@ -705,6 +716,28 @@ struct TunerTestingConfigAidlReader1_0 {
        timeFilter.timeFilterId = timeFilterConfig.getTimeFilterConnection();
    }

    static void connectLnbDescrambling(LnbDescramblingHardwareConnections& lnbDescrambling) {
        auto dataFlow = getDataFlowConfiguration();
        if (dataFlow.hasLnbDescrambling()) {
            lnbDescrambling.support = true;
            configuredLnbDescrambling = true;
        } else {
            lnbDescrambling.support = false;
            return;
        }
        auto lnbDescramblingConfig = *dataFlow.getFirstLnbDescrambling();
        lnbDescrambling.frontendId = lnbDescramblingConfig.getFrontendConnection();
        lnbDescrambling.audioFilterId = lnbDescramblingConfig.getAudioFilterConnection();
        lnbDescrambling.videoFilterId = lnbDescramblingConfig.getVideoFilterConnection();
        lnbDescrambling.lnbId = lnbDescramblingConfig.getLnbConnection();
        lnbDescrambling.descramblerId = lnbDescramblingConfig.getDescramblerConnection();
        if (lnbDescramblingConfig.hasDiseqcMsgSender()) {
            for (auto& msgName : lnbDescramblingConfig.getDiseqcMsgSender()) {
                lnbDescrambling.diseqcMsgs.push_back(msgName);
            }
        }
    }

  private:
    static FrontendDvbtSettings readDvbtFrontendSettings(Frontend feConfig) {
        ALOGW("[ConfigReader] fe type is dvbt");
+18 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ package android.media.tuner.testing.configuration.V1_0 {
    method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.Descrambling getDescrambling();
    method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.DvrPlayback getDvrPlayback();
    method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.DvrRecord getDvrRecord();
    method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.LnbDescrambling getLnbDescrambling();
    method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.LnbLive getLnbLive();
    method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.LnbRecord getLnbRecord();
    method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.Scan getScan();
@@ -35,6 +36,7 @@ package android.media.tuner.testing.configuration.V1_0 {
    method public void setDescrambling(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.Descrambling);
    method public void setDvrPlayback(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.DvrPlayback);
    method public void setDvrRecord(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.DvrRecord);
    method public void setLnbDescrambling(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.LnbDescrambling);
    method public void setLnbLive(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.LnbLive);
    method public void setLnbRecord(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.LnbRecord);
    method public void setScan(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.Scan);
@@ -111,6 +113,22 @@ package android.media.tuner.testing.configuration.V1_0 {
    method public void setRecordFilterConnection(@Nullable String);
  }

  public static class DataFlowConfiguration.LnbDescrambling {
    ctor public DataFlowConfiguration.LnbDescrambling();
    method @Nullable public String getAudioFilterConnection();
    method @Nullable public String getDescramblerConnection();
    method @Nullable public java.util.List<java.lang.String> getDiseqcMsgSender();
    method @Nullable public String getFrontendConnection();
    method @Nullable public String getLnbConnection();
    method @Nullable public String getVideoFilterConnection();
    method public void setAudioFilterConnection(@Nullable String);
    method public void setDescramblerConnection(@Nullable String);
    method public void setDiseqcMsgSender(@Nullable java.util.List<java.lang.String>);
    method public void setFrontendConnection(@Nullable String);
    method public void setLnbConnection(@Nullable String);
    method public void setVideoFilterConnection(@Nullable String);
  }

  public static class DataFlowConfiguration.LnbLive {
    ctor public DataFlowConfiguration.LnbLive();
    method @Nullable public String getAudioFilterConnection();
+10 −0
Original line number Diff line number Diff line
@@ -726,6 +726,16 @@
                    <xs:attribute name="timeFilterConnection" type="timeFilterId" use="required"/>
                </xs:complexType>
            </xs:element>
            <xs:element name="lnbDescrambling" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                    <xs:attribute name="frontendConnection" type="frontendId" use="required"/>
                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
                    <xs:attribute name="lnbConnection" type="lnbId" use="required"/>
                    <xs:attribute name="descramblerConnection" type="descramblerId" use="required"/>
                    <xs:attribute name="diseqcMsgSender" type="diseqcMsgSender" use="optional"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>