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 "TunerTestingConfigReaderV1_0.h" 19*4d7e907cSAndroid Build Coastguard Worker 20*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_1::AudioStreamType; 21*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_1::AvStreamType; 22*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_1::FrontendDvbsScanType; 23*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_1::FrontendDvbsSettingsExt1_1; 24*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_1::FrontendDvbtSettingsExt1_1; 25*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_1::FrontendSettingsExt1_1; 26*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_1::FrontendStatusExt1_1; 27*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_1::FrontendStatusTypeExt1_1; 28*4d7e907cSAndroid Build Coastguard Worker using android::hardware::tv::tuner::V1_1::VideoStreamType; 29*4d7e907cSAndroid Build Coastguard Worker 30*4d7e907cSAndroid Build Coastguard Worker struct FrontendConfig1_1 { 31*4d7e907cSAndroid Build Coastguard Worker FrontendConfig config1_0; 32*4d7e907cSAndroid Build Coastguard Worker bool canConnectToCiCam; 33*4d7e907cSAndroid Build Coastguard Worker uint32_t ciCamId; 34*4d7e907cSAndroid Build Coastguard Worker FrontendSettingsExt1_1 settingsExt1_1; 35*4d7e907cSAndroid Build Coastguard Worker vector<FrontendStatusTypeExt1_1> tuneStatusTypes; 36*4d7e907cSAndroid Build Coastguard Worker vector<FrontendStatusExt1_1> expectTuneStatuses; 37*4d7e907cSAndroid Build Coastguard Worker }; 38*4d7e907cSAndroid Build Coastguard Worker 39*4d7e907cSAndroid Build Coastguard Worker struct FilterConfig1_1 { 40*4d7e907cSAndroid Build Coastguard Worker FilterConfig config1_0; 41*4d7e907cSAndroid Build Coastguard Worker AvStreamType streamType; 42*4d7e907cSAndroid Build Coastguard Worker uint32_t ipCid; 43*4d7e907cSAndroid Build Coastguard Worker uint32_t monitorEventTypes; 44*4d7e907cSAndroid Build Coastguard Worker 45*4d7e907cSAndroid Build Coastguard Worker bool operator<(const FilterConfig& /*c*/) const { return false; } 46*4d7e907cSAndroid Build Coastguard Worker }; 47*4d7e907cSAndroid Build Coastguard Worker 48*4d7e907cSAndroid Build Coastguard Worker struct TunerTestingConfigReader1_1 { 49*4d7e907cSAndroid Build Coastguard Worker public: readFrontendConfig1_1TunerTestingConfigReader1_150*4d7e907cSAndroid Build Coastguard Worker static void readFrontendConfig1_1(map<string, FrontendConfig1_1>& frontendMap) { 51*4d7e907cSAndroid Build Coastguard Worker map<string, FrontendConfig> frontendMap1_0; 52*4d7e907cSAndroid Build Coastguard Worker TunerTestingConfigReader1_0::readFrontendConfig1_0(frontendMap1_0); 53*4d7e907cSAndroid Build Coastguard Worker for (auto it = frontendMap1_0.begin(); it != frontendMap1_0.end(); it++) { 54*4d7e907cSAndroid Build Coastguard Worker frontendMap[it->first].config1_0 = it->second; 55*4d7e907cSAndroid Build Coastguard Worker } 56*4d7e907cSAndroid Build Coastguard Worker 57*4d7e907cSAndroid Build Coastguard Worker auto hardwareConfig = TunerTestingConfigReader1_0::getHardwareConfig(); 58*4d7e907cSAndroid Build Coastguard Worker if (hardwareConfig.hasFrontends()) { 59*4d7e907cSAndroid Build Coastguard Worker // TODO: b/182519645 complete the tune status config 60*4d7e907cSAndroid Build Coastguard Worker vector<FrontendStatusTypeExt1_1> types; 61*4d7e907cSAndroid Build Coastguard Worker types.push_back(FrontendStatusTypeExt1_1::UEC); 62*4d7e907cSAndroid Build Coastguard Worker types.push_back(FrontendStatusTypeExt1_1::IS_MISO); 63*4d7e907cSAndroid Build Coastguard Worker vector<FrontendStatusExt1_1> statuses; 64*4d7e907cSAndroid Build Coastguard Worker FrontendStatusExt1_1 status; 65*4d7e907cSAndroid Build Coastguard Worker status.uec(4); 66*4d7e907cSAndroid Build Coastguard Worker statuses.push_back(status); 67*4d7e907cSAndroid Build Coastguard Worker status.isMiso(true); 68*4d7e907cSAndroid Build Coastguard Worker statuses.push_back(status); 69*4d7e907cSAndroid Build Coastguard Worker 70*4d7e907cSAndroid Build Coastguard Worker auto frontends = *hardwareConfig.getFirstFrontends(); 71*4d7e907cSAndroid Build Coastguard Worker 72*4d7e907cSAndroid Build Coastguard Worker for (auto feConfig : frontends.getFrontend()) { 73*4d7e907cSAndroid Build Coastguard Worker string id = feConfig.getId(); 74*4d7e907cSAndroid Build Coastguard Worker switch (feConfig.getType()) { 75*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::DVBS: 76*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].settingsExt1_1.settingExt.dvbs( 77*4d7e907cSAndroid Build Coastguard Worker readDvbsFrontendSettings1_1(feConfig)); 78*4d7e907cSAndroid Build Coastguard Worker break; 79*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::DVBT: { 80*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].settingsExt1_1.settingExt.dvbt( 81*4d7e907cSAndroid Build Coastguard Worker readDvbtFrontendSettings1_1(feConfig)); 82*4d7e907cSAndroid Build Coastguard Worker break; 83*4d7e907cSAndroid Build Coastguard Worker } 84*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::DTMB: 85*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].config1_0.type = static_cast<FrontendType>( 86*4d7e907cSAndroid Build Coastguard Worker android::hardware::tv::tuner::V1_1::FrontendType::DTMB); 87*4d7e907cSAndroid Build Coastguard Worker break; 88*4d7e907cSAndroid Build Coastguard Worker case FrontendTypeEnum::UNKNOWN: 89*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] invalid frontend type"); 90*4d7e907cSAndroid Build Coastguard Worker return; 91*4d7e907cSAndroid Build Coastguard Worker default: 92*4d7e907cSAndroid Build Coastguard Worker ALOGW("[ConfigReader] fe already handled in 1_0 reader."); 93*4d7e907cSAndroid Build Coastguard Worker break; 94*4d7e907cSAndroid Build Coastguard Worker } 95*4d7e907cSAndroid Build Coastguard Worker if (feConfig.hasEndFrequency()) { 96*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].settingsExt1_1.endFrequency = 97*4d7e907cSAndroid Build Coastguard Worker (uint32_t)feConfig.getEndFrequency(); 98*4d7e907cSAndroid Build Coastguard Worker } 99*4d7e907cSAndroid Build Coastguard Worker // TODO: b/182519645 complete the tune status config 100*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].tuneStatusTypes = types; 101*4d7e907cSAndroid Build Coastguard Worker frontendMap[id].expectTuneStatuses = statuses; 102*4d7e907cSAndroid Build Coastguard Worker getCiCamInfo(feConfig, frontendMap[id].canConnectToCiCam, frontendMap[id].ciCamId); 103*4d7e907cSAndroid Build Coastguard Worker } 104*4d7e907cSAndroid Build Coastguard Worker } 105*4d7e907cSAndroid Build Coastguard Worker } 106*4d7e907cSAndroid Build Coastguard Worker readFilterConfig1_1TunerTestingConfigReader1_1107*4d7e907cSAndroid Build Coastguard Worker static void readFilterConfig1_1(map<string, FilterConfig1_1>& filterMap) { 108*4d7e907cSAndroid Build Coastguard Worker map<string, FilterConfig> filterMap1_0; 109*4d7e907cSAndroid Build Coastguard Worker TunerTestingConfigReader1_0::readFilterConfig1_0(filterMap1_0); 110*4d7e907cSAndroid Build Coastguard Worker for (auto it = filterMap1_0.begin(); it != filterMap1_0.end(); it++) { 111*4d7e907cSAndroid Build Coastguard Worker filterMap[it->first].config1_0 = it->second; 112*4d7e907cSAndroid Build Coastguard Worker } 113*4d7e907cSAndroid Build Coastguard Worker auto hardwareConfig = TunerTestingConfigReader1_0::getHardwareConfig(); 114*4d7e907cSAndroid Build Coastguard Worker if (hardwareConfig.hasFilters()) { 115*4d7e907cSAndroid Build Coastguard Worker auto filters = *hardwareConfig.getFirstFilters(); 116*4d7e907cSAndroid Build Coastguard Worker for (auto filterConfig : filters.getFilter()) { 117*4d7e907cSAndroid Build Coastguard Worker string id = filterConfig.getId(); 118*4d7e907cSAndroid Build Coastguard Worker if (filterConfig.hasMonitorEventTypes()) { 119*4d7e907cSAndroid Build Coastguard Worker filterMap[id].monitorEventTypes = (uint32_t)filterConfig.getMonitorEventTypes(); 120*4d7e907cSAndroid Build Coastguard Worker } 121*4d7e907cSAndroid Build Coastguard Worker if (filterConfig.hasAvFilterSettings_optional()) { 122*4d7e907cSAndroid Build Coastguard Worker AvStreamType type; 123*4d7e907cSAndroid Build Coastguard Worker auto av = filterConfig.getFirstAvFilterSettings_optional(); 124*4d7e907cSAndroid Build Coastguard Worker if (av->hasAudioStreamType_optional()) { 125*4d7e907cSAndroid Build Coastguard Worker type.audio(static_cast<AudioStreamType>(av->getAudioStreamType_optional())); 126*4d7e907cSAndroid Build Coastguard Worker filterMap[id].streamType = type; 127*4d7e907cSAndroid Build Coastguard Worker } 128*4d7e907cSAndroid Build Coastguard Worker if (av->hasVideoStreamType_optional()) { 129*4d7e907cSAndroid Build Coastguard Worker type.video(static_cast<VideoStreamType>(av->getVideoStreamType_optional())); 130*4d7e907cSAndroid Build Coastguard Worker filterMap[id].streamType = type; 131*4d7e907cSAndroid Build Coastguard Worker } 132*4d7e907cSAndroid Build Coastguard Worker } 133*4d7e907cSAndroid Build Coastguard Worker if (filterConfig.hasIpFilterConfig_optional()) { 134*4d7e907cSAndroid Build Coastguard Worker auto ip = filterConfig.getFirstIpFilterConfig_optional(); 135*4d7e907cSAndroid Build Coastguard Worker if (ip->hasIpCid()) { 136*4d7e907cSAndroid Build Coastguard Worker filterMap[id].ipCid = ip->getIpCid(); 137*4d7e907cSAndroid Build Coastguard Worker } 138*4d7e907cSAndroid Build Coastguard Worker } 139*4d7e907cSAndroid Build Coastguard Worker } 140*4d7e907cSAndroid Build Coastguard Worker } 141*4d7e907cSAndroid Build Coastguard Worker } 142*4d7e907cSAndroid Build Coastguard Worker 143*4d7e907cSAndroid Build Coastguard Worker private: getCiCamInfoTunerTestingConfigReader1_1144*4d7e907cSAndroid Build Coastguard Worker static void getCiCamInfo(Frontend feConfig, bool& canConnectToCiCam, uint32_t& ciCamId) { 145*4d7e907cSAndroid Build Coastguard Worker if (!feConfig.hasConnectToCicamId()) { 146*4d7e907cSAndroid Build Coastguard Worker canConnectToCiCam = false; 147*4d7e907cSAndroid Build Coastguard Worker ciCamId = -1; 148*4d7e907cSAndroid Build Coastguard Worker return; 149*4d7e907cSAndroid Build Coastguard Worker } 150*4d7e907cSAndroid Build Coastguard Worker canConnectToCiCam = true; 151*4d7e907cSAndroid Build Coastguard Worker ciCamId = static_cast<uint32_t>(feConfig.getConnectToCicamId()); 152*4d7e907cSAndroid Build Coastguard Worker } 153*4d7e907cSAndroid Build Coastguard Worker readDvbsFrontendSettings1_1TunerTestingConfigReader1_1154*4d7e907cSAndroid Build Coastguard Worker static FrontendDvbsSettingsExt1_1 readDvbsFrontendSettings1_1(Frontend feConfig) { 155*4d7e907cSAndroid Build Coastguard Worker FrontendDvbsSettingsExt1_1 dvbsSettings; 156*4d7e907cSAndroid Build Coastguard Worker if (!feConfig.hasDvbsFrontendSettings_optional()) { 157*4d7e907cSAndroid Build Coastguard Worker return dvbsSettings; 158*4d7e907cSAndroid Build Coastguard Worker } 159*4d7e907cSAndroid Build Coastguard Worker auto dvbs = feConfig.getFirstDvbsFrontendSettings_optional(); 160*4d7e907cSAndroid Build Coastguard Worker if (dvbs->hasScanType()) { 161*4d7e907cSAndroid Build Coastguard Worker dvbsSettings.scanType = static_cast<FrontendDvbsScanType>(dvbs->getScanType()); 162*4d7e907cSAndroid Build Coastguard Worker } 163*4d7e907cSAndroid Build Coastguard Worker if (dvbs->hasIsDiseqcRxMessage()) { 164*4d7e907cSAndroid Build Coastguard Worker dvbsSettings.isDiseqcRxMessage = dvbs->getIsDiseqcRxMessage(); 165*4d7e907cSAndroid Build Coastguard Worker } 166*4d7e907cSAndroid Build Coastguard Worker return dvbsSettings; 167*4d7e907cSAndroid Build Coastguard Worker } 168*4d7e907cSAndroid Build Coastguard Worker readDvbtFrontendSettings1_1TunerTestingConfigReader1_1169*4d7e907cSAndroid Build Coastguard Worker static FrontendDvbtSettingsExt1_1 readDvbtFrontendSettings1_1(Frontend feConfig) { 170*4d7e907cSAndroid Build Coastguard Worker FrontendDvbtSettingsExt1_1 dvbtSettings; 171*4d7e907cSAndroid Build Coastguard Worker if (!feConfig.hasDvbtFrontendSettings_optional()) { 172*4d7e907cSAndroid Build Coastguard Worker return dvbtSettings; 173*4d7e907cSAndroid Build Coastguard Worker } 174*4d7e907cSAndroid Build Coastguard Worker auto dvbt = feConfig.getFirstDvbtFrontendSettings_optional(); 175*4d7e907cSAndroid Build Coastguard Worker auto trans = dvbt->getTransmissionMode(); 176*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.transmissionMode = 177*4d7e907cSAndroid Build Coastguard Worker static_cast<android::hardware::tv::tuner::V1_1::FrontendDvbtTransmissionMode>( 178*4d7e907cSAndroid Build Coastguard Worker trans); 179*4d7e907cSAndroid Build Coastguard Worker if (dvbt->hasConstellation()) { 180*4d7e907cSAndroid Build Coastguard Worker dvbtSettings.constellation = 181*4d7e907cSAndroid Build Coastguard Worker static_cast<android::hardware::tv::tuner::V1_1::FrontendDvbtConstellation>( 182*4d7e907cSAndroid Build Coastguard Worker dvbt->getConstellation()); 183*4d7e907cSAndroid Build Coastguard Worker } 184*4d7e907cSAndroid Build Coastguard Worker return dvbtSettings; 185*4d7e907cSAndroid Build Coastguard Worker } 186*4d7e907cSAndroid Build Coastguard Worker };