blob: 63a46dceb942229a4b971beefcceec01cc283c91 [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 Zhanga6734682020-11-30 16:14:38 -080024using ::aidl::android::media::tv::tuner::TunerFrontendSettings;
25
Amy Zhangbf68a162020-11-23 17:42:40 -080026namespace android {
27
Amy Zhanga6734682020-11-30 16:14:38 -080028/////////////// FrontendClient ///////////////////////
29
Amy Zhangbf68a162020-11-23 17:42:40 -080030FrontendClient::FrontendClient(shared_ptr<ITunerFrontend> tunerFrontend) {
31 mTunerFrontend = tunerFrontend;
Amy Zhanga6734682020-11-30 16:14:38 -080032 mAidlCallback = NULL;
33 mHidlCallback = NULL;
Amy Zhangbf68a162020-11-23 17:42:40 -080034}
35
36FrontendClient::~FrontendClient() {
37 mTunerFrontend = NULL;
38 mFrontend = NULL;
39 mFrontend_1_1 = NULL;
Amy Zhanga6734682020-11-30 16:14:38 -080040 mAidlCallback = NULL;
41 mHidlCallback = NULL;
42}
43
44Result FrontendClient::setCallback(sp<FrontendClientCallback> frontendClientCallback) {
45 if (mTunerFrontend != NULL) {
46 mAidlCallback = ::ndk::SharedRefBase::make<TunerFrontendCallback>(frontendClientCallback);
47 mTunerFrontend->setCallback(mAidlCallback);
48 return Result::SUCCESS;
49 }
50
51 mHidlCallback = new HidlFrontendCallback(frontendClientCallback);
52 return mFrontend->setCallback(mHidlCallback);
Amy Zhangbf68a162020-11-23 17:42:40 -080053}
54
55void FrontendClient::setHidlFrontend(sp<IFrontend> frontend) {
56 mFrontend = frontend;
57 mFrontend_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFrontend);
58}
Amy Zhanga6734682020-11-30 16:14:38 -080059
60Result FrontendClient::tune(const FrontendSettings& settings,
61 const FrontendSettingsExt1_1& settingsExt1_1) {
62 if (mTunerFrontend != NULL) {
63 // TODO: parse hidl settings to aidl settings
64 // TODO: aidl frontend settings to include Tuner HAL 1.1 settings
65 TunerFrontendSettings settings;
66 // TODO: handle error message.
67 mTunerFrontend->tune(settings);
68 return Result::SUCCESS;
69 }
70
71 Result result;
72 if (mFrontend_1_1 != NULL) {
73 result = mFrontend_1_1->tune_1_1(settings, settingsExt1_1);
74 return result;
75 }
76
77 if (mFrontend != NULL) {
78 result = mFrontend->tune(settings);
79 return result;
80 }
81
82 return Result::INVALID_STATE;
Amy Zhangbf68a162020-11-23 17:42:40 -080083}
Amy Zhanga6734682020-11-30 16:14:38 -080084
85Result FrontendClient::stopTune() {
86 if (mTunerFrontend != NULL) {
87 // TODO: handle error message.
88 mTunerFrontend->stopTune();
89 return Result::SUCCESS;
90 }
91
92 if (mFrontend != NULL) {
93 Result result = mFrontend->stopTune();
94 return result;
95 }
96
97 return Result::INVALID_STATE;
98}
99
100Result FrontendClient::close() {
101 if (mTunerFrontend != NULL) {
102 // TODO: handle error message.
103 mTunerFrontend->close();
104 return Result::SUCCESS;
105 }
106
107 if (mFrontend != NULL) {
108 Result result = mFrontend->close();
109 if (result == Result::SUCCESS) {
110 mFrontend = NULL;
111 mFrontend_1_1 = NULL;
112 }
113 return result;
114 }
115
116 return Result::INVALID_STATE;
117}
118
119/////////////// TunerFrontendCallback ///////////////////////
120
121TunerFrontendCallback::TunerFrontendCallback(sp<FrontendClientCallback> frontendClientCallback)
122 : mFrontendClientCallback(frontendClientCallback) {}
123
124Status TunerFrontendCallback::onEvent(int frontendEventType) {
125 if (mFrontendClientCallback != NULL) {
126 mFrontendClientCallback->onEvent(static_cast<FrontendEventType>(frontendEventType));
127 return Status::ok();
128 }
129 return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
130}
131
132Status TunerFrontendCallback::onLocked() {
133 return Status::ok();
134}
135
136Status TunerFrontendCallback::onScanStopped() {
137 return Status::ok();
138}
139
140Status TunerFrontendCallback::onProgress(int /*percent*/) {
141 return Status::ok();
142}
143
144Status TunerFrontendCallback::onFrequenciesReport(const vector<int>& /*frequency*/) {
145 return Status::ok();
146}
147
148Status TunerFrontendCallback::onSymbolRates(const vector<int>& /*rates*/) {
149 return Status::ok();
150}
151
152Status TunerFrontendCallback::onHierarchy(int /*hierarchy*/) {
153 return Status::ok();
154}
155
156Status TunerFrontendCallback::onSignalType(int /*signalType*/) {
157 return Status::ok();
158}
159
160Status TunerFrontendCallback::onPlpIds(const vector<int>& /*plpIds*/) {
161 return Status::ok();
162}
163
164Status TunerFrontendCallback::onGroupIds(const vector<int>& /*groupIds*/) {
165 return Status::ok();
166}
167
168Status TunerFrontendCallback::onInputStreamIds(const vector<int>& /*inputStreamIds*/) {
169 return Status::ok();
170}
171
172Status TunerFrontendCallback::onDvbsStandard(int /*dvbsStandandard*/) {
173 return Status::ok();
174}
175
176Status TunerFrontendCallback::onAnalogSifStandard(int /*sifStandandard*/) {
177 return Status::ok();
178}
179
180Status TunerFrontendCallback::onAtsc3PlpInfos(const vector<TunerAtsc3PlpInfo>& /*atsc3PlpInfos*/) {
181 return Status::ok();
182}
183
184/////////////// IFrontendCallback ///////////////////////
185
186HidlFrontendCallback::HidlFrontendCallback(sp<FrontendClientCallback> frontendClientCallback)
187 : mFrontendClientCallback(frontendClientCallback) {}
188
189Return<void> HidlFrontendCallback::onEvent(FrontendEventType frontendEventType) {
190 if (mFrontendClientCallback != NULL) {
191 mFrontendClientCallback->onEvent(frontendEventType);
192 }
193 return Void();
194}
195
196Return<void> HidlFrontendCallback::onScanMessage(FrontendScanMessageType type,
197 const FrontendScanMessage& message) {
198 if (mFrontendClientCallback != NULL) {
199 mFrontendClientCallback->onScanMessage(type, message);
200 }
201 return Void();
202}
203
204Return<void> HidlFrontendCallback::onScanMessageExt1_1(FrontendScanMessageTypeExt1_1 type,
205 const FrontendScanMessageExt1_1& message) {
206 if (mFrontendClientCallback != NULL) {
207 mFrontendClientCallback->onScanMessageExt1_1(type, message);
208 }
209 return Void();
210}
211} // namespace android