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