blob: 0540aac3672db3eff152e7a7f65b0852b4d1fb7c [file] [log] [blame]
Amy Zhangbf68a162020-11-23 17:42:40 -08001/*
2 * Copyright 2020 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_TAG "FrontendClient"
18
19#include <android-base/logging.h>
20#include <utils/Log.h>
21
22#include "FrontendClient.h"
23
Amy Zhangb5809be2021-01-26 16:27:23 -080024using ::aidl::android::media::tv::tuner::TunerFrontendDvbtSettings;
Amy Zhangb9f3cab2021-01-13 15:24:14 -080025using ::aidl::android::media::tv::tuner::TunerFrontendScanAtsc3PlpInfo;
Amy Zhangb9f3cab2021-01-13 15:24:14 -080026
27using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard;
28using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType;
29using ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation;
30using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Modulation;
31using ::android::hardware::tv::tuner::V1_0::FrontendDvbcAnnex;
32using ::android::hardware::tv::tuner::V1_0::FrontendDvbcModulation;
33using ::android::hardware::tv::tuner::V1_0::FrontendDvbsModulation;
34using ::android::hardware::tv::tuner::V1_0::FrontendDvbsStandard;
35using ::android::hardware::tv::tuner::V1_0::FrontendDvbtHierarchy;
36using ::android::hardware::tv::tuner::V1_0::FrontendDvbtStandard;
37using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsModulation;
38using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Modulation;
39using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtModulation;
40using ::android::hardware::tv::tuner::V1_0::FrontendScanAtsc3PlpInfo;
41using ::android::hardware::tv::tuner::V1_0::FrontendType;
Amy Zhangd08c2732021-01-08 17:22:59 -080042using ::android::hardware::tv::tuner::V1_1::Constant;
Amy Zhangb9f3cab2021-01-13 15:24:14 -080043using ::android::hardware::tv::tuner::V1_1::FrontendDtmbModulation;
44using ::android::hardware::tv::tuner::V1_1::FrontendDvbtConstellation;
45using ::android::hardware::tv::tuner::V1_1::FrontendModulation;
Amy Zhanga6734682020-11-30 16:14:38 -080046
Amy Zhangbf68a162020-11-23 17:42:40 -080047namespace android {
48
Amy Zhanga6734682020-11-30 16:14:38 -080049/////////////// FrontendClient ///////////////////////
50
Amy Zhangb9f3cab2021-01-13 15:24:14 -080051FrontendClient::FrontendClient(shared_ptr<ITunerFrontend> tunerFrontend, int id, int type) {
Amy Zhangbf68a162020-11-23 17:42:40 -080052 mTunerFrontend = tunerFrontend;
Amy Zhanga6734682020-11-30 16:14:38 -080053 mAidlCallback = NULL;
54 mHidlCallback = NULL;
Amy Zhang210c26a2021-01-12 11:25:27 -080055 mId = id;
Amy Zhangb9f3cab2021-01-13 15:24:14 -080056 mType = type;
Amy Zhangbf68a162020-11-23 17:42:40 -080057}
58
59FrontendClient::~FrontendClient() {
60 mTunerFrontend = NULL;
61 mFrontend = NULL;
62 mFrontend_1_1 = NULL;
Amy Zhanga6734682020-11-30 16:14:38 -080063 mAidlCallback = NULL;
64 mHidlCallback = NULL;
Amy Zhang210c26a2021-01-12 11:25:27 -080065 mId = -1;
Amy Zhangb9f3cab2021-01-13 15:24:14 -080066 mType = -1;
Amy Zhanga6734682020-11-30 16:14:38 -080067}
68
69Result FrontendClient::setCallback(sp<FrontendClientCallback> frontendClientCallback) {
70 if (mTunerFrontend != NULL) {
71 mAidlCallback = ::ndk::SharedRefBase::make<TunerFrontendCallback>(frontendClientCallback);
Amy Zhangb9f3cab2021-01-13 15:24:14 -080072 mAidlCallback->setFrontendType(mType);
Amy Zhanga6734682020-11-30 16:14:38 -080073 mTunerFrontend->setCallback(mAidlCallback);
74 return Result::SUCCESS;
75 }
76
77 mHidlCallback = new HidlFrontendCallback(frontendClientCallback);
78 return mFrontend->setCallback(mHidlCallback);
Amy Zhangbf68a162020-11-23 17:42:40 -080079}
80
81void FrontendClient::setHidlFrontend(sp<IFrontend> frontend) {
82 mFrontend = frontend;
83 mFrontend_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFrontend);
84}
Amy Zhanga6734682020-11-30 16:14:38 -080085
86Result FrontendClient::tune(const FrontendSettings& settings,
87 const FrontendSettingsExt1_1& settingsExt1_1) {
88 if (mTunerFrontend != NULL) {
Amy Zhanga6734682020-11-30 16:14:38 -080089 // TODO: aidl frontend settings to include Tuner HAL 1.1 settings
Amy Zhangb5809be2021-01-26 16:27:23 -080090 TunerFrontendSettings tunerFeSettings = getAidlFrontendSettings(settings, settingsExt1_1);
91 Status s = mTunerFrontend->tune(tunerFeSettings);
Amy Zhang4a07e802021-01-21 17:10:21 -080092 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhanga6734682020-11-30 16:14:38 -080093 }
94
95 Result result;
96 if (mFrontend_1_1 != NULL) {
97 result = mFrontend_1_1->tune_1_1(settings, settingsExt1_1);
98 return result;
99 }
100
101 if (mFrontend != NULL) {
102 result = mFrontend->tune(settings);
103 return result;
104 }
105
106 return Result::INVALID_STATE;
Amy Zhangbf68a162020-11-23 17:42:40 -0800107}
Amy Zhanga6734682020-11-30 16:14:38 -0800108
109Result FrontendClient::stopTune() {
110 if (mTunerFrontend != NULL) {
Amy Zhang4a07e802021-01-21 17:10:21 -0800111 Status s = mTunerFrontend->stopTune();
112 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhanga6734682020-11-30 16:14:38 -0800113 }
114
115 if (mFrontend != NULL) {
116 Result result = mFrontend->stopTune();
117 return result;
118 }
119
120 return Result::INVALID_STATE;
121}
122
Amy Zhangd08c2732021-01-08 17:22:59 -0800123Result FrontendClient::scan(const FrontendSettings& settings, FrontendScanType type,
124 const FrontendSettingsExt1_1& settingsExt1_1) {
125 if (mTunerFrontend != NULL) {
Amy Zhangd08c2732021-01-08 17:22:59 -0800126 // TODO: aidl frontend settings to include Tuner HAL 1.1 settings
Amy Zhangb5809be2021-01-26 16:27:23 -0800127 TunerFrontendSettings tunerFeSettings = getAidlFrontendSettings(settings, settingsExt1_1);
128 Status s = mTunerFrontend->scan(tunerFeSettings, (int)type);
Amy Zhang4a07e802021-01-21 17:10:21 -0800129 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhangd08c2732021-01-08 17:22:59 -0800130 }
131
132 Result result;
133 if (mFrontend_1_1 != NULL) {
134 result = mFrontend_1_1->scan_1_1(settings, type, settingsExt1_1);
135 return result;
136 }
137
138 if (mFrontend != NULL) {
139 result = mFrontend->scan(settings, type);
140 return result;
141 }
142
143 return Result::INVALID_STATE;
144}
145
146Result FrontendClient::stopScan() {
147 if (mTunerFrontend != NULL) {
Amy Zhang4a07e802021-01-21 17:10:21 -0800148 Status s = mTunerFrontend->stopScan();
149 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhangd08c2732021-01-08 17:22:59 -0800150 }
151
152 if (mFrontend != NULL) {
153 Result result = mFrontend->stopScan();
154 return result;
155 }
156
157 return Result::INVALID_STATE;
158}
159
160vector<FrontendStatus> FrontendClient::getStatus(vector<FrontendStatusType> statusTypes) {
161 vector<FrontendStatus> status;
162
163 if (mTunerFrontend != NULL) {
164 // TODO: handle error message.
165 /*status = mTunerFrontend->getStatus(statusTypes);
166 return status;*/
167 }
168
169 if (mFrontend != NULL && statusTypes.size() > 0) {
170 Result res;
171 mFrontend->getStatus(statusTypes,
172 [&](Result r, const hidl_vec<FrontendStatus>& s) {
173 res = r;
174 status = s;
175 });
176 if (res != Result::SUCCESS) {
177 status.clear();
178 return status;
179 }
180 }
181
182 return status;
183}
184vector<FrontendStatusExt1_1> FrontendClient::getStatusExtended_1_1(
185 vector<FrontendStatusTypeExt1_1> statusTypes) {
186 vector<FrontendStatusExt1_1> status;
187
188 if (mTunerFrontend != NULL) {
189 // TODO: handle error message.
190 /*status = mTunerFrontend->getStatusExtended_1_1(statusTypes);
191 return status;*/
192 }
193
194 if (mFrontend_1_1 != NULL && statusTypes.size() > 0) {
195 Result res;
196 mFrontend_1_1->getStatusExt1_1(statusTypes,
197 [&](Result r, const hidl_vec<FrontendStatusExt1_1>& s) {
198 res = r;
199 status = s;
200 });
201 if (res != Result::SUCCESS) {
202 status.clear();
203 return status;
204 }
205 }
206
207 return status;
208}
209
Amy Zhangd3d57b42021-01-07 11:14:43 -0800210Result FrontendClient::setLnb(sp<LnbClient> lnbClient) {
211 if (mTunerFrontend != NULL) {
212 // TODO: handle error message.
213 /*mTunerFrontend->setLnb(lnbClient->getAidlLnb());
214 return Result::SUCCESS;*/
215 }
216
217 if (mFrontend != NULL) {
218 Result result = mFrontend->setLnb(lnbClient->getId());
219 return result;
220 }
221
222 return Result::INVALID_STATE;
223}
224
Amy Zhangd08c2732021-01-08 17:22:59 -0800225Result FrontendClient::setLna(bool bEnable) {
226 if (mTunerFrontend != NULL) {
227 // TODO: handle error message.
228 /*mTunerFrontend->setLna(bEnable);
229 return Result::SUCCESS;*/
230 }
231
232 if (mFrontend != NULL) {
233 Result result = mFrontend->setLna(bEnable);
234 return result;
235 }
236
237 return Result::INVALID_STATE;
238}
239
240int FrontendClient::linkCiCamToFrontend(int ciCamId) {
241 int ltsId = (int)Constant::INVALID_LTS_ID;
242
243 if (mTunerFrontend != NULL) {
244 // TODO: handle error message.
245 /*mTunerFrontend->linkCiCamToFrontend(ciCamId, ltsId);
246 return ltsId;*/
247 }
248
249 if (mFrontend_1_1 != NULL) {
250 Result res;
251 mFrontend_1_1->linkCiCam(static_cast<uint32_t>(ciCamId),
252 [&](Result r, uint32_t id) {
253 res = r;
254 ltsId = id;
255 });
256 if (res != Result::SUCCESS) {
257 return (int)Constant::INVALID_LTS_ID;
258 }
259 }
260
261 return ltsId;
262}
263
264Result FrontendClient::unlinkCiCamToFrontend(int ciCamId) {
265 if (mTunerFrontend != NULL) {
266 // TODO: handle error message.
267 /*mTunerFrontend->unlinkCiCamToFrontend(ciCamId);
268 return Result::SUCCESS;*/
269 }
270
271 if (mFrontend_1_1 != NULL) {
272 return mFrontend_1_1->unlinkCiCam(static_cast<uint32_t>(ciCamId));
273 }
274
275 return Result::INVALID_STATE;
276}
277
Amy Zhanga6734682020-11-30 16:14:38 -0800278Result FrontendClient::close() {
279 if (mTunerFrontend != NULL) {
Amy Zhang4a07e802021-01-21 17:10:21 -0800280 Status s = mTunerFrontend->close();
281 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhanga6734682020-11-30 16:14:38 -0800282 }
283
284 if (mFrontend != NULL) {
285 Result result = mFrontend->close();
286 if (result == Result::SUCCESS) {
287 mFrontend = NULL;
288 mFrontend_1_1 = NULL;
289 }
290 return result;
291 }
292
293 return Result::INVALID_STATE;
294}
295
Amy Zhang6bfeaa02020-11-30 15:16:39 -0800296shared_ptr<ITunerFrontend> FrontendClient::getAidlFrontend() {
297 return mTunerFrontend;
298}
299
300int FrontendClient::getId() {
Amy Zhang210c26a2021-01-12 11:25:27 -0800301 return mId;
Amy Zhang6bfeaa02020-11-30 15:16:39 -0800302}
303
Amy Zhangb5809be2021-01-26 16:27:23 -0800304TunerFrontendSettings FrontendClient::getAidlFrontendSettings(const FrontendSettings& settings,
305 const FrontendSettingsExt1_1& /*settingsExt1_1*/) {
306 // TODO: complete hidl to aidl frontend settings conversion
307 TunerFrontendSettings s;
308 switch (settings.getDiscriminator()) {
309 case FrontendSettings::hidl_discriminator::analog: {
310 break;
311 }
312 case FrontendSettings::hidl_discriminator::atsc: {
313 break;
314 }
315 case FrontendSettings::hidl_discriminator::atsc3: {
316 break;
317 }
318 case FrontendSettings::hidl_discriminator::dvbs: {
319 break;
320 }
321 case FrontendSettings::hidl_discriminator::dvbc: {
322 break;
323 }
324 case FrontendSettings::hidl_discriminator::dvbt: {
325 TunerFrontendDvbtSettings dvbtSettings{
326 .frequency = (int)settings.dvbt().frequency,
327 .transmissionMode = (int)settings.dvbt().transmissionMode,
328 .bandwidth = (int)settings.dvbt().bandwidth,
329 .constellation = (int)settings.dvbt().constellation,
330 .hierarchy = (int)settings.dvbt().hierarchy,
331 .hpCodeRate = (int)settings.dvbt().hpCoderate,
332 .lpCodeRate = (int)settings.dvbt().lpCoderate,
333 .guardInterval = (int)settings.dvbt().guardInterval,
334 .isHighPriority = settings.dvbt().isHighPriority,
335 .standard = (int)settings.dvbt().standard,
336 .isMiso = settings.dvbt().isMiso,
337 .plpMode = (int)settings.dvbt().plpMode,
338 .plpId = (int)settings.dvbt().plpId,
339 .plpGroupId = (int)settings.dvbt().plpGroupId,
340 };
341 s.set<TunerFrontendSettings::dvbt>(dvbtSettings);
342 break;
343 }
344 case FrontendSettings::hidl_discriminator::isdbs: {
345 break;
346 }
347 case FrontendSettings::hidl_discriminator::isdbs3: {
348 break;
349 }
350 case FrontendSettings::hidl_discriminator::isdbt: {
351 break;
352 }
353 default:
354 break;
355 }
356 return s;
357}
358
Amy Zhanga6734682020-11-30 16:14:38 -0800359/////////////// TunerFrontendCallback ///////////////////////
360
361TunerFrontendCallback::TunerFrontendCallback(sp<FrontendClientCallback> frontendClientCallback)
362 : mFrontendClientCallback(frontendClientCallback) {}
363
364Status TunerFrontendCallback::onEvent(int frontendEventType) {
365 if (mFrontendClientCallback != NULL) {
366 mFrontendClientCallback->onEvent(static_cast<FrontendEventType>(frontendEventType));
367 return Status::ok();
368 }
369 return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
370}
371
Amy Zhangb9f3cab2021-01-13 15:24:14 -0800372Status TunerFrontendCallback::onScanMessage(int messageType,
373 const TunerFrontendScanMessage& message) {
374 if (mFrontendClientCallback != NULL) {
375 if (!is1_1ExtendedScanMessage(messageType)) {
376 mFrontendClientCallback->onScanMessage(
377 static_cast<FrontendScanMessageType>(messageType),
378 getHalScanMessage(messageType, message));
379 } else {
380 mFrontendClientCallback->onScanMessageExt1_1(
381 static_cast<FrontendScanMessageTypeExt1_1>(messageType),
382 getHalScanMessageExt1_1(messageType, message));
383 }
384 return Status::ok();
385 }
386 return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
Amy Zhanga6734682020-11-30 16:14:38 -0800387}
388
389/////////////// IFrontendCallback ///////////////////////
390
391HidlFrontendCallback::HidlFrontendCallback(sp<FrontendClientCallback> frontendClientCallback)
392 : mFrontendClientCallback(frontendClientCallback) {}
393
394Return<void> HidlFrontendCallback::onEvent(FrontendEventType frontendEventType) {
395 if (mFrontendClientCallback != NULL) {
396 mFrontendClientCallback->onEvent(frontendEventType);
397 }
398 return Void();
399}
400
401Return<void> HidlFrontendCallback::onScanMessage(FrontendScanMessageType type,
402 const FrontendScanMessage& message) {
403 if (mFrontendClientCallback != NULL) {
404 mFrontendClientCallback->onScanMessage(type, message);
405 }
406 return Void();
407}
408
409Return<void> HidlFrontendCallback::onScanMessageExt1_1(FrontendScanMessageTypeExt1_1 type,
410 const FrontendScanMessageExt1_1& message) {
411 if (mFrontendClientCallback != NULL) {
412 mFrontendClientCallback->onScanMessageExt1_1(type, message);
413 }
414 return Void();
415}
Amy Zhangb9f3cab2021-01-13 15:24:14 -0800416
417/////////////// FrontendClientCallback Helper Methods ///////////////////////
418
419FrontendScanMessage TunerFrontendCallback::getHalScanMessage(
420 int messageType, const TunerFrontendScanMessage& message) {
421 FrontendScanMessage scanMessage;
422 switch (messageType) {
423 case (int) FrontendScanMessageType::LOCKED:
424 scanMessage.isLocked(message.get<TunerFrontendScanMessage::isLocked>());
425 break;
426 case (int) FrontendScanMessageType::END:
427 scanMessage.isEnd(message.get<TunerFrontendScanMessage::isEnd>());
428 break;
429 case (int) FrontendScanMessageType::PROGRESS_PERCENT:
430 scanMessage.progressPercent(message.get<TunerFrontendScanMessage::progressPercent>());
431 break;
432 case (int) FrontendScanMessageType::FREQUENCY: {
433 vector<int> f = message.get<TunerFrontendScanMessage::frequencies>();
434 hidl_vec<uint32_t> frequencies(begin(f), end(f));
435 scanMessage.frequencies(frequencies);
436 break;
437 }
438 case (int) FrontendScanMessageType::SYMBOL_RATE: {
439 vector<int> s = message.get<TunerFrontendScanMessage::symbolRates>();
440 hidl_vec<uint32_t> symbolRates(begin(s), end(s));
441 scanMessage.symbolRates(symbolRates);
442 break;
443 }
444 case (int) FrontendScanMessageType::HIERARCHY:
445 scanMessage.hierarchy(static_cast<FrontendDvbtHierarchy>(
446 message.get<TunerFrontendScanMessage::hierarchy>()));
447 break;
448 case (int) FrontendScanMessageType::ANALOG_TYPE:
449 scanMessage.analogType(static_cast<FrontendAnalogType>(
450 message.get<TunerFrontendScanMessage::analogType>()));
451 break;
452 case (int) FrontendScanMessageType::PLP_IDS: {
453 vector<uint8_t> p = message.get<TunerFrontendScanMessage::plpIds>();
454 hidl_vec<uint8_t> plpIds(begin(p), end(p));
455 scanMessage.plpIds(plpIds);
456 break;
457 }
458 case (int) FrontendScanMessageType::GROUP_IDS: {
459 vector<uint8_t> g = message.get<TunerFrontendScanMessage::groupIds>();
460 hidl_vec<uint8_t> groupIds(begin(g), end(g));
461 scanMessage.groupIds(groupIds);
462 break;
463 }
464 case (int) FrontendScanMessageType::INPUT_STREAM_IDS: {
465 vector<char16_t> i = message.get<TunerFrontendScanMessage::inputStreamIds>();
466 hidl_vec<uint16_t> inputStreamIds(begin(i), end(i));
467 scanMessage.inputStreamIds(inputStreamIds);
468 break;
469 }
470 case (int) FrontendScanMessageType::STANDARD: {
471 FrontendScanMessage::Standard std;
472 int standard = message.get<TunerFrontendScanMessage::std>();
473 switch (mType) {
474 case (int) FrontendType::DVBS:
475 std.sStd(static_cast<FrontendDvbsStandard>(standard));
476 scanMessage.std(std);
477 break;
478 case (int) FrontendType::DVBT:
479 std.tStd(static_cast<FrontendDvbtStandard>(standard));
480 scanMessage.std(std);
481 break;
482 case (int) FrontendType::ANALOG:
483 std.sifStd(static_cast<FrontendAnalogSifStandard>(standard));
484 scanMessage.std(std);
485 break;
486 default:
487 break;
488 }
489 break;
490 }
491 case (int) FrontendScanMessageType::ATSC3_PLP_INFO: {
492 vector<TunerFrontendScanAtsc3PlpInfo> plp =
493 message.get<TunerFrontendScanMessage::atsc3PlpInfos>();
494 hidl_vec<FrontendScanAtsc3PlpInfo> plpInfo;
495 for (TunerFrontendScanAtsc3PlpInfo info : plp) {
496 FrontendScanAtsc3PlpInfo p{
497 .plpId = static_cast<uint8_t>(info.plpId),
498 .bLlsFlag = info.llsFlag,
499 };
500 int size = plpInfo.size();
501 plpInfo.resize(size + 1);
502 plpInfo[size] = p;
503 }
504 scanMessage.atsc3PlpInfos(plpInfo);
505 break;
506 }
507 default:
508 break;
509 }
510 return scanMessage;
511}
512
513FrontendScanMessageExt1_1 TunerFrontendCallback::getHalScanMessageExt1_1(
514 int messageType, const TunerFrontendScanMessage& message) {
515 FrontendScanMessageExt1_1 scanMessage;
516 switch (messageType) {
517 case (int) FrontendScanMessageTypeExt1_1::HIGH_PRIORITY:
518 scanMessage.isHighPriority(message.get<TunerFrontendScanMessage::isHighPriority>());
519 break;
520 case (int) FrontendScanMessageTypeExt1_1::DVBC_ANNEX:
521 scanMessage.annex(static_cast<FrontendDvbcAnnex>(
522 message.get<TunerFrontendScanMessage::annex>()));
523 break;
524 case (int) FrontendScanMessageTypeExt1_1::MODULATION: {
525 FrontendModulation m;
526 int modulation = message.get<TunerFrontendScanMessage::modulation>();
527 switch (mType) {
528 case (int) FrontendType::DVBC:
529 m.dvbc(static_cast<FrontendDvbcModulation>(modulation));
530 scanMessage.modulation(m);
531 break;
532 case (int) FrontendType::DVBS:
533 m.dvbs(static_cast<FrontendDvbsModulation>(modulation));
534 scanMessage.modulation(m);
535 break;
536 case (int) FrontendType::DVBT:
537 m.dvbt(static_cast<FrontendDvbtConstellation>(modulation));
538 scanMessage.modulation(m);
539 break;
540 case (int) FrontendType::ISDBS:
541 m.isdbs(static_cast<FrontendIsdbsModulation>(modulation));
542 scanMessage.modulation(m);
543 break;
544 case (int) FrontendType::ISDBS3:
545 m.isdbs3(static_cast<FrontendIsdbs3Modulation>(modulation));
546 scanMessage.modulation(m);
547 break;
548 case (int) FrontendType::ISDBT:
549 m.isdbt(static_cast<FrontendIsdbtModulation>(modulation));
550 scanMessage.modulation(m);
551 break;
552 case (int) FrontendType::ATSC:
553 m.atsc(static_cast<FrontendAtscModulation>(modulation));
554 scanMessage.modulation(m);
555 break;
556 case (int) FrontendType::ATSC3:
557 m.atsc3(static_cast<FrontendAtsc3Modulation>(modulation));
558 scanMessage.modulation(m);
559 break;
560 case (int) hardware::tv::tuner::V1_1::FrontendType::DTMB:
561 m.dtmb(static_cast<FrontendDtmbModulation>(modulation));
562 scanMessage.modulation(m);
563 break;
564 default:
565 break;
566 }
567 break;
568 }
569 default:
570 break;
571 }
572 return scanMessage;
573}
574
575bool TunerFrontendCallback::is1_1ExtendedScanMessage(int messageType) {
576 return messageType >= (int)FrontendScanMessageTypeExt1_1::MODULATION
577 && messageType <= (int)FrontendScanMessageTypeExt1_1::HIGH_PRIORITY;
578}
Amy Zhanga6734682020-11-30 16:14:38 -0800579} // namespace android