xref: /aosp_15_r20/frameworks/av/services/tuner/hidl/TunerHidlFrontend.cpp (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /**
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright 2021, The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
18*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "TunerHidlFrontend"
19*ec779b8eSAndroid Build Coastguard Worker 
20*ec779b8eSAndroid Build Coastguard Worker #include "TunerHidlFrontend.h"
21*ec779b8eSAndroid Build Coastguard Worker 
22*ec779b8eSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/Result.h>
23*ec779b8eSAndroid Build Coastguard Worker 
24*ec779b8eSAndroid Build Coastguard Worker #include "TunerHidlLnb.h"
25*ec779b8eSAndroid Build Coastguard Worker #include "TunerHidlService.h"
26*ec779b8eSAndroid Build Coastguard Worker 
27*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAnalogSettings;
28*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAnalogSifStandard;
29*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAnalogType;
30*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Bandwidth;
31*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAtsc3CodeRate;
32*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Fec;
33*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Modulation;
34*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAtsc3PlpSettings;
35*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Settings;
36*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAtsc3TimeInterleaveMode;
37*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAtscModulation;
38*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendAtscSettings;
39*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendBandwidth;
40*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendCableTimeInterleaveMode;
41*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDtmbBandwidth;
42*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDtmbGuardInterval;
43*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDtmbModulation;
44*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDtmbSettings;
45*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDtmbTimeInterleaveMode;
46*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDtmbTransmissionMode;
47*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbcAnnex;
48*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbcBandwidth;
49*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbcModulation;
50*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbcSettings;
51*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbsModulation;
52*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbsRolloff;
53*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbsSettings;
54*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbsStandard;
55*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbtBandwidth;
56*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbtConstellation;
57*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbtGuardInterval;
58*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbtHierarchy;
59*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbtSettings;
60*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbtStandard;
61*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendDvbtTransmissionMode;
62*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendGuardInterval;
63*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendInnerFec;
64*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendInterleaveMode;
65*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbs3Modulation;
66*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbs3Rolloff;
67*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbs3Settings;
68*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbsModulation;
69*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbsRolloff;
70*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbsSettings;
71*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbtBandwidth;
72*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbtCoderate;
73*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbtGuardInterval;
74*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbtMode;
75*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbtModulation;
76*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendIsdbtSettings;
77*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendModulation;
78*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendModulationStatus;
79*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendRollOff;
80*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendScanAtsc3PlpInfo;
81*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendScanMessageStandard;
82*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendSpectralInversion;
83*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendStatusAtsc3PlpInfo;
84*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendTransmissionMode;
85*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::Result;
86*ec779b8eSAndroid Build Coastguard Worker 
87*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendStatusAtsc3PlpInfo =
88*ec779b8eSAndroid Build Coastguard Worker         ::aidl::android::hardware::tv::tuner::FrontendStatusAtsc3PlpInfo;
89*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendAnalogSifStandard =
90*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard;
91*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendAnalogType = ::android::hardware::tv::tuner::V1_0::FrontendAnalogType;
92*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendAtscModulation = ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation;
93*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendAtsc3Bandwidth = ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Bandwidth;
94*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendAtsc3CodeRate = ::android::hardware::tv::tuner::V1_0::FrontendAtsc3CodeRate;
95*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendAtsc3DemodOutputFormat =
96*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_0::FrontendAtsc3DemodOutputFormat;
97*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendAtsc3Fec = ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Fec;
98*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendAtsc3Modulation = ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Modulation;
99*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendAtsc3TimeInterleaveMode =
100*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_0::FrontendAtsc3TimeInterleaveMode;
101*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbcAnnex = ::android::hardware::tv::tuner::V1_0::FrontendDvbcAnnex;
102*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbcModulation = ::android::hardware::tv::tuner::V1_0::FrontendDvbcModulation;
103*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbcOuterFec = ::android::hardware::tv::tuner::V1_0::FrontendDvbcOuterFec;
104*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbcSpectralInversion =
105*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_0::FrontendDvbcSpectralInversion;
106*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbsModulation = ::android::hardware::tv::tuner::V1_0::FrontendDvbsModulation;
107*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbsPilot = ::android::hardware::tv::tuner::V1_0::FrontendDvbsPilot;
108*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbsRolloff = ::android::hardware::tv::tuner::V1_0::FrontendDvbsRolloff;
109*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbsSettings = ::android::hardware::tv::tuner::V1_0::FrontendDvbsSettings;
110*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbsStandard = ::android::hardware::tv::tuner::V1_0::FrontendDvbsStandard;
111*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbsVcmMode = ::android::hardware::tv::tuner::V1_0::FrontendDvbsVcmMode;
112*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbtBandwidth = ::android::hardware::tv::tuner::V1_0::FrontendDvbtBandwidth;
113*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbtCoderate = ::android::hardware::tv::tuner::V1_0::FrontendDvbtCoderate;
114*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbtConstellation =
115*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_0::FrontendDvbtConstellation;
116*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbtGuardInterval =
117*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_0::FrontendDvbtGuardInterval;
118*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbtHierarchy = ::android::hardware::tv::tuner::V1_0::FrontendDvbtHierarchy;
119*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbtPlpMode = ::android::hardware::tv::tuner::V1_0::FrontendDvbtPlpMode;
120*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbtSettings = ::android::hardware::tv::tuner::V1_0::FrontendDvbtSettings;
121*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbtStandard = ::android::hardware::tv::tuner::V1_0::FrontendDvbtStandard;
122*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbtTransmissionMode =
123*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_0::FrontendDvbtTransmissionMode;
124*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendInnerFec = ::android::hardware::tv::tuner::V1_0::FrontendInnerFec;
125*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbs3Coderate = ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Coderate;
126*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbs3Modulation = ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Modulation;
127*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbs3Rolloff = ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Rolloff;
128*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbs3Settings = ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Settings;
129*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbsCoderate = ::android::hardware::tv::tuner::V1_0::FrontendIsdbsCoderate;
130*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbsModulation = ::android::hardware::tv::tuner::V1_0::FrontendIsdbsModulation;
131*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbsRolloff = ::android::hardware::tv::tuner::V1_0::FrontendIsdbsRolloff;
132*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbsSettings = ::android::hardware::tv::tuner::V1_0::FrontendIsdbsSettings;
133*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbsStreamIdType =
134*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_0::FrontendIsdbsStreamIdType;
135*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbtBandwidth = ::android::hardware::tv::tuner::V1_0::FrontendIsdbtBandwidth;
136*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbtCoderate = ::android::hardware::tv::tuner::V1_0::FrontendIsdbtCoderate;
137*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbtGuardInterval =
138*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_0::FrontendIsdbtGuardInterval;
139*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbtMode = ::android::hardware::tv::tuner::V1_0::FrontendIsdbtMode;
140*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbtModulation = ::android::hardware::tv::tuner::V1_0::FrontendIsdbtModulation;
141*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendIsdbtSettings = ::android::hardware::tv::tuner::V1_0::FrontendIsdbtSettings;
142*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendModulationStatus = ::android::hardware::tv::tuner::V1_0::FrontendModulationStatus;
143*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendScanAtsc3PlpInfo = ::android::hardware::tv::tuner::V1_0::FrontendScanAtsc3PlpInfo;
144*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendScanType = ::android::hardware::tv::tuner::V1_0::FrontendScanType;
145*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendStatusType = ::android::hardware::tv::tuner::V1_0::FrontendStatusType;
146*ec779b8eSAndroid Build Coastguard Worker using HidlResult = ::android::hardware::tv::tuner::V1_0::Result;
147*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendAnalogAftFlag = ::android::hardware::tv::tuner::V1_1::FrontendAnalogAftFlag;
148*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendBandwidth = ::android::hardware::tv::tuner::V1_1::FrontendBandwidth;
149*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendCableTimeInterleaveMode =
150*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_1::FrontendCableTimeInterleaveMode;
151*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbcBandwidth = ::android::hardware::tv::tuner::V1_1::FrontendDvbcBandwidth;
152*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDtmbBandwidth = ::android::hardware::tv::tuner::V1_1::FrontendDtmbBandwidth;
153*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDtmbCodeRate = ::android::hardware::tv::tuner::V1_1::FrontendDtmbCodeRate;
154*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDtmbGuardInterval =
155*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_1::FrontendDtmbGuardInterval;
156*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDtmbModulation = ::android::hardware::tv::tuner::V1_1::FrontendDtmbModulation;
157*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDtmbTimeInterleaveMode =
158*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_1::FrontendDtmbTimeInterleaveMode;
159*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDtmbTransmissionMode =
160*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_1::FrontendDtmbTransmissionMode;
161*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendDvbsScanType = ::android::hardware::tv::tuner::V1_1::FrontendDvbsScanType;
162*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendGuardInterval = ::android::hardware::tv::tuner::V1_1::FrontendGuardInterval;
163*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendInterleaveMode = ::android::hardware::tv::tuner::V1_1::FrontendInterleaveMode;
164*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendModulation = ::android::hardware::tv::tuner::V1_1::FrontendModulation;
165*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendRollOff = ::android::hardware::tv::tuner::V1_1::FrontendRollOff;
166*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendTransmissionMode = ::android::hardware::tv::tuner::V1_1::FrontendTransmissionMode;
167*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendSpectralInversion =
168*ec779b8eSAndroid Build Coastguard Worker         ::android::hardware::tv::tuner::V1_1::FrontendSpectralInversion;
169*ec779b8eSAndroid Build Coastguard Worker using HidlFrontendStatusTypeExt1_1 = ::android::hardware::tv::tuner::V1_1::FrontendStatusTypeExt1_1;
170*ec779b8eSAndroid Build Coastguard Worker 
171*ec779b8eSAndroid Build Coastguard Worker using namespace std;
172*ec779b8eSAndroid Build Coastguard Worker 
173*ec779b8eSAndroid Build Coastguard Worker namespace aidl {
174*ec779b8eSAndroid Build Coastguard Worker namespace android {
175*ec779b8eSAndroid Build Coastguard Worker namespace media {
176*ec779b8eSAndroid Build Coastguard Worker namespace tv {
177*ec779b8eSAndroid Build Coastguard Worker namespace tuner {
178*ec779b8eSAndroid Build Coastguard Worker 
TunerHidlFrontend(const sp<HidlIFrontend> frontend,const int id,const shared_ptr<TunerHidlService> tuner)179*ec779b8eSAndroid Build Coastguard Worker TunerHidlFrontend::TunerHidlFrontend(const sp<HidlIFrontend> frontend, const int id,
180*ec779b8eSAndroid Build Coastguard Worker                                      const shared_ptr<TunerHidlService> tuner) {
181*ec779b8eSAndroid Build Coastguard Worker     mFrontend = frontend;
182*ec779b8eSAndroid Build Coastguard Worker     mFrontend_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFrontend);
183*ec779b8eSAndroid Build Coastguard Worker     mId = id;
184*ec779b8eSAndroid Build Coastguard Worker     mTunerService = tuner;
185*ec779b8eSAndroid Build Coastguard Worker }
186*ec779b8eSAndroid Build Coastguard Worker 
~TunerHidlFrontend()187*ec779b8eSAndroid Build Coastguard Worker TunerHidlFrontend::~TunerHidlFrontend() {
188*ec779b8eSAndroid Build Coastguard Worker     mFrontend = nullptr;
189*ec779b8eSAndroid Build Coastguard Worker     mFrontend_1_1 = nullptr;
190*ec779b8eSAndroid Build Coastguard Worker     mId = -1;
191*ec779b8eSAndroid Build Coastguard Worker     mTunerService = nullptr;
192*ec779b8eSAndroid Build Coastguard Worker }
193*ec779b8eSAndroid Build Coastguard Worker 
setCallback(const shared_ptr<ITunerFrontendCallback> & tunerFrontendCallback)194*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::setCallback(
195*ec779b8eSAndroid Build Coastguard Worker         const shared_ptr<ITunerFrontendCallback>& tunerFrontendCallback) {
196*ec779b8eSAndroid Build Coastguard Worker     if (tunerFrontendCallback == nullptr) {
197*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
198*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::INVALID_ARGUMENT));
199*ec779b8eSAndroid Build Coastguard Worker     }
200*ec779b8eSAndroid Build Coastguard Worker 
201*ec779b8eSAndroid Build Coastguard Worker     sp<HidlIFrontendCallback> frontendCallback = new FrontendCallback(tunerFrontendCallback);
202*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mFrontend->setCallback(frontendCallback);
203*ec779b8eSAndroid Build Coastguard Worker     if (status == HidlResult::SUCCESS) {
204*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::ok();
205*ec779b8eSAndroid Build Coastguard Worker     }
206*ec779b8eSAndroid Build Coastguard Worker 
207*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
208*ec779b8eSAndroid Build Coastguard Worker }
209*ec779b8eSAndroid Build Coastguard Worker 
tune(const FrontendSettings & settings)210*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::tune(const FrontendSettings& settings) {
211*ec779b8eSAndroid Build Coastguard Worker     HidlResult status;
212*ec779b8eSAndroid Build Coastguard Worker     HidlFrontendSettings frontendSettings;
213*ec779b8eSAndroid Build Coastguard Worker     HidlFrontendSettingsExt1_1 frontendSettingsExt;
214*ec779b8eSAndroid Build Coastguard Worker     getHidlFrontendSettings(settings, frontendSettings, frontendSettingsExt);
215*ec779b8eSAndroid Build Coastguard Worker     if (mFrontend_1_1 != nullptr) {
216*ec779b8eSAndroid Build Coastguard Worker         status = mFrontend_1_1->tune_1_1(frontendSettings, frontendSettingsExt);
217*ec779b8eSAndroid Build Coastguard Worker     } else {
218*ec779b8eSAndroid Build Coastguard Worker         status = mFrontend->tune(frontendSettings);
219*ec779b8eSAndroid Build Coastguard Worker     }
220*ec779b8eSAndroid Build Coastguard Worker     if (status == HidlResult::SUCCESS) {
221*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::ok();
222*ec779b8eSAndroid Build Coastguard Worker     }
223*ec779b8eSAndroid Build Coastguard Worker 
224*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
225*ec779b8eSAndroid Build Coastguard Worker }
226*ec779b8eSAndroid Build Coastguard Worker 
stopTune()227*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::stopTune() {
228*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mFrontend->stopTune();
229*ec779b8eSAndroid Build Coastguard Worker     if (status == HidlResult::SUCCESS) {
230*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::ok();
231*ec779b8eSAndroid Build Coastguard Worker     }
232*ec779b8eSAndroid Build Coastguard Worker 
233*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
234*ec779b8eSAndroid Build Coastguard Worker }
235*ec779b8eSAndroid Build Coastguard Worker 
scan(const FrontendSettings & settings,FrontendScanType frontendScanType)236*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::scan(const FrontendSettings& settings,
237*ec779b8eSAndroid Build Coastguard Worker                                              FrontendScanType frontendScanType) {
238*ec779b8eSAndroid Build Coastguard Worker     HidlResult status;
239*ec779b8eSAndroid Build Coastguard Worker     HidlFrontendSettings frontendSettings;
240*ec779b8eSAndroid Build Coastguard Worker     HidlFrontendSettingsExt1_1 frontendSettingsExt;
241*ec779b8eSAndroid Build Coastguard Worker     getHidlFrontendSettings(settings, frontendSettings, frontendSettingsExt);
242*ec779b8eSAndroid Build Coastguard Worker     if (mFrontend_1_1 != nullptr) {
243*ec779b8eSAndroid Build Coastguard Worker         status = mFrontend_1_1->scan_1_1(frontendSettings,
244*ec779b8eSAndroid Build Coastguard Worker                                          static_cast<HidlFrontendScanType>(frontendScanType),
245*ec779b8eSAndroid Build Coastguard Worker                                          frontendSettingsExt);
246*ec779b8eSAndroid Build Coastguard Worker     } else {
247*ec779b8eSAndroid Build Coastguard Worker         status = mFrontend->scan(frontendSettings,
248*ec779b8eSAndroid Build Coastguard Worker                                  static_cast<HidlFrontendScanType>(frontendScanType));
249*ec779b8eSAndroid Build Coastguard Worker     }
250*ec779b8eSAndroid Build Coastguard Worker     if (status == HidlResult::SUCCESS) {
251*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::ok();
252*ec779b8eSAndroid Build Coastguard Worker     }
253*ec779b8eSAndroid Build Coastguard Worker 
254*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
255*ec779b8eSAndroid Build Coastguard Worker }
256*ec779b8eSAndroid Build Coastguard Worker 
stopScan()257*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::stopScan() {
258*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mFrontend->stopScan();
259*ec779b8eSAndroid Build Coastguard Worker     if (status == HidlResult::SUCCESS) {
260*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::ok();
261*ec779b8eSAndroid Build Coastguard Worker     }
262*ec779b8eSAndroid Build Coastguard Worker 
263*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
264*ec779b8eSAndroid Build Coastguard Worker }
265*ec779b8eSAndroid Build Coastguard Worker 
setLnb(const shared_ptr<ITunerLnb> & lnb)266*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::setLnb(const shared_ptr<ITunerLnb>& lnb) {
267*ec779b8eSAndroid Build Coastguard Worker     if (lnb == nullptr) {
268*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
269*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::INVALID_ARGUMENT));
270*ec779b8eSAndroid Build Coastguard Worker     }
271*ec779b8eSAndroid Build Coastguard Worker 
272*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mFrontend->setLnb(static_cast<TunerHidlLnb*>(lnb.get())->getId());
273*ec779b8eSAndroid Build Coastguard Worker     if (status == HidlResult::SUCCESS) {
274*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::ok();
275*ec779b8eSAndroid Build Coastguard Worker     }
276*ec779b8eSAndroid Build Coastguard Worker 
277*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
278*ec779b8eSAndroid Build Coastguard Worker }
279*ec779b8eSAndroid Build Coastguard Worker 
linkCiCamToFrontend(int32_t ciCamId,int32_t * _aidl_return)280*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::linkCiCamToFrontend(int32_t ciCamId,
281*ec779b8eSAndroid Build Coastguard Worker                                                             int32_t* _aidl_return) {
282*ec779b8eSAndroid Build Coastguard Worker     if (mFrontend_1_1 == nullptr) {
283*ec779b8eSAndroid Build Coastguard Worker         ALOGD("IFrontend_1_1 is not initialized");
284*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
285*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::UNAVAILABLE));
286*ec779b8eSAndroid Build Coastguard Worker     }
287*ec779b8eSAndroid Build Coastguard Worker 
288*ec779b8eSAndroid Build Coastguard Worker     int ltsId;
289*ec779b8eSAndroid Build Coastguard Worker     HidlResult status;
290*ec779b8eSAndroid Build Coastguard Worker     mFrontend_1_1->linkCiCam(static_cast<uint32_t>(ciCamId), [&](HidlResult r, uint32_t id) {
291*ec779b8eSAndroid Build Coastguard Worker         status = r;
292*ec779b8eSAndroid Build Coastguard Worker         ltsId = id;
293*ec779b8eSAndroid Build Coastguard Worker     });
294*ec779b8eSAndroid Build Coastguard Worker 
295*ec779b8eSAndroid Build Coastguard Worker     if (status == HidlResult::SUCCESS) {
296*ec779b8eSAndroid Build Coastguard Worker         *_aidl_return = ltsId;
297*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::ok();
298*ec779b8eSAndroid Build Coastguard Worker     }
299*ec779b8eSAndroid Build Coastguard Worker 
300*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
301*ec779b8eSAndroid Build Coastguard Worker }
302*ec779b8eSAndroid Build Coastguard Worker 
unlinkCiCamToFrontend(int32_t ciCamId)303*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::unlinkCiCamToFrontend(int32_t ciCamId) {
304*ec779b8eSAndroid Build Coastguard Worker     if (mFrontend_1_1 == nullptr) {
305*ec779b8eSAndroid Build Coastguard Worker         ALOGD("IFrontend_1_1 is not initialized");
306*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
307*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::UNAVAILABLE));
308*ec779b8eSAndroid Build Coastguard Worker     }
309*ec779b8eSAndroid Build Coastguard Worker 
310*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mFrontend_1_1->unlinkCiCam(ciCamId);
311*ec779b8eSAndroid Build Coastguard Worker     if (status == HidlResult::SUCCESS) {
312*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::ok();
313*ec779b8eSAndroid Build Coastguard Worker     }
314*ec779b8eSAndroid Build Coastguard Worker 
315*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
316*ec779b8eSAndroid Build Coastguard Worker }
317*ec779b8eSAndroid Build Coastguard Worker 
close()318*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::close() {
319*ec779b8eSAndroid Build Coastguard Worker     mTunerService->removeFrontend(this->ref<TunerHidlFrontend>());
320*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mFrontend->close();
321*ec779b8eSAndroid Build Coastguard Worker     if (status != HidlResult::SUCCESS) {
322*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
323*ec779b8eSAndroid Build Coastguard Worker     }
324*ec779b8eSAndroid Build Coastguard Worker 
325*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::ok();
326*ec779b8eSAndroid Build Coastguard Worker }
327*ec779b8eSAndroid Build Coastguard Worker 
getStatus(const vector<FrontendStatusType> & in_statusTypes,vector<FrontendStatus> * _aidl_return)328*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::getStatus(const vector<FrontendStatusType>& in_statusTypes,
329*ec779b8eSAndroid Build Coastguard Worker                                                   vector<FrontendStatus>* _aidl_return) {
330*ec779b8eSAndroid Build Coastguard Worker     HidlResult res;
331*ec779b8eSAndroid Build Coastguard Worker     vector<HidlFrontendStatus> status;
332*ec779b8eSAndroid Build Coastguard Worker     vector<HidlFrontendStatusExt1_1> statusExt;
333*ec779b8eSAndroid Build Coastguard Worker     vector<HidlFrontendStatusType> types;
334*ec779b8eSAndroid Build Coastguard Worker     vector<HidlFrontendStatusTypeExt1_1> typesExt;
335*ec779b8eSAndroid Build Coastguard Worker     for (auto s : in_statusTypes) {
336*ec779b8eSAndroid Build Coastguard Worker         if (static_cast<int32_t>(s) <=
337*ec779b8eSAndroid Build Coastguard Worker             static_cast<int32_t>(HidlFrontendStatusType::ATSC3_PLP_INFO)) {
338*ec779b8eSAndroid Build Coastguard Worker             types.push_back(static_cast<HidlFrontendStatusType>(s));
339*ec779b8eSAndroid Build Coastguard Worker         } else {
340*ec779b8eSAndroid Build Coastguard Worker             typesExt.push_back(static_cast<HidlFrontendStatusTypeExt1_1>(s));
341*ec779b8eSAndroid Build Coastguard Worker         }
342*ec779b8eSAndroid Build Coastguard Worker     }
343*ec779b8eSAndroid Build Coastguard Worker 
344*ec779b8eSAndroid Build Coastguard Worker     mFrontend->getStatus(types, [&](HidlResult r, const hidl_vec<HidlFrontendStatus>& ss) {
345*ec779b8eSAndroid Build Coastguard Worker         res = r;
346*ec779b8eSAndroid Build Coastguard Worker         for (auto s : ss) {
347*ec779b8eSAndroid Build Coastguard Worker             status.push_back(s);
348*ec779b8eSAndroid Build Coastguard Worker         }
349*ec779b8eSAndroid Build Coastguard Worker     });
350*ec779b8eSAndroid Build Coastguard Worker     if (res != HidlResult::SUCCESS) {
351*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(res));
352*ec779b8eSAndroid Build Coastguard Worker     }
353*ec779b8eSAndroid Build Coastguard Worker 
354*ec779b8eSAndroid Build Coastguard Worker     if (mFrontend_1_1 != nullptr) {
355*ec779b8eSAndroid Build Coastguard Worker         mFrontend_1_1->getStatusExt1_1(
356*ec779b8eSAndroid Build Coastguard Worker                 typesExt, [&](HidlResult r, const hidl_vec<HidlFrontendStatusExt1_1>& ss) {
357*ec779b8eSAndroid Build Coastguard Worker                     res = r;
358*ec779b8eSAndroid Build Coastguard Worker                     for (auto s : ss) {
359*ec779b8eSAndroid Build Coastguard Worker                         statusExt.push_back(s);
360*ec779b8eSAndroid Build Coastguard Worker                     }
361*ec779b8eSAndroid Build Coastguard Worker                 });
362*ec779b8eSAndroid Build Coastguard Worker         if (res != HidlResult::SUCCESS) {
363*ec779b8eSAndroid Build Coastguard Worker             return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(res));
364*ec779b8eSAndroid Build Coastguard Worker         }
365*ec779b8eSAndroid Build Coastguard Worker     }
366*ec779b8eSAndroid Build Coastguard Worker 
367*ec779b8eSAndroid Build Coastguard Worker     getAidlFrontendStatus(status, statusExt, *_aidl_return);
368*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::ok();
369*ec779b8eSAndroid Build Coastguard Worker }
370*ec779b8eSAndroid Build Coastguard Worker 
getFrontendId(int32_t * _aidl_return)371*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::getFrontendId(int32_t* _aidl_return) {
372*ec779b8eSAndroid Build Coastguard Worker     *_aidl_return = mId;
373*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::ok();
374*ec779b8eSAndroid Build Coastguard Worker }
375*ec779b8eSAndroid Build Coastguard Worker 
getHardwareInfo(std::string * _aidl_return)376*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::getHardwareInfo(std::string* _aidl_return) {
377*ec779b8eSAndroid Build Coastguard Worker     _aidl_return->clear();
378*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(
379*ec779b8eSAndroid Build Coastguard Worker             static_cast<int32_t>(Result::UNAVAILABLE));
380*ec779b8eSAndroid Build Coastguard Worker }
381*ec779b8eSAndroid Build Coastguard Worker 
removeOutputPid(int32_t)382*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::removeOutputPid(int32_t /* in_pid */) {
383*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(
384*ec779b8eSAndroid Build Coastguard Worker             static_cast<int32_t>(Result::UNAVAILABLE));
385*ec779b8eSAndroid Build Coastguard Worker }
386*ec779b8eSAndroid Build Coastguard Worker 
getFrontendStatusReadiness(const std::vector<FrontendStatusType> &,std::vector<FrontendStatusReadiness> * _aidl_return)387*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlFrontend::getFrontendStatusReadiness(
388*ec779b8eSAndroid Build Coastguard Worker         const std::vector<FrontendStatusType>& /* in_statusTypes */,
389*ec779b8eSAndroid Build Coastguard Worker         std::vector<FrontendStatusReadiness>* _aidl_return) {
390*ec779b8eSAndroid Build Coastguard Worker     _aidl_return->clear();
391*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::fromServiceSpecificError(
392*ec779b8eSAndroid Build Coastguard Worker             static_cast<int32_t>(Result::UNAVAILABLE));
393*ec779b8eSAndroid Build Coastguard Worker }
394*ec779b8eSAndroid Build Coastguard Worker 
setLna(bool bEnable)395*ec779b8eSAndroid Build Coastguard Worker void TunerHidlFrontend::setLna(bool bEnable) {
396*ec779b8eSAndroid Build Coastguard Worker     mFrontend->setLna(bEnable);
397*ec779b8eSAndroid Build Coastguard Worker }
398*ec779b8eSAndroid Build Coastguard Worker 
399*ec779b8eSAndroid Build Coastguard Worker /////////////// FrontendCallback ///////////////////////
onEvent(HidlFrontendEventType frontendEventType)400*ec779b8eSAndroid Build Coastguard Worker Return<void> TunerHidlFrontend::FrontendCallback::onEvent(HidlFrontendEventType frontendEventType) {
401*ec779b8eSAndroid Build Coastguard Worker     ALOGV("FrontendCallback::onEvent, type=%d", frontendEventType);
402*ec779b8eSAndroid Build Coastguard Worker     mTunerFrontendCallback->onEvent(static_cast<FrontendEventType>(frontendEventType));
403*ec779b8eSAndroid Build Coastguard Worker     return Void();
404*ec779b8eSAndroid Build Coastguard Worker }
405*ec779b8eSAndroid Build Coastguard Worker 
onScanMessage(HidlFrontendScanMessageType type,const HidlFrontendScanMessage & message)406*ec779b8eSAndroid Build Coastguard Worker Return<void> TunerHidlFrontend::FrontendCallback::onScanMessage(
407*ec779b8eSAndroid Build Coastguard Worker         HidlFrontendScanMessageType type, const HidlFrontendScanMessage& message) {
408*ec779b8eSAndroid Build Coastguard Worker     ALOGV("FrontendCallback::onScanMessage, type=%d", type);
409*ec779b8eSAndroid Build Coastguard Worker     FrontendScanMessage scanMessage;
410*ec779b8eSAndroid Build Coastguard Worker     switch (type) {
411*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::LOCKED: {
412*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::isLocked>(message.isLocked());
413*ec779b8eSAndroid Build Coastguard Worker         break;
414*ec779b8eSAndroid Build Coastguard Worker     }
415*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::END: {
416*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::isEnd>(message.isEnd());
417*ec779b8eSAndroid Build Coastguard Worker         break;
418*ec779b8eSAndroid Build Coastguard Worker     }
419*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::PROGRESS_PERCENT: {
420*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::progressPercent>(message.progressPercent());
421*ec779b8eSAndroid Build Coastguard Worker         break;
422*ec779b8eSAndroid Build Coastguard Worker     }
423*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::FREQUENCY: {
424*ec779b8eSAndroid Build Coastguard Worker         const vector<uint32_t>& f = message.frequencies();
425*ec779b8eSAndroid Build Coastguard Worker         vector<int64_t> lf(begin(f), end(f));
426*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::frequencies>(lf);
427*ec779b8eSAndroid Build Coastguard Worker         break;
428*ec779b8eSAndroid Build Coastguard Worker     }
429*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::SYMBOL_RATE: {
430*ec779b8eSAndroid Build Coastguard Worker         const vector<uint32_t>& s = message.symbolRates();
431*ec779b8eSAndroid Build Coastguard Worker         vector<int32_t> symbolRates(begin(s), end(s));
432*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::symbolRates>(symbolRates);
433*ec779b8eSAndroid Build Coastguard Worker         break;
434*ec779b8eSAndroid Build Coastguard Worker     }
435*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::HIERARCHY: {
436*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::hierarchy>(
437*ec779b8eSAndroid Build Coastguard Worker                 static_cast<FrontendDvbtHierarchy>(message.hierarchy()));
438*ec779b8eSAndroid Build Coastguard Worker         break;
439*ec779b8eSAndroid Build Coastguard Worker     }
440*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::ANALOG_TYPE: {
441*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::analogType>(
442*ec779b8eSAndroid Build Coastguard Worker                 static_cast<FrontendAnalogType>(message.analogType()));
443*ec779b8eSAndroid Build Coastguard Worker         break;
444*ec779b8eSAndroid Build Coastguard Worker     }
445*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::PLP_IDS: {
446*ec779b8eSAndroid Build Coastguard Worker         const vector<uint8_t>& p = message.plpIds();
447*ec779b8eSAndroid Build Coastguard Worker         vector<int32_t> plpIds(begin(p), end(p));
448*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::plpIds>(plpIds);
449*ec779b8eSAndroid Build Coastguard Worker         break;
450*ec779b8eSAndroid Build Coastguard Worker     }
451*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::GROUP_IDS: {
452*ec779b8eSAndroid Build Coastguard Worker         const vector<uint8_t>& g = message.groupIds();
453*ec779b8eSAndroid Build Coastguard Worker         vector<int32_t> groupIds(begin(g), end(g));
454*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::groupIds>(groupIds);
455*ec779b8eSAndroid Build Coastguard Worker         break;
456*ec779b8eSAndroid Build Coastguard Worker     }
457*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::INPUT_STREAM_IDS: {
458*ec779b8eSAndroid Build Coastguard Worker         const vector<uint16_t>& i = message.inputStreamIds();
459*ec779b8eSAndroid Build Coastguard Worker         vector<int32_t> streamIds(begin(i), end(i));
460*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::inputStreamIds>(streamIds);
461*ec779b8eSAndroid Build Coastguard Worker         break;
462*ec779b8eSAndroid Build Coastguard Worker     }
463*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::STANDARD: {
464*ec779b8eSAndroid Build Coastguard Worker         const HidlFrontendScanMessage::Standard& std = message.std();
465*ec779b8eSAndroid Build Coastguard Worker         FrontendScanMessageStandard standard;
466*ec779b8eSAndroid Build Coastguard Worker         if (std.getDiscriminator() == HidlFrontendScanMessage::Standard::hidl_discriminator::sStd) {
467*ec779b8eSAndroid Build Coastguard Worker             standard.set<FrontendScanMessageStandard::sStd>(
468*ec779b8eSAndroid Build Coastguard Worker                     static_cast<FrontendDvbsStandard>(std.sStd()));
469*ec779b8eSAndroid Build Coastguard Worker         } else if (std.getDiscriminator() ==
470*ec779b8eSAndroid Build Coastguard Worker                    HidlFrontendScanMessage::Standard::hidl_discriminator::tStd) {
471*ec779b8eSAndroid Build Coastguard Worker             standard.set<FrontendScanMessageStandard::tStd>(
472*ec779b8eSAndroid Build Coastguard Worker                     static_cast<FrontendDvbtStandard>(std.tStd()));
473*ec779b8eSAndroid Build Coastguard Worker         } else if (std.getDiscriminator() ==
474*ec779b8eSAndroid Build Coastguard Worker                    HidlFrontendScanMessage::Standard::hidl_discriminator::sifStd) {
475*ec779b8eSAndroid Build Coastguard Worker             standard.set<FrontendScanMessageStandard::sifStd>(
476*ec779b8eSAndroid Build Coastguard Worker                     static_cast<FrontendAnalogSifStandard>(std.sifStd()));
477*ec779b8eSAndroid Build Coastguard Worker         }
478*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::std>(standard);
479*ec779b8eSAndroid Build Coastguard Worker         break;
480*ec779b8eSAndroid Build Coastguard Worker     }
481*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageType::ATSC3_PLP_INFO: {
482*ec779b8eSAndroid Build Coastguard Worker         const vector<HidlFrontendScanAtsc3PlpInfo>& plpInfos = message.atsc3PlpInfos();
483*ec779b8eSAndroid Build Coastguard Worker         vector<FrontendScanAtsc3PlpInfo> tunerPlpInfos;
484*ec779b8eSAndroid Build Coastguard Worker         for (int i = 0; i < plpInfos.size(); i++) {
485*ec779b8eSAndroid Build Coastguard Worker             FrontendScanAtsc3PlpInfo plpInfo{
486*ec779b8eSAndroid Build Coastguard Worker                     .plpId = static_cast<int32_t>(plpInfos[i].plpId),
487*ec779b8eSAndroid Build Coastguard Worker                     .bLlsFlag = plpInfos[i].bLlsFlag,
488*ec779b8eSAndroid Build Coastguard Worker             };
489*ec779b8eSAndroid Build Coastguard Worker             tunerPlpInfos.push_back(plpInfo);
490*ec779b8eSAndroid Build Coastguard Worker         }
491*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::atsc3PlpInfos>(tunerPlpInfos);
492*ec779b8eSAndroid Build Coastguard Worker         break;
493*ec779b8eSAndroid Build Coastguard Worker     }
494*ec779b8eSAndroid Build Coastguard Worker     default:
495*ec779b8eSAndroid Build Coastguard Worker         break;
496*ec779b8eSAndroid Build Coastguard Worker     }
497*ec779b8eSAndroid Build Coastguard Worker     mTunerFrontendCallback->onScanMessage(static_cast<FrontendScanMessageType>(type), scanMessage);
498*ec779b8eSAndroid Build Coastguard Worker     return Void();
499*ec779b8eSAndroid Build Coastguard Worker }
500*ec779b8eSAndroid Build Coastguard Worker 
onScanMessageExt1_1(HidlFrontendScanMessageTypeExt1_1 type,const HidlFrontendScanMessageExt1_1 & message)501*ec779b8eSAndroid Build Coastguard Worker Return<void> TunerHidlFrontend::FrontendCallback::onScanMessageExt1_1(
502*ec779b8eSAndroid Build Coastguard Worker         HidlFrontendScanMessageTypeExt1_1 type, const HidlFrontendScanMessageExt1_1& message) {
503*ec779b8eSAndroid Build Coastguard Worker     ALOGV("onScanMessageExt1_1::onScanMessage, type=%d", type);
504*ec779b8eSAndroid Build Coastguard Worker     FrontendScanMessage scanMessage;
505*ec779b8eSAndroid Build Coastguard Worker     switch (type) {
506*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageTypeExt1_1::MODULATION: {
507*ec779b8eSAndroid Build Coastguard Worker         HidlFrontendModulation m = message.modulation();
508*ec779b8eSAndroid Build Coastguard Worker         FrontendModulation modulation;
509*ec779b8eSAndroid Build Coastguard Worker         switch (m.getDiscriminator()) {
510*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendModulation::hidl_discriminator::dvbc: {
511*ec779b8eSAndroid Build Coastguard Worker             modulation.set<FrontendModulation::dvbc>(static_cast<FrontendDvbcModulation>(m.dvbc()));
512*ec779b8eSAndroid Build Coastguard Worker             break;
513*ec779b8eSAndroid Build Coastguard Worker         }
514*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendModulation::hidl_discriminator::dvbt: {
515*ec779b8eSAndroid Build Coastguard Worker             modulation.set<FrontendModulation::dvbt>(
516*ec779b8eSAndroid Build Coastguard Worker                     static_cast<FrontendDvbtConstellation>(m.dvbt()));
517*ec779b8eSAndroid Build Coastguard Worker             break;
518*ec779b8eSAndroid Build Coastguard Worker         }
519*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendModulation::hidl_discriminator::dvbs: {
520*ec779b8eSAndroid Build Coastguard Worker             modulation.set<FrontendModulation::dvbs>(static_cast<FrontendDvbsModulation>(m.dvbs()));
521*ec779b8eSAndroid Build Coastguard Worker             break;
522*ec779b8eSAndroid Build Coastguard Worker         }
523*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendModulation::hidl_discriminator::isdbs: {
524*ec779b8eSAndroid Build Coastguard Worker             modulation.set<FrontendModulation::isdbs>(
525*ec779b8eSAndroid Build Coastguard Worker                     static_cast<FrontendIsdbsModulation>(m.isdbs()));
526*ec779b8eSAndroid Build Coastguard Worker             break;
527*ec779b8eSAndroid Build Coastguard Worker         }
528*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendModulation::hidl_discriminator::isdbs3: {
529*ec779b8eSAndroid Build Coastguard Worker             modulation.set<FrontendModulation::isdbs3>(
530*ec779b8eSAndroid Build Coastguard Worker                     static_cast<FrontendIsdbs3Modulation>(m.isdbs3()));
531*ec779b8eSAndroid Build Coastguard Worker             break;
532*ec779b8eSAndroid Build Coastguard Worker         }
533*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendModulation::hidl_discriminator::isdbt: {
534*ec779b8eSAndroid Build Coastguard Worker             modulation.set<FrontendModulation::isdbt>(
535*ec779b8eSAndroid Build Coastguard Worker                     static_cast<FrontendIsdbtModulation>(m.isdbt()));
536*ec779b8eSAndroid Build Coastguard Worker             break;
537*ec779b8eSAndroid Build Coastguard Worker         }
538*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendModulation::hidl_discriminator::atsc: {
539*ec779b8eSAndroid Build Coastguard Worker             modulation.set<FrontendModulation::atsc>(static_cast<FrontendAtscModulation>(m.atsc()));
540*ec779b8eSAndroid Build Coastguard Worker             break;
541*ec779b8eSAndroid Build Coastguard Worker         }
542*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendModulation::hidl_discriminator::atsc3: {
543*ec779b8eSAndroid Build Coastguard Worker             modulation.set<FrontendModulation::atsc3>(
544*ec779b8eSAndroid Build Coastguard Worker                     static_cast<FrontendAtsc3Modulation>(m.atsc3()));
545*ec779b8eSAndroid Build Coastguard Worker             break;
546*ec779b8eSAndroid Build Coastguard Worker         }
547*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendModulation::hidl_discriminator::dtmb: {
548*ec779b8eSAndroid Build Coastguard Worker             modulation.set<FrontendModulation::dtmb>(static_cast<FrontendDtmbModulation>(m.dtmb()));
549*ec779b8eSAndroid Build Coastguard Worker             break;
550*ec779b8eSAndroid Build Coastguard Worker         }
551*ec779b8eSAndroid Build Coastguard Worker         }
552*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::modulation>(modulation);
553*ec779b8eSAndroid Build Coastguard Worker         break;
554*ec779b8eSAndroid Build Coastguard Worker     }
555*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageTypeExt1_1::DVBC_ANNEX: {
556*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::annex>(
557*ec779b8eSAndroid Build Coastguard Worker                 static_cast<FrontendDvbcAnnex>(message.annex()));
558*ec779b8eSAndroid Build Coastguard Worker         break;
559*ec779b8eSAndroid Build Coastguard Worker     }
560*ec779b8eSAndroid Build Coastguard Worker     case HidlFrontendScanMessageTypeExt1_1::HIGH_PRIORITY: {
561*ec779b8eSAndroid Build Coastguard Worker         scanMessage.set<FrontendScanMessage::isHighPriority>(message.isHighPriority());
562*ec779b8eSAndroid Build Coastguard Worker         break;
563*ec779b8eSAndroid Build Coastguard Worker     }
564*ec779b8eSAndroid Build Coastguard Worker     default: {
565*ec779b8eSAndroid Build Coastguard Worker         break;
566*ec779b8eSAndroid Build Coastguard Worker     }
567*ec779b8eSAndroid Build Coastguard Worker     }
568*ec779b8eSAndroid Build Coastguard Worker     mTunerFrontendCallback->onScanMessage(static_cast<FrontendScanMessageType>(type), scanMessage);
569*ec779b8eSAndroid Build Coastguard Worker     return Void();
570*ec779b8eSAndroid Build Coastguard Worker }
571*ec779b8eSAndroid Build Coastguard Worker 
572*ec779b8eSAndroid Build Coastguard Worker /////////////// TunerHidlFrontend Helper Methods ///////////////////////
getAidlFrontendStatus(const vector<HidlFrontendStatus> & hidlStatus,const vector<HidlFrontendStatusExt1_1> & hidlStatusExt,vector<FrontendStatus> & aidlStatus)573*ec779b8eSAndroid Build Coastguard Worker void TunerHidlFrontend::getAidlFrontendStatus(const vector<HidlFrontendStatus>& hidlStatus,
574*ec779b8eSAndroid Build Coastguard Worker                                               const vector<HidlFrontendStatusExt1_1>& hidlStatusExt,
575*ec779b8eSAndroid Build Coastguard Worker                                               vector<FrontendStatus>& aidlStatus) {
576*ec779b8eSAndroid Build Coastguard Worker     for (HidlFrontendStatus s : hidlStatus) {
577*ec779b8eSAndroid Build Coastguard Worker         FrontendStatus status;
578*ec779b8eSAndroid Build Coastguard Worker         switch (s.getDiscriminator()) {
579*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::isDemodLocked: {
580*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::isDemodLocked>(s.isDemodLocked());
581*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
582*ec779b8eSAndroid Build Coastguard Worker             break;
583*ec779b8eSAndroid Build Coastguard Worker         }
584*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::snr: {
585*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::snr>((int)s.snr());
586*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
587*ec779b8eSAndroid Build Coastguard Worker             break;
588*ec779b8eSAndroid Build Coastguard Worker         }
589*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::ber: {
590*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::ber>((int)s.ber());
591*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
592*ec779b8eSAndroid Build Coastguard Worker             break;
593*ec779b8eSAndroid Build Coastguard Worker         }
594*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::per: {
595*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::per>((int)s.per());
596*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
597*ec779b8eSAndroid Build Coastguard Worker             break;
598*ec779b8eSAndroid Build Coastguard Worker         }
599*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::preBer: {
600*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::preBer>((int)s.preBer());
601*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
602*ec779b8eSAndroid Build Coastguard Worker             break;
603*ec779b8eSAndroid Build Coastguard Worker         }
604*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::signalQuality: {
605*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::signalQuality>((int)s.signalQuality());
606*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
607*ec779b8eSAndroid Build Coastguard Worker             break;
608*ec779b8eSAndroid Build Coastguard Worker         }
609*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::signalStrength: {
610*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::signalStrength>((int)s.signalStrength());
611*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
612*ec779b8eSAndroid Build Coastguard Worker             break;
613*ec779b8eSAndroid Build Coastguard Worker         }
614*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::symbolRate: {
615*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::symbolRate>((int)s.symbolRate());
616*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
617*ec779b8eSAndroid Build Coastguard Worker             break;
618*ec779b8eSAndroid Build Coastguard Worker         }
619*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::innerFec: {
620*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::innerFec>(static_cast<FrontendInnerFec>(s.innerFec()));
621*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
622*ec779b8eSAndroid Build Coastguard Worker             break;
623*ec779b8eSAndroid Build Coastguard Worker         }
624*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::modulation: {
625*ec779b8eSAndroid Build Coastguard Worker             FrontendModulationStatus modulationStatus;
626*ec779b8eSAndroid Build Coastguard Worker             switch (s.modulation().getDiscriminator()) {
627*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendModulationStatus::hidl_discriminator::dvbc:
628*ec779b8eSAndroid Build Coastguard Worker                 modulationStatus.set<FrontendModulationStatus::dvbc>(
629*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendDvbcModulation>(s.modulation().dvbc()));
630*ec779b8eSAndroid Build Coastguard Worker                 break;
631*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendModulationStatus::hidl_discriminator::dvbs:
632*ec779b8eSAndroid Build Coastguard Worker                 modulationStatus.set<FrontendModulationStatus::dvbs>(
633*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendDvbsModulation>(s.modulation().dvbs()));
634*ec779b8eSAndroid Build Coastguard Worker                 break;
635*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendModulationStatus::hidl_discriminator::isdbs:
636*ec779b8eSAndroid Build Coastguard Worker                 modulationStatus.set<FrontendModulationStatus::isdbs>(
637*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendIsdbsModulation>(s.modulation().isdbs()));
638*ec779b8eSAndroid Build Coastguard Worker                 break;
639*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendModulationStatus::hidl_discriminator::isdbs3:
640*ec779b8eSAndroid Build Coastguard Worker                 modulationStatus.set<FrontendModulationStatus::isdbs3>(
641*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendIsdbs3Modulation>(s.modulation().isdbs3()));
642*ec779b8eSAndroid Build Coastguard Worker                 break;
643*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendModulationStatus::hidl_discriminator::isdbt:
644*ec779b8eSAndroid Build Coastguard Worker                 modulationStatus.set<FrontendModulationStatus::isdbt>(
645*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendIsdbtModulation>(s.modulation().isdbt()));
646*ec779b8eSAndroid Build Coastguard Worker                 break;
647*ec779b8eSAndroid Build Coastguard Worker             }
648*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::modulationStatus>(modulationStatus);
649*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
650*ec779b8eSAndroid Build Coastguard Worker             break;
651*ec779b8eSAndroid Build Coastguard Worker         }
652*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::inversion: {
653*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::inversion>(
654*ec779b8eSAndroid Build Coastguard Worker                     static_cast<FrontendSpectralInversion>(s.inversion()));
655*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
656*ec779b8eSAndroid Build Coastguard Worker             break;
657*ec779b8eSAndroid Build Coastguard Worker         }
658*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::lnbVoltage: {
659*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::lnbVoltage>(static_cast<LnbVoltage>(s.lnbVoltage()));
660*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
661*ec779b8eSAndroid Build Coastguard Worker             break;
662*ec779b8eSAndroid Build Coastguard Worker         }
663*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::plpId: {
664*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::plpId>((int32_t)s.plpId());
665*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
666*ec779b8eSAndroid Build Coastguard Worker             break;
667*ec779b8eSAndroid Build Coastguard Worker         }
668*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::isEWBS: {
669*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::isEWBS>(s.isEWBS());
670*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
671*ec779b8eSAndroid Build Coastguard Worker             break;
672*ec779b8eSAndroid Build Coastguard Worker         }
673*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::agc: {
674*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::agc>((int32_t)s.agc());
675*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
676*ec779b8eSAndroid Build Coastguard Worker             break;
677*ec779b8eSAndroid Build Coastguard Worker         }
678*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::isLnaOn: {
679*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::isLnaOn>(s.isLnaOn());
680*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
681*ec779b8eSAndroid Build Coastguard Worker             break;
682*ec779b8eSAndroid Build Coastguard Worker         }
683*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::isLayerError: {
684*ec779b8eSAndroid Build Coastguard Worker             vector<bool> e(s.isLayerError().begin(), s.isLayerError().end());
685*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::isLayerError>(e);
686*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
687*ec779b8eSAndroid Build Coastguard Worker             break;
688*ec779b8eSAndroid Build Coastguard Worker         }
689*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::mer: {
690*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::mer>(static_cast<int32_t>(s.mer()));
691*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
692*ec779b8eSAndroid Build Coastguard Worker             break;
693*ec779b8eSAndroid Build Coastguard Worker         }
694*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::freqOffset: {
695*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::freqOffset>(static_cast<int64_t>(s.freqOffset()));
696*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
697*ec779b8eSAndroid Build Coastguard Worker             break;
698*ec779b8eSAndroid Build Coastguard Worker         }
699*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::hierarchy: {
700*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::hierarchy>(
701*ec779b8eSAndroid Build Coastguard Worker                     static_cast<FrontendDvbtHierarchy>(s.hierarchy()));
702*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
703*ec779b8eSAndroid Build Coastguard Worker             break;
704*ec779b8eSAndroid Build Coastguard Worker         }
705*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::isRfLocked: {
706*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::isRfLocked>(s.isRfLocked());
707*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
708*ec779b8eSAndroid Build Coastguard Worker             break;
709*ec779b8eSAndroid Build Coastguard Worker         }
710*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatus::hidl_discriminator::plpInfo: {
711*ec779b8eSAndroid Build Coastguard Worker             vector<FrontendStatusAtsc3PlpInfo> info;
712*ec779b8eSAndroid Build Coastguard Worker             for (auto i : s.plpInfo()) {
713*ec779b8eSAndroid Build Coastguard Worker                 info.push_back({
714*ec779b8eSAndroid Build Coastguard Worker                         .plpId = static_cast<int32_t>(i.plpId),
715*ec779b8eSAndroid Build Coastguard Worker                         .isLocked = i.isLocked,
716*ec779b8eSAndroid Build Coastguard Worker                         .uec = static_cast<int32_t>(i.uec),
717*ec779b8eSAndroid Build Coastguard Worker                 });
718*ec779b8eSAndroid Build Coastguard Worker             }
719*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::plpInfo>(info);
720*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
721*ec779b8eSAndroid Build Coastguard Worker             break;
722*ec779b8eSAndroid Build Coastguard Worker         }
723*ec779b8eSAndroid Build Coastguard Worker         }
724*ec779b8eSAndroid Build Coastguard Worker     }
725*ec779b8eSAndroid Build Coastguard Worker 
726*ec779b8eSAndroid Build Coastguard Worker     for (HidlFrontendStatusExt1_1 s : hidlStatusExt) {
727*ec779b8eSAndroid Build Coastguard Worker         FrontendStatus status;
728*ec779b8eSAndroid Build Coastguard Worker         switch (s.getDiscriminator()) {
729*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::modulations: {
730*ec779b8eSAndroid Build Coastguard Worker             vector<FrontendModulation> aidlMod;
731*ec779b8eSAndroid Build Coastguard Worker             for (auto m : s.modulations()) {
732*ec779b8eSAndroid Build Coastguard Worker                 switch (m.getDiscriminator()) {
733*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendModulation::hidl_discriminator::dvbc:
734*ec779b8eSAndroid Build Coastguard Worker                     aidlMod.push_back(static_cast<FrontendDvbcModulation>(m.dvbc()));
735*ec779b8eSAndroid Build Coastguard Worker                     break;
736*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendModulation::hidl_discriminator::dvbs:
737*ec779b8eSAndroid Build Coastguard Worker                     aidlMod.push_back(static_cast<FrontendDvbsModulation>(m.dvbs()));
738*ec779b8eSAndroid Build Coastguard Worker                     break;
739*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendModulation::hidl_discriminator::dvbt:
740*ec779b8eSAndroid Build Coastguard Worker                     aidlMod.push_back(static_cast<FrontendDvbtConstellation>(m.dvbt()));
741*ec779b8eSAndroid Build Coastguard Worker                     break;
742*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendModulation::hidl_discriminator::isdbs:
743*ec779b8eSAndroid Build Coastguard Worker                     aidlMod.push_back(static_cast<FrontendIsdbsModulation>(m.isdbs()));
744*ec779b8eSAndroid Build Coastguard Worker                     break;
745*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendModulation::hidl_discriminator::isdbs3:
746*ec779b8eSAndroid Build Coastguard Worker                     aidlMod.push_back(static_cast<FrontendIsdbs3Modulation>(m.isdbs3()));
747*ec779b8eSAndroid Build Coastguard Worker                     break;
748*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendModulation::hidl_discriminator::isdbt:
749*ec779b8eSAndroid Build Coastguard Worker                     aidlMod.push_back(static_cast<FrontendIsdbtModulation>(m.isdbt()));
750*ec779b8eSAndroid Build Coastguard Worker                     break;
751*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendModulation::hidl_discriminator::atsc:
752*ec779b8eSAndroid Build Coastguard Worker                     aidlMod.push_back(static_cast<FrontendAtscModulation>(m.atsc()));
753*ec779b8eSAndroid Build Coastguard Worker                     break;
754*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendModulation::hidl_discriminator::atsc3:
755*ec779b8eSAndroid Build Coastguard Worker                     aidlMod.push_back(static_cast<FrontendAtsc3Modulation>(m.atsc3()));
756*ec779b8eSAndroid Build Coastguard Worker                     break;
757*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendModulation::hidl_discriminator::dtmb:
758*ec779b8eSAndroid Build Coastguard Worker                     aidlMod.push_back(static_cast<FrontendDtmbModulation>(m.dtmb()));
759*ec779b8eSAndroid Build Coastguard Worker                     break;
760*ec779b8eSAndroid Build Coastguard Worker                 }
761*ec779b8eSAndroid Build Coastguard Worker             }
762*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::modulations>(aidlMod);
763*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
764*ec779b8eSAndroid Build Coastguard Worker             break;
765*ec779b8eSAndroid Build Coastguard Worker         }
766*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::bers: {
767*ec779b8eSAndroid Build Coastguard Worker             vector<int> b(s.bers().begin(), s.bers().end());
768*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::bers>(b);
769*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
770*ec779b8eSAndroid Build Coastguard Worker             break;
771*ec779b8eSAndroid Build Coastguard Worker         }
772*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::codeRates: {
773*ec779b8eSAndroid Build Coastguard Worker             vector<FrontendInnerFec> codeRates;
774*ec779b8eSAndroid Build Coastguard Worker             for (auto c : s.codeRates()) {
775*ec779b8eSAndroid Build Coastguard Worker                 codeRates.push_back(static_cast<FrontendInnerFec>(c));
776*ec779b8eSAndroid Build Coastguard Worker             }
777*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::codeRates>(codeRates);
778*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
779*ec779b8eSAndroid Build Coastguard Worker             break;
780*ec779b8eSAndroid Build Coastguard Worker         }
781*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::bandwidth: {
782*ec779b8eSAndroid Build Coastguard Worker             FrontendBandwidth bandwidth;
783*ec779b8eSAndroid Build Coastguard Worker             switch (s.bandwidth().getDiscriminator()) {
784*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendBandwidth::hidl_discriminator::atsc3:
785*ec779b8eSAndroid Build Coastguard Worker                 bandwidth.set<FrontendBandwidth::atsc3>(
786*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendAtsc3Bandwidth>(s.bandwidth().atsc3()));
787*ec779b8eSAndroid Build Coastguard Worker                 break;
788*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendBandwidth::hidl_discriminator::dvbc:
789*ec779b8eSAndroid Build Coastguard Worker                 bandwidth.set<FrontendBandwidth::dvbc>(
790*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendDvbcBandwidth>(s.bandwidth().dvbc()));
791*ec779b8eSAndroid Build Coastguard Worker                 break;
792*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendBandwidth::hidl_discriminator::dvbt:
793*ec779b8eSAndroid Build Coastguard Worker                 bandwidth.set<FrontendBandwidth::dvbt>(
794*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendDvbtBandwidth>(s.bandwidth().dvbt()));
795*ec779b8eSAndroid Build Coastguard Worker                 break;
796*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendBandwidth::hidl_discriminator::isdbt:
797*ec779b8eSAndroid Build Coastguard Worker                 bandwidth.set<FrontendBandwidth::isdbt>(
798*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendIsdbtBandwidth>(s.bandwidth().isdbt()));
799*ec779b8eSAndroid Build Coastguard Worker                 break;
800*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendBandwidth::hidl_discriminator::dtmb:
801*ec779b8eSAndroid Build Coastguard Worker                 bandwidth.set<FrontendBandwidth::dtmb>(
802*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendDtmbBandwidth>(s.bandwidth().dtmb()));
803*ec779b8eSAndroid Build Coastguard Worker                 break;
804*ec779b8eSAndroid Build Coastguard Worker             }
805*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::bandwidth>(bandwidth);
806*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
807*ec779b8eSAndroid Build Coastguard Worker             break;
808*ec779b8eSAndroid Build Coastguard Worker         }
809*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::interval: {
810*ec779b8eSAndroid Build Coastguard Worker             FrontendGuardInterval interval;
811*ec779b8eSAndroid Build Coastguard Worker             switch (s.interval().getDiscriminator()) {
812*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendGuardInterval::hidl_discriminator::dvbt:
813*ec779b8eSAndroid Build Coastguard Worker                 interval.set<FrontendGuardInterval::dvbt>(
814*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendDvbtGuardInterval>(s.interval().dvbt()));
815*ec779b8eSAndroid Build Coastguard Worker                 break;
816*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendGuardInterval::hidl_discriminator::isdbt:
817*ec779b8eSAndroid Build Coastguard Worker                 interval.set<FrontendGuardInterval::isdbt>(
818*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendIsdbtGuardInterval>(s.interval().isdbt()));
819*ec779b8eSAndroid Build Coastguard Worker                 break;
820*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendGuardInterval::hidl_discriminator::dtmb:
821*ec779b8eSAndroid Build Coastguard Worker                 interval.set<FrontendGuardInterval::dtmb>(
822*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendDtmbGuardInterval>(s.interval().dtmb()));
823*ec779b8eSAndroid Build Coastguard Worker                 break;
824*ec779b8eSAndroid Build Coastguard Worker             }
825*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::interval>(interval);
826*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
827*ec779b8eSAndroid Build Coastguard Worker             break;
828*ec779b8eSAndroid Build Coastguard Worker         }
829*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::transmissionMode: {
830*ec779b8eSAndroid Build Coastguard Worker             FrontendTransmissionMode transmissionMode;
831*ec779b8eSAndroid Build Coastguard Worker             switch (s.transmissionMode().getDiscriminator()) {
832*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendTransmissionMode::hidl_discriminator::dvbt:
833*ec779b8eSAndroid Build Coastguard Worker                 transmissionMode.set<FrontendTransmissionMode::dvbt>(
834*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendDvbtTransmissionMode>(s.transmissionMode().dvbt()));
835*ec779b8eSAndroid Build Coastguard Worker                 break;
836*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendTransmissionMode::hidl_discriminator::isdbt:
837*ec779b8eSAndroid Build Coastguard Worker                 transmissionMode.set<FrontendTransmissionMode::isdbt>(
838*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendIsdbtMode>(s.transmissionMode().isdbt()));
839*ec779b8eSAndroid Build Coastguard Worker                 break;
840*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendTransmissionMode::hidl_discriminator::dtmb:
841*ec779b8eSAndroid Build Coastguard Worker                 transmissionMode.set<FrontendTransmissionMode::dtmb>(
842*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendDtmbTransmissionMode>(s.transmissionMode().dtmb()));
843*ec779b8eSAndroid Build Coastguard Worker                 break;
844*ec779b8eSAndroid Build Coastguard Worker             }
845*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::transmissionMode>(transmissionMode);
846*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
847*ec779b8eSAndroid Build Coastguard Worker             break;
848*ec779b8eSAndroid Build Coastguard Worker         }
849*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::uec: {
850*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::uec>(static_cast<int32_t>(s.uec()));
851*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
852*ec779b8eSAndroid Build Coastguard Worker             break;
853*ec779b8eSAndroid Build Coastguard Worker         }
854*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::systemId: {
855*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::systemId>(static_cast<int32_t>(s.systemId()));
856*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
857*ec779b8eSAndroid Build Coastguard Worker             break;
858*ec779b8eSAndroid Build Coastguard Worker         }
859*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::interleaving: {
860*ec779b8eSAndroid Build Coastguard Worker             vector<FrontendInterleaveMode> aidlInter;
861*ec779b8eSAndroid Build Coastguard Worker             for (auto i : s.interleaving()) {
862*ec779b8eSAndroid Build Coastguard Worker                 FrontendInterleaveMode leaveMode;
863*ec779b8eSAndroid Build Coastguard Worker                 switch (i.getDiscriminator()) {
864*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendInterleaveMode::hidl_discriminator::atsc3:
865*ec779b8eSAndroid Build Coastguard Worker                     leaveMode.set<FrontendInterleaveMode::atsc3>(
866*ec779b8eSAndroid Build Coastguard Worker                             static_cast<FrontendAtsc3TimeInterleaveMode>(i.atsc3()));
867*ec779b8eSAndroid Build Coastguard Worker                     break;
868*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendInterleaveMode::hidl_discriminator::dvbc:
869*ec779b8eSAndroid Build Coastguard Worker                     leaveMode.set<FrontendInterleaveMode::dvbc>(
870*ec779b8eSAndroid Build Coastguard Worker                             static_cast<FrontendCableTimeInterleaveMode>(i.dvbc()));
871*ec779b8eSAndroid Build Coastguard Worker                     break;
872*ec779b8eSAndroid Build Coastguard Worker                 case HidlFrontendInterleaveMode::hidl_discriminator::dtmb:
873*ec779b8eSAndroid Build Coastguard Worker                     leaveMode.set<FrontendInterleaveMode::dtmb>(
874*ec779b8eSAndroid Build Coastguard Worker                             static_cast<FrontendDtmbTimeInterleaveMode>(i.dtmb()));
875*ec779b8eSAndroid Build Coastguard Worker                     break;
876*ec779b8eSAndroid Build Coastguard Worker                 }
877*ec779b8eSAndroid Build Coastguard Worker                 aidlInter.push_back(leaveMode);
878*ec779b8eSAndroid Build Coastguard Worker             }
879*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::interleaving>(aidlInter);
880*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
881*ec779b8eSAndroid Build Coastguard Worker             break;
882*ec779b8eSAndroid Build Coastguard Worker         }
883*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::isdbtSegment: {
884*ec779b8eSAndroid Build Coastguard Worker             const vector<uint8_t>& seg = s.isdbtSegment();
885*ec779b8eSAndroid Build Coastguard Worker             vector<int32_t> i(seg.begin(), seg.end());
886*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::isdbtSegment>(i);
887*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
888*ec779b8eSAndroid Build Coastguard Worker             break;
889*ec779b8eSAndroid Build Coastguard Worker         }
890*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::tsDataRate: {
891*ec779b8eSAndroid Build Coastguard Worker             vector<int32_t> ts(s.tsDataRate().begin(), s.tsDataRate().end());
892*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::tsDataRate>(ts);
893*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
894*ec779b8eSAndroid Build Coastguard Worker             break;
895*ec779b8eSAndroid Build Coastguard Worker         }
896*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::rollOff: {
897*ec779b8eSAndroid Build Coastguard Worker             FrontendRollOff rollOff;
898*ec779b8eSAndroid Build Coastguard Worker             switch (s.rollOff().getDiscriminator()) {
899*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendRollOff::hidl_discriminator::dvbs:
900*ec779b8eSAndroid Build Coastguard Worker                 rollOff.set<FrontendRollOff::dvbs>(
901*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendDvbsRolloff>(s.rollOff().dvbs()));
902*ec779b8eSAndroid Build Coastguard Worker                 break;
903*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendRollOff::hidl_discriminator::isdbs:
904*ec779b8eSAndroid Build Coastguard Worker                 rollOff.set<FrontendRollOff::isdbs>(
905*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendIsdbsRolloff>(s.rollOff().isdbs()));
906*ec779b8eSAndroid Build Coastguard Worker                 break;
907*ec779b8eSAndroid Build Coastguard Worker             case HidlFrontendRollOff::hidl_discriminator::isdbs3:
908*ec779b8eSAndroid Build Coastguard Worker                 rollOff.set<FrontendRollOff::isdbs3>(
909*ec779b8eSAndroid Build Coastguard Worker                         static_cast<FrontendIsdbs3Rolloff>(s.rollOff().isdbs3()));
910*ec779b8eSAndroid Build Coastguard Worker                 break;
911*ec779b8eSAndroid Build Coastguard Worker             }
912*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::rollOff>(rollOff);
913*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
914*ec779b8eSAndroid Build Coastguard Worker             break;
915*ec779b8eSAndroid Build Coastguard Worker         }
916*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::isMiso: {
917*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::isMiso>(s.isMiso());
918*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
919*ec779b8eSAndroid Build Coastguard Worker             break;
920*ec779b8eSAndroid Build Coastguard Worker         }
921*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::isLinear: {
922*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::isLinear>(s.isLinear());
923*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
924*ec779b8eSAndroid Build Coastguard Worker             break;
925*ec779b8eSAndroid Build Coastguard Worker         }
926*ec779b8eSAndroid Build Coastguard Worker         case HidlFrontendStatusExt1_1::hidl_discriminator::isShortFrames: {
927*ec779b8eSAndroid Build Coastguard Worker             status.set<FrontendStatus::isShortFrames>(s.isShortFrames());
928*ec779b8eSAndroid Build Coastguard Worker             aidlStatus.push_back(status);
929*ec779b8eSAndroid Build Coastguard Worker             break;
930*ec779b8eSAndroid Build Coastguard Worker         }
931*ec779b8eSAndroid Build Coastguard Worker         }
932*ec779b8eSAndroid Build Coastguard Worker     }
933*ec779b8eSAndroid Build Coastguard Worker }
934*ec779b8eSAndroid Build Coastguard Worker 
getAtsc3PlpSettings(const FrontendAtsc3Settings & settings)935*ec779b8eSAndroid Build Coastguard Worker hidl_vec<HidlFrontendAtsc3PlpSettings> TunerHidlFrontend::getAtsc3PlpSettings(
936*ec779b8eSAndroid Build Coastguard Worker         const FrontendAtsc3Settings& settings) {
937*ec779b8eSAndroid Build Coastguard Worker     int len = settings.plpSettings.size();
938*ec779b8eSAndroid Build Coastguard Worker     hidl_vec<HidlFrontendAtsc3PlpSettings> plps = hidl_vec<HidlFrontendAtsc3PlpSettings>(len);
939*ec779b8eSAndroid Build Coastguard Worker     // parse PLP settings
940*ec779b8eSAndroid Build Coastguard Worker     for (int i = 0; i < len; i++) {
941*ec779b8eSAndroid Build Coastguard Worker         uint8_t plpId = static_cast<uint8_t>(settings.plpSettings[i].plpId);
942*ec779b8eSAndroid Build Coastguard Worker         HidlFrontendAtsc3Modulation modulation =
943*ec779b8eSAndroid Build Coastguard Worker                 static_cast<HidlFrontendAtsc3Modulation>(settings.plpSettings[i].modulation);
944*ec779b8eSAndroid Build Coastguard Worker         HidlFrontendAtsc3TimeInterleaveMode interleaveMode =
945*ec779b8eSAndroid Build Coastguard Worker                 static_cast<HidlFrontendAtsc3TimeInterleaveMode>(
946*ec779b8eSAndroid Build Coastguard Worker                         settings.plpSettings[i].interleaveMode);
947*ec779b8eSAndroid Build Coastguard Worker         HidlFrontendAtsc3CodeRate codeRate =
948*ec779b8eSAndroid Build Coastguard Worker                 static_cast<HidlFrontendAtsc3CodeRate>(settings.plpSettings[i].codeRate);
949*ec779b8eSAndroid Build Coastguard Worker         HidlFrontendAtsc3Fec fec = static_cast<HidlFrontendAtsc3Fec>(settings.plpSettings[i].fec);
950*ec779b8eSAndroid Build Coastguard Worker         HidlFrontendAtsc3PlpSettings frontendAtsc3PlpSettings{
951*ec779b8eSAndroid Build Coastguard Worker                 .plpId = plpId,
952*ec779b8eSAndroid Build Coastguard Worker                 .modulation = modulation,
953*ec779b8eSAndroid Build Coastguard Worker                 .interleaveMode = interleaveMode,
954*ec779b8eSAndroid Build Coastguard Worker                 .codeRate = codeRate,
955*ec779b8eSAndroid Build Coastguard Worker                 .fec = fec,
956*ec779b8eSAndroid Build Coastguard Worker         };
957*ec779b8eSAndroid Build Coastguard Worker         plps[i] = frontendAtsc3PlpSettings;
958*ec779b8eSAndroid Build Coastguard Worker     }
959*ec779b8eSAndroid Build Coastguard Worker     return plps;
960*ec779b8eSAndroid Build Coastguard Worker }
961*ec779b8eSAndroid Build Coastguard Worker 
getDvbsCodeRate(const FrontendDvbsCodeRate & codeRate)962*ec779b8eSAndroid Build Coastguard Worker HidlFrontendDvbsCodeRate TunerHidlFrontend::getDvbsCodeRate(const FrontendDvbsCodeRate& codeRate) {
963*ec779b8eSAndroid Build Coastguard Worker     HidlFrontendInnerFec innerFec = static_cast<HidlFrontendInnerFec>(codeRate.fec);
964*ec779b8eSAndroid Build Coastguard Worker     bool isLinear = codeRate.isLinear;
965*ec779b8eSAndroid Build Coastguard Worker     bool isShortFrames = codeRate.isShortFrames;
966*ec779b8eSAndroid Build Coastguard Worker     uint32_t bitsPer1000Symbol = static_cast<uint32_t>(codeRate.bitsPer1000Symbol);
967*ec779b8eSAndroid Build Coastguard Worker     HidlFrontendDvbsCodeRate coderate{
968*ec779b8eSAndroid Build Coastguard Worker             .fec = innerFec,
969*ec779b8eSAndroid Build Coastguard Worker             .isLinear = isLinear,
970*ec779b8eSAndroid Build Coastguard Worker             .isShortFrames = isShortFrames,
971*ec779b8eSAndroid Build Coastguard Worker             .bitsPer1000Symbol = bitsPer1000Symbol,
972*ec779b8eSAndroid Build Coastguard Worker     };
973*ec779b8eSAndroid Build Coastguard Worker     return coderate;
974*ec779b8eSAndroid Build Coastguard Worker }
975*ec779b8eSAndroid Build Coastguard Worker 
getHidlFrontendSettings(const FrontendSettings & aidlSettings,HidlFrontendSettings & settings,HidlFrontendSettingsExt1_1 & settingsExt)976*ec779b8eSAndroid Build Coastguard Worker void TunerHidlFrontend::getHidlFrontendSettings(const FrontendSettings& aidlSettings,
977*ec779b8eSAndroid Build Coastguard Worker                                                 HidlFrontendSettings& settings,
978*ec779b8eSAndroid Build Coastguard Worker                                                 HidlFrontendSettingsExt1_1& settingsExt) {
979*ec779b8eSAndroid Build Coastguard Worker     switch (aidlSettings.getTag()) {
980*ec779b8eSAndroid Build Coastguard Worker     case FrontendSettings::analog: {
981*ec779b8eSAndroid Build Coastguard Worker         const FrontendAnalogSettings& analog = aidlSettings.get<FrontendSettings::analog>();
982*ec779b8eSAndroid Build Coastguard Worker         settings.analog({
983*ec779b8eSAndroid Build Coastguard Worker                 .frequency = static_cast<uint32_t>(analog.frequency),
984*ec779b8eSAndroid Build Coastguard Worker                 .type = static_cast<HidlFrontendAnalogType>(analog.type),
985*ec779b8eSAndroid Build Coastguard Worker                 .sifStandard = static_cast<HidlFrontendAnalogSifStandard>(analog.sifStandard),
986*ec779b8eSAndroid Build Coastguard Worker         });
987*ec779b8eSAndroid Build Coastguard Worker         settingsExt.settingExt.analog({
988*ec779b8eSAndroid Build Coastguard Worker                 .aftFlag = static_cast<HidlFrontendAnalogAftFlag>(analog.aftFlag),
989*ec779b8eSAndroid Build Coastguard Worker         });
990*ec779b8eSAndroid Build Coastguard Worker         settingsExt.endFrequency = static_cast<uint32_t>(analog.endFrequency);
991*ec779b8eSAndroid Build Coastguard Worker         settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(analog.inversion);
992*ec779b8eSAndroid Build Coastguard Worker         break;
993*ec779b8eSAndroid Build Coastguard Worker     }
994*ec779b8eSAndroid Build Coastguard Worker     case FrontendSettings::atsc: {
995*ec779b8eSAndroid Build Coastguard Worker         const FrontendAtscSettings& atsc = aidlSettings.get<FrontendSettings::atsc>();
996*ec779b8eSAndroid Build Coastguard Worker         settings.atsc({
997*ec779b8eSAndroid Build Coastguard Worker                 .frequency = static_cast<uint32_t>(atsc.frequency),
998*ec779b8eSAndroid Build Coastguard Worker                 .modulation = static_cast<HidlFrontendAtscModulation>(atsc.modulation),
999*ec779b8eSAndroid Build Coastguard Worker         });
1000*ec779b8eSAndroid Build Coastguard Worker         settingsExt.endFrequency = static_cast<uint32_t>(atsc.endFrequency);
1001*ec779b8eSAndroid Build Coastguard Worker         settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(atsc.inversion);
1002*ec779b8eSAndroid Build Coastguard Worker         settingsExt.settingExt.noinit();
1003*ec779b8eSAndroid Build Coastguard Worker         break;
1004*ec779b8eSAndroid Build Coastguard Worker     }
1005*ec779b8eSAndroid Build Coastguard Worker     case FrontendSettings::atsc3: {
1006*ec779b8eSAndroid Build Coastguard Worker         const FrontendAtsc3Settings& atsc3 = aidlSettings.get<FrontendSettings::atsc3>();
1007*ec779b8eSAndroid Build Coastguard Worker         settings.atsc3({
1008*ec779b8eSAndroid Build Coastguard Worker                 .frequency = static_cast<uint32_t>(atsc3.frequency),
1009*ec779b8eSAndroid Build Coastguard Worker                 .bandwidth = static_cast<HidlFrontendAtsc3Bandwidth>(atsc3.bandwidth),
1010*ec779b8eSAndroid Build Coastguard Worker                 .demodOutputFormat =
1011*ec779b8eSAndroid Build Coastguard Worker                         static_cast<HidlFrontendAtsc3DemodOutputFormat>(atsc3.demodOutputFormat),
1012*ec779b8eSAndroid Build Coastguard Worker                 .plpSettings = getAtsc3PlpSettings(atsc3),
1013*ec779b8eSAndroid Build Coastguard Worker         });
1014*ec779b8eSAndroid Build Coastguard Worker         settingsExt.endFrequency = static_cast<uint32_t>(atsc3.endFrequency);
1015*ec779b8eSAndroid Build Coastguard Worker         settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(atsc3.inversion);
1016*ec779b8eSAndroid Build Coastguard Worker         settingsExt.settingExt.noinit();
1017*ec779b8eSAndroid Build Coastguard Worker         break;
1018*ec779b8eSAndroid Build Coastguard Worker     }
1019*ec779b8eSAndroid Build Coastguard Worker     case FrontendSettings::dvbc: {
1020*ec779b8eSAndroid Build Coastguard Worker         const FrontendDvbcSettings& dvbc = aidlSettings.get<FrontendSettings::dvbc>();
1021*ec779b8eSAndroid Build Coastguard Worker         settings.dvbc({
1022*ec779b8eSAndroid Build Coastguard Worker                 .frequency = static_cast<uint32_t>(dvbc.frequency),
1023*ec779b8eSAndroid Build Coastguard Worker                 .modulation = static_cast<HidlFrontendDvbcModulation>(dvbc.modulation),
1024*ec779b8eSAndroid Build Coastguard Worker                 .fec = static_cast<HidlFrontendInnerFec>(dvbc.fec),
1025*ec779b8eSAndroid Build Coastguard Worker                 .symbolRate = static_cast<uint32_t>(dvbc.symbolRate),
1026*ec779b8eSAndroid Build Coastguard Worker                 .outerFec = static_cast<HidlFrontendDvbcOuterFec>(dvbc.outerFec),
1027*ec779b8eSAndroid Build Coastguard Worker                 .annex = static_cast<HidlFrontendDvbcAnnex>(dvbc.annex),
1028*ec779b8eSAndroid Build Coastguard Worker                 .spectralInversion = static_cast<HidlFrontendDvbcSpectralInversion>(dvbc.inversion),
1029*ec779b8eSAndroid Build Coastguard Worker         });
1030*ec779b8eSAndroid Build Coastguard Worker         settingsExt.settingExt.dvbc({
1031*ec779b8eSAndroid Build Coastguard Worker                 .interleaveMode =
1032*ec779b8eSAndroid Build Coastguard Worker                         static_cast<HidlFrontendCableTimeInterleaveMode>(dvbc.interleaveMode),
1033*ec779b8eSAndroid Build Coastguard Worker                 .bandwidth = static_cast<HidlFrontendDvbcBandwidth>(dvbc.bandwidth),
1034*ec779b8eSAndroid Build Coastguard Worker         });
1035*ec779b8eSAndroid Build Coastguard Worker         settingsExt.endFrequency = static_cast<uint32_t>(dvbc.endFrequency);
1036*ec779b8eSAndroid Build Coastguard Worker         settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(dvbc.inversion);
1037*ec779b8eSAndroid Build Coastguard Worker         break;
1038*ec779b8eSAndroid Build Coastguard Worker     }
1039*ec779b8eSAndroid Build Coastguard Worker     case FrontendSettings::dvbs: {
1040*ec779b8eSAndroid Build Coastguard Worker         const FrontendDvbsSettings& dvbs = aidlSettings.get<FrontendSettings::dvbs>();
1041*ec779b8eSAndroid Build Coastguard Worker         settings.dvbs({
1042*ec779b8eSAndroid Build Coastguard Worker                 .frequency = static_cast<uint32_t>(dvbs.frequency),
1043*ec779b8eSAndroid Build Coastguard Worker                 .modulation = static_cast<HidlFrontendDvbsModulation>(dvbs.modulation),
1044*ec779b8eSAndroid Build Coastguard Worker                 .coderate = getDvbsCodeRate(dvbs.coderate),
1045*ec779b8eSAndroid Build Coastguard Worker                 .symbolRate = static_cast<uint32_t>(dvbs.symbolRate),
1046*ec779b8eSAndroid Build Coastguard Worker                 .rolloff = static_cast<HidlFrontendDvbsRolloff>(dvbs.rolloff),
1047*ec779b8eSAndroid Build Coastguard Worker                 .pilot = static_cast<HidlFrontendDvbsPilot>(dvbs.pilot),
1048*ec779b8eSAndroid Build Coastguard Worker                 .inputStreamId = static_cast<uint32_t>(dvbs.inputStreamId),
1049*ec779b8eSAndroid Build Coastguard Worker                 .standard = static_cast<HidlFrontendDvbsStandard>(dvbs.standard),
1050*ec779b8eSAndroid Build Coastguard Worker                 .vcmMode = static_cast<HidlFrontendDvbsVcmMode>(dvbs.vcmMode),
1051*ec779b8eSAndroid Build Coastguard Worker         });
1052*ec779b8eSAndroid Build Coastguard Worker         settingsExt.settingExt.dvbs({
1053*ec779b8eSAndroid Build Coastguard Worker                 .scanType = static_cast<HidlFrontendDvbsScanType>(dvbs.scanType),
1054*ec779b8eSAndroid Build Coastguard Worker                 .isDiseqcRxMessage = dvbs.isDiseqcRxMessage,
1055*ec779b8eSAndroid Build Coastguard Worker         });
1056*ec779b8eSAndroid Build Coastguard Worker         settingsExt.endFrequency = static_cast<uint32_t>(dvbs.endFrequency);
1057*ec779b8eSAndroid Build Coastguard Worker         settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(dvbs.inversion);
1058*ec779b8eSAndroid Build Coastguard Worker         break;
1059*ec779b8eSAndroid Build Coastguard Worker     }
1060*ec779b8eSAndroid Build Coastguard Worker     case FrontendSettings::dvbt: {
1061*ec779b8eSAndroid Build Coastguard Worker         const FrontendDvbtSettings& dvbt = aidlSettings.get<FrontendSettings::dvbt>();
1062*ec779b8eSAndroid Build Coastguard Worker         settings.dvbt({
1063*ec779b8eSAndroid Build Coastguard Worker                 .frequency = static_cast<uint32_t>(dvbt.frequency),
1064*ec779b8eSAndroid Build Coastguard Worker                 .transmissionMode =
1065*ec779b8eSAndroid Build Coastguard Worker                         static_cast<HidlFrontendDvbtTransmissionMode>(dvbt.transmissionMode),
1066*ec779b8eSAndroid Build Coastguard Worker                 .bandwidth = static_cast<HidlFrontendDvbtBandwidth>(dvbt.bandwidth),
1067*ec779b8eSAndroid Build Coastguard Worker                 .constellation = static_cast<HidlFrontendDvbtConstellation>(dvbt.constellation),
1068*ec779b8eSAndroid Build Coastguard Worker                 .hierarchy = static_cast<HidlFrontendDvbtHierarchy>(dvbt.hierarchy),
1069*ec779b8eSAndroid Build Coastguard Worker                 .hpCoderate = static_cast<HidlFrontendDvbtCoderate>(dvbt.hpCoderate),
1070*ec779b8eSAndroid Build Coastguard Worker                 .lpCoderate = static_cast<HidlFrontendDvbtCoderate>(dvbt.lpCoderate),
1071*ec779b8eSAndroid Build Coastguard Worker                 .guardInterval = static_cast<HidlFrontendDvbtGuardInterval>(dvbt.guardInterval),
1072*ec779b8eSAndroid Build Coastguard Worker                 .isHighPriority = dvbt.isHighPriority,
1073*ec779b8eSAndroid Build Coastguard Worker                 .standard = static_cast<HidlFrontendDvbtStandard>(dvbt.standard),
1074*ec779b8eSAndroid Build Coastguard Worker                 .isMiso = dvbt.isMiso,
1075*ec779b8eSAndroid Build Coastguard Worker                 .plpMode = static_cast<HidlFrontendDvbtPlpMode>(dvbt.plpMode),
1076*ec779b8eSAndroid Build Coastguard Worker                 .plpId = static_cast<uint8_t>(dvbt.plpId),
1077*ec779b8eSAndroid Build Coastguard Worker                 .plpGroupId = static_cast<uint8_t>(dvbt.plpGroupId),
1078*ec779b8eSAndroid Build Coastguard Worker         });
1079*ec779b8eSAndroid Build Coastguard Worker         settingsExt.settingExt.dvbt({
1080*ec779b8eSAndroid Build Coastguard Worker                 .constellation = static_cast<
1081*ec779b8eSAndroid Build Coastguard Worker                         ::android::hardware::tv::tuner::V1_1::FrontendDvbtConstellation>(
1082*ec779b8eSAndroid Build Coastguard Worker                         dvbt.constellation),
1083*ec779b8eSAndroid Build Coastguard Worker                 .transmissionMode = static_cast<
1084*ec779b8eSAndroid Build Coastguard Worker                         ::android::hardware::tv::tuner::V1_1::FrontendDvbtTransmissionMode>(
1085*ec779b8eSAndroid Build Coastguard Worker                         dvbt.transmissionMode),
1086*ec779b8eSAndroid Build Coastguard Worker         });
1087*ec779b8eSAndroid Build Coastguard Worker         settingsExt.endFrequency = static_cast<uint32_t>(dvbt.endFrequency);
1088*ec779b8eSAndroid Build Coastguard Worker         settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(dvbt.inversion);
1089*ec779b8eSAndroid Build Coastguard Worker         break;
1090*ec779b8eSAndroid Build Coastguard Worker     }
1091*ec779b8eSAndroid Build Coastguard Worker     case FrontendSettings::isdbs: {
1092*ec779b8eSAndroid Build Coastguard Worker         const FrontendIsdbsSettings& isdbs = aidlSettings.get<FrontendSettings::isdbs>();
1093*ec779b8eSAndroid Build Coastguard Worker         settings.isdbs({
1094*ec779b8eSAndroid Build Coastguard Worker                 .frequency = static_cast<uint32_t>(isdbs.frequency),
1095*ec779b8eSAndroid Build Coastguard Worker                 .streamId = static_cast<uint16_t>(isdbs.streamId),
1096*ec779b8eSAndroid Build Coastguard Worker                 .streamIdType = static_cast<HidlFrontendIsdbsStreamIdType>(isdbs.streamIdType),
1097*ec779b8eSAndroid Build Coastguard Worker                 .modulation = static_cast<HidlFrontendIsdbsModulation>(isdbs.modulation),
1098*ec779b8eSAndroid Build Coastguard Worker                 .coderate = static_cast<HidlFrontendIsdbsCoderate>(isdbs.coderate),
1099*ec779b8eSAndroid Build Coastguard Worker                 .symbolRate = static_cast<uint32_t>(isdbs.symbolRate),
1100*ec779b8eSAndroid Build Coastguard Worker                 .rolloff = static_cast<HidlFrontendIsdbsRolloff>(isdbs.rolloff),
1101*ec779b8eSAndroid Build Coastguard Worker         });
1102*ec779b8eSAndroid Build Coastguard Worker         settingsExt.endFrequency = static_cast<uint32_t>(isdbs.endFrequency);
1103*ec779b8eSAndroid Build Coastguard Worker         settingsExt.settingExt.noinit();
1104*ec779b8eSAndroid Build Coastguard Worker         break;
1105*ec779b8eSAndroid Build Coastguard Worker     }
1106*ec779b8eSAndroid Build Coastguard Worker     case FrontendSettings::isdbs3: {
1107*ec779b8eSAndroid Build Coastguard Worker         const FrontendIsdbs3Settings& isdbs3 = aidlSettings.get<FrontendSettings::isdbs3>();
1108*ec779b8eSAndroid Build Coastguard Worker         settings.isdbs3({
1109*ec779b8eSAndroid Build Coastguard Worker                 .frequency = static_cast<uint32_t>(isdbs3.frequency),
1110*ec779b8eSAndroid Build Coastguard Worker                 .streamId = static_cast<uint16_t>(isdbs3.streamId),
1111*ec779b8eSAndroid Build Coastguard Worker                 .streamIdType = static_cast<HidlFrontendIsdbsStreamIdType>(isdbs3.streamIdType),
1112*ec779b8eSAndroid Build Coastguard Worker                 .modulation = static_cast<HidlFrontendIsdbs3Modulation>(isdbs3.modulation),
1113*ec779b8eSAndroid Build Coastguard Worker                 .coderate = static_cast<HidlFrontendIsdbs3Coderate>(isdbs3.coderate),
1114*ec779b8eSAndroid Build Coastguard Worker                 .symbolRate = static_cast<uint32_t>(isdbs3.symbolRate),
1115*ec779b8eSAndroid Build Coastguard Worker                 .rolloff = static_cast<HidlFrontendIsdbs3Rolloff>(isdbs3.rolloff),
1116*ec779b8eSAndroid Build Coastguard Worker         });
1117*ec779b8eSAndroid Build Coastguard Worker         settingsExt.endFrequency = static_cast<uint32_t>(isdbs3.endFrequency);
1118*ec779b8eSAndroid Build Coastguard Worker         settingsExt.settingExt.noinit();
1119*ec779b8eSAndroid Build Coastguard Worker         break;
1120*ec779b8eSAndroid Build Coastguard Worker     }
1121*ec779b8eSAndroid Build Coastguard Worker     case FrontendSettings::isdbt: {
1122*ec779b8eSAndroid Build Coastguard Worker         const FrontendIsdbtSettings& isdbt = aidlSettings.get<FrontendSettings::isdbt>();
1123*ec779b8eSAndroid Build Coastguard Worker         HidlFrontendIsdbtModulation modulation = HidlFrontendIsdbtModulation::UNDEFINED;
1124*ec779b8eSAndroid Build Coastguard Worker         HidlFrontendIsdbtCoderate coderate = HidlFrontendIsdbtCoderate::UNDEFINED;
1125*ec779b8eSAndroid Build Coastguard Worker         if (isdbt.layerSettings.size() > 0) {
1126*ec779b8eSAndroid Build Coastguard Worker             modulation =
1127*ec779b8eSAndroid Build Coastguard Worker                     static_cast<HidlFrontendIsdbtModulation>(isdbt.layerSettings[0].modulation);
1128*ec779b8eSAndroid Build Coastguard Worker             coderate = static_cast<HidlFrontendIsdbtCoderate>(isdbt.layerSettings[0].coderate);
1129*ec779b8eSAndroid Build Coastguard Worker         }
1130*ec779b8eSAndroid Build Coastguard Worker         settings.isdbt({
1131*ec779b8eSAndroid Build Coastguard Worker                 .frequency = static_cast<uint32_t>(isdbt.frequency),
1132*ec779b8eSAndroid Build Coastguard Worker                 .modulation = modulation,
1133*ec779b8eSAndroid Build Coastguard Worker                 .bandwidth = static_cast<HidlFrontendIsdbtBandwidth>(isdbt.bandwidth),
1134*ec779b8eSAndroid Build Coastguard Worker                 .mode = static_cast<HidlFrontendIsdbtMode>(isdbt.mode),
1135*ec779b8eSAndroid Build Coastguard Worker                 .coderate = coderate,
1136*ec779b8eSAndroid Build Coastguard Worker                 .guardInterval = static_cast<HidlFrontendIsdbtGuardInterval>(isdbt.guardInterval),
1137*ec779b8eSAndroid Build Coastguard Worker                 .serviceAreaId = static_cast<uint32_t>(isdbt.serviceAreaId),
1138*ec779b8eSAndroid Build Coastguard Worker         });
1139*ec779b8eSAndroid Build Coastguard Worker         settingsExt.endFrequency = static_cast<uint32_t>(isdbt.endFrequency);
1140*ec779b8eSAndroid Build Coastguard Worker         settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(isdbt.inversion);
1141*ec779b8eSAndroid Build Coastguard Worker         settingsExt.settingExt.noinit();
1142*ec779b8eSAndroid Build Coastguard Worker         break;
1143*ec779b8eSAndroid Build Coastguard Worker     }
1144*ec779b8eSAndroid Build Coastguard Worker     case FrontendSettings::dtmb: {
1145*ec779b8eSAndroid Build Coastguard Worker         const FrontendDtmbSettings& dtmb = aidlSettings.get<FrontendSettings::dtmb>();
1146*ec779b8eSAndroid Build Coastguard Worker         settingsExt.settingExt.dtmb({
1147*ec779b8eSAndroid Build Coastguard Worker                 .frequency = static_cast<uint32_t>(dtmb.frequency),
1148*ec779b8eSAndroid Build Coastguard Worker                 .transmissionMode =
1149*ec779b8eSAndroid Build Coastguard Worker                         static_cast<HidlFrontendDtmbTransmissionMode>(dtmb.transmissionMode),
1150*ec779b8eSAndroid Build Coastguard Worker                 .bandwidth = static_cast<HidlFrontendDtmbBandwidth>(dtmb.bandwidth),
1151*ec779b8eSAndroid Build Coastguard Worker                 .modulation = static_cast<HidlFrontendDtmbModulation>(dtmb.modulation),
1152*ec779b8eSAndroid Build Coastguard Worker                 .codeRate = static_cast<HidlFrontendDtmbCodeRate>(dtmb.codeRate),
1153*ec779b8eSAndroid Build Coastguard Worker                 .guardInterval = static_cast<HidlFrontendDtmbGuardInterval>(dtmb.guardInterval),
1154*ec779b8eSAndroid Build Coastguard Worker                 .interleaveMode =
1155*ec779b8eSAndroid Build Coastguard Worker                         static_cast<HidlFrontendDtmbTimeInterleaveMode>(dtmb.interleaveMode),
1156*ec779b8eSAndroid Build Coastguard Worker         });
1157*ec779b8eSAndroid Build Coastguard Worker         settingsExt.endFrequency = static_cast<uint32_t>(dtmb.endFrequency);
1158*ec779b8eSAndroid Build Coastguard Worker         settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(dtmb.inversion);
1159*ec779b8eSAndroid Build Coastguard Worker         break;
1160*ec779b8eSAndroid Build Coastguard Worker     }
1161*ec779b8eSAndroid Build Coastguard Worker     default:
1162*ec779b8eSAndroid Build Coastguard Worker         break;
1163*ec779b8eSAndroid Build Coastguard Worker     }
1164*ec779b8eSAndroid Build Coastguard Worker }
1165*ec779b8eSAndroid Build Coastguard Worker 
1166*ec779b8eSAndroid Build Coastguard Worker }  // namespace tuner
1167*ec779b8eSAndroid Build Coastguard Worker }  // namespace tv
1168*ec779b8eSAndroid Build Coastguard Worker }  // namespace media
1169*ec779b8eSAndroid Build Coastguard Worker }  // namespace android
1170*ec779b8eSAndroid Build Coastguard Worker }  // namespace aidl
1171