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_V1_1_TUNER_H 17*4d7e907cSAndroid Build Coastguard Worker #define ANDROID_HARDWARE_BROADCASTRADIO_V1_1_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/1.1/ITuner.h> 22*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/broadcastradio/1.1/ITunerCallback.h> 23*4d7e907cSAndroid Build Coastguard Worker #include <broadcastradio-utils/WorkerThread.h> 24*4d7e907cSAndroid Build Coastguard Worker 25*4d7e907cSAndroid Build Coastguard Worker namespace android { 26*4d7e907cSAndroid Build Coastguard Worker namespace hardware { 27*4d7e907cSAndroid Build Coastguard Worker namespace broadcastradio { 28*4d7e907cSAndroid Build Coastguard Worker namespace V1_1 { 29*4d7e907cSAndroid Build Coastguard Worker namespace implementation { 30*4d7e907cSAndroid Build Coastguard Worker 31*4d7e907cSAndroid Build Coastguard Worker struct BroadcastRadio; 32*4d7e907cSAndroid Build Coastguard Worker 33*4d7e907cSAndroid Build Coastguard Worker struct Tuner : public ITuner { 34*4d7e907cSAndroid Build Coastguard Worker Tuner(const sp<BroadcastRadio> module, V1_0::Class classId, 35*4d7e907cSAndroid Build Coastguard Worker const sp<V1_0::ITunerCallback>& callback); 36*4d7e907cSAndroid Build Coastguard Worker 37*4d7e907cSAndroid Build Coastguard Worker void forceClose(); 38*4d7e907cSAndroid Build Coastguard Worker 39*4d7e907cSAndroid Build Coastguard Worker // V1_1::ITuner methods 40*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> setConfiguration(const V1_0::BandConfig& config) override; 41*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> getConfiguration(getConfiguration_cb _hidl_cb) override; 42*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> scan(V1_0::Direction direction, bool skipSubChannel) override; 43*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> step(V1_0::Direction direction, bool skipSubChannel) override; 44*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> tune(uint32_t channel, uint32_t subChannel) override; 45*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> tuneByProgramSelector(const V1_1::ProgramSelector& program) override; 46*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> cancel() override; 47*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> cancelAnnouncement() override; 48*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> getProgramInformation(getProgramInformation_cb _hidl_cb) override; 49*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> getProgramInformation_1_1(getProgramInformation_1_1_cb _hidl_cb) override; 50*4d7e907cSAndroid Build Coastguard Worker virtual Return<V1_1::ProgramListResult> startBackgroundScan() override; 51*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> getProgramList(const hidl_vec<V1_1::VendorKeyValue>& filter, 52*4d7e907cSAndroid Build Coastguard Worker getProgramList_cb _hidl_cb) override; 53*4d7e907cSAndroid Build Coastguard Worker virtual Return<Result> setAnalogForced(bool isForced) override; 54*4d7e907cSAndroid Build Coastguard Worker virtual Return<void> isAnalogForced(isAnalogForced_cb _hidl_cb) override; 55*4d7e907cSAndroid Build Coastguard Worker 56*4d7e907cSAndroid Build Coastguard Worker private: 57*4d7e907cSAndroid Build Coastguard Worker std::mutex mMut; 58*4d7e907cSAndroid Build Coastguard Worker WorkerThread mThread; 59*4d7e907cSAndroid Build Coastguard Worker bool mIsClosed = false; 60*4d7e907cSAndroid Build Coastguard Worker 61*4d7e907cSAndroid Build Coastguard Worker const sp<BroadcastRadio> mModule; 62*4d7e907cSAndroid Build Coastguard Worker V1_0::Class mClassId; 63*4d7e907cSAndroid Build Coastguard Worker const sp<V1_0::ITunerCallback> mCallback; 64*4d7e907cSAndroid Build Coastguard Worker const sp<V1_1::ITunerCallback> mCallback1_1; 65*4d7e907cSAndroid Build Coastguard Worker 66*4d7e907cSAndroid Build Coastguard Worker std::reference_wrapper<VirtualRadio> mVirtualRadio; 67*4d7e907cSAndroid Build Coastguard Worker bool mIsAmfmConfigSet = false; 68*4d7e907cSAndroid Build Coastguard Worker V1_0::BandConfig mAmfmConfig; 69*4d7e907cSAndroid Build Coastguard Worker bool mIsTuneCompleted = false; 70*4d7e907cSAndroid Build Coastguard Worker V1_1::ProgramSelector mCurrentProgram = {}; 71*4d7e907cSAndroid Build Coastguard Worker V1_1::ProgramInfo mCurrentProgramInfo = {}; 72*4d7e907cSAndroid Build Coastguard Worker std::atomic<bool> mIsAnalogForced; 73*4d7e907cSAndroid Build Coastguard Worker 74*4d7e907cSAndroid Build Coastguard Worker utils::HalRevision getHalRev() const; 75*4d7e907cSAndroid Build Coastguard Worker void setConfigurationInternalLocked(const V1_0::BandConfig& config); 76*4d7e907cSAndroid Build Coastguard Worker void tuneInternalLocked(const V1_1::ProgramSelector& sel); 77*4d7e907cSAndroid Build Coastguard Worker bool autoConfigureLocked(uint64_t frequency); 78*4d7e907cSAndroid Build Coastguard Worker }; 79*4d7e907cSAndroid Build Coastguard Worker 80*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation 81*4d7e907cSAndroid Build Coastguard Worker } // namespace V1_1 82*4d7e907cSAndroid Build Coastguard Worker } // namespace broadcastradio 83*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware 84*4d7e907cSAndroid Build Coastguard Worker } // namespace android 85*4d7e907cSAndroid Build Coastguard Worker 86*4d7e907cSAndroid Build Coastguard Worker #endif // ANDROID_HARDWARE_BROADCASTRADIO_V1_1_TUNER_H 87