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