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

Commit 049475c2 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

Make metadata field mandatory for program info struct.

Test: VTS, manual
Change-Id: I3e4ed1f203dc28315d7c7db10c9ce3d83e4ec59d
parent 0ab12ecf
Loading
Loading
Loading
Loading
+10 −19
Original line number Diff line number Diff line
@@ -172,16 +172,11 @@ public:
    virtual status_t getProgramInformation(struct radio_program_info *info)
    {
        Parcel data, reply;
        if (info == NULL) {
        if (info == nullptr || info->metadata == nullptr) {
            return BAD_VALUE;
        }
        radio_metadata_t *metadata = info->metadata;
        data.writeInterfaceToken(IRadio::getInterfaceDescriptor());
        if (metadata != NULL) {
            data.writeUint32(1);
        } else {
            data.writeUint32(0);
        }
        status_t status = remote()->transact(GET_PROGRAM_INFORMATION, data, &reply);
        if (status == NO_ERROR) {
            status = (status_t)reply.readInt32();
@@ -190,13 +185,13 @@ public:
                // restore local metadata pointer
                info->metadata = metadata;

                uint32_t metatataSize = reply.readUint32();
                if ((metadata != NULL) && (metatataSize != 0)) {
                    radio_metadata_t *newMetadata = (radio_metadata_t *)malloc(metatataSize);
                uint32_t metadataSize = reply.readUint32();
                if (metadataSize != 0) {
                    radio_metadata_t *newMetadata = (radio_metadata_t *)malloc(metadataSize);
                    if (newMetadata == NULL) {
                        return NO_MEMORY;
                    }
                    reply.read(newMetadata, metatataSize);
                    reply.read(newMetadata, metadataSize);
                    status = radio_metadata_add_metadata(&info->metadata, newMetadata);
                    free(newMetadata);
                }
@@ -306,21 +301,17 @@ status_t BnRadio::onTransact(
            CHECK_INTERFACE(IRadio, data, reply);
            struct radio_program_info info;
            status_t status;
            // query metadata only if requested by remote side
            if (data.readUint32() == 1) {

            status = radio_metadata_allocate(&info.metadata, 0, 0);
            if (status != NO_ERROR) {
                return status;
            }
            } else {
                info.metadata = NULL;
            }
            status = getProgramInformation(&info);

            reply->writeInt32(status);
            if (status == NO_ERROR) {
                reply->write(&info, sizeof(struct radio_program_info));
                if ((info.metadata != NULL) && (radio_metadata_get_count(info.metadata) > 0)) {
                if (radio_metadata_get_count(info.metadata) > 0) {
                    size_t size = radio_metadata_get_size(info.metadata);
                    reply->writeUint32((uint32_t)size);
                    reply->write(info.metadata, size);
+3 −6
Original line number Diff line number Diff line
@@ -122,8 +122,7 @@ void HidlUtils::convertBandConfigFromHal(radio_hal_band_config_t *config,

//static
void HidlUtils::convertProgramInfoFromHal(radio_program_info_t *info,
                                          const ProgramInfo *halInfo,
                                          bool withMetadata)
                                          const ProgramInfo *halInfo)
{
    info->channel = halInfo->channel;
    info->sub_channel = halInfo->subChannel;
@@ -131,11 +130,9 @@ void HidlUtils::convertProgramInfoFromHal(radio_program_info_t *info,
    info->stereo = halInfo->stereo;
    info->digital = halInfo->digital;
    info->signal_strength = halInfo->signalStrength;
    if (withMetadata && halInfo->metadata.size() != 0) {
    convertMetaDataFromHal(&info->metadata, halInfo->metadata,
                           halInfo->channel, halInfo->subChannel);
}
}

//static
void HidlUtils::convertMetaDataFromHal(radio_metadata_t **metadata,
+1 −2
Original line number Diff line number Diff line
@@ -38,8 +38,7 @@ public:
    static void convertBandConfigToHal(BandConfig *halConfig,
                                       const radio_hal_band_config_t *config);
    static void convertProgramInfoFromHal(radio_program_info_t *info,
                                          const ProgramInfo *halInfo,
                                          bool withMetadata);
                                          const ProgramInfo *halInfo);
    static void convertMetaDataFromHal(radio_metadata_t **metadata,
                                       const hidl_vec<MetaData>& halMetadata,
                                       uint32_t channel,
+13 −13
Original line number Diff line number Diff line
@@ -233,11 +233,13 @@ int RadioHalHidl::Tuner::getProgramInformation(radio_program_info_t *info)
    if (mHalTuner == 0) {
        return -ENODEV;
    }
    if (info == nullptr || info->metadata == nullptr) {
        return BAD_VALUE;
    }
    ProgramInfo halInfo;
    Result halResult;
    bool withMetaData = (info->metadata != NULL);
    Return<void> hidlReturn = mHalTuner->getProgramInformation(
                    withMetaData, [&](Result result, const ProgramInfo& info) {
        [&](Result result, const ProgramInfo& info) {
            halResult = result;
            if (result == Result::OK) {
                halInfo = info;
@@ -245,7 +247,7 @@ int RadioHalHidl::Tuner::getProgramInformation(radio_program_info_t *info)
        });
    status_t status = checkHidlStatus(hidlReturn.getStatus());
    if (status == NO_ERROR && halResult == Result::OK) {
        HidlUtils::convertProgramInfoFromHal(info, &halInfo, withMetaData);
        HidlUtils::convertProgramInfoFromHal(info, &halInfo);
    }
    return HidlUtils::convertHalResult(halResult);
}
@@ -276,11 +278,9 @@ Return<void> RadioHalHidl::Tuner::tuneComplete(Result result, const ProgramInfo&
    memset(&event, 0, sizeof(radio_hal_event_t));
    event.type = RADIO_EVENT_TUNED;
    event.status = HidlUtils::convertHalResult(result);
    HidlUtils::convertProgramInfoFromHal(&event.info, &info, true);
    HidlUtils::convertProgramInfoFromHal(&event.info, &info);
    onCallback(&event);
    if (event.info.metadata != NULL) {
    radio_metadata_deallocate(event.info.metadata);
    }
    return Return<void>();
}

@@ -290,7 +290,7 @@ Return<void> RadioHalHidl::Tuner::afSwitch(const ProgramInfo& info)
    radio_hal_event_t event;
    memset(&event, 0, sizeof(radio_hal_event_t));
    event.type = RADIO_EVENT_AF_SWITCH;
    HidlUtils::convertProgramInfoFromHal(&event.info, &info, true);
    HidlUtils::convertProgramInfoFromHal(&event.info, &info);
    onCallback(&event);
    if (event.info.metadata != NULL) {
        radio_metadata_deallocate(event.info.metadata);