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

Commit 0914a946 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk Committed by Android (Google) Code Review
Browse files

Merge "Implement regional configuration fetching."

parents 2a4fba8b 8b70ee43
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