• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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