• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 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_TV_TUNER_CLIENT_H_
18 #define _ANDROID_MEDIA_TV_TUNER_CLIENT_H_
19 
20 #include <aidl/android/media/tv/tuner/ITunerService.h>
21 #include <android/binder_parcel_utils.h>
22 
23 #include "ClientHelper.h"
24 #include "DemuxClient.h"
25 #include "DescramblerClient.h"
26 #include "FilterClient.h"
27 #include "FilterClientCallback.h"
28 #include "FrontendClient.h"
29 #include "LnbClient.h"
30 
31 using Status = ::ndk::ScopedAStatus;
32 
33 using ::aidl::android::hardware::tv::tuner::DemuxCapabilities;
34 using ::aidl::android::hardware::tv::tuner::FrontendInfo;
35 using ::aidl::android::hardware::tv::tuner::FrontendType;
36 using ::aidl::android::hardware::tv::tuner::Result;
37 using ::aidl::android::media::tv::tuner::ITunerService;
38 
39 using namespace std;
40 
41 namespace android {
42 
43 const static int32_t TUNER_HAL_VERSION_UNKNOWN = 0;
44 const static int32_t TUNER_HAL_VERSION_1_0 = 1 << 16;
45 const static int32_t TUNER_HAL_VERSION_1_1 = (1 << 16) | 1;
46 const static int32_t TUNER_HAL_VERSION_2_0 = 2 << 16;
47 
48 struct TunerClient : public RefBase {
49 
50 public:
51     TunerClient();
52     ~TunerClient();
53 
54     /**
55      * Retrieve all the frontend ids.
56      *
57      * @return a list of the available frontend ids
58      */
59     vector<int32_t> getFrontendIds();
60 
61     /**
62      * Open a new interface of FrontendClient given a frontendHandle.
63      *
64      * @param frontendHandle the handle of the frontend granted by TRM.
65      * @return a newly created FrontendClient interface.
66      */
67     sp<FrontendClient> openFrontend(int32_t frontendHandle);
68 
69     /**
70      * Retrieve the granted frontend's information.
71      *
72      * @param id the id of the frontend granted by TRM.
73      * @return the information for the frontend.
74      */
75     shared_ptr<FrontendInfo> getFrontendInfo(int32_t id);
76 
77     /**
78      * Open a new interface of DemuxClient given a demuxHandle.
79      *
80      * @param demuxHandle the handle of the demux granted by TRM.
81      * @return a newly created DemuxClient interface.
82      */
83     sp<DemuxClient> openDemux(int32_t demuxHandle);
84 
85     /**
86      * Retrieve the Demux capabilities.
87      *
88      * @return the demux’s capabilities.
89      */
90     shared_ptr<DemuxCapabilities> getDemuxCaps();
91 
92     /**
93      * Open a new interface of DescramblerClient given a descramblerHandle.
94      *
95      * @param descramblerHandle the handle of the descrambler granted by TRM.
96      * @return a newly created DescramblerClient interface.
97      */
98     sp<DescramblerClient> openDescrambler(int32_t descramblerHandle);
99 
100     /**
101      * Open a new interface of LnbClient given an lnbHandle.
102      *
103      * @param lnbHandle the handle of the LNB granted by TRM.
104      * @return a newly created LnbClient interface.
105      */
106     sp<LnbClient> openLnb(int32_t lnbHandle);
107 
108     /**
109      * Open a new interface of LnbClient given a LNB name.
110      *
111      * @param lnbName the name for an external LNB to be opened.
112      * @return a newly created LnbClient interface.
113      */
114     sp<LnbClient> openLnbByName(string lnbName);
115 
116     /**
117      * Get the current Tuner HAL version. The high 16 bits are the major version number
118      * while the low 16 bits are the minor version. Default value is unknown version 0.
119      */
getHalTunerVersionTunerClient120     int32_t getHalTunerVersion() { return mTunerVersion; }
121 
122     /**
123      * Open a new shared filter client.
124      *
125      * @param filterToken the shared filter token created by FilterClient.
126      * @param cb the FilterClientCallback to receive filter events.
127      * @return a newly created TunerFilter interface.
128      */
129     sp<FilterClient> openSharedFilter(const string& filterToken, sp<FilterClientCallback> cb);
130 
131     /**
132      * Enable or Disable Low Noise Amplifier (LNA).
133      */
134     Result setLna(bool bEnable);
135 
136     /**
137      * Set the maximum frontend number of a given frontend type.
138      *
139      * @param frontendType the frontend type which maximum number will be set.
140      * @param maxNumber the new maximum number.
141      */
142     Result setMaxNumberOfFrontends(FrontendType frontendType, int32_t maxNumber);
143 
144     /**
145      * Get the maximum frontend number of a given frontend type.
146      *
147      * @param frontendType the frontend type which maximum number will be queried.
148      */
149     int getMaxNumberOfFrontends(FrontendType frontendType);
150 
151 private:
152     /**
153      * An AIDL Tuner Service Singleton assigned at the first time the Tuner Client
154      * connects with the Tuner Service. Default null when the service does not exist.
155      */
156     static shared_ptr<ITunerService> mTunerService;
157 
158     // An integer that carries the Tuner version. The high 16 bits are the major version number
159     // while the low 16 bits are the minor version. Default value is unknown version 0.
160     static int32_t mTunerVersion;
161 };
162 }  // namespace android
163 
164 #endif  // _ANDROID_MEDIA_TV_TUNER_CLIENT_H_
165