1*4d7e907cSAndroid Build Coastguard Worker /* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker #ifndef ANDROID_HARDWARE_BROADCASTRADIO_V2_0_TUNER_H 17*4d7e907cSAndroid Build Coastguard Worker #define ANDROID_HARDWARE_BROADCASTRADIO_V2_0_TUNER_H 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Worker #include "VirtualRadio.h" 20*4d7e907cSAndroid Build Coastguard Worker 21*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/broadcastradio/2.0/ITunerCallback.h> 22*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/broadcastradio/2.0/ITunerSession.h> 23*4d7e907cSAndroid Build Coastguard Worker #include <broadcastradio-utils/WorkerThread.h> 24*4d7e907cSAndroid Build Coastguard Worker 25*4d7e907cSAndroid Build Coastguard Worker #include <optional> 26*4d7e907cSAndroid Build Coastguard Worker 27*4d7e907cSAndroid Build Coastguard Worker namespace android { 28*4d7e907cSAndroid Build Coastguard Worker namespace hardware { 29*4d7e907cSAndroid Build Coastguard Worker namespace broadcastradio { 30*4d7e907cSAndroid Build Coastguard Worker namespace V2_0 { 31*4d7e907cSAndroid Build Coastguard Worker namespace implementation { 32*4d7e907cSAndroid Build Coastguard Worker 33*4d7e907cSAndroid Build Coastguard Worker struct BroadcastRadio; 34*4d7e907cSAndroid Build Coastguard Worker 35*4d7e907cSAndroid Build Coastguard Worker struct TunerSession : public ITunerSession { 36*4d7e907cSAndroid Build Coastguard Worker TunerSession(BroadcastRadio& module, const sp<ITunerCallback>& callback); 37*4d7e907cSAndroid Build Coastguard Worker 38*4d7e907cSAndroid Build Coastguard Worker // V2_0::ITunerSession methods 39*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> tune(const ProgramSelector& program) override; 40*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> scan(bool directionUp, bool skipSubChannel) override; 41*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> step(bool directionUp) override; 42*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> cancel() override; 43*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> startProgramListUpdates(const ProgramFilter& filter); 44*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> stopProgramListUpdates(); 45*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> isConfigFlagSet(ConfigFlag flag, isConfigFlagSet_cb _hidl_cb); 46*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> setConfigFlag(ConfigFlag flag, bool value); 47*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> setParameters(const hidl_vec<VendorKeyValue>& parameters, 48*4d7e907cSAndroid Build Coastguard Worker setParameters_cb _hidl_cb) override; 49*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> getParameters(const hidl_vec<hidl_string>& keys, 50*4d7e907cSAndroid Build Coastguard Worker getParameters_cb _hidl_cb) override; 51*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> close() override; 52*4d7e907cSAndroid Build Coastguard Worker 53*4d7e907cSAndroid Build Coastguard Worker std::optional<AmFmBandRange> getAmFmRangeLocked() const; 54*4d7e907cSAndroid Build Coastguard Worker 55*4d7e907cSAndroid Build Coastguard Worker private: 56*4d7e907cSAndroid Build Coastguard Worker std::mutex mMut; 57*4d7e907cSAndroid Build Coastguard Worker WorkerThread mThread; 58*4d7e907cSAndroid Build Coastguard Worker bool mIsClosed = false; 59*4d7e907cSAndroid Build Coastguard Worker 60*4d7e907cSAndroid Build Coastguard Worker const sp<ITunerCallback> mCallback; 61*4d7e907cSAndroid Build Coastguard Worker 62*4d7e907cSAndroid Build Coastguard Worker std::reference_wrapper<BroadcastRadio> mModule; 63*4d7e907cSAndroid Build Coastguard Worker bool mIsTuneCompleted = false; 64*4d7e907cSAndroid Build Coastguard Worker ProgramSelector mCurrentProgram = {}; 65*4d7e907cSAndroid Build Coastguard Worker 66*4d7e907cSAndroid Build Coastguard Worker void cancelLocked(); 67*4d7e907cSAndroid Build Coastguard Worker void tuneInternalLocked(const ProgramSelector& sel); 68*4d7e907cSAndroid Build Coastguard Worker const VirtualRadio& virtualRadio() const; 69*4d7e907cSAndroid Build Coastguard Worker const BroadcastRadio& module() const; 70*4d7e907cSAndroid Build Coastguard Worker }; 71*4d7e907cSAndroid Build Coastguard Worker 72*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation 73*4d7e907cSAndroid Build Coastguard Worker } // namespace V2_0 74*4d7e907cSAndroid Build Coastguard Worker } // namespace broadcastradio 75*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware 76*4d7e907cSAndroid Build Coastguard Worker } // namespace android 77*4d7e907cSAndroid Build Coastguard Worker 78*4d7e907cSAndroid Build Coastguard Worker #endif // ANDROID_HARDWARE_BROADCASTRADIO_V2_0_TUNER_H 79