1 /** 2 * Copyright 2020, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ANDROID_MEDIA_TUNERFRONTEND_H 18 #define ANDROID_MEDIA_TUNERFRONTEND_H 19 20 #include <aidl/android/media/tv/tuner/BnTunerFrontend.h> 21 #include <android/hardware/tv/tuner/1.0/ITuner.h> 22 #include <android/hardware/tv/tuner/1.1/IFrontend.h> 23 #include <android/hardware/tv/tuner/1.1/IFrontendCallback.h> 24 #include <media/stagefright/foundation/ADebug.h> 25 #include <utils/Log.h> 26 27 using Status = ::ndk::ScopedAStatus; 28 using ::aidl::android::media::tv::tuner::BnTunerFrontend; 29 using ::aidl::android::media::tv::tuner::ITunerFrontendCallback; 30 using ::aidl::android::media::tv::tuner::ITunerLnb; 31 using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3Settings; 32 using ::aidl::android::media::tv::tuner::TunerFrontendDvbsCodeRate; 33 using ::aidl::android::media::tv::tuner::TunerFrontendScanMessage; 34 using ::aidl::android::media::tv::tuner::TunerFrontendSettings; 35 using ::aidl::android::media::tv::tuner::TunerFrontendStatus; 36 using ::android::hardware::Return; 37 using ::android::hardware::Void; 38 using ::android::hardware::hidl_vec; 39 using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3PlpSettings; 40 using ::android::hardware::tv::tuner::V1_0::FrontendDvbsCodeRate; 41 using ::android::hardware::tv::tuner::V1_0::FrontendEventType; 42 using ::android::hardware::tv::tuner::V1_0::FrontendId; 43 using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage; 44 using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType; 45 using ::android::hardware::tv::tuner::V1_0::FrontendSettings; 46 using ::android::hardware::tv::tuner::V1_0::FrontendStatus; 47 using ::android::hardware::tv::tuner::V1_0::IFrontend; 48 using ::android::hardware::tv::tuner::V1_1::IFrontendCallback; 49 using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageExt1_1; 50 using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageTypeExt1_1; 51 using ::android::hardware::tv::tuner::V1_1::FrontendSettingsExt1_1; 52 using ::android::hardware::tv::tuner::V1_1::FrontendStatusExt1_1; 53 54 using namespace std; 55 56 namespace android { 57 58 class TunerFrontend : public BnTunerFrontend { 59 60 public: 61 TunerFrontend(sp<IFrontend> frontend, int id); 62 virtual ~TunerFrontend(); 63 Status setCallback( 64 const shared_ptr<ITunerFrontendCallback>& tunerFrontendCallback) override; 65 Status tune(const TunerFrontendSettings& settings) override; 66 Status stopTune() override; 67 Status scan(const TunerFrontendSettings& settings, int frontendScanType) override; 68 Status stopScan() override; 69 Status setLnb(const shared_ptr<ITunerLnb>& lnb) override; 70 Status setLna(bool bEnable) override; 71 Status linkCiCamToFrontend(int ciCamId, int32_t* _aidl_return) override; 72 Status unlinkCiCamToFrontend(int ciCamId) override; 73 Status close() override; 74 Status getStatus(const vector<int32_t>& statusTypes, 75 vector<TunerFrontendStatus>* _aidl_return) override; 76 Status getStatusExtended_1_1(const vector<int32_t>& statusTypes, 77 vector<TunerFrontendStatus>* _aidl_return) override; 78 Status getFrontendId(int* _aidl_return) override; 79 80 struct FrontendCallback : public IFrontendCallback { FrontendCallbackFrontendCallback81 FrontendCallback(const shared_ptr<ITunerFrontendCallback> tunerFrontendCallback) 82 : mTunerFrontendCallback(tunerFrontendCallback) {}; 83 84 virtual Return<void> onEvent(FrontendEventType frontendEventType); 85 virtual Return<void> onScanMessage( 86 FrontendScanMessageType type, const FrontendScanMessage& message); 87 virtual Return<void> onScanMessageExt1_1( 88 FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& message); 89 90 shared_ptr<ITunerFrontendCallback> mTunerFrontendCallback; 91 }; 92 93 private: 94 hidl_vec<FrontendAtsc3PlpSettings> getAtsc3PlpSettings( 95 const TunerFrontendAtsc3Settings& settings); 96 FrontendDvbsCodeRate getDvbsCodeRate(const TunerFrontendDvbsCodeRate& codeRate); 97 FrontendSettings getHidlFrontendSettings(const TunerFrontendSettings& aidlSettings); 98 FrontendSettingsExt1_1 getHidlFrontendSettingsExt(const TunerFrontendSettings& aidlSettings); 99 void getAidlFrontendStatus( 100 vector<FrontendStatus>& hidlStatus, vector<TunerFrontendStatus>& aidlStatus); 101 void getAidlFrontendStatusExt( 102 vector<FrontendStatusExt1_1>& hidlStatus, vector<TunerFrontendStatus>& aidlStatus); 103 104 int mId; 105 sp<IFrontend> mFrontend; 106 sp<::android::hardware::tv::tuner::V1_1::IFrontend> mFrontend_1_1; 107 }; 108 109 } // namespace android 110 111 #endif // ANDROID_MEDIA_TUNERFRONTEND_H 112