xref: /aosp_15_r20/hardware/interfaces/tv/tuner/config/TunerTestingConfigAidlReaderV1_0.h (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright 2021 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker 
17*4d7e907cSAndroid Build Coastguard Worker #pragma once
18*4d7e907cSAndroid Build Coastguard Worker 
19*4d7e907cSAndroid Build Coastguard Worker #include <android-base/logging.h>
20*4d7e907cSAndroid Build Coastguard Worker #include <android_media_tuner_testing_configuration_V1_0.h>
21*4d7e907cSAndroid Build Coastguard Worker #include <android_media_tuner_testing_configuration_V1_0_enums.h>
22*4d7e907cSAndroid Build Coastguard Worker 
23*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DataFormat.h>
24*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxAlpFilterType.h>
25*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxFilterAvSettings.h>
26*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxFilterEvent.h>
27*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxFilterMainType.h>
28*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxFilterRecordSettings.h>
29*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxFilterSectionSettings.h>
30*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxFilterSettings.h>
31*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxFilterType.h>
32*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxIpAddress.h>
33*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxIpFilterSettings.h>
34*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxIpFilterType.h>
35*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxMmtpFilterType.h>
36*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxRecordScIndexType.h>
37*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxTlvFilterType.h>
38*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxTsFilterType.h>
39*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DvrSettings.h>
40*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DvrType.h>
41*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendDvbsSettings.h>
42*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendDvbtBandwidth.h>
43*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendDvbtCoderate.h>
44*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendDvbtConstellation.h>
45*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendDvbtGuardInterval.h>
46*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendDvbtHierarchy.h>
47*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendDvbtPlpMode.h>
48*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendDvbtSettings.h>
49*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendDvbtStandard.h>
50*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendDvbtTransmissionMode.h>
51*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendSettings.h>
52*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendStatus.h>
53*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendStatusType.h>
54*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendType.h>
55*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/LnbPosition.h>
56*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/LnbTone.h>
57*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/LnbVoltage.h>
58*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/PlaybackSettings.h>
59*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/RecordSettings.h>
60*4d7e907cSAndroid Build Coastguard Worker 
61*4d7e907cSAndroid Build Coastguard Worker using namespace std;
62*4d7e907cSAndroid Build Coastguard Worker using namespace aidl::android::hardware::tv::tuner;
63*4d7e907cSAndroid Build Coastguard Worker using namespace android::media::tuner::testing::configuration::V1_0;
64*4d7e907cSAndroid Build Coastguard Worker 
65*4d7e907cSAndroid Build Coastguard Worker static bool hasHwFe = false;
66*4d7e907cSAndroid Build Coastguard Worker static bool hasSwFe = false;
67*4d7e907cSAndroid Build Coastguard Worker static bool configFileRead = false;
68*4d7e907cSAndroid Build Coastguard Worker static bool configuredLive = false;
69*4d7e907cSAndroid Build Coastguard Worker static bool configuredScan = false;
70*4d7e907cSAndroid Build Coastguard Worker static bool configuredRecord = false;
71*4d7e907cSAndroid Build Coastguard Worker static bool configuredLnbLive = false;
72*4d7e907cSAndroid Build Coastguard Worker static bool configuredPlayback = false;
73*4d7e907cSAndroid Build Coastguard Worker static bool configuredLnbRecord = false;
74*4d7e907cSAndroid Build Coastguard Worker static bool configuredTimeFilter = false;
75*4d7e907cSAndroid Build Coastguard Worker static bool configuredDescrambling = false;
76*4d7e907cSAndroid Build Coastguard Worker static bool configuredLnbDescrambling = false;
77*4d7e907cSAndroid Build Coastguard Worker 
78*4d7e907cSAndroid Build Coastguard Worker const string emptyHardwareId = "";
79*4d7e907cSAndroid Build Coastguard Worker 
80*4d7e907cSAndroid Build Coastguard Worker static string mConfigFilePath;
81*4d7e907cSAndroid Build Coastguard Worker 
82*4d7e907cSAndroid Build Coastguard Worker static vector<string> playbackDvrIds;
83*4d7e907cSAndroid Build Coastguard Worker static vector<string> ipFilterIds;
84*4d7e907cSAndroid Build Coastguard Worker static vector<string> recordDvrIds;
85*4d7e907cSAndroid Build Coastguard Worker static vector<string> pcrFilterIds;
86*4d7e907cSAndroid Build Coastguard Worker static vector<string> timeFilterIds;
87*4d7e907cSAndroid Build Coastguard Worker static vector<string> audioFilterIds;
88*4d7e907cSAndroid Build Coastguard Worker static vector<string> videoFilterIds;
89*4d7e907cSAndroid Build Coastguard Worker static vector<string> recordFilterIds;
90*4d7e907cSAndroid Build Coastguard Worker static vector<string> sectionFilterIds;
91*4d7e907cSAndroid Build Coastguard Worker static vector<string> frontendIds;
92*4d7e907cSAndroid Build Coastguard Worker static vector<string> lnbIds;
93*4d7e907cSAndroid Build Coastguard Worker static vector<string> diseqcMsgs;
94*4d7e907cSAndroid Build Coastguard Worker static vector<string> descramblerIds;
95*4d7e907cSAndroid Build Coastguard Worker 
96*4d7e907cSAndroid Build Coastguard Worker #define PROVISION_STR                                      \
97*4d7e907cSAndroid Build Coastguard Worker     "{                                                   " \
98*4d7e907cSAndroid Build Coastguard Worker     "  \"id\": 21140844,                                 " \
99*4d7e907cSAndroid Build Coastguard Worker     "  \"name\": \"Test Title\",                         " \
100*4d7e907cSAndroid Build Coastguard Worker     "  \"lowercase_organization_name\": \"Android\",     " \
101*4d7e907cSAndroid Build Coastguard Worker     "  \"asset_key\": {                                  " \
102*4d7e907cSAndroid Build Coastguard Worker     "  \"encryption_key\": \"nezAr3CHFrmBR9R8Tedotw==\"  " \
103*4d7e907cSAndroid Build Coastguard Worker     "  },                                                " \
104*4d7e907cSAndroid Build Coastguard Worker     "  \"cas_type\": 1,                                  " \
105*4d7e907cSAndroid Build Coastguard Worker     "  \"track_types\": [ ]                              " \
106*4d7e907cSAndroid Build Coastguard Worker     "}                                                   "
107*4d7e907cSAndroid Build Coastguard Worker 
108*4d7e907cSAndroid Build Coastguard Worker struct FrontendConfig {
109*4d7e907cSAndroid Build Coastguard Worker     bool isSoftwareFe;
110*4d7e907cSAndroid Build Coastguard Worker     FrontendType type;
111*4d7e907cSAndroid Build Coastguard Worker     bool canConnectToCiCam;
112*4d7e907cSAndroid Build Coastguard Worker     int32_t ciCamId;
113*4d7e907cSAndroid Build Coastguard Worker     int32_t removePid;
114*4d7e907cSAndroid Build Coastguard Worker     FrontendSettings settings;
115*4d7e907cSAndroid Build Coastguard Worker     vector<FrontendStatusType> tuneStatusTypes;
116*4d7e907cSAndroid Build Coastguard Worker     vector<FrontendStatus> expectTuneStatuses;
117*4d7e907cSAndroid Build Coastguard Worker     bool supportBlindScan;
118*4d7e907cSAndroid Build Coastguard Worker };
119*4d7e907cSAndroid Build Coastguard Worker 
120*4d7e907cSAndroid Build Coastguard Worker struct FilterConfig {
121*4d7e907cSAndroid Build Coastguard Worker     int32_t bufferSize;
122*4d7e907cSAndroid Build Coastguard Worker     DemuxFilterType type;
123*4d7e907cSAndroid Build Coastguard Worker     DemuxFilterSettings settings;
124*4d7e907cSAndroid Build Coastguard Worker     bool getMqDesc;
125*4d7e907cSAndroid Build Coastguard Worker     AvStreamType streamType;
126*4d7e907cSAndroid Build Coastguard Worker     int32_t ipCid;
127*4d7e907cSAndroid Build Coastguard Worker     int32_t monitorEventTypes;
128*4d7e907cSAndroid Build Coastguard Worker     int timeDelayInMs = 0;
129*4d7e907cSAndroid Build Coastguard Worker     int dataDelayInBytes = 0;
130*4d7e907cSAndroid Build Coastguard Worker 
131*4d7e907cSAndroid Build Coastguard Worker     bool operator<(const FilterConfig& /*c*/) const { return false; }
132*4d7e907cSAndroid Build Coastguard Worker };
133*4d7e907cSAndroid Build Coastguard Worker 
134*4d7e907cSAndroid Build Coastguard Worker struct DvrConfig {
135*4d7e907cSAndroid Build Coastguard Worker     DvrType type;
136*4d7e907cSAndroid Build Coastguard Worker     int32_t bufferSize;
137*4d7e907cSAndroid Build Coastguard Worker     DvrSettings settings;
138*4d7e907cSAndroid Build Coastguard Worker     string playbackInputFile;
139*4d7e907cSAndroid Build Coastguard Worker };
140*4d7e907cSAndroid Build Coastguard Worker 
141*4d7e907cSAndroid Build Coastguard Worker struct LnbConfig {
142*4d7e907cSAndroid Build Coastguard Worker     string name;
143*4d7e907cSAndroid Build Coastguard Worker     LnbVoltage voltage;
144*4d7e907cSAndroid Build Coastguard Worker     LnbTone tone;
145*4d7e907cSAndroid Build Coastguard Worker     LnbPosition position;
146*4d7e907cSAndroid Build Coastguard Worker };
147*4d7e907cSAndroid Build Coastguard Worker 
148*4d7e907cSAndroid Build Coastguard Worker struct TimeFilterConfig {
149*4d7e907cSAndroid Build Coastguard Worker     int64_t timeStamp;
150*4d7e907cSAndroid Build Coastguard Worker };
151*4d7e907cSAndroid Build Coastguard Worker 
152*4d7e907cSAndroid Build Coastguard Worker struct DescramblerConfig {
153*4d7e907cSAndroid Build Coastguard Worker     int32_t casSystemId;
154*4d7e907cSAndroid Build Coastguard Worker     string provisionStr;
155*4d7e907cSAndroid Build Coastguard Worker     vector<uint8_t> hidlPvtData;
156*4d7e907cSAndroid Build Coastguard Worker };
157*4d7e907cSAndroid Build Coastguard Worker 
158*4d7e907cSAndroid Build Coastguard Worker struct LiveBroadcastHardwareConnections {
159*4d7e907cSAndroid Build Coastguard Worker     bool hasFrontendConnection;
160*4d7e907cSAndroid Build Coastguard Worker     string frontendId;
161*4d7e907cSAndroid Build Coastguard Worker     string dvrSoftwareFeId;
162*4d7e907cSAndroid Build Coastguard Worker     string audioFilterId;
163*4d7e907cSAndroid Build Coastguard Worker     string videoFilterId;
164*4d7e907cSAndroid Build Coastguard Worker     string sectionFilterId;
165*4d7e907cSAndroid Build Coastguard Worker     string ipFilterId;
166*4d7e907cSAndroid Build Coastguard Worker     string pcrFilterId;
167*4d7e907cSAndroid Build Coastguard Worker     /* list string of extra filters; */
168*4d7e907cSAndroid Build Coastguard Worker     vector<string> extraFilters;
169*4d7e907cSAndroid Build Coastguard Worker };
170*4d7e907cSAndroid Build Coastguard Worker 
171*4d7e907cSAndroid Build Coastguard Worker struct ScanHardwareConnections {
172*4d7e907cSAndroid Build Coastguard Worker     bool hasFrontendConnection;
173*4d7e907cSAndroid Build Coastguard Worker     string frontendId;
174*4d7e907cSAndroid Build Coastguard Worker };
175*4d7e907cSAndroid Build Coastguard Worker 
176*4d7e907cSAndroid Build Coastguard Worker struct DvrPlaybackHardwareConnections {
177*4d7e907cSAndroid Build Coastguard Worker     bool support;
178*4d7e907cSAndroid Build Coastguard Worker     bool hasExtraFilters = false;
179*4d7e907cSAndroid Build Coastguard Worker     string frontendId;
180*4d7e907cSAndroid Build Coastguard Worker     string dvrId;
181*4d7e907cSAndroid Build Coastguard Worker     string audioFilterId;
182*4d7e907cSAndroid Build Coastguard Worker     string videoFilterId;
183*4d7e907cSAndroid Build Coastguard Worker     string sectionFilterId;
184*4d7e907cSAndroid Build Coastguard Worker     vector<string> extraFilters;
185*4d7e907cSAndroid Build Coastguard Worker };
186*4d7e907cSAndroid Build Coastguard Worker 
187*4d7e907cSAndroid Build Coastguard Worker struct DvrRecordHardwareConnections {
188*4d7e907cSAndroid Build Coastguard Worker     bool support;
189*4d7e907cSAndroid Build Coastguard Worker     bool hasFrontendConnection;
190*4d7e907cSAndroid Build Coastguard Worker     string frontendId;
191*4d7e907cSAndroid Build Coastguard Worker     string dvrRecordId;
192*4d7e907cSAndroid Build Coastguard Worker     string dvrSoftwareFeId;
193*4d7e907cSAndroid Build Coastguard Worker     string recordFilterId;
194*4d7e907cSAndroid Build Coastguard Worker     string dvrSourceId;
195*4d7e907cSAndroid Build Coastguard Worker };
196*4d7e907cSAndroid Build Coastguard Worker 
197*4d7e907cSAndroid Build Coastguard Worker struct DescramblingHardwareConnections {
198*4d7e907cSAndroid Build Coastguard Worker     bool support;
199*4d7e907cSAndroid Build Coastguard Worker     bool hasFrontendConnection;
200*4d7e907cSAndroid Build Coastguard Worker     string frontendId;
201*4d7e907cSAndroid Build Coastguard Worker     string dvrSoftwareFeId;
202*4d7e907cSAndroid Build Coastguard Worker     string audioFilterId;
203*4d7e907cSAndroid Build Coastguard Worker     string videoFilterId;
204*4d7e907cSAndroid Build Coastguard Worker     string descramblerId;
205*4d7e907cSAndroid Build Coastguard Worker     string dvrSourceId;
206*4d7e907cSAndroid Build Coastguard Worker     vector<string> extraFilters;
207*4d7e907cSAndroid Build Coastguard Worker };
208*4d7e907cSAndroid Build Coastguard Worker 
209*4d7e907cSAndroid Build Coastguard Worker struct LnbLiveHardwareConnections {
210*4d7e907cSAndroid Build Coastguard Worker     bool support;
211*4d7e907cSAndroid Build Coastguard Worker     string frontendId;
212*4d7e907cSAndroid Build Coastguard Worker     string audioFilterId;
213*4d7e907cSAndroid Build Coastguard Worker     string videoFilterId;
214*4d7e907cSAndroid Build Coastguard Worker     string lnbId;
215*4d7e907cSAndroid Build Coastguard Worker     vector<string> diseqcMsgs;
216*4d7e907cSAndroid Build Coastguard Worker     vector<string> extraFilters;
217*4d7e907cSAndroid Build Coastguard Worker };
218*4d7e907cSAndroid Build Coastguard Worker 
219*4d7e907cSAndroid Build Coastguard Worker struct LnbRecordHardwareConnections {
220*4d7e907cSAndroid Build Coastguard Worker     bool support;
221*4d7e907cSAndroid Build Coastguard Worker     string frontendId;
222*4d7e907cSAndroid Build Coastguard Worker     string dvrRecordId;
223*4d7e907cSAndroid Build Coastguard Worker     string recordFilterId;
224*4d7e907cSAndroid Build Coastguard Worker     string lnbId;
225*4d7e907cSAndroid Build Coastguard Worker     vector<string> diseqcMsgs;
226*4d7e907cSAndroid Build Coastguard Worker     vector<string> extraFilters;
227*4d7e907cSAndroid Build Coastguard Worker };
228*4d7e907cSAndroid Build Coastguard Worker 
229*4d7e907cSAndroid Build Coastguard Worker struct TimeFilterHardwareConnections {
230*4d7e907cSAndroid Build Coastguard Worker     bool support;
231*4d7e907cSAndroid Build Coastguard Worker     string timeFilterId;
232*4d7e907cSAndroid Build Coastguard Worker };
233*4d7e907cSAndroid Build Coastguard Worker 
234*4d7e907cSAndroid Build Coastguard Worker struct LnbDescramblingHardwareConnections {
235*4d7e907cSAndroid Build Coastguard Worker     bool support;
236*4d7e907cSAndroid Build Coastguard Worker     string frontendId;
237*4d7e907cSAndroid Build Coastguard Worker     string audioFilterId;
238*4d7e907cSAndroid Build Coastguard Worker     string videoFilterId;
239*4d7e907cSAndroid Build Coastguard Worker     string lnbId;
240*4d7e907cSAndroid Build Coastguard Worker     string descramblerId;
241*4d7e907cSAndroid Build Coastguard Worker     vector<string> diseqcMsgs;
242*4d7e907cSAndroid Build Coastguard Worker };
243*4d7e907cSAndroid Build Coastguard Worker 
244*4d7e907cSAndroid Build Coastguard Worker struct TunerTestingConfigAidlReader1_0 {
245*4d7e907cSAndroid Build Coastguard Worker   public:
setConfigFilePathTunerTestingConfigAidlReader1_0246*4d7e907cSAndroid Build Coastguard Worker     static void setConfigFilePath(string path) { mConfigFilePath = path; }
247*4d7e907cSAndroid Build Coastguard Worker 
checkConfigFileExistsTunerTestingConfigAidlReader1_0248*4d7e907cSAndroid Build Coastguard Worker     static bool checkConfigFileExists() {
249*4d7e907cSAndroid Build Coastguard Worker         auto res = read(mConfigFilePath.c_str());
250*4d7e907cSAndroid Build Coastguard Worker         if (res == nullopt) {
251*4d7e907cSAndroid Build Coastguard Worker             ALOGW("[ConfigReader] Couldn't read %s."
252*4d7e907cSAndroid Build Coastguard Worker                   "Please check tuner_testing_dynamic_configuration.xsd"
253*4d7e907cSAndroid Build Coastguard Worker                   "and sample_tuner_vts_config.xml for more details on how to config Tune VTS.",
254*4d7e907cSAndroid Build Coastguard Worker                   mConfigFilePath.c_str());
255*4d7e907cSAndroid Build Coastguard Worker         }
256*4d7e907cSAndroid Build Coastguard Worker         return (res != nullopt);
257*4d7e907cSAndroid Build Coastguard Worker     }
258*4d7e907cSAndroid Build Coastguard Worker 
getTunerConfigTunerTestingConfigAidlReader1_0259*4d7e907cSAndroid Build Coastguard Worker     static TunerConfiguration getTunerConfig() { return *read(mConfigFilePath.c_str()); }
260*4d7e907cSAndroid Build Coastguard Worker 
getDataFlowConfigurationTunerTestingConfigAidlReader1_0261*4d7e907cSAndroid Build Coastguard Worker     static DataFlowConfiguration getDataFlowConfiguration() {
262*4d7e907cSAndroid Build Coastguard Worker         return *getTunerConfig().getFirstDataFlowConfiguration();
263*4d7e907cSAndroid Build Coastguard Worker     }
264*4d7e907cSAndroid Build Coastguard Worker 
getHardwareConfigTunerTestingConfigAidlReader1_0265*4d7e907cSAndroid Build Coastguard Worker     static HardwareConfiguration getHardwareConfig() {
266*4d7e907cSAndroid Build Coastguard Worker         return *getTunerConfig().getFirstHardwareConfiguration();
267*4d7e907cSAndroid Build Coastguard Worker     }
268*4d7e907cSAndroid Build Coastguard Worker 
readFrontendConfig1_0TunerTestingConfigAidlReader1_0269*4d7e907cSAndroid Build Coastguard Worker     static void readFrontendConfig1_0(map<string, FrontendConfig>& frontendMap) {
270*4d7e907cSAndroid Build Coastguard Worker         auto hardwareConfig = getHardwareConfig();
271*4d7e907cSAndroid Build Coastguard Worker         if (hardwareConfig.hasFrontends()) {
272*4d7e907cSAndroid Build Coastguard Worker             // TODO: b/182519645 complete the tune status config
273*4d7e907cSAndroid Build Coastguard Worker             vector<FrontendStatusType> types;
274*4d7e907cSAndroid Build Coastguard Worker             vector<FrontendStatus> statuses;
275*4d7e907cSAndroid Build Coastguard Worker 
276*4d7e907cSAndroid Build Coastguard Worker             types.push_back(FrontendStatusType::UEC);
277*4d7e907cSAndroid Build Coastguard Worker 
278*4d7e907cSAndroid Build Coastguard Worker             FrontendStatus status;
279*4d7e907cSAndroid Build Coastguard Worker             status.set<FrontendStatus::Tag::uec>(0);
280*4d7e907cSAndroid Build Coastguard Worker             statuses.push_back(status);
281*4d7e907cSAndroid Build Coastguard Worker 
282*4d7e907cSAndroid Build Coastguard Worker             auto frontends = *hardwareConfig.getFirstFrontends();
283*4d7e907cSAndroid Build Coastguard Worker             for (auto feConfig : frontends.getFrontend()) {
284*4d7e907cSAndroid Build Coastguard Worker                 string id = feConfig.getId();
285*4d7e907cSAndroid Build Coastguard Worker                 frontendIds.push_back(id);
286*4d7e907cSAndroid Build Coastguard Worker                 if (id.compare(string("FE_DEFAULT")) == 0) {
287*4d7e907cSAndroid Build Coastguard Worker                     // overrid default
288*4d7e907cSAndroid Build Coastguard Worker                     frontendMap.erase(string("FE_DEFAULT"));
289*4d7e907cSAndroid Build Coastguard Worker                 }
290*4d7e907cSAndroid Build Coastguard Worker                 FrontendType type;
291*4d7e907cSAndroid Build Coastguard Worker                 switch (feConfig.getType()) {
292*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::UNDEFINED:
293*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::UNDEFINED;
294*4d7e907cSAndroid Build Coastguard Worker                         break;
295*4d7e907cSAndroid Build Coastguard Worker                     // TODO: b/182519645 finish all other frontend settings
296*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::ANALOG:
297*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::ANALOG;
298*4d7e907cSAndroid Build Coastguard Worker                         break;
299*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::ATSC:
300*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::ATSC;
301*4d7e907cSAndroid Build Coastguard Worker                         frontendMap[id].settings.set<
302*4d7e907cSAndroid Build Coastguard Worker                             FrontendSettings::Tag::atsc>(
303*4d7e907cSAndroid Build Coastguard Worker                                 readAtscFrontendSettings(feConfig));
304*4d7e907cSAndroid Build Coastguard Worker                         break;
305*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::ATSC3:
306*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::ATSC3;
307*4d7e907cSAndroid Build Coastguard Worker                         break;
308*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::DVBC:
309*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::DVBC;
310*4d7e907cSAndroid Build Coastguard Worker                         break;
311*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::DVBS:
312*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::DVBS;
313*4d7e907cSAndroid Build Coastguard Worker                         frontendMap[id].settings.set<FrontendSettings::Tag::dvbs>(
314*4d7e907cSAndroid Build Coastguard Worker                                 readDvbsFrontendSettings(feConfig));
315*4d7e907cSAndroid Build Coastguard Worker                         break;
316*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::DVBT: {
317*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::DVBT;
318*4d7e907cSAndroid Build Coastguard Worker                         frontendMap[id].settings.set<FrontendSettings::Tag::dvbt>(
319*4d7e907cSAndroid Build Coastguard Worker                                 readDvbtFrontendSettings(feConfig));
320*4d7e907cSAndroid Build Coastguard Worker                         break;
321*4d7e907cSAndroid Build Coastguard Worker                     }
322*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::ISDBS:
323*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::ISDBS;
324*4d7e907cSAndroid Build Coastguard Worker                         frontendMap[id].settings.set<FrontendSettings::Tag::isdbs>(
325*4d7e907cSAndroid Build Coastguard Worker                                 readIsdbsFrontendSettings(feConfig));
326*4d7e907cSAndroid Build Coastguard Worker                         break;
327*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::ISDBS3:
328*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::ISDBS3;
329*4d7e907cSAndroid Build Coastguard Worker                         break;
330*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::ISDBT:
331*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::ISDBT;
332*4d7e907cSAndroid Build Coastguard Worker                         frontendMap[id].settings.set<FrontendSettings::Tag::isdbt>(
333*4d7e907cSAndroid Build Coastguard Worker                                 readIsdbtFrontendSettings(feConfig));
334*4d7e907cSAndroid Build Coastguard Worker                         break;
335*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::DTMB:
336*4d7e907cSAndroid Build Coastguard Worker                         type = FrontendType::DTMB;
337*4d7e907cSAndroid Build Coastguard Worker                         break;
338*4d7e907cSAndroid Build Coastguard Worker                     case FrontendTypeEnum::UNKNOWN:
339*4d7e907cSAndroid Build Coastguard Worker                         ALOGW("[ConfigReader] invalid frontend type");
340*4d7e907cSAndroid Build Coastguard Worker                         return;
341*4d7e907cSAndroid Build Coastguard Worker                     default:
342*4d7e907cSAndroid Build Coastguard Worker                         ALOGW("[ConfigReader] fe already handled in 1_0 reader.");
343*4d7e907cSAndroid Build Coastguard Worker                         break;
344*4d7e907cSAndroid Build Coastguard Worker                 }
345*4d7e907cSAndroid Build Coastguard Worker                 frontendMap[id].type = type;
346*4d7e907cSAndroid Build Coastguard Worker                 frontendMap[id].isSoftwareFe = feConfig.getIsSoftwareFrontend();
347*4d7e907cSAndroid Build Coastguard Worker                 if (frontendMap[id].isSoftwareFe) {
348*4d7e907cSAndroid Build Coastguard Worker                     hasSwFe = true;
349*4d7e907cSAndroid Build Coastguard Worker                 } else {
350*4d7e907cSAndroid Build Coastguard Worker                     hasHwFe = true;
351*4d7e907cSAndroid Build Coastguard Worker                 }
352*4d7e907cSAndroid Build Coastguard Worker                 if (feConfig.hasSupportBlindScan()) {
353*4d7e907cSAndroid Build Coastguard Worker                     frontendMap[id].supportBlindScan = feConfig.getSupportBlindScan();
354*4d7e907cSAndroid Build Coastguard Worker                 } else {
355*4d7e907cSAndroid Build Coastguard Worker                     frontendMap[id].supportBlindScan = true;
356*4d7e907cSAndroid Build Coastguard Worker                 }
357*4d7e907cSAndroid Build Coastguard Worker                 // TODO: b/182519645 complete the tune status config
358*4d7e907cSAndroid Build Coastguard Worker                 frontendMap[id].tuneStatusTypes = types;
359*4d7e907cSAndroid Build Coastguard Worker                 frontendMap[id].expectTuneStatuses = statuses;
360*4d7e907cSAndroid Build Coastguard Worker                 getCiCamInfo(feConfig, frontendMap[id].canConnectToCiCam, frontendMap[id].ciCamId,
361*4d7e907cSAndroid Build Coastguard Worker                              frontendMap[id].removePid);
362*4d7e907cSAndroid Build Coastguard Worker             }
363*4d7e907cSAndroid Build Coastguard Worker         }
364*4d7e907cSAndroid Build Coastguard Worker     }
365*4d7e907cSAndroid Build Coastguard Worker 
readFilterConfig1_0TunerTestingConfigAidlReader1_0366*4d7e907cSAndroid Build Coastguard Worker     static void readFilterConfig1_0(map<string, FilterConfig>& filterMap) {
367*4d7e907cSAndroid Build Coastguard Worker         auto hardwareConfig = getHardwareConfig();
368*4d7e907cSAndroid Build Coastguard Worker         if (hardwareConfig.hasFilters()) {
369*4d7e907cSAndroid Build Coastguard Worker             auto filters = *hardwareConfig.getFirstFilters();
370*4d7e907cSAndroid Build Coastguard Worker             for (auto filterConfig : filters.getFilter()) {
371*4d7e907cSAndroid Build Coastguard Worker                 string id = filterConfig.getId();
372*4d7e907cSAndroid Build Coastguard Worker                 if (id.compare(string("FILTER_AUDIO_DEFAULT")) == 0) {
373*4d7e907cSAndroid Build Coastguard Worker                     // overrid default
374*4d7e907cSAndroid Build Coastguard Worker                     filterMap.erase(string("FILTER_AUDIO_DEFAULT"));
375*4d7e907cSAndroid Build Coastguard Worker                 }
376*4d7e907cSAndroid Build Coastguard Worker                 if (id.compare(string("FILTER_VIDEO_DEFAULT")) == 0) {
377*4d7e907cSAndroid Build Coastguard Worker                     // overrid default
378*4d7e907cSAndroid Build Coastguard Worker                     filterMap.erase(string("FILTER_VIDEO_DEFAULT"));
379*4d7e907cSAndroid Build Coastguard Worker                 }
380*4d7e907cSAndroid Build Coastguard Worker 
381*4d7e907cSAndroid Build Coastguard Worker                 DemuxFilterType type;
382*4d7e907cSAndroid Build Coastguard Worker                 DemuxFilterSettings settings;
383*4d7e907cSAndroid Build Coastguard Worker                 if (!readFilterTypeAndSettings(filterConfig, type, settings)) {
384*4d7e907cSAndroid Build Coastguard Worker                     ALOGW("[ConfigReader] invalid filter type");
385*4d7e907cSAndroid Build Coastguard Worker                     return;
386*4d7e907cSAndroid Build Coastguard Worker                 }
387*4d7e907cSAndroid Build Coastguard Worker                 filterMap[id].type = type;
388*4d7e907cSAndroid Build Coastguard Worker                 filterMap[id].bufferSize = filterConfig.getBufferSize();
389*4d7e907cSAndroid Build Coastguard Worker                 filterMap[id].getMqDesc = filterConfig.getUseFMQ();
390*4d7e907cSAndroid Build Coastguard Worker                 filterMap[id].settings = settings;
391*4d7e907cSAndroid Build Coastguard Worker 
392*4d7e907cSAndroid Build Coastguard Worker                 if (filterConfig.hasMonitorEventTypes()) {
393*4d7e907cSAndroid Build Coastguard Worker                     filterMap[id].monitorEventTypes = (int32_t)filterConfig.getMonitorEventTypes();
394*4d7e907cSAndroid Build Coastguard Worker                 }
395*4d7e907cSAndroid Build Coastguard Worker                 if (filterConfig.hasTimeDelayInMs()) {
396*4d7e907cSAndroid Build Coastguard Worker                     filterMap[id].timeDelayInMs = filterConfig.getTimeDelayInMs();
397*4d7e907cSAndroid Build Coastguard Worker                 }
398*4d7e907cSAndroid Build Coastguard Worker                 if (filterConfig.hasDataDelayInBytes()) {
399*4d7e907cSAndroid Build Coastguard Worker                     filterMap[id].dataDelayInBytes = filterConfig.getDataDelayInBytes();
400*4d7e907cSAndroid Build Coastguard Worker                 }
401*4d7e907cSAndroid Build Coastguard Worker                 if (filterConfig.hasAvFilterSettings_optional()) {
402*4d7e907cSAndroid Build Coastguard Worker                     auto av = filterConfig.getFirstAvFilterSettings_optional();
403*4d7e907cSAndroid Build Coastguard Worker                     if (av->hasAudioStreamType_optional()) {
404*4d7e907cSAndroid Build Coastguard Worker                         filterMap[id].streamType.set<AvStreamType::Tag::audio>(
405*4d7e907cSAndroid Build Coastguard Worker                                 static_cast<AudioStreamType>(av->getAudioStreamType_optional()));
406*4d7e907cSAndroid Build Coastguard Worker                     }
407*4d7e907cSAndroid Build Coastguard Worker                     if (av->hasVideoStreamType_optional()) {
408*4d7e907cSAndroid Build Coastguard Worker                         filterMap[id].streamType.set<AvStreamType::Tag::video>(
409*4d7e907cSAndroid Build Coastguard Worker                                 static_cast<VideoStreamType>(av->getVideoStreamType_optional()));
410*4d7e907cSAndroid Build Coastguard Worker                     }
411*4d7e907cSAndroid Build Coastguard Worker                 }
412*4d7e907cSAndroid Build Coastguard Worker                 if (filterConfig.hasIpFilterConfig_optional()) {
413*4d7e907cSAndroid Build Coastguard Worker                     auto ip = filterConfig.getFirstIpFilterConfig_optional();
414*4d7e907cSAndroid Build Coastguard Worker                     if (ip->hasIpCid()) {
415*4d7e907cSAndroid Build Coastguard Worker                         filterMap[id].ipCid = ip->getIpCid();
416*4d7e907cSAndroid Build Coastguard Worker                     }
417*4d7e907cSAndroid Build Coastguard Worker                 }
418*4d7e907cSAndroid Build Coastguard Worker             }
419*4d7e907cSAndroid Build Coastguard Worker         }
420*4d7e907cSAndroid Build Coastguard Worker     }
421*4d7e907cSAndroid Build Coastguard Worker 
readDvrConfig1_0TunerTestingConfigAidlReader1_0422*4d7e907cSAndroid Build Coastguard Worker     static void readDvrConfig1_0(map<string, DvrConfig>& dvrMap) {
423*4d7e907cSAndroid Build Coastguard Worker         auto hardwareConfig = getHardwareConfig();
424*4d7e907cSAndroid Build Coastguard Worker         if (hardwareConfig.hasDvrs()) {
425*4d7e907cSAndroid Build Coastguard Worker             auto dvrs = *hardwareConfig.getFirstDvrs();
426*4d7e907cSAndroid Build Coastguard Worker             for (auto dvrConfig : dvrs.getDvr()) {
427*4d7e907cSAndroid Build Coastguard Worker                 string id = dvrConfig.getId();
428*4d7e907cSAndroid Build Coastguard Worker                 DvrType type;
429*4d7e907cSAndroid Build Coastguard Worker                 switch (dvrConfig.getType()) {
430*4d7e907cSAndroid Build Coastguard Worker                     case DvrTypeEnum::PLAYBACK:
431*4d7e907cSAndroid Build Coastguard Worker                         playbackDvrIds.push_back(id);
432*4d7e907cSAndroid Build Coastguard Worker                         type = DvrType::PLAYBACK;
433*4d7e907cSAndroid Build Coastguard Worker                         dvrMap[id].settings.set<DvrSettings::Tag::playback>(
434*4d7e907cSAndroid Build Coastguard Worker                                 readPlaybackSettings(dvrConfig));
435*4d7e907cSAndroid Build Coastguard Worker                         break;
436*4d7e907cSAndroid Build Coastguard Worker                     case DvrTypeEnum::RECORD:
437*4d7e907cSAndroid Build Coastguard Worker                         recordDvrIds.push_back(id);
438*4d7e907cSAndroid Build Coastguard Worker                         type = DvrType::RECORD;
439*4d7e907cSAndroid Build Coastguard Worker                         dvrMap[id].settings.set<DvrSettings::Tag::record>(
440*4d7e907cSAndroid Build Coastguard Worker                                 readRecordSettings(dvrConfig));
441*4d7e907cSAndroid Build Coastguard Worker                         break;
442*4d7e907cSAndroid Build Coastguard Worker                     case DvrTypeEnum::UNKNOWN:
443*4d7e907cSAndroid Build Coastguard Worker                         ALOGW("[ConfigReader] invalid DVR type");
444*4d7e907cSAndroid Build Coastguard Worker                         return;
445*4d7e907cSAndroid Build Coastguard Worker                 }
446*4d7e907cSAndroid Build Coastguard Worker                 dvrMap[id].type = type;
447*4d7e907cSAndroid Build Coastguard Worker                 dvrMap[id].bufferSize = static_cast<int32_t>(dvrConfig.getBufferSize());
448*4d7e907cSAndroid Build Coastguard Worker                 if (dvrConfig.hasInputFilePath()) {
449*4d7e907cSAndroid Build Coastguard Worker                     dvrMap[id].playbackInputFile = dvrConfig.getInputFilePath();
450*4d7e907cSAndroid Build Coastguard Worker                 }
451*4d7e907cSAndroid Build Coastguard Worker             }
452*4d7e907cSAndroid Build Coastguard Worker         }
453*4d7e907cSAndroid Build Coastguard Worker     }
454*4d7e907cSAndroid Build Coastguard Worker 
readLnbConfig1_0TunerTestingConfigAidlReader1_0455*4d7e907cSAndroid Build Coastguard Worker     static void readLnbConfig1_0(map<string, LnbConfig>& lnbMap) {
456*4d7e907cSAndroid Build Coastguard Worker         auto hardwareConfig = getHardwareConfig();
457*4d7e907cSAndroid Build Coastguard Worker         if (hardwareConfig.hasLnbs()) {
458*4d7e907cSAndroid Build Coastguard Worker             auto lnbs = *hardwareConfig.getFirstLnbs();
459*4d7e907cSAndroid Build Coastguard Worker             for (auto lnbConfig : lnbs.getLnb()) {
460*4d7e907cSAndroid Build Coastguard Worker                 string id = lnbConfig.getId();
461*4d7e907cSAndroid Build Coastguard Worker                 lnbIds.push_back(id);
462*4d7e907cSAndroid Build Coastguard Worker                 if (lnbConfig.hasName()) {
463*4d7e907cSAndroid Build Coastguard Worker                     lnbMap[id].name = lnbConfig.getName();
464*4d7e907cSAndroid Build Coastguard Worker                 } else {
465*4d7e907cSAndroid Build Coastguard Worker                     lnbMap[id].name = emptyHardwareId;
466*4d7e907cSAndroid Build Coastguard Worker                 }
467*4d7e907cSAndroid Build Coastguard Worker                 lnbMap[id].voltage = static_cast<LnbVoltage>(lnbConfig.getVoltage());
468*4d7e907cSAndroid Build Coastguard Worker                 lnbMap[id].tone = static_cast<LnbTone>(lnbConfig.getTone());
469*4d7e907cSAndroid Build Coastguard Worker                 lnbMap[id].position = static_cast<LnbPosition>(lnbConfig.getPosition());
470*4d7e907cSAndroid Build Coastguard Worker             }
471*4d7e907cSAndroid Build Coastguard Worker         }
472*4d7e907cSAndroid Build Coastguard Worker     }
473*4d7e907cSAndroid Build Coastguard Worker 
readDescramblerConfig1_0TunerTestingConfigAidlReader1_0474*4d7e907cSAndroid Build Coastguard Worker     static void readDescramblerConfig1_0(map<string, DescramblerConfig>& descramblerMap) {
475*4d7e907cSAndroid Build Coastguard Worker         auto hardwareConfig = getHardwareConfig();
476*4d7e907cSAndroid Build Coastguard Worker         if (hardwareConfig.hasDescramblers()) {
477*4d7e907cSAndroid Build Coastguard Worker             auto descramblers = *hardwareConfig.getFirstDescramblers();
478*4d7e907cSAndroid Build Coastguard Worker             for (auto descramblerConfig : descramblers.getDescrambler()) {
479*4d7e907cSAndroid Build Coastguard Worker                 string id = descramblerConfig.getId();
480*4d7e907cSAndroid Build Coastguard Worker                 descramblerIds.push_back(id);
481*4d7e907cSAndroid Build Coastguard Worker                 descramblerMap[id].casSystemId =
482*4d7e907cSAndroid Build Coastguard Worker                         static_cast<int32_t>(descramblerConfig.getCasSystemId());
483*4d7e907cSAndroid Build Coastguard Worker                 if (descramblerConfig.hasProvisionStr()) {
484*4d7e907cSAndroid Build Coastguard Worker                     descramblerMap[id].provisionStr = descramblerConfig.getProvisionStr();
485*4d7e907cSAndroid Build Coastguard Worker                 } else {
486*4d7e907cSAndroid Build Coastguard Worker                     descramblerMap[id].provisionStr = PROVISION_STR;
487*4d7e907cSAndroid Build Coastguard Worker                 }
488*4d7e907cSAndroid Build Coastguard Worker                 if (descramblerConfig.hasSesstionPrivatData()) {
489*4d7e907cSAndroid Build Coastguard Worker                     auto privateData = descramblerConfig.getSesstionPrivatData();
490*4d7e907cSAndroid Build Coastguard Worker                     int size = privateData.size();
491*4d7e907cSAndroid Build Coastguard Worker                     descramblerMap[id].hidlPvtData.resize(size);
492*4d7e907cSAndroid Build Coastguard Worker                     memcpy(descramblerMap[id].hidlPvtData.data(), privateData.data(), size);
493*4d7e907cSAndroid Build Coastguard Worker                 } else {
494*4d7e907cSAndroid Build Coastguard Worker                     descramblerMap[id].hidlPvtData.resize(256);
495*4d7e907cSAndroid Build Coastguard Worker                 }
496*4d7e907cSAndroid Build Coastguard Worker             }
497*4d7e907cSAndroid Build Coastguard Worker         }
498*4d7e907cSAndroid Build Coastguard Worker     }
499*4d7e907cSAndroid Build Coastguard Worker 
readDiseqcMessagesTunerTestingConfigAidlReader1_0500*4d7e907cSAndroid Build Coastguard Worker     static void readDiseqcMessages(map<string, vector<uint8_t>>& diseqcMsgMap) {
501*4d7e907cSAndroid Build Coastguard Worker         auto hardwareConfig = getHardwareConfig();
502*4d7e907cSAndroid Build Coastguard Worker         if (hardwareConfig.hasDiseqcMessages()) {
503*4d7e907cSAndroid Build Coastguard Worker             auto msgs = *hardwareConfig.getFirstDiseqcMessages();
504*4d7e907cSAndroid Build Coastguard Worker             for (auto msgConfig : msgs.getDiseqcMessage()) {
505*4d7e907cSAndroid Build Coastguard Worker                 string name = msgConfig.getMsgName();
506*4d7e907cSAndroid Build Coastguard Worker                 diseqcMsgs.push_back(name);
507*4d7e907cSAndroid Build Coastguard Worker                 for (uint8_t atom : msgConfig.getMsgBody()) {
508*4d7e907cSAndroid Build Coastguard Worker                     diseqcMsgMap[name].push_back(atom);
509*4d7e907cSAndroid Build Coastguard Worker                 }
510*4d7e907cSAndroid Build Coastguard Worker             }
511*4d7e907cSAndroid Build Coastguard Worker         }
512*4d7e907cSAndroid Build Coastguard Worker     }
513*4d7e907cSAndroid Build Coastguard Worker 
readTimeFilterConfig1_0TunerTestingConfigAidlReader1_0514*4d7e907cSAndroid Build Coastguard Worker     static void readTimeFilterConfig1_0(map<string, TimeFilterConfig>& timeFilterMap) {
515*4d7e907cSAndroid Build Coastguard Worker         auto hardwareConfig = getHardwareConfig();
516*4d7e907cSAndroid Build Coastguard Worker         if (hardwareConfig.hasTimeFilters()) {
517*4d7e907cSAndroid Build Coastguard Worker             auto timeFilters = *hardwareConfig.getFirstTimeFilters();
518*4d7e907cSAndroid Build Coastguard Worker             for (auto timeFilterConfig : timeFilters.getTimeFilter()) {
519*4d7e907cSAndroid Build Coastguard Worker                 string id = timeFilterConfig.getId();
520*4d7e907cSAndroid Build Coastguard Worker                 timeFilterIds.push_back(id);
521*4d7e907cSAndroid Build Coastguard Worker                 timeFilterMap[id].timeStamp = static_cast<int64_t>(timeFilterConfig.getTimeStamp());
522*4d7e907cSAndroid Build Coastguard Worker             }
523*4d7e907cSAndroid Build Coastguard Worker         }
524*4d7e907cSAndroid Build Coastguard Worker     }
525*4d7e907cSAndroid Build Coastguard Worker 
connectLiveBroadcastTunerTestingConfigAidlReader1_0526*4d7e907cSAndroid Build Coastguard Worker     static void connectLiveBroadcast(LiveBroadcastHardwareConnections& live) {
527*4d7e907cSAndroid Build Coastguard Worker         auto dataFlow = getDataFlowConfiguration();
528*4d7e907cSAndroid Build Coastguard Worker         if (dataFlow.hasClearLiveBroadcast()) {
529*4d7e907cSAndroid Build Coastguard Worker             live.hasFrontendConnection = true;
530*4d7e907cSAndroid Build Coastguard Worker             configuredLive = true;
531*4d7e907cSAndroid Build Coastguard Worker         } else {
532*4d7e907cSAndroid Build Coastguard Worker             live.hasFrontendConnection = false;
533*4d7e907cSAndroid Build Coastguard Worker             return;
534*4d7e907cSAndroid Build Coastguard Worker         }
535*4d7e907cSAndroid Build Coastguard Worker         auto liveConfig = *dataFlow.getFirstClearLiveBroadcast();
536*4d7e907cSAndroid Build Coastguard Worker         live.frontendId = liveConfig.getFrontendConnection();
537*4d7e907cSAndroid Build Coastguard Worker 
538*4d7e907cSAndroid Build Coastguard Worker         live.audioFilterId = liveConfig.getAudioFilterConnection();
539*4d7e907cSAndroid Build Coastguard Worker         live.videoFilterId = liveConfig.getVideoFilterConnection();
540*4d7e907cSAndroid Build Coastguard Worker         if (liveConfig.hasPcrFilterConnection()) {
541*4d7e907cSAndroid Build Coastguard Worker             live.pcrFilterId = liveConfig.getPcrFilterConnection();
542*4d7e907cSAndroid Build Coastguard Worker         } else {
543*4d7e907cSAndroid Build Coastguard Worker             live.pcrFilterId = emptyHardwareId;
544*4d7e907cSAndroid Build Coastguard Worker         }
545*4d7e907cSAndroid Build Coastguard Worker         if (liveConfig.hasSectionFilterConnection()) {
546*4d7e907cSAndroid Build Coastguard Worker             live.sectionFilterId = liveConfig.getSectionFilterConnection();
547*4d7e907cSAndroid Build Coastguard Worker         } else {
548*4d7e907cSAndroid Build Coastguard Worker             live.sectionFilterId = emptyHardwareId;
549*4d7e907cSAndroid Build Coastguard Worker         }
550*4d7e907cSAndroid Build Coastguard Worker         if (liveConfig.hasDvrSoftwareFeConnection()) {
551*4d7e907cSAndroid Build Coastguard Worker             live.dvrSoftwareFeId = liveConfig.getDvrSoftwareFeConnection();
552*4d7e907cSAndroid Build Coastguard Worker         }
553*4d7e907cSAndroid Build Coastguard Worker         if (liveConfig.hasIpFilterConnection()) {
554*4d7e907cSAndroid Build Coastguard Worker             live.ipFilterId = liveConfig.getIpFilterConnection();
555*4d7e907cSAndroid Build Coastguard Worker         } else {
556*4d7e907cSAndroid Build Coastguard Worker             live.ipFilterId = emptyHardwareId;
557*4d7e907cSAndroid Build Coastguard Worker         }
558*4d7e907cSAndroid Build Coastguard Worker         if (liveConfig.hasOptionalFilters()) {
559*4d7e907cSAndroid Build Coastguard Worker             auto optionalFilters = liveConfig.getOptionalFilters();
560*4d7e907cSAndroid Build Coastguard Worker             live.extraFilters = optionalFilters;
561*4d7e907cSAndroid Build Coastguard Worker         }
562*4d7e907cSAndroid Build Coastguard Worker     }
563*4d7e907cSAndroid Build Coastguard Worker 
connectScanTunerTestingConfigAidlReader1_0564*4d7e907cSAndroid Build Coastguard Worker     static void connectScan(ScanHardwareConnections& scan) {
565*4d7e907cSAndroid Build Coastguard Worker         auto dataFlow = getDataFlowConfiguration();
566*4d7e907cSAndroid Build Coastguard Worker         if (dataFlow.hasScan()) {
567*4d7e907cSAndroid Build Coastguard Worker             scan.hasFrontendConnection = true;
568*4d7e907cSAndroid Build Coastguard Worker             configuredScan = true;
569*4d7e907cSAndroid Build Coastguard Worker         } else {
570*4d7e907cSAndroid Build Coastguard Worker             scan.hasFrontendConnection = false;
571*4d7e907cSAndroid Build Coastguard Worker             return;
572*4d7e907cSAndroid Build Coastguard Worker         }
573*4d7e907cSAndroid Build Coastguard Worker         auto scanConfig = *dataFlow.getFirstScan();
574*4d7e907cSAndroid Build Coastguard Worker         scan.frontendId = scanConfig.getFrontendConnection();
575*4d7e907cSAndroid Build Coastguard Worker     }
576*4d7e907cSAndroid Build Coastguard Worker 
connectDvrPlaybackTunerTestingConfigAidlReader1_0577*4d7e907cSAndroid Build Coastguard Worker     static void connectDvrPlayback(DvrPlaybackHardwareConnections& playback) {
578*4d7e907cSAndroid Build Coastguard Worker         auto dataFlow = getDataFlowConfiguration();
579*4d7e907cSAndroid Build Coastguard Worker         if (dataFlow.hasDvrPlayback()) {
580*4d7e907cSAndroid Build Coastguard Worker             playback.support = true;
581*4d7e907cSAndroid Build Coastguard Worker             configuredPlayback = true;
582*4d7e907cSAndroid Build Coastguard Worker         } else {
583*4d7e907cSAndroid Build Coastguard Worker             playback.support = false;
584*4d7e907cSAndroid Build Coastguard Worker             return;
585*4d7e907cSAndroid Build Coastguard Worker         }
586*4d7e907cSAndroid Build Coastguard Worker         auto playbackConfig = *dataFlow.getFirstDvrPlayback();
587*4d7e907cSAndroid Build Coastguard Worker         playback.dvrId = playbackConfig.getDvrConnection();
588*4d7e907cSAndroid Build Coastguard Worker         playback.audioFilterId = playbackConfig.getAudioFilterConnection();
589*4d7e907cSAndroid Build Coastguard Worker         playback.videoFilterId = playbackConfig.getVideoFilterConnection();
590*4d7e907cSAndroid Build Coastguard Worker         if (playbackConfig.hasSectionFilterConnection()) {
591*4d7e907cSAndroid Build Coastguard Worker             playback.sectionFilterId = playbackConfig.getSectionFilterConnection();
592*4d7e907cSAndroid Build Coastguard Worker         } else {
593*4d7e907cSAndroid Build Coastguard Worker             playback.sectionFilterId = emptyHardwareId;
594*4d7e907cSAndroid Build Coastguard Worker         }
595*4d7e907cSAndroid Build Coastguard Worker         if (playbackConfig.hasOptionalFilters()) {
596*4d7e907cSAndroid Build Coastguard Worker             auto optionalFilters = playbackConfig.getOptionalFilters();
597*4d7e907cSAndroid Build Coastguard Worker             playback.extraFilters = optionalFilters;
598*4d7e907cSAndroid Build Coastguard Worker         }
599*4d7e907cSAndroid Build Coastguard Worker     }
600*4d7e907cSAndroid Build Coastguard Worker 
connectDvrRecordTunerTestingConfigAidlReader1_0601*4d7e907cSAndroid Build Coastguard Worker     static void connectDvrRecord(DvrRecordHardwareConnections& record) {
602*4d7e907cSAndroid Build Coastguard Worker         auto dataFlow = getDataFlowConfiguration();
603*4d7e907cSAndroid Build Coastguard Worker         if (dataFlow.hasDvrRecord()) {
604*4d7e907cSAndroid Build Coastguard Worker             record.support = true;
605*4d7e907cSAndroid Build Coastguard Worker             configuredRecord = true;
606*4d7e907cSAndroid Build Coastguard Worker         } else {
607*4d7e907cSAndroid Build Coastguard Worker             record.support = false;
608*4d7e907cSAndroid Build Coastguard Worker             return;
609*4d7e907cSAndroid Build Coastguard Worker         }
610*4d7e907cSAndroid Build Coastguard Worker         auto recordConfig = *dataFlow.getFirstDvrRecord();
611*4d7e907cSAndroid Build Coastguard Worker         record.recordFilterId = recordConfig.getRecordFilterConnection();
612*4d7e907cSAndroid Build Coastguard Worker         record.dvrRecordId = recordConfig.getDvrRecordConnection();
613*4d7e907cSAndroid Build Coastguard Worker         if (recordConfig.hasDvrSoftwareFeConnection()) {
614*4d7e907cSAndroid Build Coastguard Worker             record.dvrSoftwareFeId = recordConfig.getDvrSoftwareFeConnection();
615*4d7e907cSAndroid Build Coastguard Worker         }
616*4d7e907cSAndroid Build Coastguard Worker         if (recordConfig.getHasFrontendConnection()) {
617*4d7e907cSAndroid Build Coastguard Worker             record.hasFrontendConnection = true;
618*4d7e907cSAndroid Build Coastguard Worker             record.dvrSourceId = emptyHardwareId;
619*4d7e907cSAndroid Build Coastguard Worker             record.frontendId = recordConfig.getFrontendConnection();
620*4d7e907cSAndroid Build Coastguard Worker         } else {
621*4d7e907cSAndroid Build Coastguard Worker             record.hasFrontendConnection = false;
622*4d7e907cSAndroid Build Coastguard Worker             record.dvrSourceId = recordConfig.getDvrSourceConnection();
623*4d7e907cSAndroid Build Coastguard Worker         }
624*4d7e907cSAndroid Build Coastguard Worker     }
625*4d7e907cSAndroid Build Coastguard Worker 
connectDescramblingTunerTestingConfigAidlReader1_0626*4d7e907cSAndroid Build Coastguard Worker     static void connectDescrambling(DescramblingHardwareConnections& descrambling) {
627*4d7e907cSAndroid Build Coastguard Worker         auto dataFlow = getDataFlowConfiguration();
628*4d7e907cSAndroid Build Coastguard Worker         if (dataFlow.hasDescrambling()) {
629*4d7e907cSAndroid Build Coastguard Worker             descrambling.support = true;
630*4d7e907cSAndroid Build Coastguard Worker             configuredDescrambling = true;
631*4d7e907cSAndroid Build Coastguard Worker         } else {
632*4d7e907cSAndroid Build Coastguard Worker             descrambling.support = false;
633*4d7e907cSAndroid Build Coastguard Worker             return;
634*4d7e907cSAndroid Build Coastguard Worker         }
635*4d7e907cSAndroid Build Coastguard Worker         auto descConfig = *dataFlow.getFirstDescrambling();
636*4d7e907cSAndroid Build Coastguard Worker         descrambling.descramblerId = descConfig.getDescramblerConnection();
637*4d7e907cSAndroid Build Coastguard Worker         descrambling.audioFilterId = descConfig.getAudioFilterConnection();
638*4d7e907cSAndroid Build Coastguard Worker         descrambling.videoFilterId = descConfig.getVideoFilterConnection();
639*4d7e907cSAndroid Build Coastguard Worker         if (descConfig.hasDvrSoftwareFeConnection()) {
640*4d7e907cSAndroid Build Coastguard Worker             descrambling.dvrSoftwareFeId = descConfig.getDvrSoftwareFeConnection();
641*4d7e907cSAndroid Build Coastguard Worker         }
642*4d7e907cSAndroid Build Coastguard Worker         if (descConfig.getHasFrontendConnection()) {
643*4d7e907cSAndroid Build Coastguard Worker             descrambling.hasFrontendConnection = true;
644*4d7e907cSAndroid Build Coastguard Worker             descrambling.dvrSourceId = emptyHardwareId;
645*4d7e907cSAndroid Build Coastguard Worker             descrambling.frontendId = descConfig.getFrontendConnection();
646*4d7e907cSAndroid Build Coastguard Worker         } else {
647*4d7e907cSAndroid Build Coastguard Worker             descrambling.hasFrontendConnection = false;
648*4d7e907cSAndroid Build Coastguard Worker             descrambling.dvrSourceId = descConfig.getDvrSourceConnection();
649*4d7e907cSAndroid Build Coastguard Worker         }
650*4d7e907cSAndroid Build Coastguard Worker         if (descConfig.hasOptionalFilters()) {
651*4d7e907cSAndroid Build Coastguard Worker             auto optionalFilters = descConfig.getOptionalFilters();
652*4d7e907cSAndroid Build Coastguard Worker             descrambling.extraFilters = optionalFilters;
653*4d7e907cSAndroid Build Coastguard Worker         }
654*4d7e907cSAndroid Build Coastguard Worker     }
655*4d7e907cSAndroid Build Coastguard Worker 
connectLnbLiveTunerTestingConfigAidlReader1_0656*4d7e907cSAndroid Build Coastguard Worker     static void connectLnbLive(LnbLiveHardwareConnections& lnbLive) {
657*4d7e907cSAndroid Build Coastguard Worker         auto dataFlow = getDataFlowConfiguration();
658*4d7e907cSAndroid Build Coastguard Worker         if (dataFlow.hasLnbLive()) {
659*4d7e907cSAndroid Build Coastguard Worker             lnbLive.support = true;
660*4d7e907cSAndroid Build Coastguard Worker             configuredLnbLive = true;
661*4d7e907cSAndroid Build Coastguard Worker         } else {
662*4d7e907cSAndroid Build Coastguard Worker             lnbLive.support = false;
663*4d7e907cSAndroid Build Coastguard Worker             return;
664*4d7e907cSAndroid Build Coastguard Worker         }
665*4d7e907cSAndroid Build Coastguard Worker         auto lnbLiveConfig = *dataFlow.getFirstLnbLive();
666*4d7e907cSAndroid Build Coastguard Worker         lnbLive.frontendId = lnbLiveConfig.getFrontendConnection();
667*4d7e907cSAndroid Build Coastguard Worker         lnbLive.audioFilterId = lnbLiveConfig.getAudioFilterConnection();
668*4d7e907cSAndroid Build Coastguard Worker         lnbLive.videoFilterId = lnbLiveConfig.getVideoFilterConnection();
669*4d7e907cSAndroid Build Coastguard Worker         lnbLive.lnbId = lnbLiveConfig.getLnbConnection();
670*4d7e907cSAndroid Build Coastguard Worker         if (lnbLiveConfig.hasDiseqcMsgSender()) {
671*4d7e907cSAndroid Build Coastguard Worker             for (auto msgName : lnbLiveConfig.getDiseqcMsgSender()) {
672*4d7e907cSAndroid Build Coastguard Worker                 lnbLive.diseqcMsgs.push_back(msgName);
673*4d7e907cSAndroid Build Coastguard Worker             }
674*4d7e907cSAndroid Build Coastguard Worker         }
675*4d7e907cSAndroid Build Coastguard Worker         if (lnbLiveConfig.hasOptionalFilters()) {
676*4d7e907cSAndroid Build Coastguard Worker             auto optionalFilters = lnbLiveConfig.getOptionalFilters();
677*4d7e907cSAndroid Build Coastguard Worker             lnbLive.extraFilters = optionalFilters;
678*4d7e907cSAndroid Build Coastguard Worker         }
679*4d7e907cSAndroid Build Coastguard Worker     }
680*4d7e907cSAndroid Build Coastguard Worker 
connectLnbRecordTunerTestingConfigAidlReader1_0681*4d7e907cSAndroid Build Coastguard Worker     static void connectLnbRecord(LnbRecordHardwareConnections& lnbRecord) {
682*4d7e907cSAndroid Build Coastguard Worker         auto dataFlow = getDataFlowConfiguration();
683*4d7e907cSAndroid Build Coastguard Worker         if (dataFlow.hasLnbRecord()) {
684*4d7e907cSAndroid Build Coastguard Worker             lnbRecord.support = true;
685*4d7e907cSAndroid Build Coastguard Worker             configuredLnbRecord = true;
686*4d7e907cSAndroid Build Coastguard Worker         } else {
687*4d7e907cSAndroid Build Coastguard Worker             lnbRecord.support = false;
688*4d7e907cSAndroid Build Coastguard Worker             return;
689*4d7e907cSAndroid Build Coastguard Worker         }
690*4d7e907cSAndroid Build Coastguard Worker         auto lnbRecordConfig = *dataFlow.getFirstLnbRecord();
691*4d7e907cSAndroid Build Coastguard Worker         lnbRecord.frontendId = lnbRecordConfig.getFrontendConnection();
692*4d7e907cSAndroid Build Coastguard Worker         lnbRecord.recordFilterId = lnbRecordConfig.getRecordFilterConnection();
693*4d7e907cSAndroid Build Coastguard Worker         lnbRecord.dvrRecordId = lnbRecordConfig.getDvrRecordConnection();
694*4d7e907cSAndroid Build Coastguard Worker         lnbRecord.lnbId = lnbRecordConfig.getLnbConnection();
695*4d7e907cSAndroid Build Coastguard Worker         if (lnbRecordConfig.hasDiseqcMsgSender()) {
696*4d7e907cSAndroid Build Coastguard Worker             for (auto msgName : lnbRecordConfig.getDiseqcMsgSender()) {
697*4d7e907cSAndroid Build Coastguard Worker                 lnbRecord.diseqcMsgs.push_back(msgName);
698*4d7e907cSAndroid Build Coastguard Worker             }
699*4d7e907cSAndroid Build Coastguard Worker         }
700*4d7e907cSAndroid Build Coastguard Worker         if (lnbRecordConfig.hasOptionalFilters()) {
701*4d7e907cSAndroid Build Coastguard Worker             auto optionalFilters = lnbRecordConfig.getOptionalFilters();
702*4d7e907cSAndroid Build Coastguard Worker             lnbRecord.extraFilters = optionalFilters;
703*4d7e907cSAndroid Build Coastguard Worker         }
704*4d7e907cSAndroid Build Coastguard Worker     }
705*4d7e907cSAndroid Build Coastguard Worker 
connectTimeFilterTunerTestingConfigAidlReader1_0706*4d7e907cSAndroid Build Coastguard Worker     static void connectTimeFilter(TimeFilterHardwareConnections& timeFilter) {
707*4d7e907cSAndroid Build Coastguard Worker         auto dataFlow = getDataFlowConfiguration();
708*4d7e907cSAndroid Build Coastguard Worker         if (dataFlow.hasTimeFilter()) {
709*4d7e907cSAndroid Build Coastguard Worker             timeFilter.support = true;
710*4d7e907cSAndroid Build Coastguard Worker             configuredTimeFilter = true;
711*4d7e907cSAndroid Build Coastguard Worker         } else {
712*4d7e907cSAndroid Build Coastguard Worker             timeFilter.support = false;
713*4d7e907cSAndroid Build Coastguard Worker             return;
714*4d7e907cSAndroid Build Coastguard Worker         }
715*4d7e907cSAndroid Build Coastguard Worker         auto timeFilterConfig = *dataFlow.getFirstTimeFilter();
716*4d7e907cSAndroid Build Coastguard Worker         timeFilter.timeFilterId = timeFilterConfig.getTimeFilterConnection();
717*4d7e907cSAndroid Build Coastguard Worker     }
718*4d7e907cSAndroid Build Coastguard Worker 
connectLnbDescramblingTunerTestingConfigAidlReader1_0719*4d7e907cSAndroid Build Coastguard Worker     static void connectLnbDescrambling(LnbDescramblingHardwareConnections& lnbDescrambling) {
720*4d7e907cSAndroid Build Coastguard Worker         auto dataFlow = getDataFlowConfiguration();
721*4d7e907cSAndroid Build Coastguard Worker         if (dataFlow.hasLnbDescrambling()) {
722*4d7e907cSAndroid Build Coastguard Worker             lnbDescrambling.support = true;
723*4d7e907cSAndroid Build Coastguard Worker             configuredLnbDescrambling = true;
724*4d7e907cSAndroid Build Coastguard Worker         } else {
725*4d7e907cSAndroid Build Coastguard Worker             lnbDescrambling.support = false;
726*4d7e907cSAndroid Build Coastguard Worker             return;
727*4d7e907cSAndroid Build Coastguard Worker         }
728*4d7e907cSAndroid Build Coastguard Worker         auto lnbDescramblingConfig = *dataFlow.getFirstLnbDescrambling();
729*4d7e907cSAndroid Build Coastguard Worker         lnbDescrambling.frontendId = lnbDescramblingConfig.getFrontendConnection();
730*4d7e907cSAndroid Build Coastguard Worker         lnbDescrambling.audioFilterId = lnbDescramblingConfig.getAudioFilterConnection();
731*4d7e907cSAndroid Build Coastguard Worker         lnbDescrambling.videoFilterId = lnbDescramblingConfig.getVideoFilterConnection();
732*4d7e907cSAndroid Build Coastguard Worker         lnbDescrambling.lnbId = lnbDescramblingConfig.getLnbConnection();
733*4d7e907cSAndroid Build Coastguard Worker         lnbDescrambling.descramblerId = lnbDescramblingConfig.getDescramblerConnection();
734*4d7e907cSAndroid Build Coastguard Worker         if (lnbDescramblingConfig.hasDiseqcMsgSender()) {
735*4d7e907cSAndroid Build Coastguard Worker             for (auto& msgName : lnbDescramblingConfig.getDiseqcMsgSender()) {
736*4d7e907cSAndroid Build Coastguard Worker                 lnbDescrambling.diseqcMsgs.push_back(msgName);
737*4d7e907cSAndroid Build Coastguard Worker             }
738*4d7e907cSAndroid Build Coastguard Worker         }
739*4d7e907cSAndroid Build Coastguard Worker     }
740*4d7e907cSAndroid Build Coastguard Worker 
741*4d7e907cSAndroid Build Coastguard Worker   private:
readDvbtFrontendSettingsTunerTestingConfigAidlReader1_0742*4d7e907cSAndroid Build Coastguard Worker     static FrontendDvbtSettings readDvbtFrontendSettings(Frontend feConfig) {
743*4d7e907cSAndroid Build Coastguard Worker         ALOGW("[ConfigReader] fe type is dvbt");
744*4d7e907cSAndroid Build Coastguard Worker         FrontendDvbtSettings dvbtSettings{
745*4d7e907cSAndroid Build Coastguard Worker                 .frequency = (int64_t)feConfig.getFrequency(),
746*4d7e907cSAndroid Build Coastguard Worker         };
747*4d7e907cSAndroid Build Coastguard Worker         if (feConfig.hasEndFrequency()) {
748*4d7e907cSAndroid Build Coastguard Worker             dvbtSettings.endFrequency = (int64_t)feConfig.getEndFrequency();
749*4d7e907cSAndroid Build Coastguard Worker         }
750*4d7e907cSAndroid Build Coastguard Worker         if (!feConfig.hasDvbtFrontendSettings_optional()) {
751*4d7e907cSAndroid Build Coastguard Worker             ALOGW("[ConfigReader] no more dvbt settings");
752*4d7e907cSAndroid Build Coastguard Worker             return dvbtSettings;
753*4d7e907cSAndroid Build Coastguard Worker         }
754*4d7e907cSAndroid Build Coastguard Worker         auto dvbt = feConfig.getFirstDvbtFrontendSettings_optional();
755*4d7e907cSAndroid Build Coastguard Worker         int32_t trans = static_cast<int32_t>(dvbt->getTransmissionMode());
756*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.transmissionMode = static_cast<FrontendDvbtTransmissionMode>(trans);
757*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.bandwidth = static_cast<FrontendDvbtBandwidth>(dvbt->getBandwidth());
758*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.isHighPriority = dvbt->getIsHighPriority();
759*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.hierarchy = static_cast<FrontendDvbtHierarchy>(dvbt->getHierarchy());
760*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.hpCoderate = static_cast<FrontendDvbtCoderate>(dvbt->getHpCoderate());
761*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.lpCoderate = static_cast<FrontendDvbtCoderate>(dvbt->getLpCoderate());
762*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.guardInterval =
763*4d7e907cSAndroid Build Coastguard Worker                 static_cast<FrontendDvbtGuardInterval>(dvbt->getGuardInterval());
764*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.standard = static_cast<FrontendDvbtStandard>(dvbt->getStandard());
765*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.isMiso = dvbt->getIsMiso();
766*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.plpMode = static_cast<FrontendDvbtPlpMode>(dvbt->getPlpMode());
767*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.plpId = dvbt->getPlpId();
768*4d7e907cSAndroid Build Coastguard Worker         dvbtSettings.plpGroupId = dvbt->getPlpGroupId();
769*4d7e907cSAndroid Build Coastguard Worker         if (dvbt->hasConstellation()) {
770*4d7e907cSAndroid Build Coastguard Worker             dvbtSettings.constellation =
771*4d7e907cSAndroid Build Coastguard Worker                     static_cast<FrontendDvbtConstellation>(dvbt->getConstellation());
772*4d7e907cSAndroid Build Coastguard Worker         }
773*4d7e907cSAndroid Build Coastguard Worker         return dvbtSettings;
774*4d7e907cSAndroid Build Coastguard Worker     }
775*4d7e907cSAndroid Build Coastguard Worker 
readDvbsFrontendSettingsTunerTestingConfigAidlReader1_0776*4d7e907cSAndroid Build Coastguard Worker     static FrontendDvbsSettings readDvbsFrontendSettings(Frontend feConfig) {
777*4d7e907cSAndroid Build Coastguard Worker         ALOGW("[ConfigReader] fe type is dvbs");
778*4d7e907cSAndroid Build Coastguard Worker         FrontendDvbsSettings dvbsSettings{
779*4d7e907cSAndroid Build Coastguard Worker                 .frequency = (int64_t)feConfig.getFrequency(),
780*4d7e907cSAndroid Build Coastguard Worker         };
781*4d7e907cSAndroid Build Coastguard Worker         if (feConfig.hasEndFrequency()) {
782*4d7e907cSAndroid Build Coastguard Worker             dvbsSettings.endFrequency = (int64_t)feConfig.getEndFrequency();
783*4d7e907cSAndroid Build Coastguard Worker         }
784*4d7e907cSAndroid Build Coastguard Worker         if (!feConfig.hasDvbsFrontendSettings_optional()) {
785*4d7e907cSAndroid Build Coastguard Worker             ALOGW("[ConfigReader] no more dvbs settings");
786*4d7e907cSAndroid Build Coastguard Worker             return dvbsSettings;
787*4d7e907cSAndroid Build Coastguard Worker         }
788*4d7e907cSAndroid Build Coastguard Worker         auto dvbs = feConfig.getFirstDvbsFrontendSettings_optional();
789*4d7e907cSAndroid Build Coastguard Worker         dvbsSettings.symbolRate = static_cast<int32_t>(dvbs->getSymbolRate());
790*4d7e907cSAndroid Build Coastguard Worker         dvbsSettings.inputStreamId = static_cast<int32_t>(dvbs->getInputStreamId());
791*4d7e907cSAndroid Build Coastguard Worker         dvbsSettings.scanType = static_cast<FrontendDvbsScanType>(dvbs->getScanType());
792*4d7e907cSAndroid Build Coastguard Worker         dvbsSettings.isDiseqcRxMessage = dvbs->getIsDiseqcRxMessage();
793*4d7e907cSAndroid Build Coastguard Worker         dvbsSettings.inversion = static_cast<FrontendSpectralInversion>(dvbs->getInversion());
794*4d7e907cSAndroid Build Coastguard Worker         dvbsSettings.modulation = static_cast<FrontendDvbsModulation>(dvbs->getModulation());
795*4d7e907cSAndroid Build Coastguard Worker         dvbsSettings.rolloff = static_cast<FrontendDvbsRolloff>(dvbs->getRolloff());
796*4d7e907cSAndroid Build Coastguard Worker         dvbsSettings.pilot = static_cast<FrontendDvbsPilot>(dvbs->getPilot());
797*4d7e907cSAndroid Build Coastguard Worker         dvbsSettings.standard = static_cast<FrontendDvbsStandard>(dvbs->getStandard());
798*4d7e907cSAndroid Build Coastguard Worker         dvbsSettings.vcmMode = static_cast<FrontendDvbsVcmMode>(dvbs->getVcmMode());
799*4d7e907cSAndroid Build Coastguard Worker         return dvbsSettings;
800*4d7e907cSAndroid Build Coastguard Worker     }
801*4d7e907cSAndroid Build Coastguard Worker 
readAtscFrontendSettingsTunerTestingConfigAidlReader1_0802*4d7e907cSAndroid Build Coastguard Worker     static FrontendAtscSettings readAtscFrontendSettings(Frontend& feConfig) {
803*4d7e907cSAndroid Build Coastguard Worker         ALOGW("[ConfigReader] fe type is atsc");
804*4d7e907cSAndroid Build Coastguard Worker         FrontendAtscSettings atscSettings{
805*4d7e907cSAndroid Build Coastguard Worker                 .frequency = (int64_t)feConfig.getFrequency(),
806*4d7e907cSAndroid Build Coastguard Worker         };
807*4d7e907cSAndroid Build Coastguard Worker         if (feConfig.hasEndFrequency()) {
808*4d7e907cSAndroid Build Coastguard Worker             atscSettings.endFrequency = (int64_t)feConfig.getEndFrequency();
809*4d7e907cSAndroid Build Coastguard Worker         }
810*4d7e907cSAndroid Build Coastguard Worker         if (!feConfig.hasAtscFrontendSettings_optional()) {
811*4d7e907cSAndroid Build Coastguard Worker             ALOGW("[ConfigReader] no more atsc settings");
812*4d7e907cSAndroid Build Coastguard Worker             return atscSettings;
813*4d7e907cSAndroid Build Coastguard Worker         }
814*4d7e907cSAndroid Build Coastguard Worker         auto atsc = feConfig.getFirstAtscFrontendSettings_optional();
815*4d7e907cSAndroid Build Coastguard Worker         atscSettings.inversion = static_cast<FrontendSpectralInversion>(atsc->getInversion());
816*4d7e907cSAndroid Build Coastguard Worker         atscSettings.modulation = static_cast<FrontendAtscModulation>(atsc->getModulation());
817*4d7e907cSAndroid Build Coastguard Worker         return atscSettings;
818*4d7e907cSAndroid Build Coastguard Worker     }
819*4d7e907cSAndroid Build Coastguard Worker 
readIsdbsFrontendSettingsTunerTestingConfigAidlReader1_0820*4d7e907cSAndroid Build Coastguard Worker     static FrontendIsdbsSettings readIsdbsFrontendSettings(Frontend& feConfig) {
821*4d7e907cSAndroid Build Coastguard Worker         ALOGW("[ConfigReader] fe type is isdbs");
822*4d7e907cSAndroid Build Coastguard Worker         FrontendIsdbsSettings isdbsSettings{.frequency = (int64_t)feConfig.getFrequency()};
823*4d7e907cSAndroid Build Coastguard Worker         if (feConfig.hasEndFrequency()) {
824*4d7e907cSAndroid Build Coastguard Worker             isdbsSettings.endFrequency = (int64_t)feConfig.getEndFrequency();
825*4d7e907cSAndroid Build Coastguard Worker         }
826*4d7e907cSAndroid Build Coastguard Worker         if (!feConfig.hasIsdbsFrontendSettings_optional()) {
827*4d7e907cSAndroid Build Coastguard Worker             ALOGW("[ConfigReader] no more isdbs settings");
828*4d7e907cSAndroid Build Coastguard Worker             return isdbsSettings;
829*4d7e907cSAndroid Build Coastguard Worker         }
830*4d7e907cSAndroid Build Coastguard Worker         auto isdbs = feConfig.getFirstIsdbsFrontendSettings_optional();
831*4d7e907cSAndroid Build Coastguard Worker         isdbsSettings.streamId = (int32_t)isdbs->getStreamId();
832*4d7e907cSAndroid Build Coastguard Worker         isdbsSettings.symbolRate = (int32_t)isdbs->getSymbolRate();
833*4d7e907cSAndroid Build Coastguard Worker         isdbsSettings.modulation = static_cast<FrontendIsdbsModulation>(isdbs->getModulation());
834*4d7e907cSAndroid Build Coastguard Worker         isdbsSettings.coderate = static_cast<FrontendIsdbsCoderate>(isdbs->getCoderate());
835*4d7e907cSAndroid Build Coastguard Worker         isdbsSettings.rolloff = static_cast<FrontendIsdbsRolloff>(isdbs->getRolloff());
836*4d7e907cSAndroid Build Coastguard Worker         isdbsSettings.streamIdType =
837*4d7e907cSAndroid Build Coastguard Worker                 static_cast<FrontendIsdbsStreamIdType>(isdbs->getStreamIdType());
838*4d7e907cSAndroid Build Coastguard Worker         return isdbsSettings;
839*4d7e907cSAndroid Build Coastguard Worker     }
840*4d7e907cSAndroid Build Coastguard Worker 
readIsdbtFrontendSettingsTunerTestingConfigAidlReader1_0841*4d7e907cSAndroid Build Coastguard Worker     static FrontendIsdbtSettings readIsdbtFrontendSettings(Frontend& feConfig) {
842*4d7e907cSAndroid Build Coastguard Worker         ALOGW("[ConfigReader] fe type is isdbt");
843*4d7e907cSAndroid Build Coastguard Worker         FrontendIsdbtSettings isdbtSettings{
844*4d7e907cSAndroid Build Coastguard Worker                 .frequency = (int64_t)feConfig.getFrequency(),
845*4d7e907cSAndroid Build Coastguard Worker         };
846*4d7e907cSAndroid Build Coastguard Worker         if (feConfig.hasEndFrequency()) {
847*4d7e907cSAndroid Build Coastguard Worker             isdbtSettings.endFrequency = (int64_t)feConfig.getEndFrequency();
848*4d7e907cSAndroid Build Coastguard Worker         }
849*4d7e907cSAndroid Build Coastguard Worker         if (!feConfig.hasIsdbtFrontendSettings_optional()) {
850*4d7e907cSAndroid Build Coastguard Worker             ALOGW("[ConfigReader] no more isdbt settings");
851*4d7e907cSAndroid Build Coastguard Worker             return isdbtSettings;
852*4d7e907cSAndroid Build Coastguard Worker         }
853*4d7e907cSAndroid Build Coastguard Worker         auto isdbt = feConfig.getFirstIsdbtFrontendSettings_optional();
854*4d7e907cSAndroid Build Coastguard Worker         isdbtSettings.inversion = static_cast<FrontendSpectralInversion>(isdbt->getInversion());
855*4d7e907cSAndroid Build Coastguard Worker         isdbtSettings.bandwidth = static_cast<FrontendIsdbtBandwidth>(isdbt->getBandwidth());
856*4d7e907cSAndroid Build Coastguard Worker         isdbtSettings.mode = static_cast<FrontendIsdbtMode>(isdbt->getMode());
857*4d7e907cSAndroid Build Coastguard Worker         isdbtSettings.guardInterval =
858*4d7e907cSAndroid Build Coastguard Worker                 static_cast<FrontendIsdbtGuardInterval>(isdbt->getGuardInterval());
859*4d7e907cSAndroid Build Coastguard Worker         isdbtSettings.serviceAreaId = (int32_t)isdbt->getServiceAreaId();
860*4d7e907cSAndroid Build Coastguard Worker         isdbtSettings.partialReceptionFlag =
861*4d7e907cSAndroid Build Coastguard Worker                 static_cast<FrontendIsdbtPartialReceptionFlag>(isdbt->getPartialReceptionFlag());
862*4d7e907cSAndroid Build Coastguard Worker         if (!isdbt->hasFrontendIsdbtLayerSettings()) {
863*4d7e907cSAndroid Build Coastguard Worker             ALOGW("[ConfigReader] no isdbt layer settings");
864*4d7e907cSAndroid Build Coastguard Worker             return isdbtSettings;
865*4d7e907cSAndroid Build Coastguard Worker         }
866*4d7e907cSAndroid Build Coastguard Worker         auto layerSettings = isdbt->getFirstFrontendIsdbtLayerSettings();
867*4d7e907cSAndroid Build Coastguard Worker         ::aidl::android::hardware::tv::tuner::FrontendIsdbtLayerSettings mLayerSettings;
868*4d7e907cSAndroid Build Coastguard Worker         mLayerSettings.modulation =
869*4d7e907cSAndroid Build Coastguard Worker                 static_cast<FrontendIsdbtModulation>(layerSettings->getModulation());
870*4d7e907cSAndroid Build Coastguard Worker         mLayerSettings.coderate = static_cast<FrontendIsdbtCoderate>(layerSettings->getCoderate());
871*4d7e907cSAndroid Build Coastguard Worker         mLayerSettings.timeInterleave =
872*4d7e907cSAndroid Build Coastguard Worker                 static_cast<FrontendIsdbtTimeInterleaveMode>(layerSettings->getTimeInterleave());
873*4d7e907cSAndroid Build Coastguard Worker         mLayerSettings.numOfSegment = (int32_t)layerSettings->getNumOfSegment();
874*4d7e907cSAndroid Build Coastguard Worker         isdbtSettings.layerSettings.push_back(mLayerSettings);
875*4d7e907cSAndroid Build Coastguard Worker         return isdbtSettings;
876*4d7e907cSAndroid Build Coastguard Worker     }
877*4d7e907cSAndroid Build Coastguard Worker 
readFilterTypeAndSettingsTunerTestingConfigAidlReader1_0878*4d7e907cSAndroid Build Coastguard Worker     static bool readFilterTypeAndSettings(Filter filterConfig, DemuxFilterType& type,
879*4d7e907cSAndroid Build Coastguard Worker                                           DemuxFilterSettings& settings) {
880*4d7e907cSAndroid Build Coastguard Worker         auto mainType = filterConfig.getMainType();
881*4d7e907cSAndroid Build Coastguard Worker         auto subType = filterConfig.getSubType();
882*4d7e907cSAndroid Build Coastguard Worker 
883*4d7e907cSAndroid Build Coastguard Worker         if (subType == FilterSubTypeEnum::AUDIO) {
884*4d7e907cSAndroid Build Coastguard Worker             audioFilterIds.push_back(filterConfig.getId());
885*4d7e907cSAndroid Build Coastguard Worker         } else if (subType == FilterSubTypeEnum::VIDEO) {
886*4d7e907cSAndroid Build Coastguard Worker             videoFilterIds.push_back(filterConfig.getId());
887*4d7e907cSAndroid Build Coastguard Worker         } else if (subType == FilterSubTypeEnum::RECORD) {
888*4d7e907cSAndroid Build Coastguard Worker             recordFilterIds.push_back(filterConfig.getId());
889*4d7e907cSAndroid Build Coastguard Worker         } else if (subType == FilterSubTypeEnum::SECTION) {
890*4d7e907cSAndroid Build Coastguard Worker             sectionFilterIds.push_back(filterConfig.getId());
891*4d7e907cSAndroid Build Coastguard Worker         } else if (subType == FilterSubTypeEnum::PCR) {
892*4d7e907cSAndroid Build Coastguard Worker             pcrFilterIds.push_back(filterConfig.getId());
893*4d7e907cSAndroid Build Coastguard Worker         } else if (subType == FilterSubTypeEnum::IP) {
894*4d7e907cSAndroid Build Coastguard Worker             ipFilterIds.push_back(filterConfig.getId());
895*4d7e907cSAndroid Build Coastguard Worker         }
896*4d7e907cSAndroid Build Coastguard Worker 
897*4d7e907cSAndroid Build Coastguard Worker         switch (mainType) {
898*4d7e907cSAndroid Build Coastguard Worker             case FilterMainTypeEnum::TS: {
899*4d7e907cSAndroid Build Coastguard Worker                 ALOGW("[ConfigReader] filter main type is ts");
900*4d7e907cSAndroid Build Coastguard Worker                 type.mainType = DemuxFilterMainType::TS;
901*4d7e907cSAndroid Build Coastguard Worker                 DemuxTsFilterSettings ts;
902*4d7e907cSAndroid Build Coastguard Worker                 bool isTsSet = false;
903*4d7e907cSAndroid Build Coastguard Worker                 switch (subType) {
904*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::UNDEFINED:
905*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
906*4d7e907cSAndroid Build Coastguard Worker                                 DemuxTsFilterType::UNDEFINED);
907*4d7e907cSAndroid Build Coastguard Worker                         break;
908*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::SECTION:
909*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
910*4d7e907cSAndroid Build Coastguard Worker                                 DemuxTsFilterType::SECTION);
911*4d7e907cSAndroid Build Coastguard Worker                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::section>(
912*4d7e907cSAndroid Build Coastguard Worker                                 readSectionFilterSettings(filterConfig));
913*4d7e907cSAndroid Build Coastguard Worker                         isTsSet = true;
914*4d7e907cSAndroid Build Coastguard Worker                         break;
915*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::PES:
916*4d7e907cSAndroid Build Coastguard Worker                         // TODO: b/182519645 support all the filter settings
917*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
918*4d7e907cSAndroid Build Coastguard Worker                                 DemuxTsFilterType::PES);
919*4d7e907cSAndroid Build Coastguard Worker                         break;
920*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::TS:
921*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
922*4d7e907cSAndroid Build Coastguard Worker                                 DemuxTsFilterType::TS);
923*4d7e907cSAndroid Build Coastguard Worker                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::noinit>(
924*4d7e907cSAndroid Build Coastguard Worker                                 true);
925*4d7e907cSAndroid Build Coastguard Worker                         isTsSet = true;
926*4d7e907cSAndroid Build Coastguard Worker                         break;
927*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::PCR:
928*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
929*4d7e907cSAndroid Build Coastguard Worker                                 DemuxTsFilterType::PCR);
930*4d7e907cSAndroid Build Coastguard Worker                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::noinit>(
931*4d7e907cSAndroid Build Coastguard Worker                                 true);
932*4d7e907cSAndroid Build Coastguard Worker                         isTsSet = true;
933*4d7e907cSAndroid Build Coastguard Worker                         break;
934*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::TEMI:
935*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
936*4d7e907cSAndroid Build Coastguard Worker                                 DemuxTsFilterType::TEMI);
937*4d7e907cSAndroid Build Coastguard Worker                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::noinit>(
938*4d7e907cSAndroid Build Coastguard Worker                                 true);
939*4d7e907cSAndroid Build Coastguard Worker                         isTsSet = true;
940*4d7e907cSAndroid Build Coastguard Worker                         break;
941*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::AUDIO:
942*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
943*4d7e907cSAndroid Build Coastguard Worker                                 DemuxTsFilterType::AUDIO);
944*4d7e907cSAndroid Build Coastguard Worker                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::av>(
945*4d7e907cSAndroid Build Coastguard Worker                                 readAvFilterSettings(filterConfig));
946*4d7e907cSAndroid Build Coastguard Worker                         isTsSet = true;
947*4d7e907cSAndroid Build Coastguard Worker                         break;
948*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::VIDEO:
949*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
950*4d7e907cSAndroid Build Coastguard Worker                                 DemuxTsFilterType::VIDEO);
951*4d7e907cSAndroid Build Coastguard Worker                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::av>(
952*4d7e907cSAndroid Build Coastguard Worker                                 readAvFilterSettings(filterConfig));
953*4d7e907cSAndroid Build Coastguard Worker                         isTsSet = true;
954*4d7e907cSAndroid Build Coastguard Worker                         break;
955*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::RECORD:
956*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
957*4d7e907cSAndroid Build Coastguard Worker                                 DemuxTsFilterType::RECORD);
958*4d7e907cSAndroid Build Coastguard Worker                         ts.filterSettings.set<DemuxTsFilterSettingsFilterSettings::Tag::record>(
959*4d7e907cSAndroid Build Coastguard Worker                                 readRecordFilterSettings(filterConfig));
960*4d7e907cSAndroid Build Coastguard Worker                         isTsSet = true;
961*4d7e907cSAndroid Build Coastguard Worker                         break;
962*4d7e907cSAndroid Build Coastguard Worker                     default:
963*4d7e907cSAndroid Build Coastguard Worker                         ALOGW("[ConfigReader] ts subtype is not supported");
964*4d7e907cSAndroid Build Coastguard Worker                         return false;
965*4d7e907cSAndroid Build Coastguard Worker                 }
966*4d7e907cSAndroid Build Coastguard Worker                 if (filterConfig.hasPid()) {
967*4d7e907cSAndroid Build Coastguard Worker                     ts.tpid = static_cast<int32_t>(filterConfig.getPid());
968*4d7e907cSAndroid Build Coastguard Worker                     isTsSet = true;
969*4d7e907cSAndroid Build Coastguard Worker                 }
970*4d7e907cSAndroid Build Coastguard Worker                 if (isTsSet) {
971*4d7e907cSAndroid Build Coastguard Worker                     settings.set<DemuxFilterSettings::Tag::ts>(ts);
972*4d7e907cSAndroid Build Coastguard Worker                 }
973*4d7e907cSAndroid Build Coastguard Worker                 break;
974*4d7e907cSAndroid Build Coastguard Worker             }
975*4d7e907cSAndroid Build Coastguard Worker             case FilterMainTypeEnum::MMTP: {
976*4d7e907cSAndroid Build Coastguard Worker                 ALOGW("[ConfigReader] filter main type is mmtp");
977*4d7e907cSAndroid Build Coastguard Worker                 type.mainType = DemuxFilterMainType::MMTP;
978*4d7e907cSAndroid Build Coastguard Worker                 DemuxMmtpFilterSettings mmtp;
979*4d7e907cSAndroid Build Coastguard Worker                 bool isMmtpSet = false;
980*4d7e907cSAndroid Build Coastguard Worker                 switch (subType) {
981*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::UNDEFINED:
982*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
983*4d7e907cSAndroid Build Coastguard Worker                                 DemuxMmtpFilterType::UNDEFINED);
984*4d7e907cSAndroid Build Coastguard Worker                         break;
985*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::SECTION:
986*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
987*4d7e907cSAndroid Build Coastguard Worker                                 DemuxMmtpFilterType::SECTION);
988*4d7e907cSAndroid Build Coastguard Worker                         mmtp.filterSettings
989*4d7e907cSAndroid Build Coastguard Worker                                 .set<DemuxMmtpFilterSettingsFilterSettings::Tag::section>(
990*4d7e907cSAndroid Build Coastguard Worker                                         readSectionFilterSettings(filterConfig));
991*4d7e907cSAndroid Build Coastguard Worker                         isMmtpSet = true;
992*4d7e907cSAndroid Build Coastguard Worker                         break;
993*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::PES:
994*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
995*4d7e907cSAndroid Build Coastguard Worker                                 DemuxMmtpFilterType::PES);
996*4d7e907cSAndroid Build Coastguard Worker                         // TODO: b/182519645 support all the filter settings
997*4d7e907cSAndroid Build Coastguard Worker                         break;
998*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::MMTP:
999*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
1000*4d7e907cSAndroid Build Coastguard Worker                                 DemuxMmtpFilterType::MMTP);
1001*4d7e907cSAndroid Build Coastguard Worker                         mmtp.filterSettings.set<DemuxMmtpFilterSettingsFilterSettings::Tag::noinit>(
1002*4d7e907cSAndroid Build Coastguard Worker                                 true);
1003*4d7e907cSAndroid Build Coastguard Worker                         isMmtpSet = true;
1004*4d7e907cSAndroid Build Coastguard Worker                         break;
1005*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::AUDIO:
1006*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
1007*4d7e907cSAndroid Build Coastguard Worker                                 DemuxMmtpFilterType::AUDIO);
1008*4d7e907cSAndroid Build Coastguard Worker                         mmtp.filterSettings.set<DemuxMmtpFilterSettingsFilterSettings::Tag::av>(
1009*4d7e907cSAndroid Build Coastguard Worker                                 readAvFilterSettings(filterConfig));
1010*4d7e907cSAndroid Build Coastguard Worker                         isMmtpSet = true;
1011*4d7e907cSAndroid Build Coastguard Worker                         break;
1012*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::VIDEO:
1013*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
1014*4d7e907cSAndroid Build Coastguard Worker                                 DemuxMmtpFilterType::VIDEO);
1015*4d7e907cSAndroid Build Coastguard Worker                         mmtp.filterSettings.set<DemuxMmtpFilterSettingsFilterSettings::Tag::av>(
1016*4d7e907cSAndroid Build Coastguard Worker                                 readAvFilterSettings(filterConfig));
1017*4d7e907cSAndroid Build Coastguard Worker                         isMmtpSet = true;
1018*4d7e907cSAndroid Build Coastguard Worker                         break;
1019*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::RECORD:
1020*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
1021*4d7e907cSAndroid Build Coastguard Worker                                 DemuxMmtpFilterType::RECORD);
1022*4d7e907cSAndroid Build Coastguard Worker                         mmtp.filterSettings.set<DemuxMmtpFilterSettingsFilterSettings::Tag::record>(
1023*4d7e907cSAndroid Build Coastguard Worker                                 readRecordFilterSettings(filterConfig));
1024*4d7e907cSAndroid Build Coastguard Worker                         isMmtpSet = true;
1025*4d7e907cSAndroid Build Coastguard Worker                         break;
1026*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::DOWNLOAD:
1027*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
1028*4d7e907cSAndroid Build Coastguard Worker                                 DemuxMmtpFilterType::DOWNLOAD);
1029*4d7e907cSAndroid Build Coastguard Worker                         // TODO: b/182519645 support all the filter settings
1030*4d7e907cSAndroid Build Coastguard Worker                         break;
1031*4d7e907cSAndroid Build Coastguard Worker                     default:
1032*4d7e907cSAndroid Build Coastguard Worker                         ALOGW("[ConfigReader] mmtp subtype is not supported");
1033*4d7e907cSAndroid Build Coastguard Worker                         return false;
1034*4d7e907cSAndroid Build Coastguard Worker                 }
1035*4d7e907cSAndroid Build Coastguard Worker                 if (filterConfig.hasPid()) {
1036*4d7e907cSAndroid Build Coastguard Worker                     mmtp.mmtpPid = static_cast<int32_t>(filterConfig.getPid());
1037*4d7e907cSAndroid Build Coastguard Worker                     isMmtpSet = true;
1038*4d7e907cSAndroid Build Coastguard Worker                 }
1039*4d7e907cSAndroid Build Coastguard Worker                 if (isMmtpSet) {
1040*4d7e907cSAndroid Build Coastguard Worker                     settings.set<DemuxFilterSettings::Tag::mmtp>(mmtp);
1041*4d7e907cSAndroid Build Coastguard Worker                 }
1042*4d7e907cSAndroid Build Coastguard Worker                 break;
1043*4d7e907cSAndroid Build Coastguard Worker             }
1044*4d7e907cSAndroid Build Coastguard Worker             case FilterMainTypeEnum::IP: {
1045*4d7e907cSAndroid Build Coastguard Worker                 ALOGW("[ConfigReader] filter main type is ip");
1046*4d7e907cSAndroid Build Coastguard Worker                 type.mainType = DemuxFilterMainType::IP;
1047*4d7e907cSAndroid Build Coastguard Worker                 DemuxIpFilterSettings ip;
1048*4d7e907cSAndroid Build Coastguard Worker                 switch (subType) {
1049*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::UNDEFINED:
1050*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
1051*4d7e907cSAndroid Build Coastguard Worker                                 DemuxIpFilterType::UNDEFINED);
1052*4d7e907cSAndroid Build Coastguard Worker                         break;
1053*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::SECTION:
1054*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
1055*4d7e907cSAndroid Build Coastguard Worker                                 DemuxIpFilterType::SECTION);
1056*4d7e907cSAndroid Build Coastguard Worker                         ip.filterSettings.set<DemuxIpFilterSettingsFilterSettings::Tag::section>(
1057*4d7e907cSAndroid Build Coastguard Worker                                 readSectionFilterSettings(filterConfig));
1058*4d7e907cSAndroid Build Coastguard Worker                         settings.set<DemuxFilterSettings::Tag::ip>(ip);
1059*4d7e907cSAndroid Build Coastguard Worker                         break;
1060*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::NTP:
1061*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
1062*4d7e907cSAndroid Build Coastguard Worker                                 DemuxIpFilterType::NTP);
1063*4d7e907cSAndroid Build Coastguard Worker                         ip.filterSettings.set<DemuxIpFilterSettingsFilterSettings::Tag::noinit>(
1064*4d7e907cSAndroid Build Coastguard Worker                                 true);
1065*4d7e907cSAndroid Build Coastguard Worker                         settings.set<DemuxFilterSettings::Tag::ip>(ip);
1066*4d7e907cSAndroid Build Coastguard Worker                         break;
1067*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::IP: {
1068*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
1069*4d7e907cSAndroid Build Coastguard Worker                                 DemuxIpFilterType::IP);
1070*4d7e907cSAndroid Build Coastguard Worker                         ip.ipAddr = readIpAddress(filterConfig),
1071*4d7e907cSAndroid Build Coastguard Worker                         ip.filterSettings
1072*4d7e907cSAndroid Build Coastguard Worker                                 .set<DemuxIpFilterSettingsFilterSettings::Tag::bPassthrough>(
1073*4d7e907cSAndroid Build Coastguard Worker                                         readPassthroughSettings(filterConfig));
1074*4d7e907cSAndroid Build Coastguard Worker                         settings.set<DemuxFilterSettings::Tag::ip>(ip);
1075*4d7e907cSAndroid Build Coastguard Worker                         break;
1076*4d7e907cSAndroid Build Coastguard Worker                     }
1077*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::IP_PAYLOAD:
1078*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
1079*4d7e907cSAndroid Build Coastguard Worker                                 DemuxIpFilterType::IP_PAYLOAD);
1080*4d7e907cSAndroid Build Coastguard Worker                         ip.filterSettings.set<DemuxIpFilterSettingsFilterSettings::Tag::noinit>(
1081*4d7e907cSAndroid Build Coastguard Worker                                 true);
1082*4d7e907cSAndroid Build Coastguard Worker                         settings.set<DemuxFilterSettings::Tag::ip>(ip);
1083*4d7e907cSAndroid Build Coastguard Worker                         break;
1084*4d7e907cSAndroid Build Coastguard Worker                     case FilterSubTypeEnum::PAYLOAD_THROUGH:
1085*4d7e907cSAndroid Build Coastguard Worker                         type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
1086*4d7e907cSAndroid Build Coastguard Worker                                 DemuxIpFilterType::PAYLOAD_THROUGH);
1087*4d7e907cSAndroid Build Coastguard Worker                         ip.filterSettings.set<DemuxIpFilterSettingsFilterSettings::Tag::noinit>(
1088*4d7e907cSAndroid Build Coastguard Worker                                 true);
1089*4d7e907cSAndroid Build Coastguard Worker                         settings.set<DemuxFilterSettings::Tag::ip>(ip);
1090*4d7e907cSAndroid Build Coastguard Worker                         break;
1091*4d7e907cSAndroid Build Coastguard Worker                     default:
1092*4d7e907cSAndroid Build Coastguard Worker                         ALOGW("[ConfigReader] mmtp subtype is not supported");
1093*4d7e907cSAndroid Build Coastguard Worker                         return false;
1094*4d7e907cSAndroid Build Coastguard Worker                 }
1095*4d7e907cSAndroid Build Coastguard Worker                 break;
1096*4d7e907cSAndroid Build Coastguard Worker             }
1097*4d7e907cSAndroid Build Coastguard Worker             default:
1098*4d7e907cSAndroid Build Coastguard Worker                 // TODO: b/182519645 support all the filter configs
1099*4d7e907cSAndroid Build Coastguard Worker                 ALOGW("[ConfigReader] filter main type is not supported in dynamic config");
1100*4d7e907cSAndroid Build Coastguard Worker                 return false;
1101*4d7e907cSAndroid Build Coastguard Worker         }
1102*4d7e907cSAndroid Build Coastguard Worker         return true;
1103*4d7e907cSAndroid Build Coastguard Worker     }
1104*4d7e907cSAndroid Build Coastguard Worker 
readIpAddressTunerTestingConfigAidlReader1_01105*4d7e907cSAndroid Build Coastguard Worker     static DemuxIpAddress readIpAddress(Filter filterConfig) {
1106*4d7e907cSAndroid Build Coastguard Worker         DemuxIpAddress ipAddress;
1107*4d7e907cSAndroid Build Coastguard Worker         vector<uint8_t> data;
1108*4d7e907cSAndroid Build Coastguard Worker         if (!filterConfig.hasIpFilterConfig_optional()) {
1109*4d7e907cSAndroid Build Coastguard Worker             return ipAddress;
1110*4d7e907cSAndroid Build Coastguard Worker         }
1111*4d7e907cSAndroid Build Coastguard Worker         auto ipFilterConfig = filterConfig.getFirstIpFilterConfig_optional();
1112*4d7e907cSAndroid Build Coastguard Worker         if (ipFilterConfig->hasSrcPort()) {
1113*4d7e907cSAndroid Build Coastguard Worker             ipAddress.srcPort = ipFilterConfig->getSrcPort();
1114*4d7e907cSAndroid Build Coastguard Worker         }
1115*4d7e907cSAndroid Build Coastguard Worker         if (ipFilterConfig->hasDestPort()) {
1116*4d7e907cSAndroid Build Coastguard Worker             ipAddress.dstPort = ipFilterConfig->getDestPort();
1117*4d7e907cSAndroid Build Coastguard Worker         }
1118*4d7e907cSAndroid Build Coastguard Worker         if (ipFilterConfig->getFirstSrcIpAddress()->getIsIpV4()) {
1119*4d7e907cSAndroid Build Coastguard Worker             data.resize(4);
1120*4d7e907cSAndroid Build Coastguard Worker             memcpy(data.data(), ipFilterConfig->getFirstSrcIpAddress()->getIp().data(), 4);
1121*4d7e907cSAndroid Build Coastguard Worker             ipAddress.srcIpAddress.set<DemuxIpAddressIpAddress::Tag::v4>(data);
1122*4d7e907cSAndroid Build Coastguard Worker         } else {
1123*4d7e907cSAndroid Build Coastguard Worker             data.resize(6);
1124*4d7e907cSAndroid Build Coastguard Worker             memcpy(data.data(), ipFilterConfig->getFirstSrcIpAddress()->getIp().data(), 6);
1125*4d7e907cSAndroid Build Coastguard Worker             ipAddress.srcIpAddress.set<DemuxIpAddressIpAddress::Tag::v6>(data);
1126*4d7e907cSAndroid Build Coastguard Worker         }
1127*4d7e907cSAndroid Build Coastguard Worker         if (ipFilterConfig->getFirstDestIpAddress()->getIsIpV4()) {
1128*4d7e907cSAndroid Build Coastguard Worker             data.resize(4);
1129*4d7e907cSAndroid Build Coastguard Worker             memcpy(data.data(), ipFilterConfig->getFirstDestIpAddress()->getIp().data(), 4);
1130*4d7e907cSAndroid Build Coastguard Worker             ipAddress.dstIpAddress.set<DemuxIpAddressIpAddress::Tag::v4>(data);
1131*4d7e907cSAndroid Build Coastguard Worker         } else {
1132*4d7e907cSAndroid Build Coastguard Worker             data.resize(6);
1133*4d7e907cSAndroid Build Coastguard Worker             memcpy(data.data(), ipFilterConfig->getFirstDestIpAddress()->getIp().data(), 6);
1134*4d7e907cSAndroid Build Coastguard Worker             ipAddress.dstIpAddress.set<DemuxIpAddressIpAddress::Tag::v6>(data);
1135*4d7e907cSAndroid Build Coastguard Worker         }
1136*4d7e907cSAndroid Build Coastguard Worker         return ipAddress;
1137*4d7e907cSAndroid Build Coastguard Worker     }
1138*4d7e907cSAndroid Build Coastguard Worker 
readPassthroughSettingsTunerTestingConfigAidlReader1_01139*4d7e907cSAndroid Build Coastguard Worker     static bool readPassthroughSettings(Filter filterConfig) {
1140*4d7e907cSAndroid Build Coastguard Worker         if (!filterConfig.hasIpFilterConfig_optional()) {
1141*4d7e907cSAndroid Build Coastguard Worker             return false;
1142*4d7e907cSAndroid Build Coastguard Worker         }
1143*4d7e907cSAndroid Build Coastguard Worker         auto ipFilterConfig = filterConfig.getFirstIpFilterConfig_optional();
1144*4d7e907cSAndroid Build Coastguard Worker         if (ipFilterConfig->hasDataPassthrough()) {
1145*4d7e907cSAndroid Build Coastguard Worker             return ipFilterConfig->getDataPassthrough();
1146*4d7e907cSAndroid Build Coastguard Worker         }
1147*4d7e907cSAndroid Build Coastguard Worker         return false;
1148*4d7e907cSAndroid Build Coastguard Worker     }
1149*4d7e907cSAndroid Build Coastguard Worker 
readSectionFilterSettingsTunerTestingConfigAidlReader1_01150*4d7e907cSAndroid Build Coastguard Worker     static DemuxFilterSectionSettings readSectionFilterSettings(Filter filterConfig) {
1151*4d7e907cSAndroid Build Coastguard Worker         DemuxFilterSectionSettings settings;
1152*4d7e907cSAndroid Build Coastguard Worker         if (!filterConfig.hasSectionFilterSettings_optional()) {
1153*4d7e907cSAndroid Build Coastguard Worker             return settings;
1154*4d7e907cSAndroid Build Coastguard Worker         }
1155*4d7e907cSAndroid Build Coastguard Worker         auto section = filterConfig.getFirstSectionFilterSettings_optional();
1156*4d7e907cSAndroid Build Coastguard Worker         settings.isCheckCrc = section->getIsCheckCrc();
1157*4d7e907cSAndroid Build Coastguard Worker         settings.isRepeat = section->getIsRepeat();
1158*4d7e907cSAndroid Build Coastguard Worker         settings.isRaw = section->getIsRaw();
1159*4d7e907cSAndroid Build Coastguard Worker         settings.bitWidthOfLengthField = section->getBitWidthOfLengthField();
1160*4d7e907cSAndroid Build Coastguard Worker         return settings;
1161*4d7e907cSAndroid Build Coastguard Worker     }
1162*4d7e907cSAndroid Build Coastguard Worker 
readAvFilterSettingsTunerTestingConfigAidlReader1_01163*4d7e907cSAndroid Build Coastguard Worker     static DemuxFilterAvSettings readAvFilterSettings(Filter filterConfig) {
1164*4d7e907cSAndroid Build Coastguard Worker         DemuxFilterAvSettings settings;
1165*4d7e907cSAndroid Build Coastguard Worker         if (!filterConfig.hasAvFilterSettings_optional()) {
1166*4d7e907cSAndroid Build Coastguard Worker             return settings;
1167*4d7e907cSAndroid Build Coastguard Worker         }
1168*4d7e907cSAndroid Build Coastguard Worker         auto av = filterConfig.getFirstAvFilterSettings_optional();
1169*4d7e907cSAndroid Build Coastguard Worker         settings.isPassthrough = av->getIsPassthrough();
1170*4d7e907cSAndroid Build Coastguard Worker         settings.isSecureMemory = av->getIsSecureMemory();
1171*4d7e907cSAndroid Build Coastguard Worker         return settings;
1172*4d7e907cSAndroid Build Coastguard Worker     }
1173*4d7e907cSAndroid Build Coastguard Worker 
readRecordFilterSettingsTunerTestingConfigAidlReader1_01174*4d7e907cSAndroid Build Coastguard Worker     static DemuxFilterRecordSettings readRecordFilterSettings(Filter filterConfig) {
1175*4d7e907cSAndroid Build Coastguard Worker         DemuxFilterRecordSettings settings;
1176*4d7e907cSAndroid Build Coastguard Worker         if (!filterConfig.hasRecordFilterSettings_optional()) {
1177*4d7e907cSAndroid Build Coastguard Worker             return settings;
1178*4d7e907cSAndroid Build Coastguard Worker         }
1179*4d7e907cSAndroid Build Coastguard Worker         auto record = filterConfig.getFirstRecordFilterSettings_optional();
1180*4d7e907cSAndroid Build Coastguard Worker         settings.tsIndexMask = record->getTsIndexMask();
1181*4d7e907cSAndroid Build Coastguard Worker         settings.scIndexType = static_cast<DemuxRecordScIndexType>(record->getScIndexType());
1182*4d7e907cSAndroid Build Coastguard Worker         return settings;
1183*4d7e907cSAndroid Build Coastguard Worker     }
1184*4d7e907cSAndroid Build Coastguard Worker 
readPlaybackSettingsTunerTestingConfigAidlReader1_01185*4d7e907cSAndroid Build Coastguard Worker     static PlaybackSettings readPlaybackSettings(Dvr dvrConfig) {
1186*4d7e907cSAndroid Build Coastguard Worker         ALOGW("[ConfigReader] dvr type is playback");
1187*4d7e907cSAndroid Build Coastguard Worker         PlaybackSettings playbackSettings{
1188*4d7e907cSAndroid Build Coastguard Worker                 .statusMask = static_cast<int8_t>(dvrConfig.getStatusMask()),
1189*4d7e907cSAndroid Build Coastguard Worker                 .lowThreshold = static_cast<int64_t>(dvrConfig.getLowThreshold()),
1190*4d7e907cSAndroid Build Coastguard Worker                 .highThreshold = static_cast<int64_t>(dvrConfig.getHighThreshold()),
1191*4d7e907cSAndroid Build Coastguard Worker                 .dataFormat = static_cast<DataFormat>(dvrConfig.getDataFormat()),
1192*4d7e907cSAndroid Build Coastguard Worker                 .packetSize = static_cast<int64_t>(dvrConfig.getPacketSize()),
1193*4d7e907cSAndroid Build Coastguard Worker         };
1194*4d7e907cSAndroid Build Coastguard Worker         return playbackSettings;
1195*4d7e907cSAndroid Build Coastguard Worker     }
1196*4d7e907cSAndroid Build Coastguard Worker 
readRecordSettingsTunerTestingConfigAidlReader1_01197*4d7e907cSAndroid Build Coastguard Worker     static RecordSettings readRecordSettings(Dvr dvrConfig) {
1198*4d7e907cSAndroid Build Coastguard Worker         ALOGW("[ConfigReader] dvr type is record");
1199*4d7e907cSAndroid Build Coastguard Worker         RecordSettings recordSettings{
1200*4d7e907cSAndroid Build Coastguard Worker                 .statusMask = static_cast<int8_t>(dvrConfig.getStatusMask()),
1201*4d7e907cSAndroid Build Coastguard Worker                 .lowThreshold = static_cast<int64_t>(dvrConfig.getLowThreshold()),
1202*4d7e907cSAndroid Build Coastguard Worker                 .highThreshold = static_cast<int64_t>(dvrConfig.getHighThreshold()),
1203*4d7e907cSAndroid Build Coastguard Worker                 .dataFormat = static_cast<DataFormat>(dvrConfig.getDataFormat()),
1204*4d7e907cSAndroid Build Coastguard Worker                 .packetSize = static_cast<int64_t>(dvrConfig.getPacketSize()),
1205*4d7e907cSAndroid Build Coastguard Worker         };
1206*4d7e907cSAndroid Build Coastguard Worker         return recordSettings;
1207*4d7e907cSAndroid Build Coastguard Worker     }
1208*4d7e907cSAndroid Build Coastguard Worker 
getCiCamInfoTunerTestingConfigAidlReader1_01209*4d7e907cSAndroid Build Coastguard Worker     static void getCiCamInfo(Frontend feConfig, bool& canConnectToCiCam, int32_t& ciCamId,
1210*4d7e907cSAndroid Build Coastguard Worker                              int32_t& removePid) {
1211*4d7e907cSAndroid Build Coastguard Worker         if (!feConfig.hasConnectToCicamId()) {
1212*4d7e907cSAndroid Build Coastguard Worker             canConnectToCiCam = false;
1213*4d7e907cSAndroid Build Coastguard Worker             ciCamId = -1;
1214*4d7e907cSAndroid Build Coastguard Worker             removePid = -1;
1215*4d7e907cSAndroid Build Coastguard Worker             return;
1216*4d7e907cSAndroid Build Coastguard Worker         }
1217*4d7e907cSAndroid Build Coastguard Worker         canConnectToCiCam = true;
1218*4d7e907cSAndroid Build Coastguard Worker         ciCamId = static_cast<int32_t>(feConfig.getConnectToCicamId());
1219*4d7e907cSAndroid Build Coastguard Worker         removePid = static_cast<int32_t>(feConfig.getRemoveOutputPid());
1220*4d7e907cSAndroid Build Coastguard Worker     }
1221*4d7e907cSAndroid Build Coastguard Worker };
1222