xref: /aosp_15_r20/hardware/interfaces/tv/tuner/aidl/default/Frontend.h (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright 2021 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker 
17*4d7e907cSAndroid Build Coastguard Worker #pragma once
18*4d7e907cSAndroid Build Coastguard Worker 
19*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/BnFrontend.h>
20*4d7e907cSAndroid Build Coastguard Worker #include <fstream>
21*4d7e907cSAndroid Build Coastguard Worker #include <iostream>
22*4d7e907cSAndroid Build Coastguard Worker #include <thread>
23*4d7e907cSAndroid Build Coastguard Worker #include "Tuner.h"
24*4d7e907cSAndroid Build Coastguard Worker #include "dtv_plugin.h"
25*4d7e907cSAndroid Build Coastguard Worker 
26*4d7e907cSAndroid Build Coastguard Worker using namespace std;
27*4d7e907cSAndroid Build Coastguard Worker 
28*4d7e907cSAndroid Build Coastguard Worker namespace aidl {
29*4d7e907cSAndroid Build Coastguard Worker namespace android {
30*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
31*4d7e907cSAndroid Build Coastguard Worker namespace tv {
32*4d7e907cSAndroid Build Coastguard Worker namespace tuner {
33*4d7e907cSAndroid Build Coastguard Worker 
34*4d7e907cSAndroid Build Coastguard Worker class Tuner;
35*4d7e907cSAndroid Build Coastguard Worker 
36*4d7e907cSAndroid Build Coastguard Worker const int TUNE_BUFFER_SIZE = 1;        // byte
37*4d7e907cSAndroid Build Coastguard Worker const int TUNE_BUFFER_TIMEOUT = 2000;  // ms
38*4d7e907cSAndroid Build Coastguard Worker 
39*4d7e907cSAndroid Build Coastguard Worker class Frontend : public BnFrontend {
40*4d7e907cSAndroid Build Coastguard Worker   public:
41*4d7e907cSAndroid Build Coastguard Worker     Frontend(FrontendType type, int32_t id);
42*4d7e907cSAndroid Build Coastguard Worker 
43*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus setCallback(
44*4d7e907cSAndroid Build Coastguard Worker             const std::shared_ptr<IFrontendCallback>& in_callback) override;
45*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus tune(const FrontendSettings& in_settings) override;
46*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus stopTune() override;
47*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus close() override;
48*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus scan(const FrontendSettings& in_settings,
49*4d7e907cSAndroid Build Coastguard Worker                               FrontendScanType in_type) override;
50*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus stopScan() override;
51*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus getStatus(const std::vector<FrontendStatusType>& in_statusTypes,
52*4d7e907cSAndroid Build Coastguard Worker                                    std::vector<FrontendStatus>* _aidl_return) override;
53*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus setLnb(int32_t in_lnbId) override;
54*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus linkCiCam(int32_t in_ciCamId, int32_t* _aidl_return) override;
55*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus unlinkCiCam(int32_t in_ciCamId) override;
56*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus getHardwareInfo(std::string* _aidl_return) override;
57*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus removeOutputPid(int32_t in_pid) override;
58*4d7e907cSAndroid Build Coastguard Worker     ::ndk::ScopedAStatus getFrontendStatusReadiness(
59*4d7e907cSAndroid Build Coastguard Worker             const std::vector<FrontendStatusType>& in_statusTypes,
60*4d7e907cSAndroid Build Coastguard Worker             std::vector<FrontendStatusReadiness>* _aidl_return) override;
61*4d7e907cSAndroid Build Coastguard Worker 
62*4d7e907cSAndroid Build Coastguard Worker     binder_status_t dump(int fd, const char** args, uint32_t numArgs) override;
63*4d7e907cSAndroid Build Coastguard Worker 
64*4d7e907cSAndroid Build Coastguard Worker     FrontendType getFrontendType();
65*4d7e907cSAndroid Build Coastguard Worker     int32_t getFrontendId();
66*4d7e907cSAndroid Build Coastguard Worker     string getSourceFile();
67*4d7e907cSAndroid Build Coastguard Worker     dtv_plugin* getIptvPluginInterface();
68*4d7e907cSAndroid Build Coastguard Worker     string getIptvTransportDescription();
69*4d7e907cSAndroid Build Coastguard Worker     dtv_streamer* getIptvPluginStreamer();
70*4d7e907cSAndroid Build Coastguard Worker     void readTuneByte(void* buf);
getTuneByteBuffer()71*4d7e907cSAndroid Build Coastguard Worker     void* getTuneByteBuffer() { return mTuneByteBuffer; };
72*4d7e907cSAndroid Build Coastguard Worker     dtv_streamer* createIptvPluginStreamer(dtv_plugin* interface, const char* transport_desc);
73*4d7e907cSAndroid Build Coastguard Worker     dtv_plugin* createIptvPluginInterface();
74*4d7e907cSAndroid Build Coastguard Worker     bool isLocked();
75*4d7e907cSAndroid Build Coastguard Worker     void getFrontendInfo(FrontendInfo* _aidl_return);
76*4d7e907cSAndroid Build Coastguard Worker     void setTunerService(std::shared_ptr<Tuner> tuner);
77*4d7e907cSAndroid Build Coastguard Worker 
78*4d7e907cSAndroid Build Coastguard Worker   private:
79*4d7e907cSAndroid Build Coastguard Worker     virtual ~Frontend();
80*4d7e907cSAndroid Build Coastguard Worker     bool supportsSatellite();
81*4d7e907cSAndroid Build Coastguard Worker     void scanThreadLoop();
82*4d7e907cSAndroid Build Coastguard Worker 
83*4d7e907cSAndroid Build Coastguard Worker     std::shared_ptr<IFrontendCallback> mCallback;
84*4d7e907cSAndroid Build Coastguard Worker     std::shared_ptr<Tuner> mTuner;
85*4d7e907cSAndroid Build Coastguard Worker     FrontendType mType = FrontendType::UNDEFINED;
86*4d7e907cSAndroid Build Coastguard Worker     int32_t mId = 0;
87*4d7e907cSAndroid Build Coastguard Worker     bool mIsLocked = false;
88*4d7e907cSAndroid Build Coastguard Worker     int32_t mCiCamId;
89*4d7e907cSAndroid Build Coastguard Worker     std::thread mScanThread;
90*4d7e907cSAndroid Build Coastguard Worker     FrontendSettings mFrontendSettings;
91*4d7e907cSAndroid Build Coastguard Worker     FrontendScanType mFrontendScanType;
92*4d7e907cSAndroid Build Coastguard Worker     std::ifstream mFrontendData;
93*4d7e907cSAndroid Build Coastguard Worker     FrontendCapabilities mFrontendCaps;
94*4d7e907cSAndroid Build Coastguard Worker     vector<FrontendStatusType> mFrontendStatusCaps;
95*4d7e907cSAndroid Build Coastguard Worker     dtv_plugin* mIptvPluginInterface;
96*4d7e907cSAndroid Build Coastguard Worker     string mIptvTransportDescription;
97*4d7e907cSAndroid Build Coastguard Worker     dtv_streamer* mIptvPluginStreamer;
98*4d7e907cSAndroid Build Coastguard Worker     std::thread mIptvFrontendTuneThread;
99*4d7e907cSAndroid Build Coastguard Worker     void* mTuneByteBuffer = nullptr;
100*4d7e907cSAndroid Build Coastguard Worker };
101*4d7e907cSAndroid Build Coastguard Worker 
102*4d7e907cSAndroid Build Coastguard Worker }  // namespace tuner
103*4d7e907cSAndroid Build Coastguard Worker }  // namespace tv
104*4d7e907cSAndroid Build Coastguard Worker }  // namespace hardware
105*4d7e907cSAndroid Build Coastguard Worker }  // namespace android
106*4d7e907cSAndroid Build Coastguard Worker }  // namespace aidl
107