blob: 08c0b20d18ed9f88f829cfd45fb4fe66c0f406ea [file] [log] [blame]
Amy Zhangbf68a162020-11-23 17:42:40 -08001/*
Hongguang56637e92021-07-28 17:32:55 -07002 * Copyright 2021 The Android Open Source Project
Amy Zhangbf68a162020-11-23 17:42:40 -08003 *
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#ifndef _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_
18#define _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_
19
Hongguang56637e92021-07-28 17:32:55 -070020#include <aidl/android/hardware/tv/tuner/DemuxFilterSettings.h>
21#include <aidl/android/hardware/tv/tuner/FrontendType.h>
22#include <aidl/android/hardware/tv/tuner/Result.h>
Amy Zhanga6734682020-11-30 16:14:38 -080023#include <aidl/android/media/tv/tuner/BnTunerFrontendCallback.h>
Amy Zhangbf68a162020-11-23 17:42:40 -080024#include <aidl/android/media/tv/tuner/ITunerFrontend.h>
Hongguang56637e92021-07-28 17:32:55 -070025#include <utils/RefBase.h>
Amy Zhangbf68a162020-11-23 17:42:40 -080026
Amy Zhang4a07e802021-01-21 17:10:21 -080027#include "ClientHelper.h"
Amy Zhanga6734682020-11-30 16:14:38 -080028#include "FrontendClientCallback.h"
Amy Zhangd3d57b42021-01-07 11:14:43 -080029#include "LnbClient.h"
Amy Zhangbf68a162020-11-23 17:42:40 -080030
Amy Zhanga6734682020-11-30 16:14:38 -080031using Status = ::ndk::ScopedAStatus;
Hongguang56637e92021-07-28 17:32:55 -070032using ::aidl::android::hardware::tv::tuner::FrontendEventType;
33using ::aidl::android::hardware::tv::tuner::FrontendScanMessage;
34using ::aidl::android::hardware::tv::tuner::FrontendScanMessageType;
35using ::aidl::android::hardware::tv::tuner::FrontendScanType;
36using ::aidl::android::hardware::tv::tuner::FrontendSettings;
37using ::aidl::android::hardware::tv::tuner::FrontendStatus;
38using ::aidl::android::hardware::tv::tuner::FrontendStatusType;
39using ::aidl::android::hardware::tv::tuner::FrontendType;
40using ::aidl::android::hardware::tv::tuner::Result;
Amy Zhanga6734682020-11-30 16:14:38 -080041using ::aidl::android::media::tv::tuner::BnTunerFrontendCallback;
Amy Zhangbf68a162020-11-23 17:42:40 -080042using ::aidl::android::media::tv::tuner::ITunerFrontend;
Amy Zhangbf68a162020-11-23 17:42:40 -080043
44using namespace std;
45
46namespace android {
47
Amy Zhanga6734682020-11-30 16:14:38 -080048class TunerFrontendCallback : public BnTunerFrontendCallback {
49
50public:
51 TunerFrontendCallback(sp<FrontendClientCallback> frontendClientCallback);
52
Hongguang56637e92021-07-28 17:32:55 -070053 Status onEvent(FrontendEventType frontendEventType);
54 Status onScanMessage(FrontendScanMessageType messageType, const FrontendScanMessage& message);
Amy Zhanga6734682020-11-30 16:14:38 -080055
56private:
57 sp<FrontendClientCallback> mFrontendClientCallback;
58};
59
Amy Zhangbf68a162020-11-23 17:42:40 -080060struct FrontendClient : public RefBase {
Amy Zhanga6734682020-11-30 16:14:38 -080061
62public:
Hongguang56637e92021-07-28 17:32:55 -070063 FrontendClient(shared_ptr<ITunerFrontend> tunerFrontend, FrontendType type);
Amy Zhangbf68a162020-11-23 17:42:40 -080064 ~FrontendClient();
65
Amy Zhanga6734682020-11-30 16:14:38 -080066 /**
67 * Set a FrontendClientCallback to receive frontend events and scan messages.
68 */
69 Result setCallback(sp<FrontendClientCallback> frontendClientCallback);
70
Amy Zhanga6734682020-11-30 16:14:38 -080071 /**
72 * Tuner Frontend with Frontend Settings.
73 */
Hongguang56637e92021-07-28 17:32:55 -070074 Result tune(const FrontendSettings& settings);
Amy Zhanga6734682020-11-30 16:14:38 -080075
76 /**
77 * Stop tune Frontend.
78 */
79 Result stopTune();
80
81 /**
Amy Zhangd08c2732021-01-08 17:22:59 -080082 * Scan the frontend to use the settings given.
83 */
Hongguang56637e92021-07-28 17:32:55 -070084 Result scan(const FrontendSettings& settings, FrontendScanType frontendScanType);
Amy Zhangd08c2732021-01-08 17:22:59 -080085
86 /**
87 * Stop the previous scanning.
88 */
89 Result stopScan();
90
91 /**
92 * Gets the statuses of the frontend.
93 */
94 vector<FrontendStatus> getStatus(vector<FrontendStatusType> statusTypes);
95
96 /**
Amy Zhangd3d57b42021-01-07 11:14:43 -080097 * Sets Low-Noise Block downconverter (LNB) for satellite frontend.
98 */
99 Result setLnb(sp<LnbClient> lnbClient);
100
101 /**
Amy Zhangd08c2732021-01-08 17:22:59 -0800102 * Enable or Disable Low Noise Amplifier (LNA).
103 */
104 Result setLna(bool bEnable);
105
106 /**
107 * Link Frontend to the cicam with given id.
108 *
109 * @return lts id
110 */
Hongguang56637e92021-07-28 17:32:55 -0700111 int32_t linkCiCamToFrontend(int32_t ciCamId);
Amy Zhangd08c2732021-01-08 17:22:59 -0800112
113 /**
114 * Unink Frontend to the cicam with given id.
115 */
Hongguang56637e92021-07-28 17:32:55 -0700116 Result unlinkCiCamToFrontend(int32_t ciCamId);
Amy Zhangd08c2732021-01-08 17:22:59 -0800117
118 /**
Amy Zhanga6734682020-11-30 16:14:38 -0800119 * Close Frontend.
120 */
121 Result close();
122
Hongguang56637e92021-07-28 17:32:55 -0700123 int32_t getId();
Amy Zhang6bfeaa02020-11-30 15:16:39 -0800124 shared_ptr<ITunerFrontend> getAidlFrontend();
Amy Zhangbf68a162020-11-23 17:42:40 -0800125private:
126 /**
127 * An AIDL Tuner Frontend Singleton assigned at the first time when the Tuner Client
128 * opens a frontend cient. Default null when the service does not exist.
129 */
130 shared_ptr<ITunerFrontend> mTunerFrontend;
131
Hongguang56637e92021-07-28 17:32:55 -0700132 FrontendType mType;
Amy Zhangbf68a162020-11-23 17:42:40 -0800133};
134} // namespace android
135
136#endif // _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_