• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2021, 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_TUNERSERVICE_H
18 #define ANDROID_MEDIA_TUNERSERVICE_H
19 
20 #include <aidl/android/hardware/tv/tuner/DemuxFilterEvent.h>
21 #include <aidl/android/hardware/tv/tuner/DemuxFilterStatus.h>
22 #include <aidl/android/hardware/tv/tuner/ITuner.h>
23 #include <aidl/android/media/tv/tuner/BnTunerService.h>
24 #include <aidl/android/media/tv/tunerresourcemanager/TunerFrontendInfo.h>
25 #include <utils/Mutex.h>
26 
27 #include <map>
28 
29 #include "TunerFilter.h"
30 #include "TunerHelper.h"
31 
32 using ::aidl::android::hardware::tv::tuner::DemuxCapabilities;
33 using ::aidl::android::hardware::tv::tuner::DemuxFilterEvent;
34 using ::aidl::android::hardware::tv::tuner::DemuxFilterStatus;
35 using ::aidl::android::hardware::tv::tuner::FrontendInfo;
36 using ::aidl::android::hardware::tv::tuner::FrontendType;
37 using ::aidl::android::hardware::tv::tuner::ITuner;
38 using ::aidl::android::media::tv::tuner::BnTunerService;
39 using ::aidl::android::media::tv::tuner::ITunerDemux;
40 using ::aidl::android::media::tv::tuner::ITunerFilter;
41 using ::aidl::android::media::tv::tuner::ITunerFilterCallback;
42 using ::aidl::android::media::tv::tuner::ITunerFrontend;
43 using ::aidl::android::media::tv::tuner::ITunerLnb;
44 using ::aidl::android::media::tv::tunerresourcemanager::TunerFrontendInfo;
45 using ::android::Mutex;
46 
47 using namespace std;
48 
49 namespace aidl {
50 namespace android {
51 namespace media {
52 namespace tv {
53 namespace tuner {
54 
55 class TunerService : public BnTunerService {
56 public:
getServiceName()57     static char const *getServiceName() { return "media.tuner"; }
58     static binder_status_t instantiate();
59     TunerService();
60     virtual ~TunerService();
61 
62     ::ndk::ScopedAStatus getFrontendIds(vector<int32_t>* out_ids) override;
63     ::ndk::ScopedAStatus getFrontendInfo(int32_t in_frontendHandle,
64                                          FrontendInfo* _aidl_return) override;
65     ::ndk::ScopedAStatus openFrontend(int32_t in_frontendHandle,
66                                       shared_ptr<ITunerFrontend>* _aidl_return) override;
67     ::ndk::ScopedAStatus openLnb(int32_t in_lnbHandle,
68                                  shared_ptr<ITunerLnb>* _aidl_return) override;
69     ::ndk::ScopedAStatus openLnbByName(const string& in_lnbName,
70                                        shared_ptr<ITunerLnb>* _aidl_return) override;
71     ::ndk::ScopedAStatus openDemux(int32_t in_demuxHandle,
72                                    shared_ptr<ITunerDemux>* _aidl_return) override;
73     ::ndk::ScopedAStatus getDemuxCaps(DemuxCapabilities* _aidl_return) override;
74     ::ndk::ScopedAStatus openDescrambler(int32_t in_descramblerHandle,
75                                          shared_ptr<ITunerDescrambler>* _aidl_return) override;
76     ::ndk::ScopedAStatus getTunerHalVersion(int32_t* _aidl_return) override;
77     ::ndk::ScopedAStatus openSharedFilter(const string& in_filterToken,
78                                           const shared_ptr<ITunerFilterCallback>& in_cb,
79                                           shared_ptr<ITunerFilter>* _aidl_return) override;
80     ::ndk::ScopedAStatus setLna(bool in_bEnable) override;
81     ::ndk::ScopedAStatus setMaxNumberOfFrontends(FrontendType in_frontendType,
82                                                  int32_t in_maxNumber) override;
83     ::ndk::ScopedAStatus getMaxNumberOfFrontends(FrontendType in_frontendType,
84                                                  int32_t* _aidl_return) override;
85 
86     string addFilterToShared(const shared_ptr<TunerFilter>& sharedFilter);
87     void removeSharedFilter(const shared_ptr<TunerFilter>& sharedFilter);
88 
89     static shared_ptr<TunerService> getTunerService();
90 
91 private:
92     bool hasITuner();
93     void updateTunerResources();
94     vector<TunerFrontendInfo> getTRMFrontendInfos();
95     vector<int32_t> getTRMLnbHandles();
96 
97     shared_ptr<ITuner> mTuner;
98     int mTunerVersion = TUNER_HAL_VERSION_UNKNOWN;
99     Mutex mSharedFiltersLock;
100     map<string, shared_ptr<TunerFilter>> mSharedFilters;
101 
102     static shared_ptr<TunerService> sTunerService;
103 };
104 
105 }  // namespace tuner
106 }  // namespace tv
107 }  // namespace media
108 }  // namespace android
109 }  // namespace aidl
110 
111 #endif // ANDROID_MEDIA_TUNERSERVICE_H
112