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

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

Merge changes from topics "radio-vendor-kvp", "radio-1.2"

* changes:
  Implement generic vendor-specific parameters.
  Branch out Broadcast Radio 1.2 HAL.
parents 5a846617 6f06ffe6
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -92,6 +92,7 @@ LOCAL_SHARED_LIBRARIES += \
    android.hardware.audio.common@2.0 \
    android.hardware.audio.common@2.0 \
    android.hardware.broadcastradio@1.0 \
    android.hardware.broadcastradio@1.0 \
    android.hardware.broadcastradio@1.1 \
    android.hardware.broadcastradio@1.1 \
    android.hardware.broadcastradio@1.2 \
    android.hardware.contexthub@1.0 \
    android.hardware.contexthub@1.0 \
    android.hardware.gnss@1.0 \
    android.hardware.gnss@1.0 \
    android.hardware.ir@1.0 \
    android.hardware.ir@1.0 \
@@ -109,5 +110,5 @@ LOCAL_SHARED_LIBRARIES += \
    android.frameworks.sensorservice@1.0 \
    android.frameworks.sensorservice@1.0 \


LOCAL_STATIC_LIBRARIES += \
LOCAL_STATIC_LIBRARIES += \
    android.hardware.broadcastradio@1.1-utils-lib \
    android.hardware.broadcastradio@common-utils-lib \
    libscrypt_static \
    libscrypt_static \
+34 −22
Original line number Original line Diff line number Diff line
@@ -23,8 +23,9 @@
#include "convert.h"
#include "convert.h"


#include <android/hardware/broadcastradio/1.1/IBroadcastRadio.h>
#include <android/hardware/broadcastradio/1.1/IBroadcastRadio.h>
#include <android/hardware/broadcastradio/1.1/IBroadcastRadioFactory.h>
#include <android/hardware/broadcastradio/1.2/IBroadcastRadioFactory.h>
#include <android/hidl/manager/1.0/IServiceManager.h>
#include <android/hidl/manager/1.0/IServiceManager.h>
#include <broadcastradio-utils/Utils.h>
#include <core_jni_helpers.h>
#include <core_jni_helpers.h>
#include <hidl/ServiceManagement.h>
#include <hidl/ServiceManagement.h>
#include <nativehelper/JNIHelp.h>
#include <nativehelper/JNIHelp.h>
@@ -44,14 +45,16 @@ using hardware::hidl_vec;


namespace V1_0 = hardware::broadcastradio::V1_0;
namespace V1_0 = hardware::broadcastradio::V1_0;
namespace V1_1 = hardware::broadcastradio::V1_1;
namespace V1_1 = hardware::broadcastradio::V1_1;

namespace V1_2 = hardware::broadcastradio::V1_2;
using V1_0::Class;
namespace utils = hardware::broadcastradio::utils;
using V1_0::Result;


using V1_0::BandConfig;
using V1_0::BandConfig;
using V1_0::ProgramInfo;
using V1_0::Class;
using V1_0::MetaData;
using V1_0::ITuner;
using V1_0::ITuner;
using V1_0::MetaData;
using V1_0::ProgramInfo;
using V1_0::Result;
using utils::HalRevision;


static mutex gContextMutex;
static mutex gContextMutex;


@@ -67,10 +70,15 @@ static struct {
    } Tuner;
    } Tuner;
} gjni;
} gjni;


struct Module {
    sp<V1_0::IBroadcastRadio> radioModule;
    HalRevision halRev;
};

struct ServiceContext {
struct ServiceContext {
    ServiceContext() {}
    ServiceContext() {}


    std::vector<sp<V1_0::IBroadcastRadio>> mModules;
    std::vector<Module> mModules;


private:
private:
    DISALLOW_COPY_AND_ASSIGN(ServiceContext);
    DISALLOW_COPY_AND_ASSIGN(ServiceContext);
@@ -139,6 +147,17 @@ static jobject nativeLoadModules(JNIEnv *env, jobject obj, jlong nativeContext)
            continue;
            continue;
        }
        }


        auto halRev = HalRevision::V1_0;
        auto halMinor = 0;
        if (V1_2::IBroadcastRadioFactory::castFrom(factory).withDefault(nullptr) != nullptr) {
            halRev = HalRevision::V1_2;
            halMinor = 2;
        } else if (V1_1::IBroadcastRadioFactory::castFrom(factory).withDefault(nullptr)
                != nullptr) {
            halRev = HalRevision::V1_1;
            halMinor = 1;
        }

        // Second level of scanning - that's unfortunate.
        // Second level of scanning - that's unfortunate.
        for (auto&& clazz : gAllClasses) {
        for (auto&& clazz : gAllClasses) {
            sp<V1_0::IBroadcastRadio> module10 = nullptr;
            sp<V1_0::IBroadcastRadio> module10 = nullptr;
@@ -155,9 +174,9 @@ static jobject nativeLoadModules(JNIEnv *env, jobject obj, jlong nativeContext)
            if (module10 == nullptr) continue;
            if (module10 == nullptr) continue;


            auto idx = ctx.mModules.size();
            auto idx = ctx.mModules.size();
            ctx.mModules.push_back(module10);
            ctx.mModules.push_back({module10, halRev});
            ALOGI("loaded broadcast radio module %zu: %s:%s",
            ALOGI("loaded broadcast radio module %zu: %s:%s (HAL 1.%d)",
                    idx, serviceName.c_str(), V1_0::toString(clazz).c_str());
                    idx, serviceName.c_str(), V1_0::toString(clazz).c_str(), halMinor);


            JavaRef<jobject> jModule = nullptr;
            JavaRef<jobject> jModule = nullptr;
            Result halResult = Result::OK;
            Result halResult = Result::OK;
@@ -198,22 +217,15 @@ static jobject nativeOpenTuner(JNIEnv *env, jobject obj, long nativeContext, jin
        ALOGE("Invalid module ID: %d", moduleId);
        ALOGE("Invalid module ID: %d", moduleId);
        return nullptr;
        return nullptr;
    }
    }
    auto module = ctx.mModules[moduleId];


    HalRevision halRev;
    ALOGI("Opening tuner %d", moduleId);
    if (V1_1::IBroadcastRadio::castFrom(module).withDefault(nullptr) != nullptr) {
    auto module = ctx.mModules[moduleId];
        ALOGI("Opening tuner %d with broadcast radio HAL 1.1", moduleId);
        halRev = HalRevision::V1_1;
    } else {
        ALOGI("Opening tuner %d with broadcast radio HAL 1.0", moduleId);
        halRev = HalRevision::V1_0;
    }


    Region region;
    Region region;
    BandConfig bandConfigHal = convert::BandConfigToHal(env, bandConfig, region);
    BandConfig bandConfigHal = convert::BandConfigToHal(env, bandConfig, region);


    auto tuner = make_javaref(env, env->NewObject(gjni.Tuner.clazz, gjni.Tuner.cstor,
    auto tuner = make_javaref(env, env->NewObject(gjni.Tuner.clazz, gjni.Tuner.cstor,
            callback, halRev, region, withAudio, bandConfigHal.type));
            callback, module.halRev, region, withAudio, bandConfigHal.type));
    if (tuner == nullptr) {
    if (tuner == nullptr) {
        ALOGE("Unable to create new tuner object.");
        ALOGE("Unable to create new tuner object.");
        return nullptr;
        return nullptr;
@@ -223,7 +235,7 @@ static jobject nativeOpenTuner(JNIEnv *env, jobject obj, long nativeContext, jin
    Result halResult;
    Result halResult;
    sp<ITuner> halTuner = nullptr;
    sp<ITuner> halTuner = nullptr;


    auto hidlResult = module->openTuner(bandConfigHal, withAudio, tunerCb,
    auto hidlResult = module.radioModule->openTuner(bandConfigHal, withAudio, tunerCb,
            [&](Result result, const sp<ITuner>& tuner) {
            [&](Result result, const sp<ITuner>& tuner) {
                halResult = result;
                halResult = result;
                halTuner = tuner;
                halTuner = tuner;
@@ -235,7 +247,7 @@ static jobject nativeOpenTuner(JNIEnv *env, jobject obj, long nativeContext, jin
        return nullptr;
        return nullptr;
    }
    }


    Tuner::assignHalInterfaces(env, tuner, module, halTuner);
    Tuner::assignHalInterfaces(env, tuner, module.radioModule, halTuner);
    ALOGD("Opened tuner %p", halTuner.get());
    ALOGD("Opened tuner %p", halTuner.get());
    return tuner.release();
    return tuner.release();
}
}
+6 −3
Original line number Original line Diff line number Diff line
@@ -22,7 +22,7 @@
#include "convert.h"
#include "convert.h"
#include "TunerCallback.h"
#include "TunerCallback.h"


#include <android/hardware/broadcastradio/1.1/IBroadcastRadioFactory.h>
#include <android/hardware/broadcastradio/1.2/IBroadcastRadioFactory.h>
#include <binder/IPCThreadState.h>
#include <binder/IPCThreadState.h>
#include <broadcastradio-utils/Utils.h>
#include <broadcastradio-utils/Utils.h>
#include <core_jni_helpers.h>
#include <core_jni_helpers.h>
@@ -44,13 +44,16 @@ using hardware::hidl_vec;


namespace V1_0 = hardware::broadcastradio::V1_0;
namespace V1_0 = hardware::broadcastradio::V1_0;
namespace V1_1 = hardware::broadcastradio::V1_1;
namespace V1_1 = hardware::broadcastradio::V1_1;
namespace V1_2 = hardware::broadcastradio::V1_2;
namespace utils = hardware::broadcastradio::utils;


using V1_0::Band;
using V1_0::Band;
using V1_0::BandConfig;
using V1_0::BandConfig;
using V1_0::MetaData;
using V1_0::MetaData;
using V1_0::Result;
using V1_0::Result;
using V1_1::ITunerCallback;
using V1_2::ITunerCallback;
using V1_1::ProgramListResult;
using V1_1::ProgramListResult;
using utils::HalRevision;


static mutex gContextMutex;
static mutex gContextMutex;


@@ -310,7 +313,7 @@ static void nativeTune(JNIEnv *env, jobject obj, jlong nativeContext, jobject jS
        convert::ThrowIfFailed(env, halTuner11->tuneByProgramSelector(selector));
        convert::ThrowIfFailed(env, halTuner11->tuneByProgramSelector(selector));
    } else {
    } else {
        uint32_t channel, subChannel;
        uint32_t channel, subChannel;
        if (!V1_1::utils::getLegacyChannel(selector, &channel, &subChannel)) {
        if (!utils::getLegacyChannel(selector, &channel, &subChannel)) {
            jniThrowException(env, "java/lang/IllegalArgumentException",
            jniThrowException(env, "java/lang/IllegalArgumentException",
                    "Can't tune to non-AM/FM channel with HAL<1.1");
                    "Can't tune to non-AM/FM channel with HAL<1.1");
            return;
            return;
+3 −3
Original line number Original line Diff line number Diff line
@@ -22,8 +22,8 @@
#include "JavaRef.h"
#include "JavaRef.h"


#include <android/hardware/broadcastradio/1.1/IBroadcastRadio.h>
#include <android/hardware/broadcastradio/1.1/IBroadcastRadio.h>
#include <android/hardware/broadcastradio/1.1/ITuner.h>
#include <android/hardware/broadcastradio/1.2/ITuner.h>
#include <android/hardware/broadcastradio/1.1/ITunerCallback.h>
#include <android/hardware/broadcastradio/1.2/ITunerCallback.h>
#include <jni.h>
#include <jni.h>
#include <utils/StrongPointer.h>
#include <utils/StrongPointer.h>


@@ -39,7 +39,7 @@ void assignHalInterfaces(JNIEnv *env, JavaRef<jobject> const &jTuner,
        sp<hardware::broadcastradio::V1_0::IBroadcastRadio> halModule,
        sp<hardware::broadcastradio::V1_0::IBroadcastRadio> halModule,
        sp<hardware::broadcastradio::V1_0::ITuner> halTuner);
        sp<hardware::broadcastradio::V1_0::ITuner> halTuner);


sp<hardware::broadcastradio::V1_1::ITunerCallback>
sp<hardware::broadcastradio::V1_2::ITunerCallback>
getNativeCallback(JNIEnv *env, JavaRef<jobject> const &tuner);
getNativeCallback(JNIEnv *env, JavaRef<jobject> const &tuner);


Region getRegion(JNIEnv *env, jobject obj);
Region getRegion(JNIEnv *env, jobject obj);
+15 −2
Original line number Original line Diff line number Diff line
@@ -40,15 +40,19 @@ using hardware::hidl_vec;


namespace V1_0 = hardware::broadcastradio::V1_0;
namespace V1_0 = hardware::broadcastradio::V1_0;
namespace V1_1 = hardware::broadcastradio::V1_1;
namespace V1_1 = hardware::broadcastradio::V1_1;
namespace V1_2 = hardware::broadcastradio::V1_2;
namespace utils = hardware::broadcastradio::utils;


using V1_0::Band;
using V1_0::Band;
using V1_0::BandConfig;
using V1_0::BandConfig;
using V1_0::MetaData;
using V1_0::MetaData;
using V1_0::Result;
using V1_0::Result;
using V1_1::ITunerCallback;
using V1_1::ProgramInfo;
using V1_1::ProgramInfo;
using V1_1::ProgramListResult;
using V1_1::ProgramListResult;
using V1_1::ProgramSelector;
using V1_1::ProgramSelector;
using V1_1::VendorKeyValue;
using V1_2::ITunerCallback;
using utils::HalRevision;


static JavaVM *gvm = nullptr;
static JavaVM *gvm = nullptr;


@@ -117,6 +121,7 @@ public:
    virtual Return<void> backgroundScanComplete(ProgramListResult result);
    virtual Return<void> backgroundScanComplete(ProgramListResult result);
    virtual Return<void> programListChanged();
    virtual Return<void> programListChanged();
    virtual Return<void> currentProgramInfoChanged(const ProgramInfo& info);
    virtual Return<void> currentProgramInfoChanged(const ProgramInfo& info);
    virtual Return<void> parametersUpdated(const hidl_vec<VendorKeyValue>& parameters);
};
};


struct TunerCallbackContext {
struct TunerCallbackContext {
@@ -203,7 +208,7 @@ Return<void> NativeCallback::tuneComplete(Result result, const V1_0::ProgramInfo
        return {};
        return {};
    }
    }


    auto selector = V1_1::utils::make_selector(mBand, info.channel, info.subChannel);
    auto selector = utils::make_selector(mBand, info.channel, info.subChannel);
    return tuneComplete_1_1(result, selector);
    return tuneComplete_1_1(result, selector);
}
}


@@ -338,6 +343,14 @@ Return<void> NativeCallback::currentProgramInfoChanged(const ProgramInfo& info)
    return Return<void>();
    return Return<void>();
}
}


Return<void> NativeCallback::parametersUpdated(const hidl_vec<VendorKeyValue>& parameters) {
    ALOGV("%s", __func__);

    // TODO(b/65862441): pass this callback to the front-end

    return {};
}

static TunerCallbackContext& getNativeContext(jlong nativeContextHandle) {
static TunerCallbackContext& getNativeContext(jlong nativeContextHandle) {
    auto nativeContext = reinterpret_cast<TunerCallbackContext*>(nativeContextHandle);
    auto nativeContext = reinterpret_cast<TunerCallbackContext*>(nativeContextHandle);
    LOG_ALWAYS_FATAL_IF(nativeContext == nullptr, "Native context not initialized");
    LOG_ALWAYS_FATAL_IF(nativeContext == nullptr, "Native context not initialized");
Loading