1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright 2020 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
17*4d7e907cSAndroid Build Coastguard Worker #define LOG_TAG "[email protected]"
18*4d7e907cSAndroid Build Coastguard Worker
19*4d7e907cSAndroid Build Coastguard Worker #include "Frontend.h"
20*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/tv/tuner/1.1/IFrontendCallback.h>
21*4d7e907cSAndroid Build Coastguard Worker #include <utils/Log.h>
22*4d7e907cSAndroid Build Coastguard Worker
23*4d7e907cSAndroid Build Coastguard Worker namespace android {
24*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
25*4d7e907cSAndroid Build Coastguard Worker namespace tv {
26*4d7e907cSAndroid Build Coastguard Worker namespace tuner {
27*4d7e907cSAndroid Build Coastguard Worker namespace V1_0 {
28*4d7e907cSAndroid Build Coastguard Worker namespace implementation {
29*4d7e907cSAndroid Build Coastguard Worker
Frontend(FrontendType type,FrontendId id,sp<Tuner> tuner)30*4d7e907cSAndroid Build Coastguard Worker Frontend::Frontend(FrontendType type, FrontendId id, sp<Tuner> tuner) {
31*4d7e907cSAndroid Build Coastguard Worker mType = type;
32*4d7e907cSAndroid Build Coastguard Worker mId = id;
33*4d7e907cSAndroid Build Coastguard Worker mTunerService = tuner;
34*4d7e907cSAndroid Build Coastguard Worker // Init callback to nullptr
35*4d7e907cSAndroid Build Coastguard Worker mCallback = nullptr;
36*4d7e907cSAndroid Build Coastguard Worker }
37*4d7e907cSAndroid Build Coastguard Worker
~Frontend()38*4d7e907cSAndroid Build Coastguard Worker Frontend::~Frontend() {}
39*4d7e907cSAndroid Build Coastguard Worker
close()40*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::close() {
41*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
42*4d7e907cSAndroid Build Coastguard Worker // Reset callback
43*4d7e907cSAndroid Build Coastguard Worker mCallback = nullptr;
44*4d7e907cSAndroid Build Coastguard Worker mIsLocked = false;
45*4d7e907cSAndroid Build Coastguard Worker mTunerService->removeFrontend(mId);
46*4d7e907cSAndroid Build Coastguard Worker
47*4d7e907cSAndroid Build Coastguard Worker return Result::SUCCESS;
48*4d7e907cSAndroid Build Coastguard Worker }
49*4d7e907cSAndroid Build Coastguard Worker
setCallback(const sp<IFrontendCallback> & callback)50*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::setCallback(const sp<IFrontendCallback>& callback) {
51*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
52*4d7e907cSAndroid Build Coastguard Worker if (callback == nullptr) {
53*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ WARN ] Set Frontend callback with nullptr");
54*4d7e907cSAndroid Build Coastguard Worker return Result::INVALID_ARGUMENT;
55*4d7e907cSAndroid Build Coastguard Worker }
56*4d7e907cSAndroid Build Coastguard Worker
57*4d7e907cSAndroid Build Coastguard Worker mCallback = callback;
58*4d7e907cSAndroid Build Coastguard Worker return Result::SUCCESS;
59*4d7e907cSAndroid Build Coastguard Worker }
60*4d7e907cSAndroid Build Coastguard Worker
tune(const FrontendSettings &)61*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::tune(const FrontendSettings& /* settings */) {
62*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
63*4d7e907cSAndroid Build Coastguard Worker if (mCallback == nullptr) {
64*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ WARN ] Frontend callback is not set when tune");
65*4d7e907cSAndroid Build Coastguard Worker return Result::INVALID_STATE;
66*4d7e907cSAndroid Build Coastguard Worker }
67*4d7e907cSAndroid Build Coastguard Worker
68*4d7e907cSAndroid Build Coastguard Worker mTunerService->frontendStartTune(mId);
69*4d7e907cSAndroid Build Coastguard Worker mCallback->onEvent(FrontendEventType::LOCKED);
70*4d7e907cSAndroid Build Coastguard Worker mIsLocked = true;
71*4d7e907cSAndroid Build Coastguard Worker return Result::SUCCESS;
72*4d7e907cSAndroid Build Coastguard Worker }
73*4d7e907cSAndroid Build Coastguard Worker
tune_1_1(const FrontendSettings & settings,const V1_1::FrontendSettingsExt1_1 &)74*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::tune_1_1(const FrontendSettings& settings,
75*4d7e907cSAndroid Build Coastguard Worker const V1_1::FrontendSettingsExt1_1& /*settingsExt1_1*/) {
76*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
77*4d7e907cSAndroid Build Coastguard Worker return tune(settings);
78*4d7e907cSAndroid Build Coastguard Worker }
79*4d7e907cSAndroid Build Coastguard Worker
stopTune()80*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::stopTune() {
81*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
82*4d7e907cSAndroid Build Coastguard Worker
83*4d7e907cSAndroid Build Coastguard Worker mTunerService->frontendStopTune(mId);
84*4d7e907cSAndroid Build Coastguard Worker mIsLocked = false;
85*4d7e907cSAndroid Build Coastguard Worker
86*4d7e907cSAndroid Build Coastguard Worker return Result::SUCCESS;
87*4d7e907cSAndroid Build Coastguard Worker }
88*4d7e907cSAndroid Build Coastguard Worker
scan(const FrontendSettings & settings,FrontendScanType type)89*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::scan(const FrontendSettings& settings, FrontendScanType type) {
90*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
91*4d7e907cSAndroid Build Coastguard Worker
92*4d7e907cSAndroid Build Coastguard Worker // If it's in middle of scanning, stop it first.
93*4d7e907cSAndroid Build Coastguard Worker if (mScanThread.joinable()) {
94*4d7e907cSAndroid Build Coastguard Worker mScanThread.join();
95*4d7e907cSAndroid Build Coastguard Worker }
96*4d7e907cSAndroid Build Coastguard Worker
97*4d7e907cSAndroid Build Coastguard Worker mFrontendSettings = settings;
98*4d7e907cSAndroid Build Coastguard Worker mFrontendScanType = type;
99*4d7e907cSAndroid Build Coastguard Worker mScanThread = std::thread(&Frontend::scanThreadLoop, this);
100*4d7e907cSAndroid Build Coastguard Worker
101*4d7e907cSAndroid Build Coastguard Worker return Result::SUCCESS;
102*4d7e907cSAndroid Build Coastguard Worker }
103*4d7e907cSAndroid Build Coastguard Worker
scanThreadLoop()104*4d7e907cSAndroid Build Coastguard Worker void Frontend::scanThreadLoop() {
105*4d7e907cSAndroid Build Coastguard Worker FrontendScanMessage msg;
106*4d7e907cSAndroid Build Coastguard Worker
107*4d7e907cSAndroid Build Coastguard Worker if (mIsLocked) {
108*4d7e907cSAndroid Build Coastguard Worker msg.isEnd(true);
109*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::END, msg);
110*4d7e907cSAndroid Build Coastguard Worker return;
111*4d7e907cSAndroid Build Coastguard Worker }
112*4d7e907cSAndroid Build Coastguard Worker
113*4d7e907cSAndroid Build Coastguard Worker uint32_t frequency;
114*4d7e907cSAndroid Build Coastguard Worker switch (mFrontendSettings.getDiscriminator()) {
115*4d7e907cSAndroid Build Coastguard Worker case FrontendSettings::hidl_discriminator::analog:
116*4d7e907cSAndroid Build Coastguard Worker frequency = mFrontendSettings.analog().frequency;
117*4d7e907cSAndroid Build Coastguard Worker break;
118*4d7e907cSAndroid Build Coastguard Worker case FrontendSettings::hidl_discriminator::atsc:
119*4d7e907cSAndroid Build Coastguard Worker frequency = mFrontendSettings.atsc().frequency;
120*4d7e907cSAndroid Build Coastguard Worker break;
121*4d7e907cSAndroid Build Coastguard Worker case FrontendSettings::hidl_discriminator::atsc3:
122*4d7e907cSAndroid Build Coastguard Worker frequency = mFrontendSettings.atsc3().frequency;
123*4d7e907cSAndroid Build Coastguard Worker break;
124*4d7e907cSAndroid Build Coastguard Worker case FrontendSettings::hidl_discriminator::dvbs:
125*4d7e907cSAndroid Build Coastguard Worker frequency = mFrontendSettings.dvbs().frequency;
126*4d7e907cSAndroid Build Coastguard Worker break;
127*4d7e907cSAndroid Build Coastguard Worker case FrontendSettings::hidl_discriminator::dvbc:
128*4d7e907cSAndroid Build Coastguard Worker frequency = mFrontendSettings.dvbc().frequency;
129*4d7e907cSAndroid Build Coastguard Worker break;
130*4d7e907cSAndroid Build Coastguard Worker case FrontendSettings::hidl_discriminator::dvbt:
131*4d7e907cSAndroid Build Coastguard Worker frequency = mFrontendSettings.dvbt().frequency;
132*4d7e907cSAndroid Build Coastguard Worker break;
133*4d7e907cSAndroid Build Coastguard Worker case FrontendSettings::hidl_discriminator::isdbs:
134*4d7e907cSAndroid Build Coastguard Worker frequency = mFrontendSettings.isdbs().frequency;
135*4d7e907cSAndroid Build Coastguard Worker break;
136*4d7e907cSAndroid Build Coastguard Worker case FrontendSettings::hidl_discriminator::isdbs3:
137*4d7e907cSAndroid Build Coastguard Worker frequency = mFrontendSettings.isdbs3().frequency;
138*4d7e907cSAndroid Build Coastguard Worker break;
139*4d7e907cSAndroid Build Coastguard Worker case FrontendSettings::hidl_discriminator::isdbt:
140*4d7e907cSAndroid Build Coastguard Worker frequency = mFrontendSettings.isdbt().frequency;
141*4d7e907cSAndroid Build Coastguard Worker break;
142*4d7e907cSAndroid Build Coastguard Worker }
143*4d7e907cSAndroid Build Coastguard Worker
144*4d7e907cSAndroid Build Coastguard Worker if (mFrontendScanType == FrontendScanType::SCAN_BLIND) {
145*4d7e907cSAndroid Build Coastguard Worker frequency += 100 * 1000;
146*4d7e907cSAndroid Build Coastguard Worker }
147*4d7e907cSAndroid Build Coastguard Worker
148*4d7e907cSAndroid Build Coastguard Worker msg.frequencies({frequency});
149*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::FREQUENCY, msg);
150*4d7e907cSAndroid Build Coastguard Worker
151*4d7e907cSAndroid Build Coastguard Worker msg.progressPercent(20);
152*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::PROGRESS_PERCENT, msg);
153*4d7e907cSAndroid Build Coastguard Worker
154*4d7e907cSAndroid Build Coastguard Worker msg.symbolRates({30});
155*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::SYMBOL_RATE, msg);
156*4d7e907cSAndroid Build Coastguard Worker
157*4d7e907cSAndroid Build Coastguard Worker if (mType == FrontendType::DVBT) {
158*4d7e907cSAndroid Build Coastguard Worker msg.hierarchy(FrontendDvbtHierarchy::HIERARCHY_NON_NATIVE);
159*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::HIERARCHY, msg);
160*4d7e907cSAndroid Build Coastguard Worker }
161*4d7e907cSAndroid Build Coastguard Worker
162*4d7e907cSAndroid Build Coastguard Worker if (mType == FrontendType::ANALOG) {
163*4d7e907cSAndroid Build Coastguard Worker msg.analogType(FrontendAnalogType::PAL);
164*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::ANALOG_TYPE, msg);
165*4d7e907cSAndroid Build Coastguard Worker }
166*4d7e907cSAndroid Build Coastguard Worker
167*4d7e907cSAndroid Build Coastguard Worker msg.plpIds({3});
168*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::PLP_IDS, msg);
169*4d7e907cSAndroid Build Coastguard Worker
170*4d7e907cSAndroid Build Coastguard Worker msg.groupIds({2});
171*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::GROUP_IDS, msg);
172*4d7e907cSAndroid Build Coastguard Worker
173*4d7e907cSAndroid Build Coastguard Worker msg.inputStreamIds({1});
174*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::INPUT_STREAM_IDS, msg);
175*4d7e907cSAndroid Build Coastguard Worker
176*4d7e907cSAndroid Build Coastguard Worker FrontendScanMessage::Standard s;
177*4d7e907cSAndroid Build Coastguard Worker switch (mType) {
178*4d7e907cSAndroid Build Coastguard Worker case FrontendType::DVBT:
179*4d7e907cSAndroid Build Coastguard Worker s.tStd(FrontendDvbtStandard::AUTO);
180*4d7e907cSAndroid Build Coastguard Worker msg.std(s);
181*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::STANDARD, msg);
182*4d7e907cSAndroid Build Coastguard Worker break;
183*4d7e907cSAndroid Build Coastguard Worker case FrontendType::DVBS:
184*4d7e907cSAndroid Build Coastguard Worker s.sStd(FrontendDvbsStandard::AUTO);
185*4d7e907cSAndroid Build Coastguard Worker msg.std(s);
186*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::STANDARD, msg);
187*4d7e907cSAndroid Build Coastguard Worker break;
188*4d7e907cSAndroid Build Coastguard Worker case FrontendType::ANALOG:
189*4d7e907cSAndroid Build Coastguard Worker s.sifStd(FrontendAnalogSifStandard::AUTO);
190*4d7e907cSAndroid Build Coastguard Worker msg.std(s);
191*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::STANDARD, msg);
192*4d7e907cSAndroid Build Coastguard Worker break;
193*4d7e907cSAndroid Build Coastguard Worker default:
194*4d7e907cSAndroid Build Coastguard Worker break;
195*4d7e907cSAndroid Build Coastguard Worker }
196*4d7e907cSAndroid Build Coastguard Worker
197*4d7e907cSAndroid Build Coastguard Worker FrontendScanAtsc3PlpInfo info{
198*4d7e907cSAndroid Build Coastguard Worker .plpId = 1,
199*4d7e907cSAndroid Build Coastguard Worker .bLlsFlag = false,
200*4d7e907cSAndroid Build Coastguard Worker };
201*4d7e907cSAndroid Build Coastguard Worker msg.atsc3PlpInfos({info});
202*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::ATSC3_PLP_INFO, msg);
203*4d7e907cSAndroid Build Coastguard Worker
204*4d7e907cSAndroid Build Coastguard Worker sp<V1_1::IFrontendCallback> frontendCallback_v1_1 =
205*4d7e907cSAndroid Build Coastguard Worker V1_1::IFrontendCallback::castFrom(mCallback);
206*4d7e907cSAndroid Build Coastguard Worker if (frontendCallback_v1_1 != NULL) {
207*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendScanMessageExt1_1 msg;
208*4d7e907cSAndroid Build Coastguard Worker msg.modulation().dvbc(FrontendDvbcModulation::MOD_16QAM);
209*4d7e907cSAndroid Build Coastguard Worker frontendCallback_v1_1->onScanMessageExt1_1(V1_1::FrontendScanMessageTypeExt1_1::MODULATION,
210*4d7e907cSAndroid Build Coastguard Worker msg);
211*4d7e907cSAndroid Build Coastguard Worker msg.isHighPriority(true);
212*4d7e907cSAndroid Build Coastguard Worker frontendCallback_v1_1->onScanMessageExt1_1(
213*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendScanMessageTypeExt1_1::HIGH_PRIORITY, msg);
214*4d7e907cSAndroid Build Coastguard Worker } else {
215*4d7e907cSAndroid Build Coastguard Worker ALOGD("[Frontend] Couldn't cast to V1_1 IFrontendCallback");
216*4d7e907cSAndroid Build Coastguard Worker }
217*4d7e907cSAndroid Build Coastguard Worker
218*4d7e907cSAndroid Build Coastguard Worker msg.isLocked(true);
219*4d7e907cSAndroid Build Coastguard Worker mCallback->onScanMessage(FrontendScanMessageType::LOCKED, msg);
220*4d7e907cSAndroid Build Coastguard Worker mIsLocked = true;
221*4d7e907cSAndroid Build Coastguard Worker }
222*4d7e907cSAndroid Build Coastguard Worker
scan_1_1(const FrontendSettings & settings,FrontendScanType type,const V1_1::FrontendSettingsExt1_1 & settingsExt1_1)223*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::scan_1_1(const FrontendSettings& settings, FrontendScanType type,
224*4d7e907cSAndroid Build Coastguard Worker const V1_1::FrontendSettingsExt1_1& settingsExt1_1) {
225*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
226*4d7e907cSAndroid Build Coastguard Worker ALOGD("[Frontend] scan_1_1 end frequency %d", settingsExt1_1.endFrequency);
227*4d7e907cSAndroid Build Coastguard Worker return scan(settings, type);
228*4d7e907cSAndroid Build Coastguard Worker }
229*4d7e907cSAndroid Build Coastguard Worker
stopScan()230*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::stopScan() {
231*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
232*4d7e907cSAndroid Build Coastguard Worker
233*4d7e907cSAndroid Build Coastguard Worker if (mScanThread.joinable()) {
234*4d7e907cSAndroid Build Coastguard Worker mScanThread.join();
235*4d7e907cSAndroid Build Coastguard Worker }
236*4d7e907cSAndroid Build Coastguard Worker
237*4d7e907cSAndroid Build Coastguard Worker mIsLocked = false;
238*4d7e907cSAndroid Build Coastguard Worker return Result::SUCCESS;
239*4d7e907cSAndroid Build Coastguard Worker }
240*4d7e907cSAndroid Build Coastguard Worker
getStatus(const hidl_vec<FrontendStatusType> & statusTypes,getStatus_cb _hidl_cb)241*4d7e907cSAndroid Build Coastguard Worker Return<void> Frontend::getStatus(const hidl_vec<FrontendStatusType>& statusTypes,
242*4d7e907cSAndroid Build Coastguard Worker getStatus_cb _hidl_cb) {
243*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
244*4d7e907cSAndroid Build Coastguard Worker
245*4d7e907cSAndroid Build Coastguard Worker vector<FrontendStatus> statuses;
246*4d7e907cSAndroid Build Coastguard Worker for (int i = 0; i < statusTypes.size(); i++) {
247*4d7e907cSAndroid Build Coastguard Worker FrontendStatusType type = statusTypes[i];
248*4d7e907cSAndroid Build Coastguard Worker FrontendStatus status;
249*4d7e907cSAndroid Build Coastguard Worker // assign randomly selected values for testing.
250*4d7e907cSAndroid Build Coastguard Worker switch (type) {
251*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::DEMOD_LOCK: {
252*4d7e907cSAndroid Build Coastguard Worker status.isDemodLocked(true);
253*4d7e907cSAndroid Build Coastguard Worker break;
254*4d7e907cSAndroid Build Coastguard Worker }
255*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::SNR: {
256*4d7e907cSAndroid Build Coastguard Worker status.snr(221);
257*4d7e907cSAndroid Build Coastguard Worker break;
258*4d7e907cSAndroid Build Coastguard Worker }
259*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::BER: {
260*4d7e907cSAndroid Build Coastguard Worker status.ber(1);
261*4d7e907cSAndroid Build Coastguard Worker break;
262*4d7e907cSAndroid Build Coastguard Worker }
263*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::PER: {
264*4d7e907cSAndroid Build Coastguard Worker status.per(2);
265*4d7e907cSAndroid Build Coastguard Worker break;
266*4d7e907cSAndroid Build Coastguard Worker }
267*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::PRE_BER: {
268*4d7e907cSAndroid Build Coastguard Worker status.preBer(3);
269*4d7e907cSAndroid Build Coastguard Worker break;
270*4d7e907cSAndroid Build Coastguard Worker }
271*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::SIGNAL_QUALITY: {
272*4d7e907cSAndroid Build Coastguard Worker status.signalQuality(4);
273*4d7e907cSAndroid Build Coastguard Worker break;
274*4d7e907cSAndroid Build Coastguard Worker }
275*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::SIGNAL_STRENGTH: {
276*4d7e907cSAndroid Build Coastguard Worker status.signalStrength(5);
277*4d7e907cSAndroid Build Coastguard Worker break;
278*4d7e907cSAndroid Build Coastguard Worker }
279*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::SYMBOL_RATE: {
280*4d7e907cSAndroid Build Coastguard Worker status.symbolRate(6);
281*4d7e907cSAndroid Build Coastguard Worker break;
282*4d7e907cSAndroid Build Coastguard Worker }
283*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::FEC: {
284*4d7e907cSAndroid Build Coastguard Worker status.innerFec(FrontendInnerFec::FEC_2_9); // value = 1 << 7
285*4d7e907cSAndroid Build Coastguard Worker break;
286*4d7e907cSAndroid Build Coastguard Worker }
287*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::MODULATION: {
288*4d7e907cSAndroid Build Coastguard Worker FrontendModulationStatus modulationStatus;
289*4d7e907cSAndroid Build Coastguard Worker switch (mType) {
290*4d7e907cSAndroid Build Coastguard Worker case FrontendType::ISDBS: {
291*4d7e907cSAndroid Build Coastguard Worker modulationStatus.isdbs(
292*4d7e907cSAndroid Build Coastguard Worker FrontendIsdbsModulation::MOD_BPSK); // value = 1 << 1
293*4d7e907cSAndroid Build Coastguard Worker status.modulation(modulationStatus);
294*4d7e907cSAndroid Build Coastguard Worker break;
295*4d7e907cSAndroid Build Coastguard Worker }
296*4d7e907cSAndroid Build Coastguard Worker case FrontendType::DVBC: {
297*4d7e907cSAndroid Build Coastguard Worker modulationStatus.dvbc(FrontendDvbcModulation::MOD_16QAM); // value = 1 << 1
298*4d7e907cSAndroid Build Coastguard Worker status.modulation(modulationStatus);
299*4d7e907cSAndroid Build Coastguard Worker break;
300*4d7e907cSAndroid Build Coastguard Worker }
301*4d7e907cSAndroid Build Coastguard Worker case FrontendType::DVBS: {
302*4d7e907cSAndroid Build Coastguard Worker modulationStatus.dvbs(FrontendDvbsModulation::MOD_QPSK); // value = 1 << 1
303*4d7e907cSAndroid Build Coastguard Worker status.modulation(modulationStatus);
304*4d7e907cSAndroid Build Coastguard Worker break;
305*4d7e907cSAndroid Build Coastguard Worker }
306*4d7e907cSAndroid Build Coastguard Worker case FrontendType::ISDBS3: {
307*4d7e907cSAndroid Build Coastguard Worker modulationStatus.isdbs3(
308*4d7e907cSAndroid Build Coastguard Worker FrontendIsdbs3Modulation::MOD_BPSK); // value = 1 << 1
309*4d7e907cSAndroid Build Coastguard Worker status.modulation(modulationStatus);
310*4d7e907cSAndroid Build Coastguard Worker break;
311*4d7e907cSAndroid Build Coastguard Worker }
312*4d7e907cSAndroid Build Coastguard Worker case FrontendType::ISDBT: {
313*4d7e907cSAndroid Build Coastguard Worker modulationStatus.isdbt(
314*4d7e907cSAndroid Build Coastguard Worker FrontendIsdbtModulation::MOD_DQPSK); // value = 1 << 1
315*4d7e907cSAndroid Build Coastguard Worker status.modulation(modulationStatus);
316*4d7e907cSAndroid Build Coastguard Worker break;
317*4d7e907cSAndroid Build Coastguard Worker }
318*4d7e907cSAndroid Build Coastguard Worker default:
319*4d7e907cSAndroid Build Coastguard Worker break;
320*4d7e907cSAndroid Build Coastguard Worker }
321*4d7e907cSAndroid Build Coastguard Worker break;
322*4d7e907cSAndroid Build Coastguard Worker }
323*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::SPECTRAL: {
324*4d7e907cSAndroid Build Coastguard Worker status.inversion(FrontendDvbcSpectralInversion::NORMAL);
325*4d7e907cSAndroid Build Coastguard Worker break;
326*4d7e907cSAndroid Build Coastguard Worker }
327*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::LNB_VOLTAGE: {
328*4d7e907cSAndroid Build Coastguard Worker status.lnbVoltage(LnbVoltage::VOLTAGE_5V);
329*4d7e907cSAndroid Build Coastguard Worker break;
330*4d7e907cSAndroid Build Coastguard Worker }
331*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::PLP_ID: {
332*4d7e907cSAndroid Build Coastguard Worker status.plpId(101); // type uint8_t
333*4d7e907cSAndroid Build Coastguard Worker break;
334*4d7e907cSAndroid Build Coastguard Worker }
335*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::EWBS: {
336*4d7e907cSAndroid Build Coastguard Worker status.isEWBS(false);
337*4d7e907cSAndroid Build Coastguard Worker break;
338*4d7e907cSAndroid Build Coastguard Worker }
339*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::AGC: {
340*4d7e907cSAndroid Build Coastguard Worker status.agc(7);
341*4d7e907cSAndroid Build Coastguard Worker break;
342*4d7e907cSAndroid Build Coastguard Worker }
343*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::LNA: {
344*4d7e907cSAndroid Build Coastguard Worker status.isLnaOn(false);
345*4d7e907cSAndroid Build Coastguard Worker break;
346*4d7e907cSAndroid Build Coastguard Worker }
347*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::LAYER_ERROR: {
348*4d7e907cSAndroid Build Coastguard Worker vector<bool> v = {false, true, true};
349*4d7e907cSAndroid Build Coastguard Worker status.isLayerError(v);
350*4d7e907cSAndroid Build Coastguard Worker break;
351*4d7e907cSAndroid Build Coastguard Worker }
352*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::MER: {
353*4d7e907cSAndroid Build Coastguard Worker status.mer(8);
354*4d7e907cSAndroid Build Coastguard Worker break;
355*4d7e907cSAndroid Build Coastguard Worker }
356*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::FREQ_OFFSET: {
357*4d7e907cSAndroid Build Coastguard Worker status.freqOffset(9);
358*4d7e907cSAndroid Build Coastguard Worker break;
359*4d7e907cSAndroid Build Coastguard Worker }
360*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::HIERARCHY: {
361*4d7e907cSAndroid Build Coastguard Worker status.hierarchy(FrontendDvbtHierarchy::HIERARCHY_1_NATIVE);
362*4d7e907cSAndroid Build Coastguard Worker break;
363*4d7e907cSAndroid Build Coastguard Worker }
364*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::RF_LOCK: {
365*4d7e907cSAndroid Build Coastguard Worker status.isRfLocked(false);
366*4d7e907cSAndroid Build Coastguard Worker break;
367*4d7e907cSAndroid Build Coastguard Worker }
368*4d7e907cSAndroid Build Coastguard Worker case FrontendStatusType::ATSC3_PLP_INFO: {
369*4d7e907cSAndroid Build Coastguard Worker vector<FrontendStatusAtsc3PlpInfo> v;
370*4d7e907cSAndroid Build Coastguard Worker FrontendStatusAtsc3PlpInfo info1{
371*4d7e907cSAndroid Build Coastguard Worker .plpId = 3,
372*4d7e907cSAndroid Build Coastguard Worker .isLocked = false,
373*4d7e907cSAndroid Build Coastguard Worker .uec = 313,
374*4d7e907cSAndroid Build Coastguard Worker };
375*4d7e907cSAndroid Build Coastguard Worker FrontendStatusAtsc3PlpInfo info2{
376*4d7e907cSAndroid Build Coastguard Worker .plpId = 5,
377*4d7e907cSAndroid Build Coastguard Worker .isLocked = true,
378*4d7e907cSAndroid Build Coastguard Worker .uec = 515,
379*4d7e907cSAndroid Build Coastguard Worker };
380*4d7e907cSAndroid Build Coastguard Worker v.push_back(info1);
381*4d7e907cSAndroid Build Coastguard Worker v.push_back(info2);
382*4d7e907cSAndroid Build Coastguard Worker status.plpInfo(v);
383*4d7e907cSAndroid Build Coastguard Worker break;
384*4d7e907cSAndroid Build Coastguard Worker }
385*4d7e907cSAndroid Build Coastguard Worker default: {
386*4d7e907cSAndroid Build Coastguard Worker continue;
387*4d7e907cSAndroid Build Coastguard Worker }
388*4d7e907cSAndroid Build Coastguard Worker }
389*4d7e907cSAndroid Build Coastguard Worker statuses.push_back(status);
390*4d7e907cSAndroid Build Coastguard Worker }
391*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(Result::SUCCESS, statuses);
392*4d7e907cSAndroid Build Coastguard Worker
393*4d7e907cSAndroid Build Coastguard Worker return Void();
394*4d7e907cSAndroid Build Coastguard Worker }
395*4d7e907cSAndroid Build Coastguard Worker
getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeExt1_1> & statusTypes,V1_1::IFrontend::getStatusExt1_1_cb _hidl_cb)396*4d7e907cSAndroid Build Coastguard Worker Return<void> Frontend::getStatusExt1_1(const hidl_vec<V1_1::FrontendStatusTypeExt1_1>& statusTypes,
397*4d7e907cSAndroid Build Coastguard Worker V1_1::IFrontend::getStatusExt1_1_cb _hidl_cb) {
398*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
399*4d7e907cSAndroid Build Coastguard Worker
400*4d7e907cSAndroid Build Coastguard Worker vector<V1_1::FrontendStatusExt1_1> statuses;
401*4d7e907cSAndroid Build Coastguard Worker for (int i = 0; i < statusTypes.size(); i++) {
402*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendStatusTypeExt1_1 type = statusTypes[i];
403*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendStatusExt1_1 status;
404*4d7e907cSAndroid Build Coastguard Worker
405*4d7e907cSAndroid Build Coastguard Worker switch (type) {
406*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::MODULATIONS: {
407*4d7e907cSAndroid Build Coastguard Worker vector<V1_1::FrontendModulation> modulations;
408*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendModulation modulation;
409*4d7e907cSAndroid Build Coastguard Worker switch ((int)mType) {
410*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::ISDBS: {
411*4d7e907cSAndroid Build Coastguard Worker modulation.isdbs(FrontendIsdbsModulation::MOD_BPSK); // value = 1 << 1
412*4d7e907cSAndroid Build Coastguard Worker modulations.push_back(modulation);
413*4d7e907cSAndroid Build Coastguard Worker status.modulations(modulations);
414*4d7e907cSAndroid Build Coastguard Worker break;
415*4d7e907cSAndroid Build Coastguard Worker }
416*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::DVBC: {
417*4d7e907cSAndroid Build Coastguard Worker modulation.dvbc(FrontendDvbcModulation::MOD_16QAM); // value = 1 << 1
418*4d7e907cSAndroid Build Coastguard Worker modulations.push_back(modulation);
419*4d7e907cSAndroid Build Coastguard Worker status.modulations(modulations);
420*4d7e907cSAndroid Build Coastguard Worker break;
421*4d7e907cSAndroid Build Coastguard Worker }
422*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::DVBS: {
423*4d7e907cSAndroid Build Coastguard Worker modulation.dvbs(FrontendDvbsModulation::MOD_QPSK); // value = 1 << 1
424*4d7e907cSAndroid Build Coastguard Worker modulations.push_back(modulation);
425*4d7e907cSAndroid Build Coastguard Worker status.modulations(modulations);
426*4d7e907cSAndroid Build Coastguard Worker break;
427*4d7e907cSAndroid Build Coastguard Worker }
428*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::DVBT: {
429*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 16
430*4d7e907cSAndroid Build Coastguard Worker modulation.dvbt(V1_1::FrontendDvbtConstellation::CONSTELLATION_16QAM_R);
431*4d7e907cSAndroid Build Coastguard Worker modulations.push_back(modulation);
432*4d7e907cSAndroid Build Coastguard Worker status.modulations(modulations);
433*4d7e907cSAndroid Build Coastguard Worker break;
434*4d7e907cSAndroid Build Coastguard Worker }
435*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::ISDBS3: {
436*4d7e907cSAndroid Build Coastguard Worker modulation.isdbs3(FrontendIsdbs3Modulation::MOD_BPSK); // value = 1 << 1
437*4d7e907cSAndroid Build Coastguard Worker modulations.push_back(modulation);
438*4d7e907cSAndroid Build Coastguard Worker status.modulations(modulations);
439*4d7e907cSAndroid Build Coastguard Worker break;
440*4d7e907cSAndroid Build Coastguard Worker }
441*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::ISDBT: {
442*4d7e907cSAndroid Build Coastguard Worker modulation.isdbt(FrontendIsdbtModulation::MOD_DQPSK); // value = 1 << 1
443*4d7e907cSAndroid Build Coastguard Worker modulations.push_back(modulation);
444*4d7e907cSAndroid Build Coastguard Worker status.modulations(modulations);
445*4d7e907cSAndroid Build Coastguard Worker break;
446*4d7e907cSAndroid Build Coastguard Worker }
447*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::ATSC: {
448*4d7e907cSAndroid Build Coastguard Worker modulation.atsc(FrontendAtscModulation::MOD_8VSB); // value = 1 << 2
449*4d7e907cSAndroid Build Coastguard Worker modulations.push_back(modulation);
450*4d7e907cSAndroid Build Coastguard Worker status.modulations(modulations);
451*4d7e907cSAndroid Build Coastguard Worker break;
452*4d7e907cSAndroid Build Coastguard Worker }
453*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::ATSC3: {
454*4d7e907cSAndroid Build Coastguard Worker modulation.atsc3(FrontendAtsc3Modulation::MOD_QPSK); // value = 1 << 1
455*4d7e907cSAndroid Build Coastguard Worker modulations.push_back(modulation);
456*4d7e907cSAndroid Build Coastguard Worker status.modulations(modulations);
457*4d7e907cSAndroid Build Coastguard Worker break;
458*4d7e907cSAndroid Build Coastguard Worker }
459*4d7e907cSAndroid Build Coastguard Worker case (int)V1_1::FrontendType::DTMB: {
460*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 1
461*4d7e907cSAndroid Build Coastguard Worker modulation.dtmb(V1_1::FrontendDtmbModulation::CONSTELLATION_4QAM);
462*4d7e907cSAndroid Build Coastguard Worker modulations.push_back(modulation);
463*4d7e907cSAndroid Build Coastguard Worker status.modulations(modulations);
464*4d7e907cSAndroid Build Coastguard Worker break;
465*4d7e907cSAndroid Build Coastguard Worker }
466*4d7e907cSAndroid Build Coastguard Worker default:
467*4d7e907cSAndroid Build Coastguard Worker break;
468*4d7e907cSAndroid Build Coastguard Worker }
469*4d7e907cSAndroid Build Coastguard Worker break;
470*4d7e907cSAndroid Build Coastguard Worker }
471*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::BERS: {
472*4d7e907cSAndroid Build Coastguard Worker vector<uint32_t> bers = {1};
473*4d7e907cSAndroid Build Coastguard Worker status.bers(bers);
474*4d7e907cSAndroid Build Coastguard Worker break;
475*4d7e907cSAndroid Build Coastguard Worker }
476*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::CODERATES: {
477*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 39
478*4d7e907cSAndroid Build Coastguard Worker vector<V1_1::FrontendInnerFec> codeRates = {V1_1::FrontendInnerFec::FEC_6_15};
479*4d7e907cSAndroid Build Coastguard Worker status.codeRates(codeRates);
480*4d7e907cSAndroid Build Coastguard Worker break;
481*4d7e907cSAndroid Build Coastguard Worker }
482*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::BANDWIDTH: {
483*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendBandwidth bandwidth;
484*4d7e907cSAndroid Build Coastguard Worker switch ((int)mType) {
485*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::DVBC: {
486*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 1
487*4d7e907cSAndroid Build Coastguard Worker bandwidth.dvbc(V1_1::FrontendDvbcBandwidth::BANDWIDTH_6MHZ);
488*4d7e907cSAndroid Build Coastguard Worker status.bandwidth(bandwidth);
489*4d7e907cSAndroid Build Coastguard Worker break;
490*4d7e907cSAndroid Build Coastguard Worker }
491*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::DVBT: {
492*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 1
493*4d7e907cSAndroid Build Coastguard Worker bandwidth.dvbt(FrontendDvbtBandwidth::BANDWIDTH_8MHZ);
494*4d7e907cSAndroid Build Coastguard Worker status.bandwidth(bandwidth);
495*4d7e907cSAndroid Build Coastguard Worker break;
496*4d7e907cSAndroid Build Coastguard Worker }
497*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::ISDBT: {
498*4d7e907cSAndroid Build Coastguard Worker bandwidth.isdbt(FrontendIsdbtBandwidth::BANDWIDTH_8MHZ); // value = 1 << 1
499*4d7e907cSAndroid Build Coastguard Worker status.bandwidth(bandwidth);
500*4d7e907cSAndroid Build Coastguard Worker break;
501*4d7e907cSAndroid Build Coastguard Worker }
502*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::ATSC3: {
503*4d7e907cSAndroid Build Coastguard Worker bandwidth.atsc3(FrontendAtsc3Bandwidth::BANDWIDTH_6MHZ); // value = 1 << 1
504*4d7e907cSAndroid Build Coastguard Worker status.bandwidth(bandwidth);
505*4d7e907cSAndroid Build Coastguard Worker break;
506*4d7e907cSAndroid Build Coastguard Worker }
507*4d7e907cSAndroid Build Coastguard Worker case (int)V1_1::FrontendType::DTMB: {
508*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 1
509*4d7e907cSAndroid Build Coastguard Worker bandwidth.dtmb(V1_1::FrontendDtmbBandwidth::BANDWIDTH_8MHZ);
510*4d7e907cSAndroid Build Coastguard Worker status.bandwidth(bandwidth);
511*4d7e907cSAndroid Build Coastguard Worker break;
512*4d7e907cSAndroid Build Coastguard Worker }
513*4d7e907cSAndroid Build Coastguard Worker default:
514*4d7e907cSAndroid Build Coastguard Worker break;
515*4d7e907cSAndroid Build Coastguard Worker }
516*4d7e907cSAndroid Build Coastguard Worker break;
517*4d7e907cSAndroid Build Coastguard Worker }
518*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::GUARD_INTERVAL: {
519*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendGuardInterval interval;
520*4d7e907cSAndroid Build Coastguard Worker switch ((int)mType) {
521*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::DVBT: {
522*4d7e907cSAndroid Build Coastguard Worker interval.dvbt(FrontendDvbtGuardInterval::INTERVAL_1_32); // value = 1 << 1
523*4d7e907cSAndroid Build Coastguard Worker status.interval(interval);
524*4d7e907cSAndroid Build Coastguard Worker break;
525*4d7e907cSAndroid Build Coastguard Worker }
526*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::ISDBT: {
527*4d7e907cSAndroid Build Coastguard Worker interval.isdbt(FrontendDvbtGuardInterval::INTERVAL_1_32); // value = 1 << 1
528*4d7e907cSAndroid Build Coastguard Worker status.interval(interval);
529*4d7e907cSAndroid Build Coastguard Worker break;
530*4d7e907cSAndroid Build Coastguard Worker }
531*4d7e907cSAndroid Build Coastguard Worker case (int)V1_1::FrontendType::DTMB: {
532*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 1
533*4d7e907cSAndroid Build Coastguard Worker interval.dtmb(V1_1::FrontendDtmbGuardInterval::PN_420_VARIOUS);
534*4d7e907cSAndroid Build Coastguard Worker status.interval(interval);
535*4d7e907cSAndroid Build Coastguard Worker break;
536*4d7e907cSAndroid Build Coastguard Worker }
537*4d7e907cSAndroid Build Coastguard Worker default:
538*4d7e907cSAndroid Build Coastguard Worker break;
539*4d7e907cSAndroid Build Coastguard Worker }
540*4d7e907cSAndroid Build Coastguard Worker break;
541*4d7e907cSAndroid Build Coastguard Worker }
542*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::TRANSMISSION_MODE: {
543*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendTransmissionMode transMode;
544*4d7e907cSAndroid Build Coastguard Worker switch ((int)mType) {
545*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::DVBT: {
546*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 8
547*4d7e907cSAndroid Build Coastguard Worker transMode.dvbt(V1_1::FrontendDvbtTransmissionMode::MODE_16K_E);
548*4d7e907cSAndroid Build Coastguard Worker status.transmissionMode(transMode);
549*4d7e907cSAndroid Build Coastguard Worker break;
550*4d7e907cSAndroid Build Coastguard Worker }
551*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::ISDBT: {
552*4d7e907cSAndroid Build Coastguard Worker transMode.isdbt(FrontendIsdbtMode::MODE_1); // value = 1 << 1
553*4d7e907cSAndroid Build Coastguard Worker status.transmissionMode(transMode);
554*4d7e907cSAndroid Build Coastguard Worker break;
555*4d7e907cSAndroid Build Coastguard Worker }
556*4d7e907cSAndroid Build Coastguard Worker case (int)V1_1::FrontendType::DTMB: {
557*4d7e907cSAndroid Build Coastguard Worker transMode.dtmb(V1_1::FrontendDtmbTransmissionMode::C1); // value = 1 << 1
558*4d7e907cSAndroid Build Coastguard Worker status.transmissionMode(transMode);
559*4d7e907cSAndroid Build Coastguard Worker break;
560*4d7e907cSAndroid Build Coastguard Worker }
561*4d7e907cSAndroid Build Coastguard Worker default:
562*4d7e907cSAndroid Build Coastguard Worker break;
563*4d7e907cSAndroid Build Coastguard Worker }
564*4d7e907cSAndroid Build Coastguard Worker break;
565*4d7e907cSAndroid Build Coastguard Worker }
566*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::UEC: {
567*4d7e907cSAndroid Build Coastguard Worker status.uec(4);
568*4d7e907cSAndroid Build Coastguard Worker break;
569*4d7e907cSAndroid Build Coastguard Worker }
570*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::T2_SYSTEM_ID: {
571*4d7e907cSAndroid Build Coastguard Worker status.systemId(5);
572*4d7e907cSAndroid Build Coastguard Worker break;
573*4d7e907cSAndroid Build Coastguard Worker }
574*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::INTERLEAVINGS: {
575*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendInterleaveMode interleave;
576*4d7e907cSAndroid Build Coastguard Worker switch ((int)mType) {
577*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::DVBC: {
578*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 1
579*4d7e907cSAndroid Build Coastguard Worker interleave.dvbc(
580*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendCableTimeInterleaveMode::INTERLEAVING_128_1_0);
581*4d7e907cSAndroid Build Coastguard Worker vector<V1_1::FrontendInterleaveMode> interleaving = {interleave};
582*4d7e907cSAndroid Build Coastguard Worker status.interleaving(interleaving);
583*4d7e907cSAndroid Build Coastguard Worker break;
584*4d7e907cSAndroid Build Coastguard Worker }
585*4d7e907cSAndroid Build Coastguard Worker case (int)FrontendType::ATSC3: {
586*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 1
587*4d7e907cSAndroid Build Coastguard Worker interleave.atsc3(FrontendAtsc3TimeInterleaveMode::CTI);
588*4d7e907cSAndroid Build Coastguard Worker vector<V1_1::FrontendInterleaveMode> interleaving = {interleave};
589*4d7e907cSAndroid Build Coastguard Worker status.interleaving(interleaving);
590*4d7e907cSAndroid Build Coastguard Worker break;
591*4d7e907cSAndroid Build Coastguard Worker }
592*4d7e907cSAndroid Build Coastguard Worker case (int)V1_1::FrontendType::DTMB: {
593*4d7e907cSAndroid Build Coastguard Worker // value = 1 << 1
594*4d7e907cSAndroid Build Coastguard Worker interleave.dtmb(V1_1::FrontendDtmbTimeInterleaveMode::TIMER_INT_240);
595*4d7e907cSAndroid Build Coastguard Worker vector<V1_1::FrontendInterleaveMode> interleaving = {interleave};
596*4d7e907cSAndroid Build Coastguard Worker status.interleaving(interleaving);
597*4d7e907cSAndroid Build Coastguard Worker break;
598*4d7e907cSAndroid Build Coastguard Worker }
599*4d7e907cSAndroid Build Coastguard Worker default:
600*4d7e907cSAndroid Build Coastguard Worker break;
601*4d7e907cSAndroid Build Coastguard Worker }
602*4d7e907cSAndroid Build Coastguard Worker break;
603*4d7e907cSAndroid Build Coastguard Worker }
604*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::ISDBT_SEGMENTS: {
605*4d7e907cSAndroid Build Coastguard Worker vector<uint8_t> segments = {2, 3};
606*4d7e907cSAndroid Build Coastguard Worker status.isdbtSegment(segments);
607*4d7e907cSAndroid Build Coastguard Worker break;
608*4d7e907cSAndroid Build Coastguard Worker }
609*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::TS_DATA_RATES: {
610*4d7e907cSAndroid Build Coastguard Worker vector<uint32_t> dataRates = {4, 5};
611*4d7e907cSAndroid Build Coastguard Worker status.tsDataRate(dataRates);
612*4d7e907cSAndroid Build Coastguard Worker break;
613*4d7e907cSAndroid Build Coastguard Worker }
614*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::ROLL_OFF: {
615*4d7e907cSAndroid Build Coastguard Worker V1_1::FrontendRollOff rollOff;
616*4d7e907cSAndroid Build Coastguard Worker switch (mType) {
617*4d7e907cSAndroid Build Coastguard Worker case FrontendType::DVBS: {
618*4d7e907cSAndroid Build Coastguard Worker // value = 1
619*4d7e907cSAndroid Build Coastguard Worker rollOff.dvbs(FrontendDvbsRolloff::ROLLOFF_0_35);
620*4d7e907cSAndroid Build Coastguard Worker status.rollOff(rollOff);
621*4d7e907cSAndroid Build Coastguard Worker break;
622*4d7e907cSAndroid Build Coastguard Worker }
623*4d7e907cSAndroid Build Coastguard Worker case FrontendType::ISDBS: {
624*4d7e907cSAndroid Build Coastguard Worker // value = 1
625*4d7e907cSAndroid Build Coastguard Worker rollOff.isdbs(FrontendIsdbsRolloff::ROLLOFF_0_35);
626*4d7e907cSAndroid Build Coastguard Worker status.rollOff(rollOff);
627*4d7e907cSAndroid Build Coastguard Worker break;
628*4d7e907cSAndroid Build Coastguard Worker }
629*4d7e907cSAndroid Build Coastguard Worker case FrontendType::ISDBS3: {
630*4d7e907cSAndroid Build Coastguard Worker // value = 1
631*4d7e907cSAndroid Build Coastguard Worker rollOff.isdbs3(FrontendIsdbs3Rolloff::ROLLOFF_0_03);
632*4d7e907cSAndroid Build Coastguard Worker status.rollOff(rollOff);
633*4d7e907cSAndroid Build Coastguard Worker break;
634*4d7e907cSAndroid Build Coastguard Worker }
635*4d7e907cSAndroid Build Coastguard Worker default:
636*4d7e907cSAndroid Build Coastguard Worker break;
637*4d7e907cSAndroid Build Coastguard Worker }
638*4d7e907cSAndroid Build Coastguard Worker break;
639*4d7e907cSAndroid Build Coastguard Worker }
640*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::IS_MISO: {
641*4d7e907cSAndroid Build Coastguard Worker status.isMiso(true);
642*4d7e907cSAndroid Build Coastguard Worker break;
643*4d7e907cSAndroid Build Coastguard Worker }
644*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::IS_LINEAR: {
645*4d7e907cSAndroid Build Coastguard Worker status.isLinear(true);
646*4d7e907cSAndroid Build Coastguard Worker break;
647*4d7e907cSAndroid Build Coastguard Worker }
648*4d7e907cSAndroid Build Coastguard Worker case V1_1::FrontendStatusTypeExt1_1::IS_SHORT_FRAMES: {
649*4d7e907cSAndroid Build Coastguard Worker status.isShortFrames(true);
650*4d7e907cSAndroid Build Coastguard Worker break;
651*4d7e907cSAndroid Build Coastguard Worker }
652*4d7e907cSAndroid Build Coastguard Worker default: {
653*4d7e907cSAndroid Build Coastguard Worker continue;
654*4d7e907cSAndroid Build Coastguard Worker }
655*4d7e907cSAndroid Build Coastguard Worker }
656*4d7e907cSAndroid Build Coastguard Worker statuses.push_back(status);
657*4d7e907cSAndroid Build Coastguard Worker }
658*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(Result::SUCCESS, statuses);
659*4d7e907cSAndroid Build Coastguard Worker
660*4d7e907cSAndroid Build Coastguard Worker return Void();
661*4d7e907cSAndroid Build Coastguard Worker }
662*4d7e907cSAndroid Build Coastguard Worker
setLna(bool)663*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::setLna(bool /* bEnable */) {
664*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
665*4d7e907cSAndroid Build Coastguard Worker
666*4d7e907cSAndroid Build Coastguard Worker return Result::SUCCESS;
667*4d7e907cSAndroid Build Coastguard Worker }
668*4d7e907cSAndroid Build Coastguard Worker
setLnb(uint32_t)669*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::setLnb(uint32_t /* lnb */) {
670*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
671*4d7e907cSAndroid Build Coastguard Worker if (!supportsSatellite()) {
672*4d7e907cSAndroid Build Coastguard Worker return Result::INVALID_STATE;
673*4d7e907cSAndroid Build Coastguard Worker }
674*4d7e907cSAndroid Build Coastguard Worker return Result::SUCCESS;
675*4d7e907cSAndroid Build Coastguard Worker }
676*4d7e907cSAndroid Build Coastguard Worker
linkCiCam(uint32_t ciCamId,linkCiCam_cb _hidl_cb)677*4d7e907cSAndroid Build Coastguard Worker Return<void> Frontend::linkCiCam(uint32_t ciCamId, linkCiCam_cb _hidl_cb) {
678*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
679*4d7e907cSAndroid Build Coastguard Worker
680*4d7e907cSAndroid Build Coastguard Worker mCiCamId = ciCamId;
681*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(Result::SUCCESS, 0 /*ltsId*/);
682*4d7e907cSAndroid Build Coastguard Worker
683*4d7e907cSAndroid Build Coastguard Worker return Void();
684*4d7e907cSAndroid Build Coastguard Worker }
685*4d7e907cSAndroid Build Coastguard Worker
unlinkCiCam(uint32_t)686*4d7e907cSAndroid Build Coastguard Worker Return<Result> Frontend::unlinkCiCam(uint32_t /*ciCamId*/) {
687*4d7e907cSAndroid Build Coastguard Worker ALOGV("%s", __FUNCTION__);
688*4d7e907cSAndroid Build Coastguard Worker
689*4d7e907cSAndroid Build Coastguard Worker mCiCamId = -1;
690*4d7e907cSAndroid Build Coastguard Worker
691*4d7e907cSAndroid Build Coastguard Worker return Result::SUCCESS;
692*4d7e907cSAndroid Build Coastguard Worker }
693*4d7e907cSAndroid Build Coastguard Worker
getFrontendType()694*4d7e907cSAndroid Build Coastguard Worker FrontendType Frontend::getFrontendType() {
695*4d7e907cSAndroid Build Coastguard Worker return mType;
696*4d7e907cSAndroid Build Coastguard Worker }
697*4d7e907cSAndroid Build Coastguard Worker
getFrontendId()698*4d7e907cSAndroid Build Coastguard Worker FrontendId Frontend::getFrontendId() {
699*4d7e907cSAndroid Build Coastguard Worker return mId;
700*4d7e907cSAndroid Build Coastguard Worker }
701*4d7e907cSAndroid Build Coastguard Worker
supportsSatellite()702*4d7e907cSAndroid Build Coastguard Worker bool Frontend::supportsSatellite() {
703*4d7e907cSAndroid Build Coastguard Worker return mType == FrontendType::DVBS || mType == FrontendType::ISDBS ||
704*4d7e907cSAndroid Build Coastguard Worker mType == FrontendType::ISDBS3;
705*4d7e907cSAndroid Build Coastguard Worker }
706*4d7e907cSAndroid Build Coastguard Worker
isLocked()707*4d7e907cSAndroid Build Coastguard Worker bool Frontend::isLocked() {
708*4d7e907cSAndroid Build Coastguard Worker return mIsLocked;
709*4d7e907cSAndroid Build Coastguard Worker }
710*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation
711*4d7e907cSAndroid Build Coastguard Worker } // namespace V1_0
712*4d7e907cSAndroid Build Coastguard Worker } // namespace tuner
713*4d7e907cSAndroid Build Coastguard Worker } // namespace tv
714*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware
715*4d7e907cSAndroid Build Coastguard Worker } // namespace android
716