xref: /aosp_15_r20/hardware/interfaces/tv/tuner/config/TunerTestingConfigReaderV1_1.h (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright 2021 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker 
17*4d7e907cSAndroid Build Coastguard Worker #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 };