blob: 8d08c2586b48517faf09230adbb18330dc5ef65b [file] [log] [blame]
Amy Zhangb0f63ab2021-01-06 17:19:27 -08001/*
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_TAG "LnbClient"
18
19#include <android-base/logging.h>
20#include <utils/Log.h>
21
22#include "LnbClient.h"
23
24using ::android::hardware::tv::tuner::V1_0::Result;
25
26namespace android {
27
28/////////////// LnbClient ///////////////////////
29
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080030LnbClient::LnbClient(shared_ptr<ITunerLnb> tunerLnb) {
31 mTunerLnb = tunerLnb;
Amy Zhangd3d57b42021-01-07 11:14:43 -080032 mId = -1;
Amy Zhangb0f63ab2021-01-06 17:19:27 -080033}
34
35LnbClient::~LnbClient() {
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080036 mTunerLnb = NULL;
Amy Zhangb0f63ab2021-01-06 17:19:27 -080037 mLnb = NULL;
Amy Zhangd3d57b42021-01-07 11:14:43 -080038 mId = -1;
Amy Zhangb0f63ab2021-01-06 17:19:27 -080039}
40
41// TODO: remove after migration to Tuner Service is done.
42void LnbClient::setHidlLnb(sp<ILnb> lnb) {
43 mLnb = lnb;
44}
45
Amy Zhangd3d57b42021-01-07 11:14:43 -080046Result LnbClient::setCallback(sp<LnbClientCallback> cb) {
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080047 if (mTunerLnb != NULL) {
Amy Zhangd3d57b42021-01-07 11:14:43 -080048 mAidlCallback = ::ndk::SharedRefBase::make<TunerLnbCallback>(cb);
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080049 Status s = mTunerLnb->setCallback(mAidlCallback);
Amy Zhang4a07e802021-01-21 17:10:21 -080050 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080051 }
Amy Zhangd3d57b42021-01-07 11:14:43 -080052
Amy Zhang9eeba432021-01-21 12:52:05 -080053 if (mLnb != NULL) {
54 mHidlCallback = new HidlLnbCallback(cb);
55 return mLnb->setCallback(mHidlCallback);
56 }
57
58 return Result::INVALID_STATE;
Amy Zhangb0f63ab2021-01-06 17:19:27 -080059}
60
Amy Zhangd3d57b42021-01-07 11:14:43 -080061Result LnbClient::setVoltage(LnbVoltage voltage) {
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080062 if (mTunerLnb != NULL) {
63 Status s = mTunerLnb->setVoltage((int)voltage);
Amy Zhang4a07e802021-01-21 17:10:21 -080064 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080065 }
Amy Zhangd3d57b42021-01-07 11:14:43 -080066
67 if (mLnb != NULL) {
68 return mLnb->setVoltage(voltage);
69 }
70
71 return Result::INVALID_STATE;
Amy Zhangb0f63ab2021-01-06 17:19:27 -080072}
73
Amy Zhangd3d57b42021-01-07 11:14:43 -080074Result LnbClient::setTone(LnbTone tone) {
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080075 if (mTunerLnb != NULL) {
76 Status s = mTunerLnb->setTone((int)tone);
Amy Zhang4a07e802021-01-21 17:10:21 -080077 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080078 }
Amy Zhangd3d57b42021-01-07 11:14:43 -080079
80 if (mLnb != NULL) {
81 return mLnb->setTone(tone);
82 }
83
84 return Result::INVALID_STATE;
Amy Zhangb0f63ab2021-01-06 17:19:27 -080085}
86
Amy Zhangd3d57b42021-01-07 11:14:43 -080087Result LnbClient::setSatellitePosition(LnbPosition position) {
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080088 if (mTunerLnb != NULL) {
89 Status s = mTunerLnb->setSatellitePosition((int)position);
Amy Zhang4a07e802021-01-21 17:10:21 -080090 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhang3ac0a3e2021-01-14 18:55:10 -080091 }
Amy Zhangd3d57b42021-01-07 11:14:43 -080092
93 if (mLnb != NULL) {
94 return mLnb->setSatellitePosition(position);
95 }
96
97 return Result::INVALID_STATE;
Amy Zhangb0f63ab2021-01-06 17:19:27 -080098}
99
Amy Zhangd3d57b42021-01-07 11:14:43 -0800100Result LnbClient::sendDiseqcMessage(vector<uint8_t> diseqcMessage) {
Amy Zhang3ac0a3e2021-01-14 18:55:10 -0800101 if (mTunerLnb != NULL) {
102 Status s = mTunerLnb->sendDiseqcMessage(diseqcMessage);
Amy Zhang4a07e802021-01-21 17:10:21 -0800103 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhang3ac0a3e2021-01-14 18:55:10 -0800104 }
Amy Zhangd3d57b42021-01-07 11:14:43 -0800105
106 if (mLnb != NULL) {
107 return mLnb->sendDiseqcMessage(diseqcMessage);
108 }
109
110 return Result::INVALID_STATE;
Amy Zhangb0f63ab2021-01-06 17:19:27 -0800111}
112
113Result LnbClient::close() {
Amy Zhang3ac0a3e2021-01-14 18:55:10 -0800114 if (mTunerLnb != NULL) {
115 Status s = mTunerLnb->close();
Amy Zhang4a07e802021-01-21 17:10:21 -0800116 return ClientHelper::getServiceSpecificErrorCode(s);
Amy Zhang3ac0a3e2021-01-14 18:55:10 -0800117 }
Amy Zhangd3d57b42021-01-07 11:14:43 -0800118
119 if (mLnb != NULL) {
120 return mLnb->close();
121 }
122
123 return Result::INVALID_STATE;
Amy Zhangb0f63ab2021-01-06 17:19:27 -0800124}
125
126/////////////// ILnbCallback ///////////////////////
127
128HidlLnbCallback::HidlLnbCallback(sp<LnbClientCallback> lnbClientCallback)
129 : mLnbClientCallback(lnbClientCallback) {}
130
131Return<void> HidlLnbCallback::onEvent(const LnbEventType lnbEventType) {
132 if (mLnbClientCallback != NULL) {
133 mLnbClientCallback->onEvent(lnbEventType);
134 }
135 return Void();
136}
137
138Return<void> HidlLnbCallback::onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage) {
139 if (mLnbClientCallback != NULL) {
140 mLnbClientCallback->onDiseqcMessage(diseqcMessage);
141 }
142 return Void();
143}
144
Amy Zhang3ac0a3e2021-01-14 18:55:10 -0800145/////////////// TunerLnbCallback ///////////////////////
Amy Zhangb0f63ab2021-01-06 17:19:27 -0800146
Amy Zhang3ac0a3e2021-01-14 18:55:10 -0800147TunerLnbCallback::TunerLnbCallback(sp<LnbClientCallback> lnbClientCallback)
148 : mLnbClientCallback(lnbClientCallback) {}
149
150Status TunerLnbCallback::onEvent(int lnbEventType) {
151 if (mLnbClientCallback != NULL) {
152 mLnbClientCallback->onEvent(static_cast<LnbEventType>(lnbEventType));
153 return Status::ok();
154 }
155 return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
156}
157
158Status TunerLnbCallback::onDiseqcMessage(const vector<uint8_t>& diseqcMessage) {
159 if (mLnbClientCallback != NULL) {
160 hidl_vec<uint8_t> msg(begin(diseqcMessage), end(diseqcMessage));
161 mLnbClientCallback->onDiseqcMessage(msg);
162 return Status::ok();
163 }
164 return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
165}
Amy Zhangb0f63ab2021-01-06 17:19:27 -0800166} // namespace android