xref: /aosp_15_r20/frameworks/av/services/tuner/hidl/TunerHidlLnb.cpp (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /**
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright 2021, The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "TunerHidlLnb"
18*ec779b8eSAndroid Build Coastguard Worker 
19*ec779b8eSAndroid Build Coastguard Worker #include "TunerHidlLnb.h"
20*ec779b8eSAndroid Build Coastguard Worker 
21*ec779b8eSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/Result.h>
22*ec779b8eSAndroid Build Coastguard Worker 
23*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::Result;
24*ec779b8eSAndroid Build Coastguard Worker using HidlLnbPosition = ::android::hardware::tv::tuner::V1_0::LnbPosition;
25*ec779b8eSAndroid Build Coastguard Worker using HidlLnbTone = ::android::hardware::tv::tuner::V1_0::LnbTone;
26*ec779b8eSAndroid Build Coastguard Worker using HidlLnbVoltage = ::android::hardware::tv::tuner::V1_0::LnbVoltage;
27*ec779b8eSAndroid Build Coastguard Worker using HidlResult = ::android::hardware::tv::tuner::V1_0::Result;
28*ec779b8eSAndroid Build Coastguard Worker 
29*ec779b8eSAndroid Build Coastguard Worker using namespace std;
30*ec779b8eSAndroid Build Coastguard Worker 
31*ec779b8eSAndroid Build Coastguard Worker namespace aidl {
32*ec779b8eSAndroid Build Coastguard Worker namespace android {
33*ec779b8eSAndroid Build Coastguard Worker namespace media {
34*ec779b8eSAndroid Build Coastguard Worker namespace tv {
35*ec779b8eSAndroid Build Coastguard Worker namespace tuner {
36*ec779b8eSAndroid Build Coastguard Worker 
TunerHidlLnb(sp<HidlILnb> lnb,int id)37*ec779b8eSAndroid Build Coastguard Worker TunerHidlLnb::TunerHidlLnb(sp<HidlILnb> lnb, int id) {
38*ec779b8eSAndroid Build Coastguard Worker     mLnb = lnb;
39*ec779b8eSAndroid Build Coastguard Worker     mId = id;
40*ec779b8eSAndroid Build Coastguard Worker }
41*ec779b8eSAndroid Build Coastguard Worker 
~TunerHidlLnb()42*ec779b8eSAndroid Build Coastguard Worker TunerHidlLnb::~TunerHidlLnb() {
43*ec779b8eSAndroid Build Coastguard Worker     mLnb = nullptr;
44*ec779b8eSAndroid Build Coastguard Worker     mId = -1;
45*ec779b8eSAndroid Build Coastguard Worker }
46*ec779b8eSAndroid Build Coastguard Worker 
setCallback(const shared_ptr<ITunerLnbCallback> & in_tunerLnbCallback)47*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlLnb::setCallback(
48*ec779b8eSAndroid Build Coastguard Worker         const shared_ptr<ITunerLnbCallback>& in_tunerLnbCallback) {
49*ec779b8eSAndroid Build Coastguard Worker     if (mLnb == nullptr) {
50*ec779b8eSAndroid Build Coastguard Worker         ALOGE("ILnb is not initialized");
51*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
52*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::UNAVAILABLE));
53*ec779b8eSAndroid Build Coastguard Worker     }
54*ec779b8eSAndroid Build Coastguard Worker 
55*ec779b8eSAndroid Build Coastguard Worker     if (in_tunerLnbCallback == nullptr) {
56*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
57*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::INVALID_ARGUMENT));
58*ec779b8eSAndroid Build Coastguard Worker     }
59*ec779b8eSAndroid Build Coastguard Worker 
60*ec779b8eSAndroid Build Coastguard Worker     sp<HidlILnbCallback> lnbCallback = new LnbCallback(in_tunerLnbCallback);
61*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mLnb->setCallback(lnbCallback);
62*ec779b8eSAndroid Build Coastguard Worker     if (status != HidlResult::SUCCESS) {
63*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
64*ec779b8eSAndroid Build Coastguard Worker     }
65*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::ok();
66*ec779b8eSAndroid Build Coastguard Worker }
67*ec779b8eSAndroid Build Coastguard Worker 
setVoltage(LnbVoltage in_voltage)68*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlLnb::setVoltage(LnbVoltage in_voltage) {
69*ec779b8eSAndroid Build Coastguard Worker     if (mLnb == nullptr) {
70*ec779b8eSAndroid Build Coastguard Worker         ALOGE("ILnb is not initialized");
71*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
72*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::UNAVAILABLE));
73*ec779b8eSAndroid Build Coastguard Worker     }
74*ec779b8eSAndroid Build Coastguard Worker 
75*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mLnb->setVoltage(static_cast<HidlLnbVoltage>(in_voltage));
76*ec779b8eSAndroid Build Coastguard Worker     if (status != HidlResult::SUCCESS) {
77*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
78*ec779b8eSAndroid Build Coastguard Worker     }
79*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::ok();
80*ec779b8eSAndroid Build Coastguard Worker }
81*ec779b8eSAndroid Build Coastguard Worker 
setTone(LnbTone in_tone)82*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlLnb::setTone(LnbTone in_tone) {
83*ec779b8eSAndroid Build Coastguard Worker     if (mLnb == nullptr) {
84*ec779b8eSAndroid Build Coastguard Worker         ALOGE("ILnb is not initialized");
85*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
86*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::UNAVAILABLE));
87*ec779b8eSAndroid Build Coastguard Worker     }
88*ec779b8eSAndroid Build Coastguard Worker 
89*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mLnb->setTone(static_cast<HidlLnbTone>(in_tone));
90*ec779b8eSAndroid Build Coastguard Worker     if (status != HidlResult::SUCCESS) {
91*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
92*ec779b8eSAndroid Build Coastguard Worker     }
93*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::ok();
94*ec779b8eSAndroid Build Coastguard Worker }
95*ec779b8eSAndroid Build Coastguard Worker 
setSatellitePosition(LnbPosition in_position)96*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlLnb::setSatellitePosition(LnbPosition in_position) {
97*ec779b8eSAndroid Build Coastguard Worker     if (mLnb == nullptr) {
98*ec779b8eSAndroid Build Coastguard Worker         ALOGE("ILnb is not initialized");
99*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
100*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::UNAVAILABLE));
101*ec779b8eSAndroid Build Coastguard Worker     }
102*ec779b8eSAndroid Build Coastguard Worker 
103*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mLnb->setSatellitePosition(static_cast<HidlLnbPosition>(in_position));
104*ec779b8eSAndroid Build Coastguard Worker     if (status != HidlResult::SUCCESS) {
105*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
106*ec779b8eSAndroid Build Coastguard Worker     }
107*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::ok();
108*ec779b8eSAndroid Build Coastguard Worker }
109*ec779b8eSAndroid Build Coastguard Worker 
sendDiseqcMessage(const vector<uint8_t> & in_diseqcMessage)110*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlLnb::sendDiseqcMessage(const vector<uint8_t>& in_diseqcMessage) {
111*ec779b8eSAndroid Build Coastguard Worker     if (mLnb == nullptr) {
112*ec779b8eSAndroid Build Coastguard Worker         ALOGE("ILnb is not initialized");
113*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
114*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::UNAVAILABLE));
115*ec779b8eSAndroid Build Coastguard Worker     }
116*ec779b8eSAndroid Build Coastguard Worker 
117*ec779b8eSAndroid Build Coastguard Worker     HidlResult status = mLnb->sendDiseqcMessage(in_diseqcMessage);
118*ec779b8eSAndroid Build Coastguard Worker     if (status != HidlResult::SUCCESS) {
119*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
120*ec779b8eSAndroid Build Coastguard Worker     }
121*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::ok();
122*ec779b8eSAndroid Build Coastguard Worker }
123*ec779b8eSAndroid Build Coastguard Worker 
close()124*ec779b8eSAndroid Build Coastguard Worker ::ndk::ScopedAStatus TunerHidlLnb::close() {
125*ec779b8eSAndroid Build Coastguard Worker     if (mLnb == nullptr) {
126*ec779b8eSAndroid Build Coastguard Worker         ALOGE("ILnb is not initialized");
127*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(
128*ec779b8eSAndroid Build Coastguard Worker                 static_cast<int32_t>(Result::UNAVAILABLE));
129*ec779b8eSAndroid Build Coastguard Worker     }
130*ec779b8eSAndroid Build Coastguard Worker 
131*ec779b8eSAndroid Build Coastguard Worker     HidlResult res = mLnb->close();
132*ec779b8eSAndroid Build Coastguard Worker     mLnb = nullptr;
133*ec779b8eSAndroid Build Coastguard Worker 
134*ec779b8eSAndroid Build Coastguard Worker     if (res != HidlResult::SUCCESS) {
135*ec779b8eSAndroid Build Coastguard Worker         return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(res));
136*ec779b8eSAndroid Build Coastguard Worker     }
137*ec779b8eSAndroid Build Coastguard Worker     return ::ndk::ScopedAStatus::ok();
138*ec779b8eSAndroid Build Coastguard Worker }
139*ec779b8eSAndroid Build Coastguard Worker 
140*ec779b8eSAndroid Build Coastguard Worker /////////////// ILnbCallback ///////////////////////
onEvent(const HidlLnbEventType lnbEventType)141*ec779b8eSAndroid Build Coastguard Worker Return<void> TunerHidlLnb::LnbCallback::onEvent(const HidlLnbEventType lnbEventType) {
142*ec779b8eSAndroid Build Coastguard Worker     if (mTunerLnbCallback != nullptr) {
143*ec779b8eSAndroid Build Coastguard Worker         mTunerLnbCallback->onEvent(static_cast<LnbEventType>(lnbEventType));
144*ec779b8eSAndroid Build Coastguard Worker     }
145*ec779b8eSAndroid Build Coastguard Worker     return Void();
146*ec779b8eSAndroid Build Coastguard Worker }
147*ec779b8eSAndroid Build Coastguard Worker 
onDiseqcMessage(const hidl_vec<uint8_t> & diseqcMessage)148*ec779b8eSAndroid Build Coastguard Worker Return<void> TunerHidlLnb::LnbCallback::onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage) {
149*ec779b8eSAndroid Build Coastguard Worker     if (mTunerLnbCallback != nullptr) {
150*ec779b8eSAndroid Build Coastguard Worker         vector<uint8_t> msg(begin(diseqcMessage), end(diseqcMessage));
151*ec779b8eSAndroid Build Coastguard Worker         mTunerLnbCallback->onDiseqcMessage(msg);
152*ec779b8eSAndroid Build Coastguard Worker     }
153*ec779b8eSAndroid Build Coastguard Worker     return Void();
154*ec779b8eSAndroid Build Coastguard Worker }
155*ec779b8eSAndroid Build Coastguard Worker 
156*ec779b8eSAndroid Build Coastguard Worker }  // namespace tuner
157*ec779b8eSAndroid Build Coastguard Worker }  // namespace tv
158*ec779b8eSAndroid Build Coastguard Worker }  // namespace media
159*ec779b8eSAndroid Build Coastguard Worker }  // namespace android
160*ec779b8eSAndroid Build Coastguard Worker }  // namespace aidl
161