/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.hardware.broadcastradio@1.1;

import @1.0::IBroadcastRadio;

interface IBroadcastRadio extends @1.0::IBroadcastRadio {

    /**
     * Retrieve implementation properties.
     * @return properties A Properties structure containing implementation
     *                    description and capabilities.
     */
    getProperties_1_1() generates (Properties properties);

    /**
     * Fetch image from radio module.
     *
     * This call is meant to make V1_0::MetaData lightweight - instead of
     * passing an image data blob in the MetadataType.RAW field, the HAL
     * implementation only passes the identifier, so the client may cache images
     * or even not fetch them.
     *
     * The identifier may be any arbitrary number - sequential, sha256 prefix,
     * or any other unique value selected by the vendor.
     *
     * The data should be a valid PNG, JPEG, GIF or BMP file.
     * Image data with an invalid format must be handled gracefully in the same
     * way as a missing image.
     *
     * The image identifier may become invalid after some time from passing it
     * with metadata struct (due to resource cleanup at the HAL implementation).
     * However, it must remain valid for a currently tuned program at least
     * until currentProgramInfoChanged or programListChanged is called and
     * metadata changes for the current program.
     *
     * There is still a race condition possible (if the HAL deletes the old
     * image immediately after notifying about the new one) between
     * currentProgramInfoChanged callback propagating through the framework and
     * the HAL implementation removing previous image. In such case, client
     * application may expect the new currentProgramInfoChanged callback with
     * updated image identifier.
     *
     * @param id Identifier of an image;
     *           value of 0 is reserved and should be treated as invalid image.
     * @return image A binary blob with image data
     *               or a zero-length vector if identifier doesn't exist.
     */
    getImage(int32_t id) generates (vec<uint8_t> image);
};
