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 #include <android-base/logging.h> 18*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/tv/tuner/1.0/types.h> 19*4d7e907cSAndroid Build Coastguard Worker #include <android_media_tuner_testing_configuration_V1_0.h> 20*4d7e907cSAndroid Build Coastguard Worker #include <android_media_tuner_testing_configuration_V1_0_enums.h> 21*4d7e907cSAndroid Build Coastguard Worker #include <binder/MemoryDealer.h> 22*4d7e907cSAndroid Build Coastguard Worker #include <hidl/HidlSupport.h> 23*4d7e907cSAndroid Build Coastguard Worker #include <hidl/HidlTransportSupport.h> 24*4d7e907cSAndroid Build Coastguard Worker #include <hidl/Status.h> 25*4d7e907cSAndroid Build Coastguard Worker #include <hidlmemory/FrameworkUtils.h> 26*4d7e907cSAndroid Build Coastguard Worker 27*4d7e907cSAndroid Build Coastguard Worker using namespace std; 28*4d7e907cSAndroid Build Coastguard Worker using namespace android::media::tuner::testing::configuration::V1_0; 29*4d7e907cSAndroid Build Coastguard Worker 30*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DataFormat; 31*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxAlpFilterType; 32*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxFilterAvSettings; 33*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxFilterEvent; 34*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxFilterMainType; 35*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxFilterRecordSettings; 36*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxFilterSectionSettings; 37*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxFilterSettings; 38*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxFilterType; 39*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxIpAddress; 40*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxIpFilterSettings; 41*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxIpFilterType; 42*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxMmtpFilterType; 43*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxRecordScIndexType; 44*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxTlvFilterType; 45*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxTpid; 46*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DemuxTsFilterType; 47*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DvrSettings; 48*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::DvrType; 49*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendDvbsSettings; 50*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendDvbtBandwidth; 51*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendDvbtCoderate; 52*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendDvbtConstellation; 53*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendDvbtGuardInterval; 54*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendDvbtHierarchy; 55*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendDvbtPlpMode; 56*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendDvbtSettings; 57*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendDvbtStandard; 58*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendDvbtTransmissionMode; 59*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendSettings; 60*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendStatus; 61*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendStatusType; 62*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendType; 63*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::LnbPosition; 64*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::LnbTone; 65*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::LnbVoltage; 66*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::PlaybackSettings; 67*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::RecordSettings; 68*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_0::FrontendAtscSettings; 69*4d7e907cSAndroid Build Coastguard Worker 70*4d7e907cSAndroid Build Coastguard Worker const string emptyHardwareId = ""; 71*4d7e907cSAndroid Build Coastguard Worker 72*4d7e907cSAndroid Build Coastguard Worker static string mConfigFilePath; 73*4d7e907cSAndroid Build Coastguard Worker 74*4d7e907cSAndroid Build Coastguard Worker #define PROVISION_STR \ 75*4d7e907cSAndroid Build Coastguard Worker "{ " \ 76*4d7e907cSAndroid Build Coastguard Worker " \"id\": 21140844, " \ 77*4d7e907cSAndroid Build Coastguard Worker " \"name\": \"Test Title\", " \ 78*4d7e907cSAndroid Build Coastguard Worker " \"lowercase_organization_name\": \"Android\", " \ 79*4d7e907cSAndroid Build Coastguard Worker " \"asset_key\": { " \ 80*4d7e907cSAndroid Build Coastguard Worker " \"encryption_key\": \"nezAr3CHFrmBR9R8Tedotw==\" " \ 81*4d7e907cSAndroid Build Coastguard Worker " }, " \ 82*4d7e907cSAndroid Build Coastguard Worker " \"cas_type\": 1, " \ 83*4d7e907cSAndroid Build Coastguard Worker " \"track_types\": [ ] " \ 84*4d7e907cSAndroid Build Coastguard Worker "} " 85*4d7e907cSAndroid Build Coastguard Worker 86*4d7e907cSAndroid Build Coastguard Worker struct FrontendConfig { 87*4d7e907cSAndroid Build Coastguard Worker bool isSoftwareFe; 88*4d7e907cSAndroid Build Coastguard Worker FrontendType type; 89*4d7e907cSAndroid Build Coastguard Worker FrontendSettings settings; 90*4d7e907cSAndroid Build Coastguard Worker vector<FrontendStatusType> tuneStatusTypes; 91*4d7e907cSAndroid Build Coastguard Worker vector<FrontendStatus> expectTuneStatuses; 92*4d7e907cSAndroid Build Coastguard Worker }; 93*4d7e907cSAndroid Build Coastguard Worker 94*4d7e907cSAndroid Build Coastguard Worker struct FilterConfig { 95*4d7e907cSAndroid Build Coastguard Worker uint32_t bufferSize; 96*4d7e907cSAndroid Build Coastguard Worker DemuxFilterType type; 97*4d7e907cSAndroid Build Coastguard Worker DemuxFilterSettings settings; 98*4d7e907cSAndroid Build Coastguard Worker bool getMqDesc; 99*4d7e907cSAndroid Build Coastguard Worker 100*4d7e907cSAndroid Build Coastguard Worker bool operator<(const FilterConfig& /*c*/) const { return false; } 101*4d7e907cSAndroid Build Coastguard Worker }; 102*4d7e907cSAndroid Build Coastguard Worker 103*4d7e907cSAndroid Build Coastguard Worker struct DvrConfig { 104*4d7e907cSAndroid Build Coastguard Worker DvrType type; 105*4d7e907cSAndroid Build Coastguard Worker uint32_t bufferSize; 106*4d7e907cSAndroid Build Coastguard Worker DvrSettings settings; 107*4d7e907cSAndroid Build Coastguard Worker string playbackInputFile; 108*4d7e907cSAndroid Build Coastguard Worker }; 109*4d7e907cSAndroid Build Coastguard Worker 110*4d7e907cSAndroid Build Coastguard Worker struct LnbConfig { 111*4d7e907cSAndroid Build Coastguard Worker string name; 112*4d7e907cSAndroid Build Coastguard Worker LnbVoltage voltage; 113*4d7e907cSAndroid Build Coastguard Worker LnbTone tone; 114*4d7e907cSAndroid Build Coastguard Worker LnbPosition position; 115*4d7e907cSAndroid Build Coastguard Worker }; 116*4d7e907cSAndroid Build Coastguard Worker 117*4d7e907cSAndroid Build Coastguard Worker struct TimeFilterConfig { 118*4d7e907cSAndroid Build Coastguard Worker uint64_t timeStamp; 119*4d7e907cSAndroid Build Coastguard Worker }; 120*4d7e907cSAndroid Build Coastguard Worker 121*4d7e907cSAndroid Build Coastguard Worker struct DescramblerConfig { 122*4d7e907cSAndroid Build Coastguard Worker uint32_t casSystemId; 123*4d7e907cSAndroid Build Coastguard Worker string provisionStr; 124*4d7e907cSAndroid Build Coastguard Worker vector<uint8_t> hidlPvtData; 125*4d7e907cSAndroid Build Coastguard Worker }; 126*4d7e907cSAndroid Build Coastguard Worker 127*4d7e907cSAndroid Build Coastguard Worker struct LiveBroadcastHardwareConnections { 128*4d7e907cSAndroid Build Coastguard Worker bool hasFrontendConnection; 129*4d7e907cSAndroid Build Coastguard Worker string frontendId; 130*4d7e907cSAndroid Build Coastguard Worker string dvrSoftwareFeId; 131*4d7e907cSAndroid Build Coastguard Worker string audioFilterId; 132*4d7e907cSAndroid Build Coastguard Worker string videoFilterId; 133*4d7e907cSAndroid Build Coastguard Worker string sectionFilterId; 134*4d7e907cSAndroid Build Coastguard Worker string ipFilterId; 135*4d7e907cSAndroid Build Coastguard Worker string pcrFilterId; 136*4d7e907cSAndroid Build Coastguard Worker /* list string of extra filters; */ 137*4d7e907cSAndroid Build Coastguard Worker }; 138*4d7e907cSAndroid Build Coastguard Worker 139*4d7e907cSAndroid Build Coastguard Worker struct ScanHardwareConnections { 140*4d7e907cSAndroid Build Coastguard Worker bool hasFrontendConnection; 141*4d7e907cSAndroid Build Coastguard Worker string frontendId; 142*4d7e907cSAndroid Build Coastguard Worker }; 143*4d7e907cSAndroid Build Coastguard Worker 144*4d7e907cSAndroid Build Coastguard Worker struct DvrPlaybackHardwareConnections { 145*4d7e907cSAndroid Build Coastguard Worker bool support; 146*4d7e907cSAndroid Build Coastguard Worker string frontendId; 147*4d7e907cSAndroid Build Coastguard Worker string dvrId; 148*4d7e907cSAndroid Build Coastguard Worker string audioFilterId; 149*4d7e907cSAndroid Build Coastguard Worker string videoFilterId; 150*4d7e907cSAndroid Build Coastguard Worker string sectionFilterId; 151*4d7e907cSAndroid Build Coastguard Worker /* list string of extra filters; */ 152*4d7e907cSAndroid Build Coastguard Worker }; 153*4d7e907cSAndroid Build Coastguard Worker 154*4d7e907cSAndroid Build Coastguard Worker struct DvrRecordHardwareConnections { 155*4d7e907cSAndroid Build Coastguard Worker bool support; 156*4d7e907cSAndroid Build Coastguard Worker bool hasFrontendConnection; 157*4d7e907cSAndroid Build Coastguard Worker string frontendId; 158*4d7e907cSAndroid Build Coastguard Worker string dvrRecordId; 159*4d7e907cSAndroid Build Coastguard Worker string dvrSoftwareFeId; 160*4d7e907cSAndroid Build Coastguard Worker string recordFilterId; 161*4d7e907cSAndroid Build Coastguard Worker string dvrSourceId; 162*4d7e907cSAndroid Build Coastguard Worker }; 163*4d7e907cSAndroid Build Coastguard Worker 164*4d7e907cSAndroid Build Coastguard Worker struct DescramblingHardwareConnections { 165*4d7e907cSAndroid Build Coastguard Worker bool support; 166*4d7e907cSAndroid Build Coastguard Worker bool hasFrontendConnection; 167*4d7e907cSAndroid Build Coastguard Worker string frontendId; 168*4d7e907cSAndroid Build Coastguard Worker string dvrSoftwareFeId; 169*4d7e907cSAndroid Build Coastguard Worker string audioFilterId; 170*4d7e907cSAndroid Build Coastguard Worker string videoFilterId; 171*4d7e907cSAndroid Build Coastguard Worker string descramblerId; 172*4d7e907cSAndroid Build Coastguard Worker string dvrSourceId; 173*4d7e907cSAndroid Build Coastguard Worker /* list string of extra filters; */ 174*4d7e907cSAndroid Build Coastguard Worker }; 175*4d7e907cSAndroid Build Coastguard Worker 176*4d7e907cSAndroid Build Coastguard Worker struct LnbLiveHardwareConnections { 177*4d7e907cSAndroid Build Coastguard Worker bool support; 178*4d7e907cSAndroid Build Coastguard Worker string frontendId; 179*4d7e907cSAndroid Build Coastguard Worker string audioFilterId; 180*4d7e907cSAndroid Build Coastguard Worker string videoFilterId; 181*4d7e907cSAndroid Build Coastguard Worker string lnbId; 182*4d7e907cSAndroid Build Coastguard Worker vector<string> diseqcMsgs; 183*4d7e907cSAndroid Build Coastguard Worker /* list string of extra filters; */ 184*4d7e907cSAndroid Build Coastguard Worker }; 185*4d7e907cSAndroid Build Coastguard Worker 186*4d7e907cSAndroid Build Coastguard Worker struct LnbRecordHardwareConnections { 187*4d7e907cSAndroid Build Coastguard Worker bool support; 188*4d7e907cSAndroid Build Coastguard Worker string frontendId; 189*4d7e907cSAndroid Build Coastguard Worker string dvrRecordId; 190*4d7e907cSAndroid Build Coastguard Worker string recordFilterId; 191*4d7e907cSAndroid Build Coastguard Worker string lnbId; 192*4d7e907cSAndroid Build Coastguard Worker vector<string> diseqcMsgs; 193*4d7e907cSAndroid Build Coastguard Worker /* list string of extra filters; */ 194*4d7e907cSAndroid Build Coastguard Worker }; 195*4d7e907cSAndroid Build Coastguard Worker 196*4d7e907cSAndroid Build Coastguard Worker struct TimeFilterHardwareConnections { 197*4d7e907cSAndroid Build Coastguard Worker bool support; 198*4d7e907cSAndroid Build Coastguard Worker string timeFilterId; 199*4d7e907cSAndroid Build Coastguard Worker }; 200*4d7e907cSAndroid Build Coastguard Worker 201*4d7e907cSAndroid Build Coastguard Worker struct TunerTestingConfigReader1_0 { 202*4d7e907cSAndroid Build Coastguard Worker public: setConfigFilePathTunerTestingConfigReader1_0203*4d7e907cSAndroid Build Coastguard Worker static void setConfigFilePath(string path) { mConfigFilePath = path; } 204*4d7e907cSAndroid Build Coastguard Worker checkConfigFileExistsTunerTestingConfigReader1_0205*4d7e907cSAndroid Build Coastguard Worker static bool checkConfigFileExists() { 206*4d7e907cSAndroid Build Coastguard Worker auto res = read(mConfigFilePath.c_str()); 207*4d7e907cSAndroid Build Coastguard Worker if (res == nullopt) { 208*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] Couldn't read %s." 209*4d7e907cSAndroid Build Coastguard Worker "Please check tuner_testing_dynamic_configuration.xsd" 210*4d7e907cSAndroid Build Coastguard Worker "and sample_tuner_vts_config.xml for more details on how to config Tune VTS.", 211*4d7e907cSAndroid Build Coastguard Worker mConfigFilePath.c_str()); 212*4d7e907cSAndroid Build Coastguard Worker } 213*4d7e907cSAndroid Build Coastguard Worker return (res != nullopt); 214*4d7e907cSAndroid Build Coastguard Worker } 215*4d7e907cSAndroid Build Coastguard Worker readFrontendConfig1_0TunerTestingConfigReader1_0216*4d7e907cSAndroid Build Coastguard Worker static void readFrontendConfig1_0(map<string, FrontendConfig>& frontendMap) { 217*4d7e907cSAndroid Build Coastguard Worker auto hardwareConfig = getHardwareConfig(); 218*4d7e907cSAndroid Build Coastguard Worker if (hardwareConfig.hasFrontends()) { 219*4d7e907cSAndroid Build Coastguard Worker // TODO: b/182519645 complete the tune status config 220*4d7e907cSAndroid Build Coastguard Worker vector<FrontendStatusType> types; 221*4d7e907cSAndroid Build Coastguard Worker types.push_back(FrontendStatusType::DEMOD_LOCK); 222*4d7e907cSAndroid Build Coastguard Worker FrontendStatus status; 223*4d7e907cSAndroid Build Coastguard Worker status.isDemodLocked(true); 224*4d7e907cSAndroid Build Coastguard Worker vector<FrontendStatus> statuses; 225*4d7e907cSAndroid Build Coastguard Worker statuses.push_back(status); 226*4d7e907cSAndroid Build Coastguard Worker 227*4d7e907cSAndroid Build Coastguard Worker auto frontends = *hardwareConfig.getFirstFrontends(); 228*4d7e907cSAndroid Build Coastguard Worker for (auto feConfig : frontends.getFrontend()) { 229*4d7e907cSAndroid Build Coastguard Worker string id = feConfig.getId(); 230*4d7e907cSAndroid Build Coastguard Worker if (id.compare(string("FE_DEFAULT")) == 0) { 231*4d7e907cSAndroid Build Coastguard Worker // overrid default 232*4d7e907cSAndroid Build Coastguard Worker frontendMap.erase(string("FE_DEFAULT")); 233*4d7e907cSAndroid Build Coastguard Worker } 234*4d7e907cSAndroid Build Coastguard Worker FrontendType type; 235*4d7e907cSAndroid Build Coastguard Worker switch (feConfig.getType()) { 236*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::UNDEFINED: 237*4d7e907cSAndroid Build Coastguard Worker type = FrontendType::UNDEFINED; 238*4d7e907cSAndroid Build Coastguard Worker break; 239*4d7e907cSAndroid Build Coastguard Worker // TODO: b/182519645 finish all other frontend settings 240*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::ANALOG: 241*4d7e907cSAndroid Build Coastguard Worker type = FrontendType::ANALOG; 242*4d7e907cSAndroid Build Coastguard Worker break; 243*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::ATSC: 244*4d7e907cSAndroid Build Coastguard Worker type = FrontendType::ATSC; 245*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].settings.atsc(readAtscFrontendSettings(feConfig)); 246*4d7e907cSAndroid Build Coastguard Worker break; 247*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::ATSC3: 248*4d7e907cSAndroid Build Coastguard Worker type = FrontendType::ATSC3; 249*4d7e907cSAndroid Build Coastguard Worker break; 250*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::DVBC: 251*4d7e907cSAndroid Build Coastguard Worker type = FrontendType::DVBC; 252*4d7e907cSAndroid Build Coastguard Worker break; 253*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::DVBS: 254*4d7e907cSAndroid Build Coastguard Worker type = FrontendType::DVBS; 255*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].settings.dvbs(readDvbsFrontendSettings(feConfig)); 256*4d7e907cSAndroid Build Coastguard Worker break; 257*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::DVBT: { 258*4d7e907cSAndroid Build Coastguard Worker type = FrontendType::DVBT; 259*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].settings.dvbt(readDvbtFrontendSettings(feConfig)); 260*4d7e907cSAndroid Build Coastguard Worker break; 261*4d7e907cSAndroid Build Coastguard Worker } 262*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::ISDBS: 263*4d7e907cSAndroid Build Coastguard Worker type = FrontendType::ISDBS; 264*4d7e907cSAndroid Build Coastguard Worker break; 265*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::ISDBS3: 266*4d7e907cSAndroid Build Coastguard Worker type = FrontendType::ISDBS3; 267*4d7e907cSAndroid Build Coastguard Worker break; 268*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::ISDBT: 269*4d7e907cSAndroid Build Coastguard Worker type = FrontendType::ISDBT; 270*4d7e907cSAndroid Build Coastguard Worker break; 271*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::DTMB: 272*4d7e907cSAndroid Build Coastguard Worker // dtmb will be handled in readFrontendConfig1_1; 273*4d7e907cSAndroid Build Coastguard Worker continue; 274*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::UNKNOWN: 275*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] invalid frontend type"); 276*4d7e907cSAndroid Build Coastguard Worker return; 277*4d7e907cSAndroid Build Coastguard Worker } 278*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].type = type; 279*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].isSoftwareFe = feConfig.getIsSoftwareFrontend(); 280*4d7e907cSAndroid Build Coastguard Worker // TODO: b/182519645 complete the tune status config 281*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].tuneStatusTypes = types; 282*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].expectTuneStatuses = statuses; 283*4d7e907cSAndroid Build Coastguard Worker } 284*4d7e907cSAndroid Build Coastguard Worker } 285*4d7e907cSAndroid Build Coastguard Worker } 286*4d7e907cSAndroid Build Coastguard Worker readFilterConfig1_0TunerTestingConfigReader1_0287*4d7e907cSAndroid Build Coastguard Worker static void readFilterConfig1_0(map<string, FilterConfig>& filterMap) { 288*4d7e907cSAndroid Build Coastguard Worker auto hardwareConfig = getHardwareConfig(); 289*4d7e907cSAndroid Build Coastguard Worker if (hardwareConfig.hasFilters()) { 290*4d7e907cSAndroid Build Coastguard Worker auto filters = *hardwareConfig.getFirstFilters(); 291*4d7e907cSAndroid Build Coastguard Worker for (auto filterConfig : filters.getFilter()) { 292*4d7e907cSAndroid Build Coastguard Worker string id = filterConfig.getId(); 293*4d7e907cSAndroid Build Coastguard Worker if (id.compare(string("FILTER_AUDIO_DEFAULT")) == 0) { 294*4d7e907cSAndroid Build Coastguard Worker // overrid default 295*4d7e907cSAndroid Build Coastguard Worker filterMap.erase(string("FILTER_AUDIO_DEFAULT")); 296*4d7e907cSAndroid Build Coastguard Worker } 297*4d7e907cSAndroid Build Coastguard Worker if (id.compare(string("FILTER_VIDEO_DEFAULT")) == 0) { 298*4d7e907cSAndroid Build Coastguard Worker // overrid default 299*4d7e907cSAndroid Build Coastguard Worker filterMap.erase(string("FILTER_VIDEO_DEFAULT")); 300*4d7e907cSAndroid Build Coastguard Worker } 301*4d7e907cSAndroid Build Coastguard Worker 302*4d7e907cSAndroid Build Coastguard Worker DemuxFilterType type; 303*4d7e907cSAndroid Build Coastguard Worker DemuxFilterSettings settings; 304*4d7e907cSAndroid Build Coastguard Worker if (!readFilterTypeAndSettings(filterConfig, type, settings)) { 305*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] invalid filter type"); 306*4d7e907cSAndroid Build Coastguard Worker return; 307*4d7e907cSAndroid Build Coastguard Worker } 308*4d7e907cSAndroid Build Coastguard Worker filterMap[id].type = type; 309*4d7e907cSAndroid Build Coastguard Worker filterMap[id].bufferSize = filterConfig.getBufferSize(); 310*4d7e907cSAndroid Build Coastguard Worker filterMap[id].getMqDesc = filterConfig.getUseFMQ(); 311*4d7e907cSAndroid Build Coastguard Worker filterMap[id].settings = settings; 312*4d7e907cSAndroid Build Coastguard Worker } 313*4d7e907cSAndroid Build Coastguard Worker } 314*4d7e907cSAndroid Build Coastguard Worker } 315*4d7e907cSAndroid Build Coastguard Worker readDvrConfig1_0TunerTestingConfigReader1_0316*4d7e907cSAndroid Build Coastguard Worker static void readDvrConfig1_0(map<string, DvrConfig>& dvrMap) { 317*4d7e907cSAndroid Build Coastguard Worker auto hardwareConfig = getHardwareConfig(); 318*4d7e907cSAndroid Build Coastguard Worker if (hardwareConfig.hasDvrs()) { 319*4d7e907cSAndroid Build Coastguard Worker auto dvrs = *hardwareConfig.getFirstDvrs(); 320*4d7e907cSAndroid Build Coastguard Worker for (auto dvrConfig : dvrs.getDvr()) { 321*4d7e907cSAndroid Build Coastguard Worker string id = dvrConfig.getId(); 322*4d7e907cSAndroid Build Coastguard Worker DvrType type; 323*4d7e907cSAndroid Build Coastguard Worker switch (dvrConfig.getType()) { 324*4d7e907cSAndroid Build Coastguard Worker case DvrTypeEnum::PLAYBACK: 325*4d7e907cSAndroid Build Coastguard Worker type = DvrType::PLAYBACK; 326*4d7e907cSAndroid Build Coastguard Worker dvrMap[id].settings.playback(readPlaybackSettings(dvrConfig)); 327*4d7e907cSAndroid Build Coastguard Worker break; 328*4d7e907cSAndroid Build Coastguard Worker case DvrTypeEnum::RECORD: 329*4d7e907cSAndroid Build Coastguard Worker type = DvrType::RECORD; 330*4d7e907cSAndroid Build Coastguard Worker dvrMap[id].settings.record(readRecordSettings(dvrConfig)); 331*4d7e907cSAndroid Build Coastguard Worker break; 332*4d7e907cSAndroid Build Coastguard Worker case DvrTypeEnum::UNKNOWN: 333*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] invalid DVR type"); 334*4d7e907cSAndroid Build Coastguard Worker return; 335*4d7e907cSAndroid Build Coastguard Worker } 336*4d7e907cSAndroid Build Coastguard Worker dvrMap[id].type = type; 337*4d7e907cSAndroid Build Coastguard Worker dvrMap[id].bufferSize = static_cast<uint32_t>(dvrConfig.getBufferSize()); 338*4d7e907cSAndroid Build Coastguard Worker if (dvrConfig.hasInputFilePath()) { 339*4d7e907cSAndroid Build Coastguard Worker dvrMap[id].playbackInputFile = dvrConfig.getInputFilePath(); 340*4d7e907cSAndroid Build Coastguard Worker } 341*4d7e907cSAndroid Build Coastguard Worker } 342*4d7e907cSAndroid Build Coastguard Worker } 343*4d7e907cSAndroid Build Coastguard Worker } 344*4d7e907cSAndroid Build Coastguard Worker readLnbConfig1_0TunerTestingConfigReader1_0345*4d7e907cSAndroid Build Coastguard Worker static void readLnbConfig1_0(map<string, LnbConfig>& lnbMap) { 346*4d7e907cSAndroid Build Coastguard Worker auto hardwareConfig = getHardwareConfig(); 347*4d7e907cSAndroid Build Coastguard Worker if (hardwareConfig.hasLnbs()) { 348*4d7e907cSAndroid Build Coastguard Worker auto lnbs = *hardwareConfig.getFirstLnbs(); 349*4d7e907cSAndroid Build Coastguard Worker for (auto lnbConfig : lnbs.getLnb()) { 350*4d7e907cSAndroid Build Coastguard Worker string id = lnbConfig.getId(); 351*4d7e907cSAndroid Build Coastguard Worker if (lnbConfig.hasName()) { 352*4d7e907cSAndroid Build Coastguard Worker lnbMap[id].name = lnbConfig.getName(); 353*4d7e907cSAndroid Build Coastguard Worker } else { 354*4d7e907cSAndroid Build Coastguard Worker lnbMap[id].name = emptyHardwareId; 355*4d7e907cSAndroid Build Coastguard Worker } 356*4d7e907cSAndroid Build Coastguard Worker lnbMap[id].voltage = static_cast<LnbVoltage>(lnbConfig.getVoltage()); 357*4d7e907cSAndroid Build Coastguard Worker lnbMap[id].tone = static_cast<LnbTone>(lnbConfig.getTone()); 358*4d7e907cSAndroid Build Coastguard Worker lnbMap[id].position = static_cast<LnbPosition>(lnbConfig.getPosition()); 359*4d7e907cSAndroid Build Coastguard Worker } 360*4d7e907cSAndroid Build Coastguard Worker } 361*4d7e907cSAndroid Build Coastguard Worker } 362*4d7e907cSAndroid Build Coastguard Worker readDescramblerConfig1_0TunerTestingConfigReader1_0363*4d7e907cSAndroid Build Coastguard Worker static void readDescramblerConfig1_0(map<string, DescramblerConfig>& descramblerMap) { 364*4d7e907cSAndroid Build Coastguard Worker auto hardwareConfig = getHardwareConfig(); 365*4d7e907cSAndroid Build Coastguard Worker if (hardwareConfig.hasDescramblers()) { 366*4d7e907cSAndroid Build Coastguard Worker auto descramblers = *hardwareConfig.getFirstDescramblers(); 367*4d7e907cSAndroid Build Coastguard Worker for (auto descramblerConfig : descramblers.getDescrambler()) { 368*4d7e907cSAndroid Build Coastguard Worker string id = descramblerConfig.getId(); 369*4d7e907cSAndroid Build Coastguard Worker descramblerMap[id].casSystemId = 370*4d7e907cSAndroid Build Coastguard Worker static_cast<uint32_t>(descramblerConfig.getCasSystemId()); 371*4d7e907cSAndroid Build Coastguard Worker if (descramblerConfig.hasProvisionStr()) { 372*4d7e907cSAndroid Build Coastguard Worker descramblerMap[id].provisionStr = descramblerConfig.getProvisionStr(); 373*4d7e907cSAndroid Build Coastguard Worker } else { 374*4d7e907cSAndroid Build Coastguard Worker descramblerMap[id].provisionStr = PROVISION_STR; 375*4d7e907cSAndroid Build Coastguard Worker } 376*4d7e907cSAndroid Build Coastguard Worker if (descramblerConfig.hasSesstionPrivatData()) { 377*4d7e907cSAndroid Build Coastguard Worker auto privateData = descramblerConfig.getSesstionPrivatData(); 378*4d7e907cSAndroid Build Coastguard Worker int size = privateData.size(); 379*4d7e907cSAndroid Build Coastguard Worker descramblerMap[id].hidlPvtData.resize(size); 380*4d7e907cSAndroid Build Coastguard Worker memcpy(descramblerMap[id].hidlPvtData.data(), privateData.data(), size); 381*4d7e907cSAndroid Build Coastguard Worker } else { 382*4d7e907cSAndroid Build Coastguard Worker descramblerMap[id].hidlPvtData.resize(256); 383*4d7e907cSAndroid Build Coastguard Worker } 384*4d7e907cSAndroid Build Coastguard Worker } 385*4d7e907cSAndroid Build Coastguard Worker } 386*4d7e907cSAndroid Build Coastguard Worker } 387*4d7e907cSAndroid Build Coastguard Worker readDiseqcMessagesTunerTestingConfigReader1_0388*4d7e907cSAndroid Build Coastguard Worker static void readDiseqcMessages(map<string, vector<uint8_t>>& diseqcMsgMap) { 389*4d7e907cSAndroid Build Coastguard Worker auto hardwareConfig = getHardwareConfig(); 390*4d7e907cSAndroid Build Coastguard Worker if (hardwareConfig.hasDiseqcMessages()) { 391*4d7e907cSAndroid Build Coastguard Worker auto msgs = *hardwareConfig.getFirstDiseqcMessages(); 392*4d7e907cSAndroid Build Coastguard Worker for (auto msgConfig : msgs.getDiseqcMessage()) { 393*4d7e907cSAndroid Build Coastguard Worker string name = msgConfig.getMsgName(); 394*4d7e907cSAndroid Build Coastguard Worker for (uint8_t atom : msgConfig.getMsgBody()) { 395*4d7e907cSAndroid Build Coastguard Worker diseqcMsgMap[name].push_back(atom); 396*4d7e907cSAndroid Build Coastguard Worker } 397*4d7e907cSAndroid Build Coastguard Worker } 398*4d7e907cSAndroid Build Coastguard Worker } 399*4d7e907cSAndroid Build Coastguard Worker } 400*4d7e907cSAndroid Build Coastguard Worker readTimeFilterConfig1_0TunerTestingConfigReader1_0401*4d7e907cSAndroid Build Coastguard Worker static void readTimeFilterConfig1_0(map<string, TimeFilterConfig>& timeFilterMap) { 402*4d7e907cSAndroid Build Coastguard Worker auto hardwareConfig = getHardwareConfig(); 403*4d7e907cSAndroid Build Coastguard Worker if (hardwareConfig.hasTimeFilters()) { 404*4d7e907cSAndroid Build Coastguard Worker auto timeFilters = *hardwareConfig.getFirstTimeFilters(); 405*4d7e907cSAndroid Build Coastguard Worker for (auto timeFilterConfig : timeFilters.getTimeFilter()) { 406*4d7e907cSAndroid Build Coastguard Worker string id = timeFilterConfig.getId(); 407*4d7e907cSAndroid Build Coastguard Worker timeFilterMap[id].timeStamp = 408*4d7e907cSAndroid Build Coastguard Worker static_cast<uint64_t>(timeFilterConfig.getTimeStamp()); 409*4d7e907cSAndroid Build Coastguard Worker } 410*4d7e907cSAndroid Build Coastguard Worker } 411*4d7e907cSAndroid Build Coastguard Worker } 412*4d7e907cSAndroid Build Coastguard Worker connectLiveBroadcastTunerTestingConfigReader1_0413*4d7e907cSAndroid Build Coastguard Worker static void connectLiveBroadcast(LiveBroadcastHardwareConnections& live) { 414*4d7e907cSAndroid Build Coastguard Worker auto dataFlow = getDataFlowConfiguration(); 415*4d7e907cSAndroid Build Coastguard Worker if (dataFlow.hasClearLiveBroadcast()) { 416*4d7e907cSAndroid Build Coastguard Worker live.hasFrontendConnection = true; 417*4d7e907cSAndroid Build Coastguard Worker } else { 418*4d7e907cSAndroid Build Coastguard Worker live.hasFrontendConnection = false; 419*4d7e907cSAndroid Build Coastguard Worker return; 420*4d7e907cSAndroid Build Coastguard Worker } 421*4d7e907cSAndroid Build Coastguard Worker auto liveConfig = *dataFlow.getFirstClearLiveBroadcast(); 422*4d7e907cSAndroid Build Coastguard Worker live.frontendId = liveConfig.getFrontendConnection(); 423*4d7e907cSAndroid Build Coastguard Worker 424*4d7e907cSAndroid Build Coastguard Worker live.audioFilterId = liveConfig.getAudioFilterConnection(); 425*4d7e907cSAndroid Build Coastguard Worker live.videoFilterId = liveConfig.getVideoFilterConnection(); 426*4d7e907cSAndroid Build Coastguard Worker if (liveConfig.hasPcrFilterConnection()) { 427*4d7e907cSAndroid Build Coastguard Worker live.pcrFilterId = liveConfig.getPcrFilterConnection(); 428*4d7e907cSAndroid Build Coastguard Worker } else { 429*4d7e907cSAndroid Build Coastguard Worker live.pcrFilterId = emptyHardwareId; 430*4d7e907cSAndroid Build Coastguard Worker } 431*4d7e907cSAndroid Build Coastguard Worker if (liveConfig.hasSectionFilterConnection()) { 432*4d7e907cSAndroid Build Coastguard Worker live.sectionFilterId = liveConfig.getSectionFilterConnection(); 433*4d7e907cSAndroid Build Coastguard Worker } else { 434*4d7e907cSAndroid Build Coastguard Worker live.sectionFilterId = emptyHardwareId; 435*4d7e907cSAndroid Build Coastguard Worker } 436*4d7e907cSAndroid Build Coastguard Worker if (liveConfig.hasDvrSoftwareFeConnection()) { 437*4d7e907cSAndroid Build Coastguard Worker live.dvrSoftwareFeId = liveConfig.getDvrSoftwareFeConnection(); 438*4d7e907cSAndroid Build Coastguard Worker } 439*4d7e907cSAndroid Build Coastguard Worker if (liveConfig.hasIpFilterConnection()) { 440*4d7e907cSAndroid Build Coastguard Worker live.ipFilterId = liveConfig.getIpFilterConnection(); 441*4d7e907cSAndroid Build Coastguard Worker } else { 442*4d7e907cSAndroid Build Coastguard Worker live.ipFilterId = emptyHardwareId; 443*4d7e907cSAndroid Build Coastguard Worker } 444*4d7e907cSAndroid Build Coastguard Worker } 445*4d7e907cSAndroid Build Coastguard Worker connectScanTunerTestingConfigReader1_0446*4d7e907cSAndroid Build Coastguard Worker static void connectScan(ScanHardwareConnections& scan) { 447*4d7e907cSAndroid Build Coastguard Worker auto dataFlow = getDataFlowConfiguration(); 448*4d7e907cSAndroid Build Coastguard Worker if (dataFlow.hasScan()) { 449*4d7e907cSAndroid Build Coastguard Worker scan.hasFrontendConnection = true; 450*4d7e907cSAndroid Build Coastguard Worker } else { 451*4d7e907cSAndroid Build Coastguard Worker scan.hasFrontendConnection = false; 452*4d7e907cSAndroid Build Coastguard Worker return; 453*4d7e907cSAndroid Build Coastguard Worker } 454*4d7e907cSAndroid Build Coastguard Worker auto scanConfig = *dataFlow.getFirstScan(); 455*4d7e907cSAndroid Build Coastguard Worker scan.frontendId = scanConfig.getFrontendConnection(); 456*4d7e907cSAndroid Build Coastguard Worker } 457*4d7e907cSAndroid Build Coastguard Worker connectDvrPlaybackTunerTestingConfigReader1_0458*4d7e907cSAndroid Build Coastguard Worker static void connectDvrPlayback(DvrPlaybackHardwareConnections& playback) { 459*4d7e907cSAndroid Build Coastguard Worker auto dataFlow = getDataFlowConfiguration(); 460*4d7e907cSAndroid Build Coastguard Worker if (dataFlow.hasDvrPlayback()) { 461*4d7e907cSAndroid Build Coastguard Worker playback.support = true; 462*4d7e907cSAndroid Build Coastguard Worker } else { 463*4d7e907cSAndroid Build Coastguard Worker playback.support = false; 464*4d7e907cSAndroid Build Coastguard Worker return; 465*4d7e907cSAndroid Build Coastguard Worker } 466*4d7e907cSAndroid Build Coastguard Worker auto playbackConfig = *dataFlow.getFirstDvrPlayback(); 467*4d7e907cSAndroid Build Coastguard Worker playback.dvrId = playbackConfig.getDvrConnection(); 468*4d7e907cSAndroid Build Coastguard Worker playback.audioFilterId = playbackConfig.getAudioFilterConnection(); 469*4d7e907cSAndroid Build Coastguard Worker playback.videoFilterId = playbackConfig.getVideoFilterConnection(); 470*4d7e907cSAndroid Build Coastguard Worker if (playbackConfig.hasSectionFilterConnection()) { 471*4d7e907cSAndroid Build Coastguard Worker playback.sectionFilterId = playbackConfig.getSectionFilterConnection(); 472*4d7e907cSAndroid Build Coastguard Worker } else { 473*4d7e907cSAndroid Build Coastguard Worker playback.sectionFilterId = emptyHardwareId; 474*4d7e907cSAndroid Build Coastguard Worker } 475*4d7e907cSAndroid Build Coastguard Worker } 476*4d7e907cSAndroid Build Coastguard Worker connectDvrRecordTunerTestingConfigReader1_0477*4d7e907cSAndroid Build Coastguard Worker static void connectDvrRecord(DvrRecordHardwareConnections& record) { 478*4d7e907cSAndroid Build Coastguard Worker auto dataFlow = getDataFlowConfiguration(); 479*4d7e907cSAndroid Build Coastguard Worker if (dataFlow.hasDvrRecord()) { 480*4d7e907cSAndroid Build Coastguard Worker record.support = true; 481*4d7e907cSAndroid Build Coastguard Worker } else { 482*4d7e907cSAndroid Build Coastguard Worker record.support = false; 483*4d7e907cSAndroid Build Coastguard Worker return; 484*4d7e907cSAndroid Build Coastguard Worker } 485*4d7e907cSAndroid Build Coastguard Worker auto recordConfig = *dataFlow.getFirstDvrRecord(); 486*4d7e907cSAndroid Build Coastguard Worker record.recordFilterId = recordConfig.getRecordFilterConnection(); 487*4d7e907cSAndroid Build Coastguard Worker record.dvrRecordId = recordConfig.getDvrRecordConnection(); 488*4d7e907cSAndroid Build Coastguard Worker if (recordConfig.hasDvrSoftwareFeConnection()) { 489*4d7e907cSAndroid Build Coastguard Worker record.dvrSoftwareFeId = recordConfig.getDvrSoftwareFeConnection(); 490*4d7e907cSAndroid Build Coastguard Worker } 491*4d7e907cSAndroid Build Coastguard Worker if (recordConfig.getHasFrontendConnection()) { 492*4d7e907cSAndroid Build Coastguard Worker record.hasFrontendConnection = true; 493*4d7e907cSAndroid Build Coastguard Worker record.dvrSourceId = emptyHardwareId; 494*4d7e907cSAndroid Build Coastguard Worker record.frontendId = recordConfig.getFrontendConnection(); 495*4d7e907cSAndroid Build Coastguard Worker } else { 496*4d7e907cSAndroid Build Coastguard Worker record.hasFrontendConnection = false; 497*4d7e907cSAndroid Build Coastguard Worker record.dvrSourceId = recordConfig.getDvrSourceConnection(); 498*4d7e907cSAndroid Build Coastguard Worker } 499*4d7e907cSAndroid Build Coastguard Worker } 500*4d7e907cSAndroid Build Coastguard Worker connectDescramblingTunerTestingConfigReader1_0501*4d7e907cSAndroid Build Coastguard Worker static void connectDescrambling(DescramblingHardwareConnections& descrambling) { 502*4d7e907cSAndroid Build Coastguard Worker auto dataFlow = getDataFlowConfiguration(); 503*4d7e907cSAndroid Build Coastguard Worker if (dataFlow.hasDescrambling()) { 504*4d7e907cSAndroid Build Coastguard Worker descrambling.support = true; 505*4d7e907cSAndroid Build Coastguard Worker } else { 506*4d7e907cSAndroid Build Coastguard Worker descrambling.support = false; 507*4d7e907cSAndroid Build Coastguard Worker return; 508*4d7e907cSAndroid Build Coastguard Worker } 509*4d7e907cSAndroid Build Coastguard Worker auto descConfig = *dataFlow.getFirstDescrambling(); 510*4d7e907cSAndroid Build Coastguard Worker descrambling.descramblerId = descConfig.getDescramblerConnection(); 511*4d7e907cSAndroid Build Coastguard Worker descrambling.audioFilterId = descConfig.getAudioFilterConnection(); 512*4d7e907cSAndroid Build Coastguard Worker descrambling.videoFilterId = descConfig.getVideoFilterConnection(); 513*4d7e907cSAndroid Build Coastguard Worker if (descConfig.hasDvrSoftwareFeConnection()) { 514*4d7e907cSAndroid Build Coastguard Worker descrambling.dvrSoftwareFeId = descConfig.getDvrSoftwareFeConnection(); 515*4d7e907cSAndroid Build Coastguard Worker } 516*4d7e907cSAndroid Build Coastguard Worker if (descConfig.getHasFrontendConnection()) { 517*4d7e907cSAndroid Build Coastguard Worker descrambling.hasFrontendConnection = true; 518*4d7e907cSAndroid Build Coastguard Worker descrambling.dvrSourceId = emptyHardwareId; 519*4d7e907cSAndroid Build Coastguard Worker descrambling.frontendId = descConfig.getFrontendConnection(); 520*4d7e907cSAndroid Build Coastguard Worker } else { 521*4d7e907cSAndroid Build Coastguard Worker descrambling.hasFrontendConnection = false; 522*4d7e907cSAndroid Build Coastguard Worker descrambling.dvrSourceId = descConfig.getDvrSourceConnection(); 523*4d7e907cSAndroid Build Coastguard Worker } 524*4d7e907cSAndroid Build Coastguard Worker } 525*4d7e907cSAndroid Build Coastguard Worker connectLnbLiveTunerTestingConfigReader1_0526*4d7e907cSAndroid Build Coastguard Worker static void connectLnbLive(LnbLiveHardwareConnections& lnbLive) { 527*4d7e907cSAndroid Build Coastguard Worker auto dataFlow = getDataFlowConfiguration(); 528*4d7e907cSAndroid Build Coastguard Worker if (dataFlow.hasLnbLive()) { 529*4d7e907cSAndroid Build Coastguard Worker lnbLive.support = true; 530*4d7e907cSAndroid Build Coastguard Worker } else { 531*4d7e907cSAndroid Build Coastguard Worker lnbLive.support = false; 532*4d7e907cSAndroid Build Coastguard Worker return; 533*4d7e907cSAndroid Build Coastguard Worker } 534*4d7e907cSAndroid Build Coastguard Worker auto lnbLiveConfig = *dataFlow.getFirstLnbLive(); 535*4d7e907cSAndroid Build Coastguard Worker lnbLive.frontendId = lnbLiveConfig.getFrontendConnection(); 536*4d7e907cSAndroid Build Coastguard Worker lnbLive.audioFilterId = lnbLiveConfig.getAudioFilterConnection(); 537*4d7e907cSAndroid Build Coastguard Worker lnbLive.videoFilterId = lnbLiveConfig.getVideoFilterConnection(); 538*4d7e907cSAndroid Build Coastguard Worker lnbLive.lnbId = lnbLiveConfig.getLnbConnection(); 539*4d7e907cSAndroid Build Coastguard Worker if (lnbLiveConfig.hasDiseqcMsgSender()) { 540*4d7e907cSAndroid Build Coastguard Worker for (auto msgName : lnbLiveConfig.getDiseqcMsgSender()) { 541*4d7e907cSAndroid Build Coastguard Worker lnbLive.diseqcMsgs.push_back(msgName); 542*4d7e907cSAndroid Build Coastguard Worker } 543*4d7e907cSAndroid Build Coastguard Worker } 544*4d7e907cSAndroid Build Coastguard Worker } 545*4d7e907cSAndroid Build Coastguard Worker connectLnbRecordTunerTestingConfigReader1_0546*4d7e907cSAndroid Build Coastguard Worker static void connectLnbRecord(LnbRecordHardwareConnections& lnbRecord) { 547*4d7e907cSAndroid Build Coastguard Worker auto dataFlow = getDataFlowConfiguration(); 548*4d7e907cSAndroid Build Coastguard Worker if (dataFlow.hasLnbRecord()) { 549*4d7e907cSAndroid Build Coastguard Worker lnbRecord.support = true; 550*4d7e907cSAndroid Build Coastguard Worker } else { 551*4d7e907cSAndroid Build Coastguard Worker lnbRecord.support = false; 552*4d7e907cSAndroid Build Coastguard Worker return; 553*4d7e907cSAndroid Build Coastguard Worker } 554*4d7e907cSAndroid Build Coastguard Worker auto lnbRecordConfig = *dataFlow.getFirstLnbRecord(); 555*4d7e907cSAndroid Build Coastguard Worker lnbRecord.frontendId = lnbRecordConfig.getFrontendConnection(); 556*4d7e907cSAndroid Build Coastguard Worker lnbRecord.recordFilterId = lnbRecordConfig.getRecordFilterConnection(); 557*4d7e907cSAndroid Build Coastguard Worker lnbRecord.dvrRecordId = lnbRecordConfig.getDvrRecordConnection(); 558*4d7e907cSAndroid Build Coastguard Worker lnbRecord.lnbId = lnbRecordConfig.getLnbConnection(); 559*4d7e907cSAndroid Build Coastguard Worker if (lnbRecordConfig.hasDiseqcMsgSender()) { 560*4d7e907cSAndroid Build Coastguard Worker for (auto msgName : lnbRecordConfig.getDiseqcMsgSender()) { 561*4d7e907cSAndroid Build Coastguard Worker lnbRecord.diseqcMsgs.push_back(msgName); 562*4d7e907cSAndroid Build Coastguard Worker } 563*4d7e907cSAndroid Build Coastguard Worker } 564*4d7e907cSAndroid Build Coastguard Worker } 565*4d7e907cSAndroid Build Coastguard Worker connectTimeFilterTunerTestingConfigReader1_0566*4d7e907cSAndroid Build Coastguard Worker static void connectTimeFilter(TimeFilterHardwareConnections& timeFilter) { 567*4d7e907cSAndroid Build Coastguard Worker auto dataFlow = getDataFlowConfiguration(); 568*4d7e907cSAndroid Build Coastguard Worker if (dataFlow.hasTimeFilter()) { 569*4d7e907cSAndroid Build Coastguard Worker timeFilter.support = true; 570*4d7e907cSAndroid Build Coastguard Worker } else { 571*4d7e907cSAndroid Build Coastguard Worker timeFilter.support = false; 572*4d7e907cSAndroid Build Coastguard Worker return; 573*4d7e907cSAndroid Build Coastguard Worker } 574*4d7e907cSAndroid Build Coastguard Worker auto timeFilterConfig = *dataFlow.getFirstTimeFilter(); 575*4d7e907cSAndroid Build Coastguard Worker timeFilter.timeFilterId = timeFilterConfig.getTimeFilterConnection(); 576*4d7e907cSAndroid Build Coastguard Worker } 577*4d7e907cSAndroid Build Coastguard Worker getHardwareConfigTunerTestingConfigReader1_0578*4d7e907cSAndroid Build Coastguard Worker static HardwareConfiguration getHardwareConfig() { 579*4d7e907cSAndroid Build Coastguard Worker return *getTunerConfig().getFirstHardwareConfiguration(); 580*4d7e907cSAndroid Build Coastguard Worker } 581*4d7e907cSAndroid Build Coastguard Worker 582*4d7e907cSAndroid Build Coastguard Worker private: readDvbtFrontendSettingsTunerTestingConfigReader1_0583*4d7e907cSAndroid Build Coastguard Worker static FrontendDvbtSettings readDvbtFrontendSettings(Frontend feConfig) { 584*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] fe type is dvbt"); 585*4d7e907cSAndroid Build Coastguard Worker FrontendDvbtSettings dvbtSettings{ 586*4d7e907cSAndroid Build Coastguard Worker .frequency = (uint32_t)feConfig.getFrequency(), 587*4d7e907cSAndroid Build Coastguard Worker }; 588*4d7e907cSAndroid Build Coastguard Worker if (!feConfig.hasDvbtFrontendSettings_optional()) { 589*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] no more dvbt settings"); 590*4d7e907cSAndroid Build Coastguard Worker return dvbtSettings; 591*4d7e907cSAndroid Build Coastguard Worker } 592*4d7e907cSAndroid Build Coastguard Worker auto dvbt = feConfig.getFirstDvbtFrontendSettings_optional(); 593*4d7e907cSAndroid Build Coastguard Worker uint32_t trans = static_cast<uint32_t>(dvbt->getTransmissionMode()); 594*4d7e907cSAndroid Build Coastguard Worker if (trans <= (uint32_t)FrontendDvbtTransmissionMode::MODE_32K) { 595*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.transmissionMode = static_cast<FrontendDvbtTransmissionMode>(trans); 596*4d7e907cSAndroid Build Coastguard Worker } 597*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.bandwidth = static_cast<FrontendDvbtBandwidth>(dvbt->getBandwidth()); 598*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.isHighPriority = dvbt->getIsHighPriority(); 599*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.hierarchy = static_cast<FrontendDvbtHierarchy>(dvbt->getHierarchy()); 600*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.hpCoderate = static_cast<FrontendDvbtCoderate>(dvbt->getHpCoderate()); 601*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.lpCoderate = static_cast<FrontendDvbtCoderate>(dvbt->getLpCoderate()); 602*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.guardInterval = 603*4d7e907cSAndroid Build Coastguard Worker static_cast<FrontendDvbtGuardInterval>(dvbt->getGuardInterval()); 604*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.standard = static_cast<FrontendDvbtStandard>(dvbt->getStandard()); 605*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.isMiso = dvbt->getIsMiso(); 606*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.plpMode = static_cast<FrontendDvbtPlpMode>(dvbt->getPlpMode()); 607*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.plpId = dvbt->getPlpId(); 608*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.plpGroupId = dvbt->getPlpGroupId(); 609*4d7e907cSAndroid Build Coastguard Worker if (dvbt->hasConstellation()) { 610*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.constellation = 611*4d7e907cSAndroid Build Coastguard Worker static_cast<FrontendDvbtConstellation>(dvbt->getConstellation()); 612*4d7e907cSAndroid Build Coastguard Worker } 613*4d7e907cSAndroid Build Coastguard Worker return dvbtSettings; 614*4d7e907cSAndroid Build Coastguard Worker } 615*4d7e907cSAndroid Build Coastguard Worker readDvbsFrontendSettingsTunerTestingConfigReader1_0616*4d7e907cSAndroid Build Coastguard Worker static FrontendDvbsSettings readDvbsFrontendSettings(Frontend feConfig) { 617*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] fe type is dvbs"); 618*4d7e907cSAndroid Build Coastguard Worker FrontendDvbsSettings dvbsSettings{ 619*4d7e907cSAndroid Build Coastguard Worker .frequency = (uint32_t)feConfig.getFrequency(), 620*4d7e907cSAndroid Build Coastguard Worker }; 621*4d7e907cSAndroid Build Coastguard Worker if (!feConfig.hasDvbsFrontendSettings_optional()) { 622*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] no more dvbs settings"); 623*4d7e907cSAndroid Build Coastguard Worker return dvbsSettings; 624*4d7e907cSAndroid Build Coastguard Worker } 625*4d7e907cSAndroid Build Coastguard Worker dvbsSettings.symbolRate = static_cast<uint32_t>( 626*4d7e907cSAndroid Build Coastguard Worker feConfig.getFirstDvbsFrontendSettings_optional()->getSymbolRate()); 627*4d7e907cSAndroid Build Coastguard Worker dvbsSettings.inputStreamId = static_cast<uint32_t>( 628*4d7e907cSAndroid Build Coastguard Worker feConfig.getFirstDvbsFrontendSettings_optional()->getInputStreamId()); 629*4d7e907cSAndroid Build Coastguard Worker return dvbsSettings; 630*4d7e907cSAndroid Build Coastguard Worker } 631*4d7e907cSAndroid Build Coastguard Worker readAtscFrontendSettingsTunerTestingConfigReader1_0632*4d7e907cSAndroid Build Coastguard Worker static FrontendAtscSettings readAtscFrontendSettings(Frontend feConfig) { 633*4d7e907cSAndroid Build Coastguard Worker FrontendAtscSettings atscSettings{ 634*4d7e907cSAndroid Build Coastguard Worker .frequency = (uint32_t)feConfig.getFrequency(), 635*4d7e907cSAndroid Build Coastguard Worker }; 636*4d7e907cSAndroid Build Coastguard Worker return atscSettings; 637*4d7e907cSAndroid Build Coastguard Worker } 638*4d7e907cSAndroid Build Coastguard Worker readFilterTypeAndSettingsTunerTestingConfigReader1_0639*4d7e907cSAndroid Build Coastguard Worker static bool readFilterTypeAndSettings(Filter filterConfig, DemuxFilterType& type, 640*4d7e907cSAndroid Build Coastguard Worker DemuxFilterSettings& settings) { 641*4d7e907cSAndroid Build Coastguard Worker auto mainType = filterConfig.getMainType(); 642*4d7e907cSAndroid Build Coastguard Worker auto subType = filterConfig.getSubType(); 643*4d7e907cSAndroid Build Coastguard Worker switch (mainType) { 644*4d7e907cSAndroid Build Coastguard Worker case FilterMainTypeEnum::TS: { 645*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] filter main type is ts"); 646*4d7e907cSAndroid Build Coastguard Worker type.mainType = DemuxFilterMainType::TS; 647*4d7e907cSAndroid Build Coastguard Worker switch (subType) { 648*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::UNDEFINED: 649*4d7e907cSAndroid Build Coastguard Worker type.subType.tsFilterType(DemuxTsFilterType::UNDEFINED); 650*4d7e907cSAndroid Build Coastguard Worker break; 651*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::SECTION: 652*4d7e907cSAndroid Build Coastguard Worker type.subType.tsFilterType(DemuxTsFilterType::SECTION); 653*4d7e907cSAndroid Build Coastguard Worker settings.ts().filterSettings.section( 654*4d7e907cSAndroid Build Coastguard Worker readSectionFilterSettings(filterConfig)); 655*4d7e907cSAndroid Build Coastguard Worker break; 656*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::PES: 657*4d7e907cSAndroid Build Coastguard Worker // TODO: b/182519645 support all the filter settings 658*4d7e907cSAndroid Build Coastguard Worker /*settings.ts().filterSettings.pesData( 659*4d7e907cSAndroid Build Coastguard Worker getPesFilterSettings(filterConfig));*/ 660*4d7e907cSAndroid Build Coastguard Worker type.subType.tsFilterType(DemuxTsFilterType::PES); 661*4d7e907cSAndroid Build Coastguard Worker break; 662*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::TS: 663*4d7e907cSAndroid Build Coastguard Worker type.subType.tsFilterType(DemuxTsFilterType::TS); 664*4d7e907cSAndroid Build Coastguard Worker settings.ts().filterSettings.noinit(); 665*4d7e907cSAndroid Build Coastguard Worker break; 666*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::PCR: 667*4d7e907cSAndroid Build Coastguard Worker type.subType.tsFilterType(DemuxTsFilterType::PCR); 668*4d7e907cSAndroid Build Coastguard Worker settings.ts().filterSettings.noinit(); 669*4d7e907cSAndroid Build Coastguard Worker break; 670*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::TEMI: 671*4d7e907cSAndroid Build Coastguard Worker type.subType.tsFilterType(DemuxTsFilterType::TEMI); 672*4d7e907cSAndroid Build Coastguard Worker settings.ts().filterSettings.noinit(); 673*4d7e907cSAndroid Build Coastguard Worker break; 674*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::AUDIO: 675*4d7e907cSAndroid Build Coastguard Worker type.subType.tsFilterType(DemuxTsFilterType::AUDIO); 676*4d7e907cSAndroid Build Coastguard Worker settings.ts().filterSettings.av(readAvFilterSettings(filterConfig)); 677*4d7e907cSAndroid Build Coastguard Worker break; 678*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::VIDEO: 679*4d7e907cSAndroid Build Coastguard Worker type.subType.tsFilterType(DemuxTsFilterType::VIDEO); 680*4d7e907cSAndroid Build Coastguard Worker settings.ts().filterSettings.av(readAvFilterSettings(filterConfig)); 681*4d7e907cSAndroid Build Coastguard Worker break; 682*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::RECORD: 683*4d7e907cSAndroid Build Coastguard Worker type.subType.tsFilterType(DemuxTsFilterType::RECORD); 684*4d7e907cSAndroid Build Coastguard Worker settings.ts().filterSettings.record(readRecordFilterSettings(filterConfig)); 685*4d7e907cSAndroid Build Coastguard Worker break; 686*4d7e907cSAndroid Build Coastguard Worker default: 687*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] ts subtype is not supported"); 688*4d7e907cSAndroid Build Coastguard Worker return false; 689*4d7e907cSAndroid Build Coastguard Worker } 690*4d7e907cSAndroid Build Coastguard Worker if (filterConfig.hasPid()) { 691*4d7e907cSAndroid Build Coastguard Worker settings.ts().tpid = static_cast<uint32_t>(filterConfig.getPid()); 692*4d7e907cSAndroid Build Coastguard Worker } 693*4d7e907cSAndroid Build Coastguard Worker break; 694*4d7e907cSAndroid Build Coastguard Worker } 695*4d7e907cSAndroid Build Coastguard Worker case FilterMainTypeEnum::MMTP: { 696*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] filter main type is mmtp"); 697*4d7e907cSAndroid Build Coastguard Worker type.mainType = DemuxFilterMainType::MMTP; 698*4d7e907cSAndroid Build Coastguard Worker switch (subType) { 699*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::UNDEFINED: 700*4d7e907cSAndroid Build Coastguard Worker type.subType.mmtpFilterType(DemuxMmtpFilterType::UNDEFINED); 701*4d7e907cSAndroid Build Coastguard Worker break; 702*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::SECTION: 703*4d7e907cSAndroid Build Coastguard Worker type.subType.mmtpFilterType(DemuxMmtpFilterType::SECTION); 704*4d7e907cSAndroid Build Coastguard Worker settings.mmtp().filterSettings.section( 705*4d7e907cSAndroid Build Coastguard Worker readSectionFilterSettings(filterConfig)); 706*4d7e907cSAndroid Build Coastguard Worker break; 707*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::PES: 708*4d7e907cSAndroid Build Coastguard Worker type.subType.mmtpFilterType(DemuxMmtpFilterType::PES); 709*4d7e907cSAndroid Build Coastguard Worker // TODO: b/182519645 support all the filter settings 710*4d7e907cSAndroid Build Coastguard Worker /*settings.mmtp().filterSettings.pesData( 711*4d7e907cSAndroid Build Coastguard Worker getPesFilterSettings(filterConfig));*/ 712*4d7e907cSAndroid Build Coastguard Worker break; 713*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::MMTP: 714*4d7e907cSAndroid Build Coastguard Worker type.subType.mmtpFilterType(DemuxMmtpFilterType::MMTP); 715*4d7e907cSAndroid Build Coastguard Worker settings.mmtp().filterSettings.noinit(); 716*4d7e907cSAndroid Build Coastguard Worker break; 717*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::AUDIO: 718*4d7e907cSAndroid Build Coastguard Worker type.subType.mmtpFilterType(DemuxMmtpFilterType::AUDIO); 719*4d7e907cSAndroid Build Coastguard Worker settings.mmtp().filterSettings.av(readAvFilterSettings(filterConfig)); 720*4d7e907cSAndroid Build Coastguard Worker break; 721*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::VIDEO: 722*4d7e907cSAndroid Build Coastguard Worker settings.mmtp().filterSettings.av(readAvFilterSettings(filterConfig)); 723*4d7e907cSAndroid Build Coastguard Worker break; 724*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::RECORD: 725*4d7e907cSAndroid Build Coastguard Worker type.subType.mmtpFilterType(DemuxMmtpFilterType::RECORD); 726*4d7e907cSAndroid Build Coastguard Worker settings.mmtp().filterSettings.record( 727*4d7e907cSAndroid Build Coastguard Worker readRecordFilterSettings(filterConfig)); 728*4d7e907cSAndroid Build Coastguard Worker break; 729*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::DOWNLOAD: 730*4d7e907cSAndroid Build Coastguard Worker type.subType.mmtpFilterType(DemuxMmtpFilterType::DOWNLOAD); 731*4d7e907cSAndroid Build Coastguard Worker // TODO: b/182519645 support all the filter settings 732*4d7e907cSAndroid Build Coastguard Worker /*settings.mmtp().filterSettings.download( 733*4d7e907cSAndroid Build Coastguard Worker getDownloadFilterSettings(filterConfig));*/ 734*4d7e907cSAndroid Build Coastguard Worker break; 735*4d7e907cSAndroid Build Coastguard Worker default: 736*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] mmtp subtype is not supported"); 737*4d7e907cSAndroid Build Coastguard Worker return false; 738*4d7e907cSAndroid Build Coastguard Worker } 739*4d7e907cSAndroid Build Coastguard Worker if (filterConfig.hasPid()) { 740*4d7e907cSAndroid Build Coastguard Worker settings.mmtp().mmtpPid = static_cast<uint32_t>(filterConfig.getPid()); 741*4d7e907cSAndroid Build Coastguard Worker } 742*4d7e907cSAndroid Build Coastguard Worker break; 743*4d7e907cSAndroid Build Coastguard Worker } 744*4d7e907cSAndroid Build Coastguard Worker case FilterMainTypeEnum::IP: { 745*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] filter main type is ip"); 746*4d7e907cSAndroid Build Coastguard Worker type.mainType = DemuxFilterMainType::IP; 747*4d7e907cSAndroid Build Coastguard Worker switch (subType) { 748*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::UNDEFINED: 749*4d7e907cSAndroid Build Coastguard Worker type.subType.ipFilterType(DemuxIpFilterType::UNDEFINED); 750*4d7e907cSAndroid Build Coastguard Worker break; 751*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::SECTION: 752*4d7e907cSAndroid Build Coastguard Worker type.subType.ipFilterType(DemuxIpFilterType::SECTION); 753*4d7e907cSAndroid Build Coastguard Worker settings.ip().filterSettings.section( 754*4d7e907cSAndroid Build Coastguard Worker readSectionFilterSettings(filterConfig)); 755*4d7e907cSAndroid Build Coastguard Worker break; 756*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::NTP: 757*4d7e907cSAndroid Build Coastguard Worker type.subType.ipFilterType(DemuxIpFilterType::NTP); 758*4d7e907cSAndroid Build Coastguard Worker settings.ip().filterSettings.noinit(); 759*4d7e907cSAndroid Build Coastguard Worker break; 760*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::IP: { 761*4d7e907cSAndroid Build Coastguard Worker DemuxIpFilterSettings ip{ 762*4d7e907cSAndroid Build Coastguard Worker .ipAddr = readIpAddress(filterConfig), 763*4d7e907cSAndroid Build Coastguard Worker }; 764*4d7e907cSAndroid Build Coastguard Worker ip.filterSettings.bPassthrough(readPassthroughSettings(filterConfig)); 765*4d7e907cSAndroid Build Coastguard Worker settings.ip(ip); 766*4d7e907cSAndroid Build Coastguard Worker break; 767*4d7e907cSAndroid Build Coastguard Worker } 768*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::IP_PAYLOAD: 769*4d7e907cSAndroid Build Coastguard Worker type.subType.ipFilterType(DemuxIpFilterType::IP_PAYLOAD); 770*4d7e907cSAndroid Build Coastguard Worker settings.ip().filterSettings.noinit(); 771*4d7e907cSAndroid Build Coastguard Worker break; 772*4d7e907cSAndroid Build Coastguard Worker case FilterSubTypeEnum::PAYLOAD_THROUGH: 773*4d7e907cSAndroid Build Coastguard Worker type.subType.ipFilterType(DemuxIpFilterType::PAYLOAD_THROUGH); 774*4d7e907cSAndroid Build Coastguard Worker settings.ip().filterSettings.noinit(); 775*4d7e907cSAndroid Build Coastguard Worker break; 776*4d7e907cSAndroid Build Coastguard Worker default: 777*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] mmtp subtype is not supported"); 778*4d7e907cSAndroid Build Coastguard Worker return false; 779*4d7e907cSAndroid Build Coastguard Worker } 780*4d7e907cSAndroid Build Coastguard Worker break; 781*4d7e907cSAndroid Build Coastguard Worker } 782*4d7e907cSAndroid Build Coastguard Worker default: 783*4d7e907cSAndroid Build Coastguard Worker // TODO: b/182519645 support all the filter configs 784*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] filter main type is not supported in dynamic config"); 785*4d7e907cSAndroid Build Coastguard Worker return false; 786*4d7e907cSAndroid Build Coastguard Worker } 787*4d7e907cSAndroid Build Coastguard Worker return true; 788*4d7e907cSAndroid Build Coastguard Worker } 789*4d7e907cSAndroid Build Coastguard Worker readIpAddressTunerTestingConfigReader1_0790*4d7e907cSAndroid Build Coastguard Worker static DemuxIpAddress readIpAddress(Filter filterConfig) { 791*4d7e907cSAndroid Build Coastguard Worker DemuxIpAddress ipAddress; 792*4d7e907cSAndroid Build Coastguard Worker if (!filterConfig.hasIpFilterConfig_optional()) { 793*4d7e907cSAndroid Build Coastguard Worker return ipAddress; 794*4d7e907cSAndroid Build Coastguard Worker } 795*4d7e907cSAndroid Build Coastguard Worker auto ipFilterConfig = filterConfig.getFirstIpFilterConfig_optional(); 796*4d7e907cSAndroid Build Coastguard Worker if (ipFilterConfig->hasSrcPort()) { 797*4d7e907cSAndroid Build Coastguard Worker ipAddress.srcPort = ipFilterConfig->getSrcPort(); 798*4d7e907cSAndroid Build Coastguard Worker } 799*4d7e907cSAndroid Build Coastguard Worker if (ipFilterConfig->hasDestPort()) { 800*4d7e907cSAndroid Build Coastguard Worker ipAddress.dstPort = ipFilterConfig->getDestPort(); 801*4d7e907cSAndroid Build Coastguard Worker } 802*4d7e907cSAndroid Build Coastguard Worker if (ipFilterConfig->getFirstSrcIpAddress()->getIsIpV4()) { 803*4d7e907cSAndroid Build Coastguard Worker memcpy(ipAddress.srcIpAddress.v4().data(), 804*4d7e907cSAndroid Build Coastguard Worker ipFilterConfig->getFirstSrcIpAddress()->getIp().data(), 4); 805*4d7e907cSAndroid Build Coastguard Worker } else { 806*4d7e907cSAndroid Build Coastguard Worker memcpy(ipAddress.srcIpAddress.v6().data(), 807*4d7e907cSAndroid Build Coastguard Worker ipFilterConfig->getFirstSrcIpAddress()->getIp().data(), 6); 808*4d7e907cSAndroid Build Coastguard Worker } 809*4d7e907cSAndroid Build Coastguard Worker if (ipFilterConfig->getFirstDestIpAddress()->getIsIpV4()) { 810*4d7e907cSAndroid Build Coastguard Worker memcpy(ipAddress.dstIpAddress.v4().data(), 811*4d7e907cSAndroid Build Coastguard Worker ipFilterConfig->getFirstDestIpAddress()->getIp().data(), 4); 812*4d7e907cSAndroid Build Coastguard Worker } else { 813*4d7e907cSAndroid Build Coastguard Worker memcpy(ipAddress.dstIpAddress.v6().data(), 814*4d7e907cSAndroid Build Coastguard Worker ipFilterConfig->getFirstDestIpAddress()->getIp().data(), 6); 815*4d7e907cSAndroid Build Coastguard Worker } 816*4d7e907cSAndroid Build Coastguard Worker return ipAddress; 817*4d7e907cSAndroid Build Coastguard Worker } 818*4d7e907cSAndroid Build Coastguard Worker readPassthroughSettingsTunerTestingConfigReader1_0819*4d7e907cSAndroid Build Coastguard Worker static bool readPassthroughSettings(Filter filterConfig) { 820*4d7e907cSAndroid Build Coastguard Worker if (!filterConfig.hasIpFilterConfig_optional()) { 821*4d7e907cSAndroid Build Coastguard Worker return false; 822*4d7e907cSAndroid Build Coastguard Worker } 823*4d7e907cSAndroid Build Coastguard Worker auto ipFilterConfig = filterConfig.getFirstIpFilterConfig_optional(); 824*4d7e907cSAndroid Build Coastguard Worker if (ipFilterConfig->hasDataPassthrough()) { 825*4d7e907cSAndroid Build Coastguard Worker return ipFilterConfig->getDataPassthrough(); 826*4d7e907cSAndroid Build Coastguard Worker } 827*4d7e907cSAndroid Build Coastguard Worker return false; 828*4d7e907cSAndroid Build Coastguard Worker } 829*4d7e907cSAndroid Build Coastguard Worker readSectionFilterSettingsTunerTestingConfigReader1_0830*4d7e907cSAndroid Build Coastguard Worker static DemuxFilterSectionSettings readSectionFilterSettings(Filter filterConfig) { 831*4d7e907cSAndroid Build Coastguard Worker DemuxFilterSectionSettings settings; 832*4d7e907cSAndroid Build Coastguard Worker if (!filterConfig.hasSectionFilterSettings_optional()) { 833*4d7e907cSAndroid Build Coastguard Worker return settings; 834*4d7e907cSAndroid Build Coastguard Worker } 835*4d7e907cSAndroid Build Coastguard Worker auto section = filterConfig.getFirstSectionFilterSettings_optional(); 836*4d7e907cSAndroid Build Coastguard Worker settings.isCheckCrc = section->getIsCheckCrc(); 837*4d7e907cSAndroid Build Coastguard Worker settings.isRepeat = section->getIsRepeat(); 838*4d7e907cSAndroid Build Coastguard Worker settings.isRaw = section->getIsRaw(); 839*4d7e907cSAndroid Build Coastguard Worker return settings; 840*4d7e907cSAndroid Build Coastguard Worker } 841*4d7e907cSAndroid Build Coastguard Worker readAvFilterSettingsTunerTestingConfigReader1_0842*4d7e907cSAndroid Build Coastguard Worker static DemuxFilterAvSettings readAvFilterSettings(Filter filterConfig) { 843*4d7e907cSAndroid Build Coastguard Worker DemuxFilterAvSettings settings; 844*4d7e907cSAndroid Build Coastguard Worker if (!filterConfig.hasAvFilterSettings_optional()) { 845*4d7e907cSAndroid Build Coastguard Worker return settings; 846*4d7e907cSAndroid Build Coastguard Worker } 847*4d7e907cSAndroid Build Coastguard Worker auto av = filterConfig.getFirstAvFilterSettings_optional(); 848*4d7e907cSAndroid Build Coastguard Worker settings.isPassthrough = av->getIsPassthrough(); 849*4d7e907cSAndroid Build Coastguard Worker return settings; 850*4d7e907cSAndroid Build Coastguard Worker } 851*4d7e907cSAndroid Build Coastguard Worker readRecordFilterSettingsTunerTestingConfigReader1_0852*4d7e907cSAndroid Build Coastguard Worker static DemuxFilterRecordSettings readRecordFilterSettings(Filter filterConfig) { 853*4d7e907cSAndroid Build Coastguard Worker DemuxFilterRecordSettings settings; 854*4d7e907cSAndroid Build Coastguard Worker if (!filterConfig.hasRecordFilterSettings_optional()) { 855*4d7e907cSAndroid Build Coastguard Worker return settings; 856*4d7e907cSAndroid Build Coastguard Worker } 857*4d7e907cSAndroid Build Coastguard Worker auto record = filterConfig.getFirstRecordFilterSettings_optional(); 858*4d7e907cSAndroid Build Coastguard Worker settings.tsIndexMask = static_cast<uint32_t>(record->getTsIndexMask()); 859*4d7e907cSAndroid Build Coastguard Worker settings.scIndexType = static_cast<DemuxRecordScIndexType>(record->getScIndexType()); 860*4d7e907cSAndroid Build Coastguard Worker return settings; 861*4d7e907cSAndroid Build Coastguard Worker } 862*4d7e907cSAndroid Build Coastguard Worker readPlaybackSettingsTunerTestingConfigReader1_0863*4d7e907cSAndroid Build Coastguard Worker static PlaybackSettings readPlaybackSettings(Dvr dvrConfig) { 864*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] dvr type is playback"); 865*4d7e907cSAndroid Build Coastguard Worker PlaybackSettings playbackSettings{ 866*4d7e907cSAndroid Build Coastguard Worker .statusMask = static_cast<uint8_t>(dvrConfig.getStatusMask()), 867*4d7e907cSAndroid Build Coastguard Worker .lowThreshold = static_cast<uint32_t>(dvrConfig.getLowThreshold()), 868*4d7e907cSAndroid Build Coastguard Worker .highThreshold = static_cast<uint32_t>(dvrConfig.getHighThreshold()), 869*4d7e907cSAndroid Build Coastguard Worker .dataFormat = static_cast<DataFormat>(dvrConfig.getDataFormat()), 870*4d7e907cSAndroid Build Coastguard Worker .packetSize = static_cast<uint8_t>(dvrConfig.getPacketSize()), 871*4d7e907cSAndroid Build Coastguard Worker }; 872*4d7e907cSAndroid Build Coastguard Worker return playbackSettings; 873*4d7e907cSAndroid Build Coastguard Worker } 874*4d7e907cSAndroid Build Coastguard Worker readRecordSettingsTunerTestingConfigReader1_0875*4d7e907cSAndroid Build Coastguard Worker static RecordSettings readRecordSettings(Dvr dvrConfig) { 876*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] dvr type is record"); 877*4d7e907cSAndroid Build Coastguard Worker RecordSettings recordSettings{ 878*4d7e907cSAndroid Build Coastguard Worker .statusMask = static_cast<uint8_t>(dvrConfig.getStatusMask()), 879*4d7e907cSAndroid Build Coastguard Worker .lowThreshold = static_cast<uint32_t>(dvrConfig.getLowThreshold()), 880*4d7e907cSAndroid Build Coastguard Worker .highThreshold = static_cast<uint32_t>(dvrConfig.getHighThreshold()), 881*4d7e907cSAndroid Build Coastguard Worker .dataFormat = static_cast<DataFormat>(dvrConfig.getDataFormat()), 882*4d7e907cSAndroid Build Coastguard Worker .packetSize = static_cast<uint8_t>(dvrConfig.getPacketSize()), 883*4d7e907cSAndroid Build Coastguard Worker }; 884*4d7e907cSAndroid Build Coastguard Worker return recordSettings; 885*4d7e907cSAndroid Build Coastguard Worker } 886*4d7e907cSAndroid Build Coastguard Worker getTunerConfigTunerTestingConfigReader1_0887*4d7e907cSAndroid Build Coastguard Worker static TunerConfiguration getTunerConfig() { return *read(mConfigFilePath.c_str()); } 888*4d7e907cSAndroid Build Coastguard Worker getDataFlowConfigurationTunerTestingConfigReader1_0889*4d7e907cSAndroid Build Coastguard Worker static DataFlowConfiguration getDataFlowConfiguration() { 890*4d7e907cSAndroid Build Coastguard Worker return *getTunerConfig().getFirstDataFlowConfiguration(); 891*4d7e907cSAndroid Build Coastguard Worker } 892*4d7e907cSAndroid Build Coastguard Worker }; 893