Hongguang | 093c5f3 | 2021-08-09 19:46:34 -0700 | [diff] [blame^] | 1 | /** |
| 2 | * Copyright 2021, The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | //#define LOG_NDEBUG 0 |
| 18 | #define LOG_TAG "TunerHidlFrontend" |
| 19 | |
| 20 | #include "TunerHidlFrontend.h" |
| 21 | |
| 22 | #include <aidl/android/hardware/tv/tuner/Result.h> |
| 23 | |
| 24 | #include "TunerHidlLnb.h" |
| 25 | |
| 26 | using ::aidl::android::hardware::tv::tuner::FrontendAnalogSettings; |
| 27 | using ::aidl::android::hardware::tv::tuner::FrontendAnalogSifStandard; |
| 28 | using ::aidl::android::hardware::tv::tuner::FrontendAnalogType; |
| 29 | using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Bandwidth; |
| 30 | using ::aidl::android::hardware::tv::tuner::FrontendAtsc3CodeRate; |
| 31 | using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Fec; |
| 32 | using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Modulation; |
| 33 | using ::aidl::android::hardware::tv::tuner::FrontendAtsc3PlpSettings; |
| 34 | using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Settings; |
| 35 | using ::aidl::android::hardware::tv::tuner::FrontendAtsc3TimeInterleaveMode; |
| 36 | using ::aidl::android::hardware::tv::tuner::FrontendAtscModulation; |
| 37 | using ::aidl::android::hardware::tv::tuner::FrontendAtscSettings; |
| 38 | using ::aidl::android::hardware::tv::tuner::FrontendBandwidth; |
| 39 | using ::aidl::android::hardware::tv::tuner::FrontendCableTimeInterleaveMode; |
| 40 | using ::aidl::android::hardware::tv::tuner::FrontendDtmbBandwidth; |
| 41 | using ::aidl::android::hardware::tv::tuner::FrontendDtmbGuardInterval; |
| 42 | using ::aidl::android::hardware::tv::tuner::FrontendDtmbModulation; |
| 43 | using ::aidl::android::hardware::tv::tuner::FrontendDtmbSettings; |
| 44 | using ::aidl::android::hardware::tv::tuner::FrontendDtmbTimeInterleaveMode; |
| 45 | using ::aidl::android::hardware::tv::tuner::FrontendDtmbTransmissionMode; |
| 46 | using ::aidl::android::hardware::tv::tuner::FrontendDvbcAnnex; |
| 47 | using ::aidl::android::hardware::tv::tuner::FrontendDvbcBandwidth; |
| 48 | using ::aidl::android::hardware::tv::tuner::FrontendDvbcModulation; |
| 49 | using ::aidl::android::hardware::tv::tuner::FrontendDvbcSettings; |
| 50 | using ::aidl::android::hardware::tv::tuner::FrontendDvbsModulation; |
| 51 | using ::aidl::android::hardware::tv::tuner::FrontendDvbsRolloff; |
| 52 | using ::aidl::android::hardware::tv::tuner::FrontendDvbsSettings; |
| 53 | using ::aidl::android::hardware::tv::tuner::FrontendDvbsStandard; |
| 54 | using ::aidl::android::hardware::tv::tuner::FrontendDvbtBandwidth; |
| 55 | using ::aidl::android::hardware::tv::tuner::FrontendDvbtConstellation; |
| 56 | using ::aidl::android::hardware::tv::tuner::FrontendDvbtGuardInterval; |
| 57 | using ::aidl::android::hardware::tv::tuner::FrontendDvbtHierarchy; |
| 58 | using ::aidl::android::hardware::tv::tuner::FrontendDvbtSettings; |
| 59 | using ::aidl::android::hardware::tv::tuner::FrontendDvbtStandard; |
| 60 | using ::aidl::android::hardware::tv::tuner::FrontendDvbtTransmissionMode; |
| 61 | using ::aidl::android::hardware::tv::tuner::FrontendGuardInterval; |
| 62 | using ::aidl::android::hardware::tv::tuner::FrontendInnerFec; |
| 63 | using ::aidl::android::hardware::tv::tuner::FrontendInterleaveMode; |
| 64 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbs3Modulation; |
| 65 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbs3Rolloff; |
| 66 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbs3Settings; |
| 67 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbsModulation; |
| 68 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbsRolloff; |
| 69 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbsSettings; |
| 70 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbtBandwidth; |
| 71 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbtCoderate; |
| 72 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbtGuardInterval; |
| 73 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbtMode; |
| 74 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbtModulation; |
| 75 | using ::aidl::android::hardware::tv::tuner::FrontendIsdbtSettings; |
| 76 | using ::aidl::android::hardware::tv::tuner::FrontendModulation; |
| 77 | using ::aidl::android::hardware::tv::tuner::FrontendModulationStatus; |
| 78 | using ::aidl::android::hardware::tv::tuner::FrontendRollOff; |
| 79 | using ::aidl::android::hardware::tv::tuner::FrontendScanAtsc3PlpInfo; |
| 80 | using ::aidl::android::hardware::tv::tuner::FrontendScanMessageStandard; |
| 81 | using ::aidl::android::hardware::tv::tuner::FrontendSpectralInversion; |
| 82 | using ::aidl::android::hardware::tv::tuner::FrontendStatusAtsc3PlpInfo; |
| 83 | using ::aidl::android::hardware::tv::tuner::FrontendTransmissionMode; |
| 84 | using ::aidl::android::hardware::tv::tuner::Result; |
| 85 | |
| 86 | using HidlFrontendStatusAtsc3PlpInfo = |
| 87 | ::aidl::android::hardware::tv::tuner::FrontendStatusAtsc3PlpInfo; |
| 88 | using HidlFrontendAnalogSifStandard = |
| 89 | ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard; |
| 90 | using HidlFrontendAnalogType = ::android::hardware::tv::tuner::V1_0::FrontendAnalogType; |
| 91 | using HidlFrontendAtscModulation = ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation; |
| 92 | using HidlFrontendAtsc3Bandwidth = ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Bandwidth; |
| 93 | using HidlFrontendAtsc3CodeRate = ::android::hardware::tv::tuner::V1_0::FrontendAtsc3CodeRate; |
| 94 | using HidlFrontendAtsc3DemodOutputFormat = |
| 95 | ::android::hardware::tv::tuner::V1_0::FrontendAtsc3DemodOutputFormat; |
| 96 | using HidlFrontendAtsc3Fec = ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Fec; |
| 97 | using HidlFrontendAtsc3Modulation = ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Modulation; |
| 98 | using HidlFrontendAtsc3TimeInterleaveMode = |
| 99 | ::android::hardware::tv::tuner::V1_0::FrontendAtsc3TimeInterleaveMode; |
| 100 | using HidlFrontendDvbcAnnex = ::android::hardware::tv::tuner::V1_0::FrontendDvbcAnnex; |
| 101 | using HidlFrontendDvbcModulation = ::android::hardware::tv::tuner::V1_0::FrontendDvbcModulation; |
| 102 | using HidlFrontendDvbcOuterFec = ::android::hardware::tv::tuner::V1_0::FrontendDvbcOuterFec; |
| 103 | using HidlFrontendDvbcSpectralInversion = |
| 104 | ::android::hardware::tv::tuner::V1_0::FrontendDvbcSpectralInversion; |
| 105 | using HidlFrontendDvbsModulation = ::android::hardware::tv::tuner::V1_0::FrontendDvbsModulation; |
| 106 | using HidlFrontendDvbsPilot = ::android::hardware::tv::tuner::V1_0::FrontendDvbsPilot; |
| 107 | using HidlFrontendDvbsRolloff = ::android::hardware::tv::tuner::V1_0::FrontendDvbsRolloff; |
| 108 | using HidlFrontendDvbsSettings = ::android::hardware::tv::tuner::V1_0::FrontendDvbsSettings; |
| 109 | using HidlFrontendDvbsStandard = ::android::hardware::tv::tuner::V1_0::FrontendDvbsStandard; |
| 110 | using HidlFrontendDvbsVcmMode = ::android::hardware::tv::tuner::V1_0::FrontendDvbsVcmMode; |
| 111 | using HidlFrontendDvbtBandwidth = ::android::hardware::tv::tuner::V1_0::FrontendDvbtBandwidth; |
| 112 | using HidlFrontendDvbtCoderate = ::android::hardware::tv::tuner::V1_0::FrontendDvbtCoderate; |
| 113 | using HidlFrontendDvbtConstellation = |
| 114 | ::android::hardware::tv::tuner::V1_0::FrontendDvbtConstellation; |
| 115 | using HidlFrontendDvbtGuardInterval = |
| 116 | ::android::hardware::tv::tuner::V1_0::FrontendDvbtGuardInterval; |
| 117 | using HidlFrontendDvbtHierarchy = ::android::hardware::tv::tuner::V1_0::FrontendDvbtHierarchy; |
| 118 | using HidlFrontendDvbtPlpMode = ::android::hardware::tv::tuner::V1_0::FrontendDvbtPlpMode; |
| 119 | using HidlFrontendDvbtSettings = ::android::hardware::tv::tuner::V1_0::FrontendDvbtSettings; |
| 120 | using HidlFrontendDvbtStandard = ::android::hardware::tv::tuner::V1_0::FrontendDvbtStandard; |
| 121 | using HidlFrontendDvbtTransmissionMode = |
| 122 | ::android::hardware::tv::tuner::V1_0::FrontendDvbtTransmissionMode; |
| 123 | using HidlFrontendInnerFec = ::android::hardware::tv::tuner::V1_0::FrontendInnerFec; |
| 124 | using HidlFrontendIsdbs3Coderate = ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Coderate; |
| 125 | using HidlFrontendIsdbs3Modulation = ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Modulation; |
| 126 | using HidlFrontendIsdbs3Rolloff = ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Rolloff; |
| 127 | using HidlFrontendIsdbs3Settings = ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Settings; |
| 128 | using HidlFrontendIsdbsCoderate = ::android::hardware::tv::tuner::V1_0::FrontendIsdbsCoderate; |
| 129 | using HidlFrontendIsdbsModulation = ::android::hardware::tv::tuner::V1_0::FrontendIsdbsModulation; |
| 130 | using HidlFrontendIsdbsRolloff = ::android::hardware::tv::tuner::V1_0::FrontendIsdbsRolloff; |
| 131 | using HidlFrontendIsdbsSettings = ::android::hardware::tv::tuner::V1_0::FrontendIsdbsSettings; |
| 132 | using HidlFrontendIsdbsStreamIdType = |
| 133 | ::android::hardware::tv::tuner::V1_0::FrontendIsdbsStreamIdType; |
| 134 | using HidlFrontendIsdbtBandwidth = ::android::hardware::tv::tuner::V1_0::FrontendIsdbtBandwidth; |
| 135 | using HidlFrontendIsdbtCoderate = ::android::hardware::tv::tuner::V1_0::FrontendIsdbtCoderate; |
| 136 | using HidlFrontendIsdbtGuardInterval = |
| 137 | ::android::hardware::tv::tuner::V1_0::FrontendIsdbtGuardInterval; |
| 138 | using HidlFrontendIsdbtMode = ::android::hardware::tv::tuner::V1_0::FrontendIsdbtMode; |
| 139 | using HidlFrontendIsdbtModulation = ::android::hardware::tv::tuner::V1_0::FrontendIsdbtModulation; |
| 140 | using HidlFrontendIsdbtSettings = ::android::hardware::tv::tuner::V1_0::FrontendIsdbtSettings; |
| 141 | using HidlFrontendModulationStatus = ::android::hardware::tv::tuner::V1_0::FrontendModulationStatus; |
| 142 | using HidlFrontendScanAtsc3PlpInfo = ::android::hardware::tv::tuner::V1_0::FrontendScanAtsc3PlpInfo; |
| 143 | using HidlFrontendScanType = ::android::hardware::tv::tuner::V1_0::FrontendScanType; |
| 144 | using HidlFrontendStatusType = ::android::hardware::tv::tuner::V1_0::FrontendStatusType; |
| 145 | using HidlResult = ::android::hardware::tv::tuner::V1_0::Result; |
| 146 | using HidlFrontendAnalogAftFlag = ::android::hardware::tv::tuner::V1_1::FrontendAnalogAftFlag; |
| 147 | using HidlFrontendBandwidth = ::android::hardware::tv::tuner::V1_1::FrontendBandwidth; |
| 148 | using HidlFrontendCableTimeInterleaveMode = |
| 149 | ::android::hardware::tv::tuner::V1_1::FrontendCableTimeInterleaveMode; |
| 150 | using HidlFrontendDvbcBandwidth = ::android::hardware::tv::tuner::V1_1::FrontendDvbcBandwidth; |
| 151 | using HidlFrontendDtmbBandwidth = ::android::hardware::tv::tuner::V1_1::FrontendDtmbBandwidth; |
| 152 | using HidlFrontendDtmbCodeRate = ::android::hardware::tv::tuner::V1_1::FrontendDtmbCodeRate; |
| 153 | using HidlFrontendDtmbGuardInterval = |
| 154 | ::android::hardware::tv::tuner::V1_1::FrontendDtmbGuardInterval; |
| 155 | using HidlFrontendDtmbModulation = ::android::hardware::tv::tuner::V1_1::FrontendDtmbModulation; |
| 156 | using HidlFrontendDtmbTimeInterleaveMode = |
| 157 | ::android::hardware::tv::tuner::V1_1::FrontendDtmbTimeInterleaveMode; |
| 158 | using HidlFrontendDtmbTransmissionMode = |
| 159 | ::android::hardware::tv::tuner::V1_1::FrontendDtmbTransmissionMode; |
| 160 | using HidlFrontendDvbsScanType = ::android::hardware::tv::tuner::V1_1::FrontendDvbsScanType; |
| 161 | using HidlFrontendGuardInterval = ::android::hardware::tv::tuner::V1_1::FrontendGuardInterval; |
| 162 | using HidlFrontendInterleaveMode = ::android::hardware::tv::tuner::V1_1::FrontendInterleaveMode; |
| 163 | using HidlFrontendModulation = ::android::hardware::tv::tuner::V1_1::FrontendModulation; |
| 164 | using HidlFrontendRollOff = ::android::hardware::tv::tuner::V1_1::FrontendRollOff; |
| 165 | using HidlFrontendTransmissionMode = ::android::hardware::tv::tuner::V1_1::FrontendTransmissionMode; |
| 166 | using HidlFrontendSpectralInversion = |
| 167 | ::android::hardware::tv::tuner::V1_1::FrontendSpectralInversion; |
| 168 | using HidlFrontendStatusTypeExt1_1 = ::android::hardware::tv::tuner::V1_1::FrontendStatusTypeExt1_1; |
| 169 | |
| 170 | using namespace std; |
| 171 | |
| 172 | namespace aidl { |
| 173 | namespace android { |
| 174 | namespace media { |
| 175 | namespace tv { |
| 176 | namespace tuner { |
| 177 | |
| 178 | TunerHidlFrontend::TunerHidlFrontend(sp<HidlIFrontend> frontend, int id) { |
| 179 | mFrontend = frontend; |
| 180 | mFrontend_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFrontend); |
| 181 | mId = id; |
| 182 | } |
| 183 | |
| 184 | TunerHidlFrontend::~TunerHidlFrontend() { |
| 185 | mFrontend = nullptr; |
| 186 | mFrontend_1_1 = nullptr; |
| 187 | mId = -1; |
| 188 | } |
| 189 | |
| 190 | ::ndk::ScopedAStatus TunerHidlFrontend::setCallback( |
| 191 | const shared_ptr<ITunerFrontendCallback>& tunerFrontendCallback) { |
| 192 | if (mFrontend == nullptr) { |
| 193 | ALOGE("IFrontend is not initialized"); |
| 194 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 195 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 196 | } |
| 197 | |
| 198 | if (tunerFrontendCallback == nullptr) { |
| 199 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 200 | static_cast<int32_t>(Result::INVALID_ARGUMENT)); |
| 201 | } |
| 202 | |
| 203 | sp<HidlIFrontendCallback> frontendCallback = new FrontendCallback(tunerFrontendCallback); |
| 204 | HidlResult status = mFrontend->setCallback(frontendCallback); |
| 205 | if (status == HidlResult::SUCCESS) { |
| 206 | return ::ndk::ScopedAStatus::ok(); |
| 207 | } |
| 208 | |
| 209 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); |
| 210 | } |
| 211 | |
| 212 | ::ndk::ScopedAStatus TunerHidlFrontend::tune(const FrontendSettings& settings) { |
| 213 | if (mFrontend == nullptr) { |
| 214 | ALOGE("IFrontend is not initialized"); |
| 215 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 216 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 217 | } |
| 218 | |
| 219 | HidlResult status; |
| 220 | HidlFrontendSettings frontendSettings; |
| 221 | HidlFrontendSettingsExt1_1 frontendSettingsExt; |
| 222 | getHidlFrontendSettings(settings, frontendSettings, frontendSettingsExt); |
| 223 | if (mFrontend_1_1 != nullptr) { |
| 224 | status = mFrontend_1_1->tune_1_1(frontendSettings, frontendSettingsExt); |
| 225 | } else { |
| 226 | status = mFrontend->tune(frontendSettings); |
| 227 | } |
| 228 | if (status == HidlResult::SUCCESS) { |
| 229 | return ::ndk::ScopedAStatus::ok(); |
| 230 | } |
| 231 | |
| 232 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); |
| 233 | } |
| 234 | |
| 235 | ::ndk::ScopedAStatus TunerHidlFrontend::stopTune() { |
| 236 | if (mFrontend == nullptr) { |
| 237 | ALOGD("IFrontend is not initialized"); |
| 238 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 239 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 240 | } |
| 241 | |
| 242 | HidlResult status = mFrontend->stopTune(); |
| 243 | if (status == HidlResult::SUCCESS) { |
| 244 | return ::ndk::ScopedAStatus::ok(); |
| 245 | } |
| 246 | |
| 247 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); |
| 248 | } |
| 249 | |
| 250 | ::ndk::ScopedAStatus TunerHidlFrontend::scan(const FrontendSettings& settings, |
| 251 | FrontendScanType frontendScanType) { |
| 252 | if (mFrontend == nullptr) { |
| 253 | ALOGD("IFrontend is not initialized"); |
| 254 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 255 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 256 | } |
| 257 | |
| 258 | HidlResult status; |
| 259 | HidlFrontendSettings frontendSettings; |
| 260 | HidlFrontendSettingsExt1_1 frontendSettingsExt; |
| 261 | getHidlFrontendSettings(settings, frontendSettings, frontendSettingsExt); |
| 262 | if (mFrontend_1_1 != nullptr) { |
| 263 | status = mFrontend_1_1->scan_1_1(frontendSettings, |
| 264 | static_cast<HidlFrontendScanType>(frontendScanType), |
| 265 | frontendSettingsExt); |
| 266 | } else { |
| 267 | status = mFrontend->scan(frontendSettings, |
| 268 | static_cast<HidlFrontendScanType>(frontendScanType)); |
| 269 | } |
| 270 | if (status == HidlResult::SUCCESS) { |
| 271 | return ::ndk::ScopedAStatus::ok(); |
| 272 | } |
| 273 | |
| 274 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); |
| 275 | } |
| 276 | |
| 277 | ::ndk::ScopedAStatus TunerHidlFrontend::stopScan() { |
| 278 | if (mFrontend == nullptr) { |
| 279 | ALOGD("IFrontend is not initialized"); |
| 280 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 281 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 282 | } |
| 283 | |
| 284 | HidlResult status = mFrontend->stopScan(); |
| 285 | if (status == HidlResult::SUCCESS) { |
| 286 | return ::ndk::ScopedAStatus::ok(); |
| 287 | } |
| 288 | |
| 289 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); |
| 290 | } |
| 291 | |
| 292 | ::ndk::ScopedAStatus TunerHidlFrontend::setLnb(const shared_ptr<ITunerLnb>& lnb) { |
| 293 | if (mFrontend == nullptr) { |
| 294 | ALOGD("IFrontend is not initialized"); |
| 295 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 296 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 297 | } |
| 298 | |
| 299 | if (lnb == nullptr) { |
| 300 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 301 | static_cast<int32_t>(Result::INVALID_ARGUMENT)); |
| 302 | } |
| 303 | |
| 304 | HidlResult status = mFrontend->setLnb(static_cast<TunerHidlLnb*>(lnb.get())->getId()); |
| 305 | if (status == HidlResult::SUCCESS) { |
| 306 | return ::ndk::ScopedAStatus::ok(); |
| 307 | } |
| 308 | |
| 309 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); |
| 310 | } |
| 311 | |
| 312 | ::ndk::ScopedAStatus TunerHidlFrontend::setLna(bool bEnable) { |
| 313 | if (mFrontend == nullptr) { |
| 314 | ALOGD("IFrontend is not initialized"); |
| 315 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 316 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 317 | } |
| 318 | |
| 319 | HidlResult status = mFrontend->setLna(bEnable); |
| 320 | if (status == HidlResult::SUCCESS) { |
| 321 | return ::ndk::ScopedAStatus::ok(); |
| 322 | } |
| 323 | |
| 324 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); |
| 325 | } |
| 326 | |
| 327 | ::ndk::ScopedAStatus TunerHidlFrontend::linkCiCamToFrontend(int32_t ciCamId, |
| 328 | int32_t* _aidl_return) { |
| 329 | if (mFrontend_1_1 == nullptr) { |
| 330 | ALOGD("IFrontend_1_1 is not initialized"); |
| 331 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 332 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 333 | } |
| 334 | |
| 335 | int ltsId; |
| 336 | HidlResult status; |
| 337 | mFrontend_1_1->linkCiCam(static_cast<uint32_t>(ciCamId), [&](HidlResult r, uint32_t id) { |
| 338 | status = r; |
| 339 | ltsId = id; |
| 340 | }); |
| 341 | |
| 342 | if (status == HidlResult::SUCCESS) { |
| 343 | *_aidl_return = ltsId; |
| 344 | return ::ndk::ScopedAStatus::ok(); |
| 345 | } |
| 346 | |
| 347 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); |
| 348 | } |
| 349 | |
| 350 | ::ndk::ScopedAStatus TunerHidlFrontend::unlinkCiCamToFrontend(int32_t ciCamId) { |
| 351 | if (mFrontend_1_1 == nullptr) { |
| 352 | ALOGD("IFrontend_1_1 is not initialized"); |
| 353 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 354 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 355 | } |
| 356 | |
| 357 | HidlResult status = mFrontend_1_1->unlinkCiCam(ciCamId); |
| 358 | if (status == HidlResult::SUCCESS) { |
| 359 | return ::ndk::ScopedAStatus::ok(); |
| 360 | } |
| 361 | |
| 362 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); |
| 363 | } |
| 364 | |
| 365 | ::ndk::ScopedAStatus TunerHidlFrontend::close() { |
| 366 | if (mFrontend == nullptr) { |
| 367 | ALOGD("IFrontend is not initialized"); |
| 368 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 369 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 370 | } |
| 371 | |
| 372 | HidlResult status = mFrontend->close(); |
| 373 | mFrontend = nullptr; |
| 374 | mFrontend_1_1 = nullptr; |
| 375 | |
| 376 | if (status != HidlResult::SUCCESS) { |
| 377 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); |
| 378 | } |
| 379 | |
| 380 | return ::ndk::ScopedAStatus::ok(); |
| 381 | } |
| 382 | |
| 383 | ::ndk::ScopedAStatus TunerHidlFrontend::getStatus(const vector<FrontendStatusType>& in_statusTypes, |
| 384 | vector<FrontendStatus>* _aidl_return) { |
| 385 | if (mFrontend == nullptr) { |
| 386 | ALOGD("IFrontend is not initialized"); |
| 387 | return ::ndk::ScopedAStatus::fromServiceSpecificError( |
| 388 | static_cast<int32_t>(Result::UNAVAILABLE)); |
| 389 | } |
| 390 | |
| 391 | HidlResult res; |
| 392 | vector<HidlFrontendStatus> status; |
| 393 | vector<HidlFrontendStatusExt1_1> statusExt; |
| 394 | vector<HidlFrontendStatusType> types; |
| 395 | vector<HidlFrontendStatusTypeExt1_1> typesExt; |
| 396 | for (auto s : in_statusTypes) { |
| 397 | if (static_cast<int32_t>(s) <= |
| 398 | static_cast<int32_t>(HidlFrontendStatusType::ATSC3_PLP_INFO)) { |
| 399 | types.push_back(static_cast<HidlFrontendStatusType>(s)); |
| 400 | } else { |
| 401 | typesExt.push_back(static_cast<HidlFrontendStatusTypeExt1_1>(s)); |
| 402 | } |
| 403 | } |
| 404 | |
| 405 | mFrontend->getStatus(types, [&](HidlResult r, const hidl_vec<HidlFrontendStatus>& ss) { |
| 406 | res = r; |
| 407 | for (auto s : ss) { |
| 408 | status.push_back(s); |
| 409 | } |
| 410 | }); |
| 411 | if (res != HidlResult::SUCCESS) { |
| 412 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(res)); |
| 413 | } |
| 414 | |
| 415 | if (mFrontend_1_1 != nullptr) { |
| 416 | mFrontend_1_1->getStatusExt1_1( |
| 417 | typesExt, [&](HidlResult r, const hidl_vec<HidlFrontendStatusExt1_1>& ss) { |
| 418 | res = r; |
| 419 | for (auto s : ss) { |
| 420 | statusExt.push_back(s); |
| 421 | } |
| 422 | }); |
| 423 | if (res != HidlResult::SUCCESS) { |
| 424 | return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(res)); |
| 425 | } |
| 426 | } |
| 427 | |
| 428 | getAidlFrontendStatus(status, statusExt, *_aidl_return); |
| 429 | return ::ndk::ScopedAStatus::ok(); |
| 430 | } |
| 431 | |
| 432 | ::ndk::ScopedAStatus TunerHidlFrontend::getFrontendId(int32_t* _aidl_return) { |
| 433 | *_aidl_return = mId; |
| 434 | return ::ndk::ScopedAStatus::ok(); |
| 435 | } |
| 436 | |
| 437 | /////////////// FrontendCallback /////////////////////// |
| 438 | Return<void> TunerHidlFrontend::FrontendCallback::onEvent(HidlFrontendEventType frontendEventType) { |
| 439 | ALOGV("FrontendCallback::onEvent, type=%d", frontendEventType); |
| 440 | mTunerFrontendCallback->onEvent(static_cast<FrontendEventType>(frontendEventType)); |
| 441 | return Void(); |
| 442 | } |
| 443 | |
| 444 | Return<void> TunerHidlFrontend::FrontendCallback::onScanMessage( |
| 445 | HidlFrontendScanMessageType type, const HidlFrontendScanMessage& message) { |
| 446 | ALOGV("FrontendCallback::onScanMessage, type=%d", type); |
| 447 | FrontendScanMessage scanMessage; |
| 448 | switch (type) { |
| 449 | case HidlFrontendScanMessageType::LOCKED: { |
| 450 | scanMessage.set<FrontendScanMessage::isLocked>(message.isLocked()); |
| 451 | break; |
| 452 | } |
| 453 | case HidlFrontendScanMessageType::END: { |
| 454 | scanMessage.set<FrontendScanMessage::isEnd>(message.isEnd()); |
| 455 | break; |
| 456 | } |
| 457 | case HidlFrontendScanMessageType::PROGRESS_PERCENT: { |
| 458 | scanMessage.set<FrontendScanMessage::progressPercent>(message.progressPercent()); |
| 459 | break; |
| 460 | } |
| 461 | case HidlFrontendScanMessageType::FREQUENCY: { |
| 462 | const vector<uint32_t>& f = message.frequencies(); |
| 463 | vector<int64_t> lf(begin(f), end(f)); |
| 464 | scanMessage.set<FrontendScanMessage::frequencies>(lf); |
| 465 | break; |
| 466 | } |
| 467 | case HidlFrontendScanMessageType::SYMBOL_RATE: { |
| 468 | const vector<uint32_t>& s = message.symbolRates(); |
| 469 | vector<int32_t> symbolRates(begin(s), end(s)); |
| 470 | scanMessage.set<FrontendScanMessage::symbolRates>(symbolRates); |
| 471 | break; |
| 472 | } |
| 473 | case HidlFrontendScanMessageType::HIERARCHY: { |
| 474 | scanMessage.set<FrontendScanMessage::hierarchy>( |
| 475 | static_cast<FrontendDvbtHierarchy>(message.hierarchy())); |
| 476 | break; |
| 477 | } |
| 478 | case HidlFrontendScanMessageType::ANALOG_TYPE: { |
| 479 | scanMessage.set<FrontendScanMessage::analogType>( |
| 480 | static_cast<FrontendAnalogType>(message.analogType())); |
| 481 | break; |
| 482 | } |
| 483 | case HidlFrontendScanMessageType::PLP_IDS: { |
| 484 | const vector<uint8_t>& p = message.plpIds(); |
| 485 | vector<int32_t> plpIds(begin(p), end(p)); |
| 486 | scanMessage.set<FrontendScanMessage::plpIds>(plpIds); |
| 487 | break; |
| 488 | } |
| 489 | case HidlFrontendScanMessageType::GROUP_IDS: { |
| 490 | const vector<uint8_t>& g = message.groupIds(); |
| 491 | vector<int32_t> groupIds(begin(g), end(g)); |
| 492 | scanMessage.set<FrontendScanMessage::groupIds>(groupIds); |
| 493 | break; |
| 494 | } |
| 495 | case HidlFrontendScanMessageType::INPUT_STREAM_IDS: { |
| 496 | const vector<uint16_t>& i = message.inputStreamIds(); |
| 497 | vector<int32_t> streamIds(begin(i), end(i)); |
| 498 | scanMessage.set<FrontendScanMessage::inputStreamIds>(streamIds); |
| 499 | break; |
| 500 | } |
| 501 | case HidlFrontendScanMessageType::STANDARD: { |
| 502 | const HidlFrontendScanMessage::Standard& std = message.std(); |
| 503 | FrontendScanMessageStandard standard; |
| 504 | if (std.getDiscriminator() == HidlFrontendScanMessage::Standard::hidl_discriminator::sStd) { |
| 505 | standard.set<FrontendScanMessageStandard::sStd>( |
| 506 | static_cast<FrontendDvbsStandard>(std.sStd())); |
| 507 | } else if (std.getDiscriminator() == |
| 508 | HidlFrontendScanMessage::Standard::hidl_discriminator::tStd) { |
| 509 | standard.set<FrontendScanMessageStandard::tStd>( |
| 510 | static_cast<FrontendDvbtStandard>(std.tStd())); |
| 511 | } else if (std.getDiscriminator() == |
| 512 | HidlFrontendScanMessage::Standard::hidl_discriminator::sifStd) { |
| 513 | standard.set<FrontendScanMessageStandard::sifStd>( |
| 514 | static_cast<FrontendAnalogSifStandard>(std.sifStd())); |
| 515 | } |
| 516 | scanMessage.set<FrontendScanMessage::std>(standard); |
| 517 | break; |
| 518 | } |
| 519 | case HidlFrontendScanMessageType::ATSC3_PLP_INFO: { |
| 520 | const vector<HidlFrontendScanAtsc3PlpInfo>& plpInfos = message.atsc3PlpInfos(); |
| 521 | vector<FrontendScanAtsc3PlpInfo> tunerPlpInfos; |
| 522 | for (int i = 0; i < plpInfos.size(); i++) { |
| 523 | FrontendScanAtsc3PlpInfo plpInfo{ |
| 524 | .plpId = static_cast<int32_t>(plpInfos[i].plpId), |
| 525 | .bLlsFlag = plpInfos[i].bLlsFlag, |
| 526 | }; |
| 527 | tunerPlpInfos.push_back(plpInfo); |
| 528 | } |
| 529 | scanMessage.set<FrontendScanMessage::atsc3PlpInfos>(tunerPlpInfos); |
| 530 | break; |
| 531 | } |
| 532 | default: |
| 533 | break; |
| 534 | } |
| 535 | mTunerFrontendCallback->onScanMessage(static_cast<FrontendScanMessageType>(type), scanMessage); |
| 536 | return Void(); |
| 537 | } |
| 538 | |
| 539 | Return<void> TunerHidlFrontend::FrontendCallback::onScanMessageExt1_1( |
| 540 | HidlFrontendScanMessageTypeExt1_1 type, const HidlFrontendScanMessageExt1_1& message) { |
| 541 | ALOGV("onScanMessageExt1_1::onScanMessage, type=%d", type); |
| 542 | FrontendScanMessage scanMessage; |
| 543 | switch (type) { |
| 544 | case HidlFrontendScanMessageTypeExt1_1::MODULATION: { |
| 545 | HidlFrontendModulation m = message.modulation(); |
| 546 | FrontendModulation modulation; |
| 547 | switch (m.getDiscriminator()) { |
| 548 | case HidlFrontendModulation::hidl_discriminator::dvbc: { |
| 549 | modulation.set<FrontendModulation::dvbc>(static_cast<FrontendDvbcModulation>(m.dvbc())); |
| 550 | break; |
| 551 | } |
| 552 | case HidlFrontendModulation::hidl_discriminator::dvbt: { |
| 553 | modulation.set<FrontendModulation::dvbt>( |
| 554 | static_cast<FrontendDvbtConstellation>(m.dvbt())); |
| 555 | break; |
| 556 | } |
| 557 | case HidlFrontendModulation::hidl_discriminator::dvbs: { |
| 558 | modulation.set<FrontendModulation::dvbs>(static_cast<FrontendDvbsModulation>(m.dvbs())); |
| 559 | break; |
| 560 | } |
| 561 | case HidlFrontendModulation::hidl_discriminator::isdbs: { |
| 562 | modulation.set<FrontendModulation::isdbs>( |
| 563 | static_cast<FrontendIsdbsModulation>(m.isdbs())); |
| 564 | break; |
| 565 | } |
| 566 | case HidlFrontendModulation::hidl_discriminator::isdbs3: { |
| 567 | modulation.set<FrontendModulation::isdbs3>( |
| 568 | static_cast<FrontendIsdbs3Modulation>(m.isdbs3())); |
| 569 | break; |
| 570 | } |
| 571 | case HidlFrontendModulation::hidl_discriminator::isdbt: { |
| 572 | modulation.set<FrontendModulation::isdbt>( |
| 573 | static_cast<FrontendIsdbtModulation>(m.isdbt())); |
| 574 | break; |
| 575 | } |
| 576 | case HidlFrontendModulation::hidl_discriminator::atsc: { |
| 577 | modulation.set<FrontendModulation::atsc>(static_cast<FrontendAtscModulation>(m.atsc())); |
| 578 | break; |
| 579 | } |
| 580 | case HidlFrontendModulation::hidl_discriminator::atsc3: { |
| 581 | modulation.set<FrontendModulation::atsc3>( |
| 582 | static_cast<FrontendAtsc3Modulation>(m.atsc3())); |
| 583 | break; |
| 584 | } |
| 585 | case HidlFrontendModulation::hidl_discriminator::dtmb: { |
| 586 | modulation.set<FrontendModulation::dtmb>(static_cast<FrontendDtmbModulation>(m.dtmb())); |
| 587 | break; |
| 588 | } |
| 589 | } |
| 590 | scanMessage.set<FrontendScanMessage::modulation>(modulation); |
| 591 | break; |
| 592 | } |
| 593 | case HidlFrontendScanMessageTypeExt1_1::DVBC_ANNEX: { |
| 594 | scanMessage.set<FrontendScanMessage::annex>( |
| 595 | static_cast<FrontendDvbcAnnex>(message.annex())); |
| 596 | break; |
| 597 | } |
| 598 | case HidlFrontendScanMessageTypeExt1_1::HIGH_PRIORITY: { |
| 599 | scanMessage.set<FrontendScanMessage::isHighPriority>(message.isHighPriority()); |
| 600 | break; |
| 601 | } |
| 602 | default: { |
| 603 | break; |
| 604 | } |
| 605 | } |
| 606 | mTunerFrontendCallback->onScanMessage(static_cast<FrontendScanMessageType>(type), scanMessage); |
| 607 | return Void(); |
| 608 | } |
| 609 | |
| 610 | /////////////// TunerHidlFrontend Helper Methods /////////////////////// |
| 611 | void TunerHidlFrontend::getAidlFrontendStatus(const vector<HidlFrontendStatus>& hidlStatus, |
| 612 | const vector<HidlFrontendStatusExt1_1>& hidlStatusExt, |
| 613 | vector<FrontendStatus>& aidlStatus) { |
| 614 | for (HidlFrontendStatus s : hidlStatus) { |
| 615 | FrontendStatus status; |
| 616 | switch (s.getDiscriminator()) { |
| 617 | case HidlFrontendStatus::hidl_discriminator::isDemodLocked: { |
| 618 | status.set<FrontendStatus::isDemodLocked>(s.isDemodLocked()); |
| 619 | aidlStatus.push_back(status); |
| 620 | break; |
| 621 | } |
| 622 | case HidlFrontendStatus::hidl_discriminator::snr: { |
| 623 | status.set<FrontendStatus::snr>((int)s.snr()); |
| 624 | aidlStatus.push_back(status); |
| 625 | break; |
| 626 | } |
| 627 | case HidlFrontendStatus::hidl_discriminator::ber: { |
| 628 | status.set<FrontendStatus::ber>((int)s.ber()); |
| 629 | aidlStatus.push_back(status); |
| 630 | break; |
| 631 | } |
| 632 | case HidlFrontendStatus::hidl_discriminator::per: { |
| 633 | status.set<FrontendStatus::per>((int)s.per()); |
| 634 | aidlStatus.push_back(status); |
| 635 | break; |
| 636 | } |
| 637 | case HidlFrontendStatus::hidl_discriminator::preBer: { |
| 638 | status.set<FrontendStatus::preBer>((int)s.preBer()); |
| 639 | aidlStatus.push_back(status); |
| 640 | break; |
| 641 | } |
| 642 | case HidlFrontendStatus::hidl_discriminator::signalQuality: { |
| 643 | status.set<FrontendStatus::signalQuality>((int)s.signalQuality()); |
| 644 | aidlStatus.push_back(status); |
| 645 | break; |
| 646 | } |
| 647 | case HidlFrontendStatus::hidl_discriminator::signalStrength: { |
| 648 | status.set<FrontendStatus::signalStrength>((int)s.signalStrength()); |
| 649 | aidlStatus.push_back(status); |
| 650 | break; |
| 651 | } |
| 652 | case HidlFrontendStatus::hidl_discriminator::symbolRate: { |
| 653 | status.set<FrontendStatus::symbolRate>((int)s.symbolRate()); |
| 654 | aidlStatus.push_back(status); |
| 655 | break; |
| 656 | } |
| 657 | case HidlFrontendStatus::hidl_discriminator::innerFec: { |
| 658 | status.set<FrontendStatus::innerFec>(static_cast<FrontendInnerFec>(s.innerFec())); |
| 659 | aidlStatus.push_back(status); |
| 660 | break; |
| 661 | } |
| 662 | case HidlFrontendStatus::hidl_discriminator::modulation: { |
| 663 | FrontendModulationStatus modulationStatus; |
| 664 | switch (s.modulation().getDiscriminator()) { |
| 665 | case HidlFrontendModulationStatus::hidl_discriminator::dvbc: |
| 666 | modulationStatus.set<FrontendModulationStatus::dvbc>( |
| 667 | static_cast<FrontendDvbcModulation>(s.modulation().dvbc())); |
| 668 | break; |
| 669 | case HidlFrontendModulationStatus::hidl_discriminator::dvbs: |
| 670 | modulationStatus.set<FrontendModulationStatus::dvbs>( |
| 671 | static_cast<FrontendDvbsModulation>(s.modulation().dvbs())); |
| 672 | break; |
| 673 | case HidlFrontendModulationStatus::hidl_discriminator::isdbs: |
| 674 | modulationStatus.set<FrontendModulationStatus::isdbs>( |
| 675 | static_cast<FrontendIsdbsModulation>(s.modulation().isdbs())); |
| 676 | break; |
| 677 | case HidlFrontendModulationStatus::hidl_discriminator::isdbs3: |
| 678 | modulationStatus.set<FrontendModulationStatus::isdbs3>( |
| 679 | static_cast<FrontendIsdbs3Modulation>(s.modulation().isdbs3())); |
| 680 | break; |
| 681 | case HidlFrontendModulationStatus::hidl_discriminator::isdbt: |
| 682 | modulationStatus.set<FrontendModulationStatus::isdbt>( |
| 683 | static_cast<FrontendIsdbtModulation>(s.modulation().isdbt())); |
| 684 | break; |
| 685 | } |
| 686 | status.set<FrontendStatus::modulationStatus>(modulationStatus); |
| 687 | aidlStatus.push_back(status); |
| 688 | break; |
| 689 | } |
| 690 | case HidlFrontendStatus::hidl_discriminator::inversion: { |
| 691 | status.set<FrontendStatus::inversion>( |
| 692 | static_cast<FrontendSpectralInversion>(s.inversion())); |
| 693 | aidlStatus.push_back(status); |
| 694 | break; |
| 695 | } |
| 696 | case HidlFrontendStatus::hidl_discriminator::lnbVoltage: { |
| 697 | status.set<FrontendStatus::lnbVoltage>(static_cast<LnbVoltage>(s.lnbVoltage())); |
| 698 | aidlStatus.push_back(status); |
| 699 | break; |
| 700 | } |
| 701 | case HidlFrontendStatus::hidl_discriminator::plpId: { |
| 702 | status.set<FrontendStatus::plpId>((int32_t)s.plpId()); |
| 703 | aidlStatus.push_back(status); |
| 704 | break; |
| 705 | } |
| 706 | case HidlFrontendStatus::hidl_discriminator::isEWBS: { |
| 707 | status.set<FrontendStatus::isEWBS>(s.isEWBS()); |
| 708 | aidlStatus.push_back(status); |
| 709 | break; |
| 710 | } |
| 711 | case HidlFrontendStatus::hidl_discriminator::agc: { |
| 712 | status.set<FrontendStatus::agc>((int32_t)s.agc()); |
| 713 | aidlStatus.push_back(status); |
| 714 | break; |
| 715 | } |
| 716 | case HidlFrontendStatus::hidl_discriminator::isLnaOn: { |
| 717 | status.set<FrontendStatus::isLnaOn>(s.isLnaOn()); |
| 718 | aidlStatus.push_back(status); |
| 719 | break; |
| 720 | } |
| 721 | case HidlFrontendStatus::hidl_discriminator::isLayerError: { |
| 722 | vector<bool> e(s.isLayerError().begin(), s.isLayerError().end()); |
| 723 | status.set<FrontendStatus::isLayerError>(e); |
| 724 | aidlStatus.push_back(status); |
| 725 | break; |
| 726 | } |
| 727 | case HidlFrontendStatus::hidl_discriminator::mer: { |
| 728 | status.set<FrontendStatus::mer>(static_cast<int32_t>(s.mer())); |
| 729 | aidlStatus.push_back(status); |
| 730 | break; |
| 731 | } |
| 732 | case HidlFrontendStatus::hidl_discriminator::freqOffset: { |
| 733 | status.set<FrontendStatus::freqOffset>(static_cast<int64_t>(s.freqOffset())); |
| 734 | aidlStatus.push_back(status); |
| 735 | break; |
| 736 | } |
| 737 | case HidlFrontendStatus::hidl_discriminator::hierarchy: { |
| 738 | status.set<FrontendStatus::hierarchy>( |
| 739 | static_cast<FrontendDvbtHierarchy>(s.hierarchy())); |
| 740 | aidlStatus.push_back(status); |
| 741 | break; |
| 742 | } |
| 743 | case HidlFrontendStatus::hidl_discriminator::isRfLocked: { |
| 744 | status.set<FrontendStatus::isRfLocked>(s.isRfLocked()); |
| 745 | aidlStatus.push_back(status); |
| 746 | break; |
| 747 | } |
| 748 | case HidlFrontendStatus::hidl_discriminator::plpInfo: { |
| 749 | vector<FrontendStatusAtsc3PlpInfo> info; |
| 750 | for (auto i : s.plpInfo()) { |
| 751 | info.push_back({ |
| 752 | .plpId = static_cast<int32_t>(i.plpId), |
| 753 | .isLocked = i.isLocked, |
| 754 | .uec = static_cast<int32_t>(i.uec), |
| 755 | }); |
| 756 | } |
| 757 | status.set<FrontendStatus::plpInfo>(info); |
| 758 | aidlStatus.push_back(status); |
| 759 | break; |
| 760 | } |
| 761 | } |
| 762 | } |
| 763 | |
| 764 | for (HidlFrontendStatusExt1_1 s : hidlStatusExt) { |
| 765 | FrontendStatus status; |
| 766 | switch (s.getDiscriminator()) { |
| 767 | case HidlFrontendStatusExt1_1::hidl_discriminator::modulations: { |
| 768 | vector<FrontendModulation> aidlMod; |
| 769 | for (auto m : s.modulations()) { |
| 770 | switch (m.getDiscriminator()) { |
| 771 | case HidlFrontendModulation::hidl_discriminator::dvbc: |
| 772 | aidlMod.push_back(static_cast<FrontendDvbcModulation>(m.dvbc())); |
| 773 | break; |
| 774 | case HidlFrontendModulation::hidl_discriminator::dvbs: |
| 775 | aidlMod.push_back(static_cast<FrontendDvbsModulation>(m.dvbs())); |
| 776 | break; |
| 777 | case HidlFrontendModulation::hidl_discriminator::dvbt: |
| 778 | aidlMod.push_back(static_cast<FrontendDvbtConstellation>(m.dvbt())); |
| 779 | break; |
| 780 | case HidlFrontendModulation::hidl_discriminator::isdbs: |
| 781 | aidlMod.push_back(static_cast<FrontendIsdbsModulation>(m.isdbs())); |
| 782 | break; |
| 783 | case HidlFrontendModulation::hidl_discriminator::isdbs3: |
| 784 | aidlMod.push_back(static_cast<FrontendIsdbs3Modulation>(m.isdbs3())); |
| 785 | break; |
| 786 | case HidlFrontendModulation::hidl_discriminator::isdbt: |
| 787 | aidlMod.push_back(static_cast<FrontendIsdbtModulation>(m.isdbt())); |
| 788 | break; |
| 789 | case HidlFrontendModulation::hidl_discriminator::atsc: |
| 790 | aidlMod.push_back(static_cast<FrontendAtscModulation>(m.atsc())); |
| 791 | break; |
| 792 | case HidlFrontendModulation::hidl_discriminator::atsc3: |
| 793 | aidlMod.push_back(static_cast<FrontendAtsc3Modulation>(m.atsc3())); |
| 794 | break; |
| 795 | case HidlFrontendModulation::hidl_discriminator::dtmb: |
| 796 | aidlMod.push_back(static_cast<FrontendDtmbModulation>(m.dtmb())); |
| 797 | break; |
| 798 | } |
| 799 | } |
| 800 | status.set<FrontendStatus::modulations>(aidlMod); |
| 801 | aidlStatus.push_back(status); |
| 802 | break; |
| 803 | } |
| 804 | case HidlFrontendStatusExt1_1::hidl_discriminator::bers: { |
| 805 | vector<int> b(s.bers().begin(), s.bers().end()); |
| 806 | status.set<FrontendStatus::bers>(b); |
| 807 | aidlStatus.push_back(status); |
| 808 | break; |
| 809 | } |
| 810 | case HidlFrontendStatusExt1_1::hidl_discriminator::codeRates: { |
| 811 | vector<FrontendInnerFec> codeRates; |
| 812 | for (auto c : s.codeRates()) { |
| 813 | codeRates.push_back(static_cast<FrontendInnerFec>(c)); |
| 814 | } |
| 815 | status.set<FrontendStatus::codeRates>(codeRates); |
| 816 | aidlStatus.push_back(status); |
| 817 | break; |
| 818 | } |
| 819 | case HidlFrontendStatusExt1_1::hidl_discriminator::bandwidth: { |
| 820 | FrontendBandwidth bandwidth; |
| 821 | switch (s.bandwidth().getDiscriminator()) { |
| 822 | case HidlFrontendBandwidth::hidl_discriminator::atsc3: |
| 823 | bandwidth.set<FrontendBandwidth::atsc3>( |
| 824 | static_cast<FrontendAtsc3Bandwidth>(s.bandwidth().atsc3())); |
| 825 | break; |
| 826 | case HidlFrontendBandwidth::hidl_discriminator::dvbc: |
| 827 | bandwidth.set<FrontendBandwidth::dvbc>( |
| 828 | static_cast<FrontendDvbcBandwidth>(s.bandwidth().dvbc())); |
| 829 | break; |
| 830 | case HidlFrontendBandwidth::hidl_discriminator::dvbt: |
| 831 | bandwidth.set<FrontendBandwidth::dvbt>( |
| 832 | static_cast<FrontendDvbtBandwidth>(s.bandwidth().dvbt())); |
| 833 | break; |
| 834 | case HidlFrontendBandwidth::hidl_discriminator::isdbt: |
| 835 | bandwidth.set<FrontendBandwidth::isdbt>( |
| 836 | static_cast<FrontendIsdbtBandwidth>(s.bandwidth().isdbt())); |
| 837 | break; |
| 838 | case HidlFrontendBandwidth::hidl_discriminator::dtmb: |
| 839 | bandwidth.set<FrontendBandwidth::dtmb>( |
| 840 | static_cast<FrontendDtmbBandwidth>(s.bandwidth().dtmb())); |
| 841 | break; |
| 842 | } |
| 843 | status.set<FrontendStatus::bandwidth>(bandwidth); |
| 844 | aidlStatus.push_back(status); |
| 845 | break; |
| 846 | } |
| 847 | case HidlFrontendStatusExt1_1::hidl_discriminator::interval: { |
| 848 | FrontendGuardInterval interval; |
| 849 | switch (s.interval().getDiscriminator()) { |
| 850 | case HidlFrontendGuardInterval::hidl_discriminator::dvbt: |
| 851 | interval.set<FrontendGuardInterval::dvbt>( |
| 852 | static_cast<FrontendDvbtGuardInterval>(s.interval().dvbt())); |
| 853 | break; |
| 854 | case HidlFrontendGuardInterval::hidl_discriminator::isdbt: |
| 855 | interval.set<FrontendGuardInterval::isdbt>( |
| 856 | static_cast<FrontendIsdbtGuardInterval>(s.interval().isdbt())); |
| 857 | break; |
| 858 | case HidlFrontendGuardInterval::hidl_discriminator::dtmb: |
| 859 | interval.set<FrontendGuardInterval::dtmb>( |
| 860 | static_cast<FrontendDtmbGuardInterval>(s.interval().dtmb())); |
| 861 | break; |
| 862 | } |
| 863 | status.set<FrontendStatus::interval>(interval); |
| 864 | aidlStatus.push_back(status); |
| 865 | break; |
| 866 | } |
| 867 | case HidlFrontendStatusExt1_1::hidl_discriminator::transmissionMode: { |
| 868 | FrontendTransmissionMode transmissionMode; |
| 869 | switch (s.transmissionMode().getDiscriminator()) { |
| 870 | case HidlFrontendTransmissionMode::hidl_discriminator::dvbt: |
| 871 | transmissionMode.set<FrontendTransmissionMode::dvbt>( |
| 872 | static_cast<FrontendDvbtTransmissionMode>(s.transmissionMode().dvbt())); |
| 873 | break; |
| 874 | case HidlFrontendTransmissionMode::hidl_discriminator::isdbt: |
| 875 | transmissionMode.set<FrontendTransmissionMode::isdbt>( |
| 876 | static_cast<FrontendIsdbtMode>(s.transmissionMode().isdbt())); |
| 877 | break; |
| 878 | case HidlFrontendTransmissionMode::hidl_discriminator::dtmb: |
| 879 | transmissionMode.set<FrontendTransmissionMode::dtmb>( |
| 880 | static_cast<FrontendDtmbTransmissionMode>(s.transmissionMode().dtmb())); |
| 881 | break; |
| 882 | } |
| 883 | status.set<FrontendStatus::transmissionMode>(transmissionMode); |
| 884 | aidlStatus.push_back(status); |
| 885 | break; |
| 886 | } |
| 887 | case HidlFrontendStatusExt1_1::hidl_discriminator::uec: { |
| 888 | status.set<FrontendStatus::uec>(static_cast<int32_t>(s.uec())); |
| 889 | aidlStatus.push_back(status); |
| 890 | break; |
| 891 | } |
| 892 | case HidlFrontendStatusExt1_1::hidl_discriminator::systemId: { |
| 893 | status.set<FrontendStatus::systemId>(static_cast<int32_t>(s.systemId())); |
| 894 | aidlStatus.push_back(status); |
| 895 | break; |
| 896 | } |
| 897 | case HidlFrontendStatusExt1_1::hidl_discriminator::interleaving: { |
| 898 | vector<FrontendInterleaveMode> aidlInter; |
| 899 | for (auto i : s.interleaving()) { |
| 900 | FrontendInterleaveMode leaveMode; |
| 901 | switch (i.getDiscriminator()) { |
| 902 | case HidlFrontendInterleaveMode::hidl_discriminator::atsc3: |
| 903 | leaveMode.set<FrontendInterleaveMode::atsc3>( |
| 904 | static_cast<FrontendAtsc3TimeInterleaveMode>(i.atsc3())); |
| 905 | break; |
| 906 | case HidlFrontendInterleaveMode::hidl_discriminator::dvbc: |
| 907 | leaveMode.set<FrontendInterleaveMode::dvbc>( |
| 908 | static_cast<FrontendCableTimeInterleaveMode>(i.dvbc())); |
| 909 | break; |
| 910 | case HidlFrontendInterleaveMode::hidl_discriminator::dtmb: |
| 911 | leaveMode.set<FrontendInterleaveMode::dtmb>( |
| 912 | static_cast<FrontendDtmbTimeInterleaveMode>(i.dtmb())); |
| 913 | break; |
| 914 | } |
| 915 | aidlInter.push_back(leaveMode); |
| 916 | } |
| 917 | status.set<FrontendStatus::interleaving>(aidlInter); |
| 918 | aidlStatus.push_back(status); |
| 919 | break; |
| 920 | } |
| 921 | case HidlFrontendStatusExt1_1::hidl_discriminator::isdbtSegment: { |
| 922 | const vector<uint8_t>& seg = s.isdbtSegment(); |
| 923 | vector<int32_t> i(seg.begin(), seg.end()); |
| 924 | status.set<FrontendStatus::isdbtSegment>(i); |
| 925 | aidlStatus.push_back(status); |
| 926 | break; |
| 927 | } |
| 928 | case HidlFrontendStatusExt1_1::hidl_discriminator::tsDataRate: { |
| 929 | vector<int32_t> ts(s.tsDataRate().begin(), s.tsDataRate().end()); |
| 930 | status.set<FrontendStatus::tsDataRate>(ts); |
| 931 | aidlStatus.push_back(status); |
| 932 | break; |
| 933 | } |
| 934 | case HidlFrontendStatusExt1_1::hidl_discriminator::rollOff: { |
| 935 | FrontendRollOff rollOff; |
| 936 | switch (s.rollOff().getDiscriminator()) { |
| 937 | case HidlFrontendRollOff::hidl_discriminator::dvbs: |
| 938 | rollOff.set<FrontendRollOff::dvbs>( |
| 939 | static_cast<FrontendDvbsRolloff>(s.rollOff().dvbs())); |
| 940 | break; |
| 941 | case HidlFrontendRollOff::hidl_discriminator::isdbs: |
| 942 | rollOff.set<FrontendRollOff::isdbs>( |
| 943 | static_cast<FrontendIsdbsRolloff>(s.rollOff().isdbs())); |
| 944 | break; |
| 945 | case HidlFrontendRollOff::hidl_discriminator::isdbs3: |
| 946 | rollOff.set<FrontendRollOff::isdbs3>( |
| 947 | static_cast<FrontendIsdbs3Rolloff>(s.rollOff().isdbs3())); |
| 948 | break; |
| 949 | } |
| 950 | status.set<FrontendStatus::rollOff>(rollOff); |
| 951 | aidlStatus.push_back(status); |
| 952 | break; |
| 953 | } |
| 954 | case HidlFrontendStatusExt1_1::hidl_discriminator::isMiso: { |
| 955 | status.set<FrontendStatus::isMiso>(s.isMiso()); |
| 956 | aidlStatus.push_back(status); |
| 957 | break; |
| 958 | } |
| 959 | case HidlFrontendStatusExt1_1::hidl_discriminator::isLinear: { |
| 960 | status.set<FrontendStatus::isLinear>(s.isLinear()); |
| 961 | aidlStatus.push_back(status); |
| 962 | break; |
| 963 | } |
| 964 | case HidlFrontendStatusExt1_1::hidl_discriminator::isShortFrames: { |
| 965 | status.set<FrontendStatus::isShortFrames>(s.isShortFrames()); |
| 966 | aidlStatus.push_back(status); |
| 967 | break; |
| 968 | } |
| 969 | } |
| 970 | } |
| 971 | } |
| 972 | |
| 973 | hidl_vec<HidlFrontendAtsc3PlpSettings> TunerHidlFrontend::getAtsc3PlpSettings( |
| 974 | const FrontendAtsc3Settings& settings) { |
| 975 | int len = settings.plpSettings.size(); |
| 976 | hidl_vec<HidlFrontendAtsc3PlpSettings> plps = hidl_vec<HidlFrontendAtsc3PlpSettings>(len); |
| 977 | // parse PLP settings |
| 978 | for (int i = 0; i < len; i++) { |
| 979 | uint8_t plpId = static_cast<uint8_t>(settings.plpSettings[i].plpId); |
| 980 | HidlFrontendAtsc3Modulation modulation = |
| 981 | static_cast<HidlFrontendAtsc3Modulation>(settings.plpSettings[i].modulation); |
| 982 | HidlFrontendAtsc3TimeInterleaveMode interleaveMode = |
| 983 | static_cast<HidlFrontendAtsc3TimeInterleaveMode>( |
| 984 | settings.plpSettings[i].interleaveMode); |
| 985 | HidlFrontendAtsc3CodeRate codeRate = |
| 986 | static_cast<HidlFrontendAtsc3CodeRate>(settings.plpSettings[i].codeRate); |
| 987 | HidlFrontendAtsc3Fec fec = static_cast<HidlFrontendAtsc3Fec>(settings.plpSettings[i].fec); |
| 988 | HidlFrontendAtsc3PlpSettings frontendAtsc3PlpSettings{ |
| 989 | .plpId = plpId, |
| 990 | .modulation = modulation, |
| 991 | .interleaveMode = interleaveMode, |
| 992 | .codeRate = codeRate, |
| 993 | .fec = fec, |
| 994 | }; |
| 995 | plps[i] = frontendAtsc3PlpSettings; |
| 996 | } |
| 997 | return plps; |
| 998 | } |
| 999 | |
| 1000 | HidlFrontendDvbsCodeRate TunerHidlFrontend::getDvbsCodeRate(const FrontendDvbsCodeRate& codeRate) { |
| 1001 | HidlFrontendInnerFec innerFec = static_cast<HidlFrontendInnerFec>(codeRate.fec); |
| 1002 | bool isLinear = codeRate.isLinear; |
| 1003 | bool isShortFrames = codeRate.isShortFrames; |
| 1004 | uint32_t bitsPer1000Symbol = static_cast<uint32_t>(codeRate.bitsPer1000Symbol); |
| 1005 | HidlFrontendDvbsCodeRate coderate{ |
| 1006 | .fec = innerFec, |
| 1007 | .isLinear = isLinear, |
| 1008 | .isShortFrames = isShortFrames, |
| 1009 | .bitsPer1000Symbol = bitsPer1000Symbol, |
| 1010 | }; |
| 1011 | return coderate; |
| 1012 | } |
| 1013 | |
| 1014 | void TunerHidlFrontend::getHidlFrontendSettings(const FrontendSettings& aidlSettings, |
| 1015 | HidlFrontendSettings& settings, |
| 1016 | HidlFrontendSettingsExt1_1& settingsExt) { |
| 1017 | switch (aidlSettings.getTag()) { |
| 1018 | case FrontendSettings::analog: { |
| 1019 | const FrontendAnalogSettings& analog = aidlSettings.get<FrontendSettings::analog>(); |
| 1020 | settings.analog({ |
| 1021 | .frequency = static_cast<uint32_t>(analog.frequency), |
| 1022 | .type = static_cast<HidlFrontendAnalogType>(analog.type), |
| 1023 | .sifStandard = static_cast<HidlFrontendAnalogSifStandard>(analog.sifStandard), |
| 1024 | }); |
| 1025 | settingsExt.settingExt.analog({ |
| 1026 | .aftFlag = static_cast<HidlFrontendAnalogAftFlag>(analog.aftFlag), |
| 1027 | }); |
| 1028 | settingsExt.endFrequency = static_cast<uint32_t>(analog.endFrequency); |
| 1029 | settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(analog.inversion); |
| 1030 | break; |
| 1031 | } |
| 1032 | case FrontendSettings::atsc: { |
| 1033 | const FrontendAtscSettings& atsc = aidlSettings.get<FrontendSettings::atsc>(); |
| 1034 | settings.atsc({ |
| 1035 | .frequency = static_cast<uint32_t>(atsc.frequency), |
| 1036 | .modulation = static_cast<HidlFrontendAtscModulation>(atsc.modulation), |
| 1037 | }); |
| 1038 | settingsExt.endFrequency = static_cast<uint32_t>(atsc.endFrequency); |
| 1039 | settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(atsc.inversion); |
| 1040 | settingsExt.settingExt.noinit(); |
| 1041 | break; |
| 1042 | } |
| 1043 | case FrontendSettings::atsc3: { |
| 1044 | const FrontendAtsc3Settings& atsc3 = aidlSettings.get<FrontendSettings::atsc3>(); |
| 1045 | settings.atsc3({ |
| 1046 | .frequency = static_cast<uint32_t>(atsc3.frequency), |
| 1047 | .bandwidth = static_cast<HidlFrontendAtsc3Bandwidth>(atsc3.bandwidth), |
| 1048 | .demodOutputFormat = |
| 1049 | static_cast<HidlFrontendAtsc3DemodOutputFormat>(atsc3.demodOutputFormat), |
| 1050 | .plpSettings = getAtsc3PlpSettings(atsc3), |
| 1051 | }); |
| 1052 | settingsExt.endFrequency = static_cast<uint32_t>(atsc3.endFrequency); |
| 1053 | settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(atsc3.inversion); |
| 1054 | settingsExt.settingExt.noinit(); |
| 1055 | break; |
| 1056 | } |
| 1057 | case FrontendSettings::dvbc: { |
| 1058 | const FrontendDvbcSettings& dvbc = aidlSettings.get<FrontendSettings::dvbc>(); |
| 1059 | settings.dvbc({ |
| 1060 | .frequency = static_cast<uint32_t>(dvbc.frequency), |
| 1061 | .modulation = static_cast<HidlFrontendDvbcModulation>(dvbc.modulation), |
| 1062 | .fec = static_cast<HidlFrontendInnerFec>(dvbc.fec), |
| 1063 | .symbolRate = static_cast<uint32_t>(dvbc.symbolRate), |
| 1064 | .outerFec = static_cast<HidlFrontendDvbcOuterFec>(dvbc.outerFec), |
| 1065 | .annex = static_cast<HidlFrontendDvbcAnnex>(dvbc.annex), |
| 1066 | .spectralInversion = static_cast<HidlFrontendDvbcSpectralInversion>(dvbc.inversion), |
| 1067 | }); |
| 1068 | settingsExt.settingExt.dvbc({ |
| 1069 | .interleaveMode = |
| 1070 | static_cast<HidlFrontendCableTimeInterleaveMode>(dvbc.interleaveMode), |
| 1071 | .bandwidth = static_cast<HidlFrontendDvbcBandwidth>(dvbc.bandwidth), |
| 1072 | }); |
| 1073 | settingsExt.endFrequency = static_cast<uint32_t>(dvbc.endFrequency); |
| 1074 | settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(dvbc.inversion); |
| 1075 | break; |
| 1076 | } |
| 1077 | case FrontendSettings::dvbs: { |
| 1078 | const FrontendDvbsSettings& dvbs = aidlSettings.get<FrontendSettings::dvbs>(); |
| 1079 | settings.dvbs({ |
| 1080 | .frequency = static_cast<uint32_t>(dvbs.frequency), |
| 1081 | .modulation = static_cast<HidlFrontendDvbsModulation>(dvbs.modulation), |
| 1082 | .coderate = getDvbsCodeRate(dvbs.coderate), |
| 1083 | .symbolRate = static_cast<uint32_t>(dvbs.symbolRate), |
| 1084 | .rolloff = static_cast<HidlFrontendDvbsRolloff>(dvbs.rolloff), |
| 1085 | .pilot = static_cast<HidlFrontendDvbsPilot>(dvbs.pilot), |
| 1086 | .inputStreamId = static_cast<uint32_t>(dvbs.inputStreamId), |
| 1087 | .standard = static_cast<HidlFrontendDvbsStandard>(dvbs.standard), |
| 1088 | .vcmMode = static_cast<HidlFrontendDvbsVcmMode>(dvbs.vcmMode), |
| 1089 | }); |
| 1090 | settingsExt.settingExt.dvbs({ |
| 1091 | .scanType = static_cast<HidlFrontendDvbsScanType>(dvbs.scanType), |
| 1092 | .isDiseqcRxMessage = dvbs.isDiseqcRxMessage, |
| 1093 | }); |
| 1094 | settingsExt.endFrequency = static_cast<uint32_t>(dvbs.endFrequency); |
| 1095 | settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(dvbs.inversion); |
| 1096 | break; |
| 1097 | } |
| 1098 | case FrontendSettings::dvbt: { |
| 1099 | const FrontendDvbtSettings& dvbt = aidlSettings.get<FrontendSettings::dvbt>(); |
| 1100 | settings.dvbt({ |
| 1101 | .frequency = static_cast<uint32_t>(dvbt.frequency), |
| 1102 | .transmissionMode = |
| 1103 | static_cast<HidlFrontendDvbtTransmissionMode>(dvbt.transmissionMode), |
| 1104 | .bandwidth = static_cast<HidlFrontendDvbtBandwidth>(dvbt.bandwidth), |
| 1105 | .constellation = static_cast<HidlFrontendDvbtConstellation>(dvbt.constellation), |
| 1106 | .hierarchy = static_cast<HidlFrontendDvbtHierarchy>(dvbt.hierarchy), |
| 1107 | .hpCoderate = static_cast<HidlFrontendDvbtCoderate>(dvbt.hpCoderate), |
| 1108 | .lpCoderate = static_cast<HidlFrontendDvbtCoderate>(dvbt.lpCoderate), |
| 1109 | .guardInterval = static_cast<HidlFrontendDvbtGuardInterval>(dvbt.guardInterval), |
| 1110 | .isHighPriority = dvbt.isHighPriority, |
| 1111 | .standard = static_cast<HidlFrontendDvbtStandard>(dvbt.standard), |
| 1112 | .isMiso = dvbt.isMiso, |
| 1113 | .plpMode = static_cast<HidlFrontendDvbtPlpMode>(dvbt.plpMode), |
| 1114 | .plpId = static_cast<uint8_t>(dvbt.plpId), |
| 1115 | .plpGroupId = static_cast<uint8_t>(dvbt.plpGroupId), |
| 1116 | }); |
| 1117 | settingsExt.settingExt.dvbt({ |
| 1118 | .constellation = static_cast< |
| 1119 | ::android::hardware::tv::tuner::V1_1::FrontendDvbtConstellation>( |
| 1120 | dvbt.constellation), |
| 1121 | .transmissionMode = static_cast< |
| 1122 | ::android::hardware::tv::tuner::V1_1::FrontendDvbtTransmissionMode>( |
| 1123 | dvbt.transmissionMode), |
| 1124 | }); |
| 1125 | settingsExt.endFrequency = static_cast<uint32_t>(dvbt.endFrequency); |
| 1126 | settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(dvbt.inversion); |
| 1127 | break; |
| 1128 | } |
| 1129 | case FrontendSettings::isdbs: { |
| 1130 | const FrontendIsdbsSettings& isdbs = aidlSettings.get<FrontendSettings::isdbs>(); |
| 1131 | settings.isdbs({ |
| 1132 | .frequency = static_cast<uint32_t>(isdbs.frequency), |
| 1133 | .streamId = static_cast<uint16_t>(isdbs.streamId), |
| 1134 | .streamIdType = static_cast<HidlFrontendIsdbsStreamIdType>(isdbs.streamIdType), |
| 1135 | .modulation = static_cast<HidlFrontendIsdbsModulation>(isdbs.modulation), |
| 1136 | .coderate = static_cast<HidlFrontendIsdbsCoderate>(isdbs.coderate), |
| 1137 | .symbolRate = static_cast<uint32_t>(isdbs.symbolRate), |
| 1138 | .rolloff = static_cast<HidlFrontendIsdbsRolloff>(isdbs.rolloff), |
| 1139 | }); |
| 1140 | settingsExt.endFrequency = static_cast<uint32_t>(isdbs.endFrequency); |
| 1141 | settingsExt.settingExt.noinit(); |
| 1142 | break; |
| 1143 | } |
| 1144 | case FrontendSettings::isdbs3: { |
| 1145 | const FrontendIsdbs3Settings& isdbs3 = aidlSettings.get<FrontendSettings::isdbs3>(); |
| 1146 | settings.isdbs3({ |
| 1147 | .frequency = static_cast<uint32_t>(isdbs3.frequency), |
| 1148 | .streamId = static_cast<uint16_t>(isdbs3.streamId), |
| 1149 | .streamIdType = static_cast<HidlFrontendIsdbsStreamIdType>(isdbs3.streamIdType), |
| 1150 | .modulation = static_cast<HidlFrontendIsdbs3Modulation>(isdbs3.modulation), |
| 1151 | .coderate = static_cast<HidlFrontendIsdbs3Coderate>(isdbs3.coderate), |
| 1152 | .symbolRate = static_cast<uint32_t>(isdbs3.symbolRate), |
| 1153 | .rolloff = static_cast<HidlFrontendIsdbs3Rolloff>(isdbs3.rolloff), |
| 1154 | }); |
| 1155 | settingsExt.endFrequency = static_cast<uint32_t>(isdbs3.endFrequency); |
| 1156 | settingsExt.settingExt.noinit(); |
| 1157 | break; |
| 1158 | } |
| 1159 | case FrontendSettings::isdbt: { |
| 1160 | const FrontendIsdbtSettings& isdbt = aidlSettings.get<FrontendSettings::isdbt>(); |
| 1161 | settings.isdbt({ |
| 1162 | .frequency = static_cast<uint32_t>(isdbt.frequency), |
| 1163 | .modulation = static_cast<HidlFrontendIsdbtModulation>(isdbt.modulation), |
| 1164 | .bandwidth = static_cast<HidlFrontendIsdbtBandwidth>(isdbt.bandwidth), |
| 1165 | .mode = static_cast<HidlFrontendIsdbtMode>(isdbt.mode), |
| 1166 | .coderate = static_cast<HidlFrontendIsdbtCoderate>(isdbt.coderate), |
| 1167 | .guardInterval = static_cast<HidlFrontendIsdbtGuardInterval>(isdbt.guardInterval), |
| 1168 | .serviceAreaId = static_cast<uint32_t>(isdbt.serviceAreaId), |
| 1169 | }); |
| 1170 | settingsExt.endFrequency = static_cast<uint32_t>(isdbt.endFrequency); |
| 1171 | settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(isdbt.inversion); |
| 1172 | settingsExt.settingExt.noinit(); |
| 1173 | break; |
| 1174 | } |
| 1175 | case FrontendSettings::dtmb: { |
| 1176 | const FrontendDtmbSettings& dtmb = aidlSettings.get<FrontendSettings::dtmb>(); |
| 1177 | settingsExt.settingExt.dtmb({ |
| 1178 | .frequency = static_cast<uint32_t>(dtmb.frequency), |
| 1179 | .transmissionMode = |
| 1180 | static_cast<HidlFrontendDtmbTransmissionMode>(dtmb.transmissionMode), |
| 1181 | .bandwidth = static_cast<HidlFrontendDtmbBandwidth>(dtmb.bandwidth), |
| 1182 | .modulation = static_cast<HidlFrontendDtmbModulation>(dtmb.modulation), |
| 1183 | .codeRate = static_cast<HidlFrontendDtmbCodeRate>(dtmb.codeRate), |
| 1184 | .guardInterval = static_cast<HidlFrontendDtmbGuardInterval>(dtmb.guardInterval), |
| 1185 | .interleaveMode = |
| 1186 | static_cast<HidlFrontendDtmbTimeInterleaveMode>(dtmb.interleaveMode), |
| 1187 | }); |
| 1188 | settingsExt.endFrequency = static_cast<uint32_t>(dtmb.endFrequency); |
| 1189 | settingsExt.inversion = static_cast<HidlFrontendSpectralInversion>(dtmb.inversion); |
| 1190 | break; |
| 1191 | } |
| 1192 | default: |
| 1193 | break; |
| 1194 | } |
| 1195 | } |
| 1196 | |
| 1197 | } // namespace tuner |
| 1198 | } // namespace tv |
| 1199 | } // namespace media |
| 1200 | } // namespace android |
| 1201 | } // namespace aidl |