blob: 164bef8d931409435a195421e72412306116d77b [file] [log] [blame]
shubang23aa3ac2020-09-07 18:56:28 -07001/**
Hongguangeae68392021-07-27 20:56:23 -07002 * Copyright (c) 2021, The Android Open Source Project
shubang23aa3ac2020-09-07 18:56:28 -07003 *
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_TUNERSERVICE_H
18#define ANDROID_MEDIA_TUNERSERVICE_H
19
Hongguangeae68392021-07-27 20:56:23 -070020#include <aidl/android/hardware/tv/tuner/BnFilterCallback.h>
21#include <aidl/android/hardware/tv/tuner/DemuxFilterEvent.h>
22#include <aidl/android/hardware/tv/tuner/DemuxFilterStatus.h>
23#include <aidl/android/hardware/tv/tuner/ITuner.h>
shubang23aa3ac2020-09-07 18:56:28 -070024#include <aidl/android/media/tv/tuner/BnTunerService.h>
Hongguangeae68392021-07-27 20:56:23 -070025#include <aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.h>
shubang23aa3ac2020-09-07 18:56:28 -070026
Hongguangeae68392021-07-27 20:56:23 -070027using ::aidl::android::hardware::tv::tuner::BnFilterCallback;
28using ::aidl::android::hardware::tv::tuner::DemuxCapabilities;
29using ::aidl::android::hardware::tv::tuner::DemuxFilterEvent;
30using ::aidl::android::hardware::tv::tuner::DemuxFilterStatus;
31using ::aidl::android::hardware::tv::tuner::FrontendInfo;
32using ::aidl::android::hardware::tv::tuner::ITuner;
Amy Zhangce2cb402021-01-21 12:50:47 -080033using ::aidl::android::media::tv::tunerresourcemanager::ITunerResourceManager;
shubang6d266262020-10-09 00:15:04 -070034
Amy Zhanga046eee2021-01-12 14:44:58 -080035using namespace std;
36
Hongguangeae68392021-07-27 20:56:23 -070037namespace aidl {
shubang23aa3ac2020-09-07 18:56:28 -070038namespace android {
Hongguangeae68392021-07-27 20:56:23 -070039namespace media {
40namespace tv {
41namespace tuner {
shubang23aa3ac2020-09-07 18:56:28 -070042
Amy Zhangb1baabb2021-02-08 19:54:28 -080043const static int TUNER_HAL_VERSION_UNKNOWN = 0;
44const static int TUNER_HAL_VERSION_1_0 = 1 << 16;
45const static int TUNER_HAL_VERSION_1_1 = (1 << 16) | 1;
Hongguangeae68392021-07-27 20:56:23 -070046const static int TUNER_HAL_VERSION_2_0 = 2 << 16;
Amy Zhangc5eb8272021-03-01 16:19:39 -080047// System Feature defined in PackageManager
48static const ::android::String16 FEATURE_TUNER(::android::String16("android.hardware.tv.tuner"));
Amy Zhangb1baabb2021-02-08 19:54:28 -080049
Amy Zhanga046eee2021-01-12 14:44:58 -080050typedef enum {
51 FRONTEND,
52 LNB,
53 DEMUX,
54 DESCRAMBLER,
55} TunerResourceType;
shubang6d266262020-10-09 00:15:04 -070056
Hongguangeae68392021-07-27 20:56:23 -070057struct FilterCallback : public BnFilterCallback {
shubang6d266262020-10-09 00:15:04 -070058 ~FilterCallback() {}
Hongguangeae68392021-07-27 20:56:23 -070059 virtual ::ndk::ScopedAStatus onFilterEvent(
60 const vector<DemuxFilterEvent>& /* events */) override {
61 return ::ndk::ScopedAStatus::ok();
shubang6d266262020-10-09 00:15:04 -070062 }
Hongguangeae68392021-07-27 20:56:23 -070063
64 virtual ::ndk::ScopedAStatus onFilterStatus(const DemuxFilterStatus /*status*/) override {
65 return ::ndk::ScopedAStatus::ok();
shubang6d266262020-10-09 00:15:04 -070066 }
67};
68
shubang23aa3ac2020-09-07 18:56:28 -070069class TunerService : public BnTunerService {
shubang23aa3ac2020-09-07 18:56:28 -070070public:
71 static char const *getServiceName() { return "media.tuner"; }
Amy Zhangb1baabb2021-02-08 19:54:28 -080072 static binder_status_t instantiate();
shubang23aa3ac2020-09-07 18:56:28 -070073 TunerService();
74 virtual ~TunerService();
Amy Zhang0f04c452020-10-30 13:36:44 -070075
Hongguangeae68392021-07-27 20:56:23 -070076 ::ndk::ScopedAStatus getFrontendIds(vector<int32_t>* out_ids) override;
77 ::ndk::ScopedAStatus getFrontendInfo(int32_t in_frontendHandle,
78 FrontendInfo* _aidl_return) override;
79 ::ndk::ScopedAStatus openFrontend(int32_t in_frontendHandle,
80 shared_ptr<ITunerFrontend>* _aidl_return) override;
81 ::ndk::ScopedAStatus openLnb(int32_t in_lnbHandle,
82 shared_ptr<ITunerLnb>* _aidl_return) override;
83 ::ndk::ScopedAStatus openLnbByName(const string& in_lnbName,
84 shared_ptr<ITunerLnb>* _aidl_return) override;
85 ::ndk::ScopedAStatus openDemux(int32_t in_demuxHandle,
86 shared_ptr<ITunerDemux>* _aidl_return) override;
87 ::ndk::ScopedAStatus getDemuxCaps(DemuxCapabilities* _aidl_return) override;
88 ::ndk::ScopedAStatus openDescrambler(int32_t in_descramblerHandle,
89 shared_ptr<ITunerDescrambler>* _aidl_return) override;
90 ::ndk::ScopedAStatus getTunerHalVersion(int32_t* _aidl_return) override;
Amy Zhangb2989b52021-02-05 12:27:25 -080091
Amy Zhangd61491e2021-01-12 16:27:29 -080092 // TODO: create a map between resource id and handles.
Amy Zhanga046eee2021-01-12 14:44:58 -080093 static int getResourceIdFromHandle(int resourceHandle, int /*type*/) {
Amy Zhang0f04c452020-10-30 13:36:44 -070094 return (resourceHandle & 0x00ff0000) >> 16;
95 }
96
Amy Zhangce2cb402021-01-21 12:50:47 -080097 int getResourceHandleFromId(int id, int resourceType) {
98 // TODO: build up randomly generated id to handle mapping
99 return (resourceType & 0x000000ff) << 24
100 | (id << 16)
101 | (mResourceRequestCount++ & 0xffff);
102 }
103
shubang23aa3ac2020-09-07 18:56:28 -0700104private:
Amy Zhang5af84142021-02-04 18:36:54 -0800105 bool hasITuner();
Amy Zhangfb1b4962021-02-18 19:34:52 -0800106 void updateTunerResources();
Amy Zhangce2cb402021-01-21 12:50:47 -0800107 void updateFrontendResources();
108 void updateLnbResources();
Hongguangeae68392021-07-27 20:56:23 -0700109 vector<int32_t> getLnbHandles();
Amy Zhangce2cb402021-01-21 12:50:47 -0800110
Hongguangeae68392021-07-27 20:56:23 -0700111 shared_ptr<ITuner> mTuner;
Amy Zhangce2cb402021-01-21 12:50:47 -0800112 shared_ptr<ITunerResourceManager> mTunerResourceManager;
113 int mResourceRequestCount = 0;
Amy Zhangb1baabb2021-02-08 19:54:28 -0800114 int mTunerVersion = TUNER_HAL_VERSION_UNKNOWN;
shubang23aa3ac2020-09-07 18:56:28 -0700115};
116
Hongguangeae68392021-07-27 20:56:23 -0700117} // namespace tuner
118} // namespace tv
119} // namespace media
120} // namespace android
121} // namespace aidl
shubang23aa3ac2020-09-07 18:56:28 -0700122
123#endif // ANDROID_MEDIA_TUNERSERVICE_H