blob: c6337ec365e501c7f44d5c7b2e76e899c1868f4a [file] [log] [blame]
Amy Zhangbf68a162020-11-23 17:42:40 -08001/*
Hongguang56637e92021-07-28 17:32:55 -07002 * Copyright 2021 The Android Open Source Project
Amy Zhangbf68a162020-11-23 17:42:40 -08003 *
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
Hongguang56637e92021-07-28 17:32:55 -070019#include "FrontendClient.h"
20
21#include <aidl/android/hardware/tv/tuner/Constant.h>
Amy Zhangbf68a162020-11-23 17:42:40 -080022#include <android-base/logging.h>
23#include <utils/Log.h>
24
Hongguang56637e92021-07-28 17:32:55 -070025using ::aidl::android::hardware::tv::tuner::Constant;
Amy Zhanga6734682020-11-30 16:14:38 -080026
Amy Zhangbf68a162020-11-23 17:42:40 -080027namespace android {
Amy Zhanga6734682020-11-30 16:14:38 -080028/////////////// FrontendClient ///////////////////////
Hongguang56637e92021-07-28 17:32:55 -070029FrontendClient::FrontendClient(shared_ptr<ITunerFrontend> tunerFrontend, FrontendType type) {
Amy Zhangbf68a162020-11-23 17:42:40 -080030 mTunerFrontend = tunerFrontend;
Amy Zhangb9f3cab2021-01-13 15:24:14 -080031 mType = type;
Amy Zhangbf68a162020-11-23 17:42:40 -080032}
33
34FrontendClient::~FrontendClient() {
Hongguang56637e92021-07-28 17:32:55 -070035 mTunerFrontend = nullptr;
36 mType = FrontendType::UNDEFINED;
Amy Zhanga6734682020-11-30 16:14:38 -080037}
38
39Result FrontendClient::setCallback(sp<FrontendClientCallback> frontendClientCallback) {
Hongguang56637e92021-07-28 17:32:55 -070040 if (mTunerFrontend != nullptr) {
Amy Zhang1ce3a592021-02-22 13:53:46 -080041 shared_ptr<TunerFrontendCallback> aidlCallback =
42 ::ndk::SharedRefBase::make<TunerFrontendCallback>(frontendClientCallback);
Amy Zhang1ce3a592021-02-22 13:53:46 -080043 Status s = mTunerFrontend->setCallback(aidlCallback);
Amy Zhang379cb482021-02-04 21:05:11 -080044 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhanga6734682020-11-30 16:14:38 -080045 }
46
Hongguang56637e92021-07-28 17:32:55 -070047 return Result::INVALID_STATE;
Amy Zhangbf68a162020-11-23 17:42:40 -080048}
49
Hongguang56637e92021-07-28 17:32:55 -070050Result FrontendClient::tune(const FrontendSettings& settings) {
51 if (mTunerFrontend != nullptr) {
52 Status s = mTunerFrontend->tune(settings);
Amy Zhang4a07e802021-01-21 17:10:21 -080053 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhanga6734682020-11-30 16:14:38 -080054 }
55
Amy Zhanga6734682020-11-30 16:14:38 -080056 return Result::INVALID_STATE;
Amy Zhangbf68a162020-11-23 17:42:40 -080057}
Amy Zhanga6734682020-11-30 16:14:38 -080058
59Result FrontendClient::stopTune() {
Hongguang56637e92021-07-28 17:32:55 -070060 if (mTunerFrontend != nullptr) {
Amy Zhang4a07e802021-01-21 17:10:21 -080061 Status s = mTunerFrontend->stopTune();
62 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhanga6734682020-11-30 16:14:38 -080063 }
64
Amy Zhanga6734682020-11-30 16:14:38 -080065 return Result::INVALID_STATE;
66}
67
Hongguang56637e92021-07-28 17:32:55 -070068Result FrontendClient::scan(const FrontendSettings& settings, FrontendScanType type) {
69 if (mTunerFrontend != nullptr) {
70 Status s = mTunerFrontend->scan(settings, type);
Amy Zhang4a07e802021-01-21 17:10:21 -080071 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhangd08c2732021-01-08 17:22:59 -080072 }
73
Amy Zhangd08c2732021-01-08 17:22:59 -080074 return Result::INVALID_STATE;
75}
76
77Result FrontendClient::stopScan() {
Hongguang56637e92021-07-28 17:32:55 -070078 if (mTunerFrontend != nullptr) {
Amy Zhang4a07e802021-01-21 17:10:21 -080079 Status s = mTunerFrontend->stopScan();
80 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhangd08c2732021-01-08 17:22:59 -080081 }
82
Amy Zhangd08c2732021-01-08 17:22:59 -080083 return Result::INVALID_STATE;
84}
85
86vector<FrontendStatus> FrontendClient::getStatus(vector<FrontendStatusType> statusTypes) {
87 vector<FrontendStatus> status;
88
Hongguang56637e92021-07-28 17:32:55 -070089 if (mTunerFrontend != nullptr) {
90 mTunerFrontend->getStatus(statusTypes, &status);
Amy Zhangd08c2732021-01-08 17:22:59 -080091 }
92
93 return status;
94}
95
Amy Zhangd3d57b42021-01-07 11:14:43 -080096Result FrontendClient::setLnb(sp<LnbClient> lnbClient) {
Hongguang56637e92021-07-28 17:32:55 -070097 if (mTunerFrontend != nullptr) {
Amy Zhang379cb482021-02-04 21:05:11 -080098 Status s = mTunerFrontend->setLnb(lnbClient->getAidlLnb());
99 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhangd3d57b42021-01-07 11:14:43 -0800100 }
101
Amy Zhangd3d57b42021-01-07 11:14:43 -0800102 return Result::INVALID_STATE;
103}
104
Hongguang56637e92021-07-28 17:32:55 -0700105int32_t FrontendClient::linkCiCamToFrontend(int32_t ciCamId) {
106 int32_t ltsId = static_cast<int32_t>(Constant::INVALID_LTS_ID);
Amy Zhangd08c2732021-01-08 17:22:59 -0800107
Hongguang56637e92021-07-28 17:32:55 -0700108 if (mTunerFrontend != nullptr) {
Amy Zhang379cb482021-02-04 21:05:11 -0800109 Status s = mTunerFrontend->linkCiCamToFrontend(ciCamId, &ltsId);
Hongguang56637e92021-07-28 17:32:55 -0700110 if (!s.isOk()) {
111 return static_cast<int32_t>(Constant::INVALID_LTS_ID);
Amy Zhangd08c2732021-01-08 17:22:59 -0800112 }
113 }
114
115 return ltsId;
116}
117
Hongguang56637e92021-07-28 17:32:55 -0700118Result FrontendClient::unlinkCiCamToFrontend(int32_t ciCamId) {
119 if (mTunerFrontend != nullptr) {
Amy Zhang379cb482021-02-04 21:05:11 -0800120 Status s = mTunerFrontend->unlinkCiCamToFrontend(ciCamId);
121 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhangd08c2732021-01-08 17:22:59 -0800122 }
123
Amy Zhangd08c2732021-01-08 17:22:59 -0800124 return Result::INVALID_STATE;
125}
126
Amy Zhanga6734682020-11-30 16:14:38 -0800127Result FrontendClient::close() {
Hongguang56637e92021-07-28 17:32:55 -0700128 if (mTunerFrontend != nullptr) {
Amy Zhang4a07e802021-01-21 17:10:21 -0800129 Status s = mTunerFrontend->close();
Hongguang56637e92021-07-28 17:32:55 -0700130 mTunerFrontend = nullptr;
Amy Zhang4a07e802021-01-21 17:10:21 -0800131 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhanga6734682020-11-30 16:14:38 -0800132 }
133
Amy Zhanga6734682020-11-30 16:14:38 -0800134 return Result::INVALID_STATE;
135}
136
Hongguang38904f82021-12-13 18:17:59 -0800137Result FrontendClient::getHardwareInfo(string& info) {
138 if (mTunerFrontend != nullptr) {
139 Status s = mTunerFrontend->getHardwareInfo(&info);
140 return ClientHelper::getServiceSpecificErrorCode(s);
141 }
142
143 return Result::INVALID_STATE;
144}
145
Hongguangcfd146f2022-01-11 12:54:12 -0800146Result FrontendClient::removeOutputPid(int32_t pid) {
147 if (mTunerFrontend != nullptr) {
148 Status s = mTunerFrontend->removeOutputPid(pid);
149 return ClientHelper::getServiceSpecificErrorCode(s);
150 }
151
152 return Result::INVALID_STATE;
153}
154
Hongguang9efb9dc2022-01-14 15:22:55 -0800155vector<FrontendStatusReadiness> FrontendClient::getStatusReadiness(
156 const std::vector<FrontendStatusType>& statusTypes) {
157 vector<FrontendStatusReadiness> readiness;
158 if (mTunerFrontend != nullptr) {
159 mTunerFrontend->getFrontendStatusReadiness(statusTypes, &readiness);
160 }
161
162 return readiness;
163}
164
Amy Zhang6bfeaa02020-11-30 15:16:39 -0800165shared_ptr<ITunerFrontend> FrontendClient::getAidlFrontend() {
166 return mTunerFrontend;
167}
168
Hongguang56637e92021-07-28 17:32:55 -0700169int32_t FrontendClient::getId() {
170 if (mTunerFrontend != nullptr) {
171 int32_t id;
172 Status s = mTunerFrontend->getFrontendId(&id);
173 if (s.isOk()) {
174 return id;
Amy Zhang46c31ec2021-02-03 18:19:10 -0800175 }
176 }
Amy Zhang46c31ec2021-02-03 18:19:10 -0800177
Hongguang56637e92021-07-28 17:32:55 -0700178 return static_cast<int32_t>(Constant::INVALID_FRONTEND_ID);
Amy Zhanga6734682020-11-30 16:14:38 -0800179}
180
181/////////////// IFrontendCallback ///////////////////////
Hongguang56637e92021-07-28 17:32:55 -0700182TunerFrontendCallback::TunerFrontendCallback(sp<FrontendClientCallback> frontendClientCallback)
Amy Zhanga6734682020-11-30 16:14:38 -0800183 : mFrontendClientCallback(frontendClientCallback) {}
184
Hongguang56637e92021-07-28 17:32:55 -0700185Status TunerFrontendCallback::onEvent(FrontendEventType frontendEventType) {
186 if (mFrontendClientCallback != nullptr) {
Amy Zhanga6734682020-11-30 16:14:38 -0800187 mFrontendClientCallback->onEvent(frontendEventType);
Hongguang56637e92021-07-28 17:32:55 -0700188 return Status::ok();
Amy Zhanga6734682020-11-30 16:14:38 -0800189 }
Hongguang56637e92021-07-28 17:32:55 -0700190 return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
Amy Zhanga6734682020-11-30 16:14:38 -0800191}
192
Hongguang56637e92021-07-28 17:32:55 -0700193Status TunerFrontendCallback::onScanMessage(FrontendScanMessageType messageType,
194 const FrontendScanMessage& message) {
195 if (mFrontendClientCallback != nullptr) {
196 mFrontendClientCallback->onScanMessage(messageType, message);
197 return Status::ok();
Amy Zhanga6734682020-11-30 16:14:38 -0800198 }
Hongguang56637e92021-07-28 17:32:55 -0700199 return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
Amy Zhanga6734682020-11-30 16:14:38 -0800200}
201
Amy Zhanga6734682020-11-30 16:14:38 -0800202} // namespace android