1*d57664e9SAndroid Build Coastguard Worker /* 2*d57664e9SAndroid Build Coastguard Worker * Copyright 2021 The Android Open Source Project 3*d57664e9SAndroid Build Coastguard Worker * 4*d57664e9SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*d57664e9SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*d57664e9SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*d57664e9SAndroid Build Coastguard Worker * 8*d57664e9SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*d57664e9SAndroid Build Coastguard Worker * 10*d57664e9SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*d57664e9SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*d57664e9SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*d57664e9SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*d57664e9SAndroid Build Coastguard Worker * limitations under the License. 15*d57664e9SAndroid Build Coastguard Worker */ 16*d57664e9SAndroid Build Coastguard Worker 17*d57664e9SAndroid Build Coastguard Worker #ifndef _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_ 18*d57664e9SAndroid Build Coastguard Worker #define _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_ 19*d57664e9SAndroid Build Coastguard Worker 20*d57664e9SAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DemuxFilterSettings.h> 21*d57664e9SAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/FrontendType.h> 22*d57664e9SAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/Result.h> 23*d57664e9SAndroid Build Coastguard Worker #include <aidl/android/media/tv/tuner/BnTunerFrontendCallback.h> 24*d57664e9SAndroid Build Coastguard Worker #include <aidl/android/media/tv/tuner/ITunerFrontend.h> 25*d57664e9SAndroid Build Coastguard Worker #include <utils/RefBase.h> 26*d57664e9SAndroid Build Coastguard Worker 27*d57664e9SAndroid Build Coastguard Worker #include "ClientHelper.h" 28*d57664e9SAndroid Build Coastguard Worker #include "FrontendClientCallback.h" 29*d57664e9SAndroid Build Coastguard Worker #include "LnbClient.h" 30*d57664e9SAndroid Build Coastguard Worker 31*d57664e9SAndroid Build Coastguard Worker using Status = ::ndk::ScopedAStatus; 32*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendEventType; 33*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendScanMessage; 34*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendScanMessageType; 35*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendScanType; 36*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendSettings; 37*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendStatus; 38*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendStatusReadiness; 39*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendStatusType; 40*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::FrontendType; 41*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::Result; 42*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::media::tv::tuner::BnTunerFrontendCallback; 43*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::media::tv::tuner::ITunerFrontend; 44*d57664e9SAndroid Build Coastguard Worker 45*d57664e9SAndroid Build Coastguard Worker using namespace std; 46*d57664e9SAndroid Build Coastguard Worker 47*d57664e9SAndroid Build Coastguard Worker namespace android { 48*d57664e9SAndroid Build Coastguard Worker 49*d57664e9SAndroid Build Coastguard Worker class TunerFrontendCallback : public BnTunerFrontendCallback { 50*d57664e9SAndroid Build Coastguard Worker 51*d57664e9SAndroid Build Coastguard Worker public: 52*d57664e9SAndroid Build Coastguard Worker TunerFrontendCallback(sp<FrontendClientCallback> frontendClientCallback); 53*d57664e9SAndroid Build Coastguard Worker 54*d57664e9SAndroid Build Coastguard Worker Status onEvent(FrontendEventType frontendEventType); 55*d57664e9SAndroid Build Coastguard Worker Status onScanMessage(FrontendScanMessageType messageType, const FrontendScanMessage& message); 56*d57664e9SAndroid Build Coastguard Worker 57*d57664e9SAndroid Build Coastguard Worker private: 58*d57664e9SAndroid Build Coastguard Worker sp<FrontendClientCallback> mFrontendClientCallback; 59*d57664e9SAndroid Build Coastguard Worker }; 60*d57664e9SAndroid Build Coastguard Worker 61*d57664e9SAndroid Build Coastguard Worker struct FrontendClient : public RefBase { 62*d57664e9SAndroid Build Coastguard Worker 63*d57664e9SAndroid Build Coastguard Worker public: 64*d57664e9SAndroid Build Coastguard Worker FrontendClient(shared_ptr<ITunerFrontend> tunerFrontend, FrontendType type); 65*d57664e9SAndroid Build Coastguard Worker ~FrontendClient(); 66*d57664e9SAndroid Build Coastguard Worker 67*d57664e9SAndroid Build Coastguard Worker /** 68*d57664e9SAndroid Build Coastguard Worker * Set a FrontendClientCallback to receive frontend events and scan messages. 69*d57664e9SAndroid Build Coastguard Worker */ 70*d57664e9SAndroid Build Coastguard Worker Result setCallback(sp<FrontendClientCallback> frontendClientCallback); 71*d57664e9SAndroid Build Coastguard Worker 72*d57664e9SAndroid Build Coastguard Worker /** 73*d57664e9SAndroid Build Coastguard Worker * Tuner Frontend with Frontend Settings. 74*d57664e9SAndroid Build Coastguard Worker */ 75*d57664e9SAndroid Build Coastguard Worker Result tune(const FrontendSettings& settings); 76*d57664e9SAndroid Build Coastguard Worker 77*d57664e9SAndroid Build Coastguard Worker /** 78*d57664e9SAndroid Build Coastguard Worker * Stop tune Frontend. 79*d57664e9SAndroid Build Coastguard Worker */ 80*d57664e9SAndroid Build Coastguard Worker Result stopTune(); 81*d57664e9SAndroid Build Coastguard Worker 82*d57664e9SAndroid Build Coastguard Worker /** 83*d57664e9SAndroid Build Coastguard Worker * Scan the frontend to use the settings given. 84*d57664e9SAndroid Build Coastguard Worker */ 85*d57664e9SAndroid Build Coastguard Worker Result scan(const FrontendSettings& settings, FrontendScanType frontendScanType); 86*d57664e9SAndroid Build Coastguard Worker 87*d57664e9SAndroid Build Coastguard Worker /** 88*d57664e9SAndroid Build Coastguard Worker * Stop the previous scanning. 89*d57664e9SAndroid Build Coastguard Worker */ 90*d57664e9SAndroid Build Coastguard Worker Result stopScan(); 91*d57664e9SAndroid Build Coastguard Worker 92*d57664e9SAndroid Build Coastguard Worker /** 93*d57664e9SAndroid Build Coastguard Worker * Gets the statuses of the frontend. 94*d57664e9SAndroid Build Coastguard Worker */ 95*d57664e9SAndroid Build Coastguard Worker vector<FrontendStatus> getStatus(vector<FrontendStatusType> statusTypes); 96*d57664e9SAndroid Build Coastguard Worker 97*d57664e9SAndroid Build Coastguard Worker /** 98*d57664e9SAndroid Build Coastguard Worker * Sets Low-Noise Block downconverter (LNB) for satellite frontend. 99*d57664e9SAndroid Build Coastguard Worker */ 100*d57664e9SAndroid Build Coastguard Worker Result setLnb(sp<LnbClient> lnbClient); 101*d57664e9SAndroid Build Coastguard Worker 102*d57664e9SAndroid Build Coastguard Worker /** 103*d57664e9SAndroid Build Coastguard Worker * Link Frontend to the cicam with given id. 104*d57664e9SAndroid Build Coastguard Worker * 105*d57664e9SAndroid Build Coastguard Worker * @return lts id 106*d57664e9SAndroid Build Coastguard Worker */ 107*d57664e9SAndroid Build Coastguard Worker int32_t linkCiCamToFrontend(int32_t ciCamId); 108*d57664e9SAndroid Build Coastguard Worker 109*d57664e9SAndroid Build Coastguard Worker /** 110*d57664e9SAndroid Build Coastguard Worker * Unink Frontend to the cicam with given id. 111*d57664e9SAndroid Build Coastguard Worker */ 112*d57664e9SAndroid Build Coastguard Worker Result unlinkCiCamToFrontend(int32_t ciCamId); 113*d57664e9SAndroid Build Coastguard Worker 114*d57664e9SAndroid Build Coastguard Worker /** 115*d57664e9SAndroid Build Coastguard Worker * Close Frontend. 116*d57664e9SAndroid Build Coastguard Worker */ 117*d57664e9SAndroid Build Coastguard Worker Result close(); 118*d57664e9SAndroid Build Coastguard Worker 119*d57664e9SAndroid Build Coastguard Worker /** 120*d57664e9SAndroid Build Coastguard Worker * Get Frontend hardware info. 121*d57664e9SAndroid Build Coastguard Worker */ 122*d57664e9SAndroid Build Coastguard Worker Result getHardwareInfo(string& info); 123*d57664e9SAndroid Build Coastguard Worker 124*d57664e9SAndroid Build Coastguard Worker /** 125*d57664e9SAndroid Build Coastguard Worker * Filter out unnecessary PID from frontend output. 126*d57664e9SAndroid Build Coastguard Worker */ 127*d57664e9SAndroid Build Coastguard Worker Result removeOutputPid(int32_t pid); 128*d57664e9SAndroid Build Coastguard Worker 129*d57664e9SAndroid Build Coastguard Worker /** 130*d57664e9SAndroid Build Coastguard Worker * Gets Frontend Status Readiness statuses for given status types. 131*d57664e9SAndroid Build Coastguard Worker */ 132*d57664e9SAndroid Build Coastguard Worker vector<FrontendStatusReadiness> getStatusReadiness( 133*d57664e9SAndroid Build Coastguard Worker const std::vector<FrontendStatusType>& types); 134*d57664e9SAndroid Build Coastguard Worker 135*d57664e9SAndroid Build Coastguard Worker int32_t getId(); 136*d57664e9SAndroid Build Coastguard Worker 137*d57664e9SAndroid Build Coastguard Worker shared_ptr<ITunerFrontend> getAidlFrontend(); 138*d57664e9SAndroid Build Coastguard Worker private: 139*d57664e9SAndroid Build Coastguard Worker /** 140*d57664e9SAndroid Build Coastguard Worker * An AIDL Tuner Frontend Singleton assigned at the first time when the Tuner Client 141*d57664e9SAndroid Build Coastguard Worker * opens a frontend cient. Default null when the service does not exist. 142*d57664e9SAndroid Build Coastguard Worker */ 143*d57664e9SAndroid Build Coastguard Worker shared_ptr<ITunerFrontend> mTunerFrontend; 144*d57664e9SAndroid Build Coastguard Worker 145*d57664e9SAndroid Build Coastguard Worker FrontendType mType; 146*d57664e9SAndroid Build Coastguard Worker }; 147*d57664e9SAndroid Build Coastguard Worker } // namespace android 148*d57664e9SAndroid Build Coastguard Worker 149*d57664e9SAndroid Build Coastguard Worker #endif // _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_ 150