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

Commit 6e93c9c8 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

Broadcast Radio default implementation: analog forced switch.

Bug: b/36864090
Test: VTS
Change-Id: I2b7bcf2bb3ad7075f39280ab72b32bff5bf166a3
parent 82396e9e
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -52,7 +52,8 @@ const struct {
Tuner::Tuner(const sp<V1_0::ITunerCallback>& callback)
    : mCallback(callback),
      mCallback1_1(ITunerCallback::castFrom(callback).withDefault(nullptr)),
      mVirtualFm(make_fm_radio()) {
      mVirtualFm(make_fm_radio()),
      mIsAnalogForced(false) {
    // TODO (b/36864090): inject this data in a more elegant way
    setCompatibilityLevel(mCallback1_1 == nullptr ? 1 : 2);
}
@@ -320,15 +321,14 @@ Return<void> Tuner::getProgramList(const hidl_string& filter __unused, getProgra

Return<void> Tuner::isAnalogForced(isAnalogForced_cb _hidl_cb) {
    ALOGV("%s", __func__);
    // TODO(b/36864090): implement
    _hidl_cb(Result::INVALID_STATE, false);
    _hidl_cb(Result::OK, mIsAnalogForced);
    return Void();
}

Return<Result> Tuner::setAnalogForced(bool isForced __unused) {
Return<Result> Tuner::setAnalogForced(bool isForced) {
    ALOGV("%s", __func__);
    // TODO(b/36864090): implement
    return Result::INVALID_STATE;
    mIsAnalogForced = isForced;
    return Result::OK;
}

}  // namespace implementation
+1 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ struct Tuner : public ITuner {
    bool mIsTuneCompleted = false;
    ProgramSelector mCurrentProgram = {};
    ProgramInfo mCurrentProgramInfo = {};
    std::atomic<bool> mIsAnalogForced;

    void tuneInternalLocked(const ProgramSelector& sel);
    bool isFmLocked();  // TODO(b/36864090): make it generic, not FM only
+46 −0
Original line number Diff line number Diff line
@@ -416,6 +416,52 @@ TEST_P(BroadcastRadioHalTest, OobImagesOnly) {
    }
}

/**
 * Test AnalogForced switch.
 *
 * Verifies that:
 * - setAnalogForced results either with INVALID_STATE, or isAnalogForced replying the same
 */
TEST_P(BroadcastRadioHalTest, AnalogForcedSwitch) {
    if (skipped) return;
    ASSERT_TRUE(openTuner());

    bool forced;
    Result halIsResult;
    auto isCb = [&](Result result, bool isForced) {
        halIsResult = result;
        forced = isForced;
    };

    // set analog mode
    auto setResult = mTuner->setAnalogForced(true);
    ASSERT_TRUE(setResult.isOk());
    if (Result::INVALID_STATE == setResult) {
        // if setter fails, getter should fail too - it means the switch is not supported at all
        auto isResult = mTuner->isAnalogForced(isCb);
        ASSERT_TRUE(isResult.isOk());
        EXPECT_EQ(Result::INVALID_STATE, halIsResult);
        return;
    }
    ASSERT_EQ(Result::OK, setResult);

    // check, if it's analog
    auto isResult = mTuner->isAnalogForced(isCb);
    ASSERT_TRUE(isResult.isOk());
    EXPECT_EQ(Result::OK, halIsResult);
    ASSERT_TRUE(forced);

    // set digital mode
    setResult = mTuner->setAnalogForced(false);
    ASSERT_EQ(Result::OK, setResult);

    // check, if it's digital
    isResult = mTuner->isAnalogForced(isCb);
    ASSERT_TRUE(isResult.isOk());
    EXPECT_EQ(Result::OK, halIsResult);
    ASSERT_FALSE(forced);
}

INSTANTIATE_TEST_CASE_P(BroadcastRadioHalTestCases, BroadcastRadioHalTest,
                        ::testing::Values(Class::AM_FM, Class::SAT, Class::DT));