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

Commit 8b70ee43 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

Implement regional configuration fetching.

Bug: 69958423
Test: VTS
Change-Id: I7c184191b4f4999bd03b06bd3b2283e028694918
parent c0af94ad
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -16,8 +16,12 @@ hidl_interface {
        "android.hidl.base@1.0",
    ],
    types: [
        "AmFmBandRange",
        "AmFmRegionConfig",
        "ConfigFlag",
        "Constants",
        "DabTableEntry",
        "Deemphasis",
        "IdentifierType",
        "Metadata",
        "MetadataKey",
@@ -28,6 +32,7 @@ hidl_interface {
        "ProgramListChunk",
        "ProgramSelector",
        "Properties",
        "Rds",
        "Result",
        "VendorKeyValue",
    ],
+22 −0
Original line number Diff line number Diff line
@@ -32,6 +32,28 @@ interface IBroadcastRadio {
     */
    getProperties() generates (Properties properties);

    /**
     * Fetches current or possible AM/FM region configuration.
     *
     * @param full If true, returns full hardware capabilities.
     *             If false, returns current regional configuration.
     * @return result OK in case of success.
     *                NOT_SUPPORTED if the tuner doesn't support AM/FM.
     * @return config Hardware capabilities (full=true) or
     *                current configuration (full=false).
     */
    getAmFmRegionConfig(bool full)
            generates (Result result, AmFmRegionConfig config);

    /**
     * Fetches current DAB region configuration.
     *
     * @return result OK in case of success.
     *                NOT_SUPPORTED if the tuner doesn't support DAB.
     * @return config Current configuration.
     */
    getDabRegionConfig() generates (Result result, vec<DabTableEntry> config);

    /**
     * Opens a new tuner session.
     *
+3 −0
Original line number Diff line number Diff line
@@ -24,6 +24,9 @@ cc_binary {
        "-Wextra",
        "-Werror",
    ],
    cppflags: [
        "-std=c++1z",
    ],
    srcs: [
        "BroadcastRadio.cpp",
        "TunerSession.cpp",
+51 −1
Original line number Diff line number Diff line
@@ -33,6 +33,16 @@ using std::map;
using std::mutex;
using std::vector;

static const AmFmRegionConfig gDefaultAmFmConfig = {  //
    {
        {87500, 108000, 100, 100},  // FM
        {153, 282, 3, 9},           // AM LW
        {531, 1620, 9, 9},          // AM MW
        {1600, 30000, 1, 5},        // AM SW
    },
    static_cast<uint32_t>(Deemphasis::D50),
    static_cast<uint32_t>(Rds::RDS)};

static Properties initProperties(const VirtualRadio& virtualRadio) {
    Properties prop = {};

@@ -51,7 +61,9 @@ static Properties initProperties(const VirtualRadio& virtualRadio) {
}

BroadcastRadio::BroadcastRadio(const VirtualRadio& virtualRadio)
    : mVirtualRadio(virtualRadio), mProperties(initProperties(virtualRadio)) {}
    : mVirtualRadio(virtualRadio),
      mProperties(initProperties(virtualRadio)),
      mAmFmConfig(gDefaultAmFmConfig) {}

Return<void> BroadcastRadio::getProperties(getProperties_cb _hidl_cb) {
    ALOGV("%s", __func__);
@@ -59,6 +71,44 @@ Return<void> BroadcastRadio::getProperties(getProperties_cb _hidl_cb) {
    return {};
}

AmFmRegionConfig BroadcastRadio::getAmFmConfig() const {
    lock_guard<mutex> lk(mMut);
    return mAmFmConfig;
}

Return<void> BroadcastRadio::getAmFmRegionConfig(bool full, getAmFmRegionConfig_cb _hidl_cb) {
    ALOGV("%s(%d)", __func__, full);

    if (full) {
        AmFmRegionConfig config = {};
        config.ranges = hidl_vec<AmFmBandRange>({
            {65000, 108000, 10, 0},  // FM
            {150, 30000, 1, 0},      // AM
        });
        config.fmDeemphasis = Deemphasis::D50 | Deemphasis::D75;
        config.fmRds = Rds::RDS | Rds::RBDS;
        _hidl_cb(Result::OK, config);
        return {};
    } else {
        _hidl_cb(Result::OK, getAmFmConfig());
        return {};
    }
}

Return<void> BroadcastRadio::getDabRegionConfig(getDabRegionConfig_cb _hidl_cb) {
    ALOGV("%s", __func__);

    hidl_vec<DabTableEntry> config = {
        {"5A", 174928},  {"7D", 194064},  {"8A", 195936},  {"8B", 197648},  {"9A", 202928},
        {"9B", 204640},  {"9C", 206352},  {"10B", 211648}, {"10C", 213360}, {"10D", 215072},
        {"11A", 216928}, {"11B", 218640}, {"11C", 220352}, {"11D", 222064}, {"12A", 223936},
        {"12B", 225648}, {"12C", 227360}, {"12D", 229072},
    };

    _hidl_cb(Result::OK, config);
    return {};
}

Return<void> BroadcastRadio::openSession(const sp<ITunerCallback>& callback,
                                         openSession_cb _hidl_cb) {
    ALOGV("%s", __func__);
+6 −1
Original line number Diff line number Diff line
@@ -32,14 +32,19 @@ struct BroadcastRadio : public IBroadcastRadio {

    // V2_0::IBroadcastRadio methods
    Return<void> getProperties(getProperties_cb _hidl_cb) override;
    Return<void> getAmFmRegionConfig(bool full, getAmFmRegionConfig_cb _hidl_cb);
    Return<void> getDabRegionConfig(getDabRegionConfig_cb _hidl_cb);
    Return<void> openSession(const sp<ITunerCallback>& callback, openSession_cb _hidl_cb) override;
    Return<void> getImage(uint32_t id, getImage_cb _hidl_cb);

    std::reference_wrapper<const VirtualRadio> mVirtualRadio;
    Properties mProperties;

    AmFmRegionConfig getAmFmConfig() const;

   private:
    std::mutex mMut;
    mutable std::mutex mMut;
    AmFmRegionConfig mAmFmConfig;
    wp<TunerSession> mSession;
};

Loading