1 /** 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 "TunerHidlLnb" 18 19 #include "TunerHidlLnb.h" 20 21 #include <aidl/android/hardware/tv/tuner/Result.h> 22 23 using ::aidl::android::hardware::tv::tuner::Result; 24 using HidlLnbPosition = ::android::hardware::tv::tuner::V1_0::LnbPosition; 25 using HidlLnbTone = ::android::hardware::tv::tuner::V1_0::LnbTone; 26 using HidlLnbVoltage = ::android::hardware::tv::tuner::V1_0::LnbVoltage; 27 using HidlResult = ::android::hardware::tv::tuner::V1_0::Result; 28 29 using namespace std; 30 31 namespace aidl { 32 namespace android { 33 namespace media { 34 namespace tv { 35 namespace tuner { 36 TunerHidlLnb(sp<HidlILnb> lnb,int id)37TunerHidlLnb::TunerHidlLnb(sp<HidlILnb> lnb, int id) { 38 mLnb = lnb; 39 mId = id; 40 } 41 ~TunerHidlLnb()42TunerHidlLnb::~TunerHidlLnb() { 43 mLnb = nullptr; 44 mId = -1; 45 } 46 setCallback(const shared_ptr<ITunerLnbCallback> & in_tunerLnbCallback)47::ndk::ScopedAStatus TunerHidlLnb::setCallback( 48 const shared_ptr<ITunerLnbCallback>& in_tunerLnbCallback) { 49 if (mLnb == nullptr) { 50 ALOGE("ILnb is not initialized"); 51 return ::ndk::ScopedAStatus::fromServiceSpecificError( 52 static_cast<int32_t>(Result::UNAVAILABLE)); 53 } 54 55 if (in_tunerLnbCallback == nullptr) { 56 return ::ndk::ScopedAStatus::fromServiceSpecificError( 57 static_cast<int32_t>(Result::INVALID_ARGUMENT)); 58 } 59 60 sp<HidlILnbCallback> lnbCallback = new LnbCallback(in_tunerLnbCallback); 61 HidlResult status = mLnb->setCallback(lnbCallback); 62 if (status != HidlResult::SUCCESS) { 63 return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); 64 } 65 return ::ndk::ScopedAStatus::ok(); 66 } 67 setVoltage(LnbVoltage in_voltage)68::ndk::ScopedAStatus TunerHidlLnb::setVoltage(LnbVoltage in_voltage) { 69 if (mLnb == nullptr) { 70 ALOGE("ILnb is not initialized"); 71 return ::ndk::ScopedAStatus::fromServiceSpecificError( 72 static_cast<int32_t>(Result::UNAVAILABLE)); 73 } 74 75 HidlResult status = mLnb->setVoltage(static_cast<HidlLnbVoltage>(in_voltage)); 76 if (status != HidlResult::SUCCESS) { 77 return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); 78 } 79 return ::ndk::ScopedAStatus::ok(); 80 } 81 setTone(LnbTone in_tone)82::ndk::ScopedAStatus TunerHidlLnb::setTone(LnbTone in_tone) { 83 if (mLnb == nullptr) { 84 ALOGE("ILnb is not initialized"); 85 return ::ndk::ScopedAStatus::fromServiceSpecificError( 86 static_cast<int32_t>(Result::UNAVAILABLE)); 87 } 88 89 HidlResult status = mLnb->setTone(static_cast<HidlLnbTone>(in_tone)); 90 if (status != HidlResult::SUCCESS) { 91 return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); 92 } 93 return ::ndk::ScopedAStatus::ok(); 94 } 95 setSatellitePosition(LnbPosition in_position)96::ndk::ScopedAStatus TunerHidlLnb::setSatellitePosition(LnbPosition in_position) { 97 if (mLnb == nullptr) { 98 ALOGE("ILnb is not initialized"); 99 return ::ndk::ScopedAStatus::fromServiceSpecificError( 100 static_cast<int32_t>(Result::UNAVAILABLE)); 101 } 102 103 HidlResult status = mLnb->setSatellitePosition(static_cast<HidlLnbPosition>(in_position)); 104 if (status != HidlResult::SUCCESS) { 105 return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); 106 } 107 return ::ndk::ScopedAStatus::ok(); 108 } 109 sendDiseqcMessage(const vector<uint8_t> & in_diseqcMessage)110::ndk::ScopedAStatus TunerHidlLnb::sendDiseqcMessage(const vector<uint8_t>& in_diseqcMessage) { 111 if (mLnb == nullptr) { 112 ALOGE("ILnb is not initialized"); 113 return ::ndk::ScopedAStatus::fromServiceSpecificError( 114 static_cast<int32_t>(Result::UNAVAILABLE)); 115 } 116 117 HidlResult status = mLnb->sendDiseqcMessage(in_diseqcMessage); 118 if (status != HidlResult::SUCCESS) { 119 return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status)); 120 } 121 return ::ndk::ScopedAStatus::ok(); 122 } 123 close()124::ndk::ScopedAStatus TunerHidlLnb::close() { 125 if (mLnb == nullptr) { 126 ALOGE("ILnb is not initialized"); 127 return ::ndk::ScopedAStatus::fromServiceSpecificError( 128 static_cast<int32_t>(Result::UNAVAILABLE)); 129 } 130 131 HidlResult res = mLnb->close(); 132 mLnb = nullptr; 133 134 if (res != HidlResult::SUCCESS) { 135 return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(res)); 136 } 137 return ::ndk::ScopedAStatus::ok(); 138 } 139 140 /////////////// ILnbCallback /////////////////////// onEvent(const HidlLnbEventType lnbEventType)141Return<void> TunerHidlLnb::LnbCallback::onEvent(const HidlLnbEventType lnbEventType) { 142 if (mTunerLnbCallback != nullptr) { 143 mTunerLnbCallback->onEvent(static_cast<LnbEventType>(lnbEventType)); 144 } 145 return Void(); 146 } 147 onDiseqcMessage(const hidl_vec<uint8_t> & diseqcMessage)148Return<void> TunerHidlLnb::LnbCallback::onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage) { 149 if (mTunerLnbCallback != nullptr) { 150 vector<uint8_t> msg(begin(diseqcMessage), end(diseqcMessage)); 151 mTunerLnbCallback->onDiseqcMessage(msg); 152 } 153 return Void(); 154 } 155 156 } // namespace tuner 157 } // namespace tv 158 } // namespace media 159 } // namespace android 160 } // namespace aidl 161