106100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk/*
206100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk * Copyright (C) 2017 The Android Open Source Project
306100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk *
406100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk * Licensed under the Apache License, Version 2.0 (the "License");
506100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk * you may not use this file except in compliance with the License.
606100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk * You may obtain a copy of the License at
706100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk *
806100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk *      http://www.apache.org/licenses/LICENSE-2.0
906100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk *
1006100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk * Unless required by applicable law or agreed to in writing, software
1106100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk * distributed under the License is distributed on an "AS IS" BASIS,
1206100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1306100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk * See the License for the specific language governing permissions and
1406100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk * limitations under the License.
1506100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk */
1606100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk#ifndef ANDROID_HARDWARE_BROADCASTRADIO_V2_0_TUNER_H
1706100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk#define ANDROID_HARDWARE_BROADCASTRADIO_V2_0_TUNER_H
1806100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
1906100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk#include "VirtualRadio.h"
2006100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
2106100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk#include <android/hardware/broadcastradio/2.0/ITunerCallback.h>
2206100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk#include <android/hardware/broadcastradio/2.0/ITunerSession.h>
2306100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk#include <broadcastradio-utils/WorkerThread.h>
2406100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
258b70ee43b071df7d942ff695d6b87a1de7e3cf29Tomasz Wasilczyk#include <optional>
268b70ee43b071df7d942ff695d6b87a1de7e3cf29Tomasz Wasilczyk
2706100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyknamespace android {
2806100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyknamespace hardware {
2906100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyknamespace broadcastradio {
3006100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyknamespace V2_0 {
3106100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyknamespace implementation {
3206100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
3306100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczykstruct BroadcastRadio;
3406100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
3506100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczykstruct TunerSession : public ITunerSession {
3606100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    TunerSession(BroadcastRadio& module, const sp<ITunerCallback>& callback);
3706100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
3806100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    // V2_0::ITunerSession methods
3906100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    virtual Return<Result> tune(const ProgramSelector& program) override;
4006100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    virtual Return<Result> scan(bool directionUp, bool skipSubChannel) override;
4106100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    virtual Return<Result> step(bool directionUp) override;
4206100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    virtual Return<void> cancel() override;
43bceb88585dc6c89c6689956b8354b630c8425ae5Tomasz Wasilczyk    virtual Return<Result> startProgramListUpdates(const ProgramFilter& filter);
44bceb88585dc6c89c6689956b8354b630c8425ae5Tomasz Wasilczyk    virtual Return<void> stopProgramListUpdates();
453dd452a979181d9fd1523f8e096c593ad85ded39Tomasz Wasilczyk    virtual Return<void> isConfigFlagSet(ConfigFlag flag, isConfigFlagSet_cb _hidl_cb);
4643fe894562b2fd89a5a01ee8f2cb232b25818decTomasz Wasilczyk    virtual Return<Result> setConfigFlag(ConfigFlag flag, bool value);
4706100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    virtual Return<void> setParameters(const hidl_vec<VendorKeyValue>& parameters,
4806100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk                                       setParameters_cb _hidl_cb) override;
4906100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    virtual Return<void> getParameters(const hidl_vec<hidl_string>& keys,
5006100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk                                       getParameters_cb _hidl_cb) override;
5106100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    virtual Return<void> close() override;
5206100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
538b70ee43b071df7d942ff695d6b87a1de7e3cf29Tomasz Wasilczyk    std::optional<AmFmBandRange> getAmFmRangeLocked() const;
548b70ee43b071df7d942ff695d6b87a1de7e3cf29Tomasz Wasilczyk
5506100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk   private:
5606100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    std::mutex mMut;
5706100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    WorkerThread mThread;
5806100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    bool mIsClosed = false;
5906100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
6006100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    const sp<ITunerCallback> mCallback;
6106100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
6206100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    std::reference_wrapper<BroadcastRadio> mModule;
6306100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    bool mIsTuneCompleted = false;
6406100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    ProgramSelector mCurrentProgram = {};
6506100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
66db902860e8e9148c5849fa12fe7749da88a53cf7Tomasz Wasilczyk    void cancelLocked();
6706100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    void tuneInternalLocked(const ProgramSelector& sel);
6806100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk    const VirtualRadio& virtualRadio() const;
698b70ee43b071df7d942ff695d6b87a1de7e3cf29Tomasz Wasilczyk    const BroadcastRadio& module() const;
7006100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk};
7106100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
7206100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk}  // namespace implementation
7306100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk}  // namespace V2_0
7406100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk}  // namespace broadcastradio
7506100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk}  // namespace hardware
7606100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk}  // namespace android
7706100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk
7806100b39db99dd5b7860a6e981ba9f8d511793faTomasz Wasilczyk#endif  // ANDROID_HARDWARE_BROADCASTRADIO_V2_0_TUNER_H
79