You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
235 lines
8.7 KiB
235 lines
8.7 KiB
/*
|
|
* Copyright 2020 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_
|
|
#define _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_
|
|
|
|
#include <aidl/android/media/tv/tuner/BnTunerFrontendCallback.h>
|
|
#include <aidl/android/media/tv/tuner/ITunerFrontend.h>
|
|
#include <android/hardware/tv/tuner/1.1/IFrontend.h>
|
|
#include <android/hardware/tv/tuner/1.1/IFrontendCallback.h>
|
|
#include <android/hardware/tv/tuner/1.1/types.h>
|
|
|
|
#include "ClientHelper.h"
|
|
#include "FrontendClientCallback.h"
|
|
#include "LnbClient.h"
|
|
|
|
using Status = ::ndk::ScopedAStatus;
|
|
|
|
using ::aidl::android::media::tv::tuner::BnTunerFrontendCallback;
|
|
using ::aidl::android::media::tv::tuner::ITunerFrontend;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendAnalogSettings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendAtscSettings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3Settings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendCableSettings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendDvbsSettings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendDvbtSettings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendDtmbSettings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendIsdbsSettings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendIsdbs3Settings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendIsdbtSettings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendScanMessage;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendSettings;
|
|
using ::aidl::android::media::tv::tuner::TunerFrontendStatus;
|
|
|
|
using ::android::hardware::Return;
|
|
using ::android::hardware::Void;
|
|
using ::android::hardware::tv::tuner::V1_0::FrontendInfo;
|
|
using ::android::hardware::tv::tuner::V1_0::FrontendEventType;
|
|
using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage;
|
|
using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType;
|
|
using ::android::hardware::tv::tuner::V1_0::FrontendScanType;
|
|
using ::android::hardware::tv::tuner::V1_0::FrontendSettings;
|
|
using ::android::hardware::tv::tuner::V1_0::FrontendStatus;
|
|
using ::android::hardware::tv::tuner::V1_0::FrontendStatusType;
|
|
using ::android::hardware::tv::tuner::V1_0::IFrontend;
|
|
using ::android::hardware::tv::tuner::V1_0::Result;
|
|
|
|
using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageExt1_1;
|
|
using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageTypeExt1_1;
|
|
using ::android::hardware::tv::tuner::V1_1::FrontendSettingsExt1_1;
|
|
using ::android::hardware::tv::tuner::V1_1::FrontendStatusExt1_1;
|
|
using ::android::hardware::tv::tuner::V1_1::FrontendStatusTypeExt1_1;
|
|
using ::android::hardware::tv::tuner::V1_1::IFrontendCallback;
|
|
|
|
using namespace std;
|
|
|
|
namespace android {
|
|
|
|
class TunerFrontendCallback : public BnTunerFrontendCallback {
|
|
|
|
public:
|
|
TunerFrontendCallback(sp<FrontendClientCallback> frontendClientCallback);
|
|
|
|
Status onEvent(int frontendEventType);
|
|
|
|
Status onScanMessage(int messageType, const TunerFrontendScanMessage& message);
|
|
|
|
void setFrontendType(int frontendType) { mType = frontendType; }
|
|
|
|
private:
|
|
FrontendScanMessage getHalScanMessage(int messageType, const TunerFrontendScanMessage& message);
|
|
FrontendScanMessageExt1_1 getHalScanMessageExt1_1(int messageType,
|
|
const TunerFrontendScanMessage& message);
|
|
bool is1_1ExtendedScanMessage(int messageType);
|
|
|
|
sp<FrontendClientCallback> mFrontendClientCallback;
|
|
int mType;
|
|
};
|
|
|
|
struct HidlFrontendCallback : public IFrontendCallback {
|
|
|
|
public:
|
|
HidlFrontendCallback(sp<FrontendClientCallback> frontendClientCallback);
|
|
|
|
virtual Return<void> onEvent(FrontendEventType frontendEventType);
|
|
virtual Return<void> onScanMessage(
|
|
FrontendScanMessageType type, const FrontendScanMessage& message);
|
|
virtual Return<void> onScanMessageExt1_1(
|
|
FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& messageExt);
|
|
|
|
private:
|
|
sp<FrontendClientCallback> mFrontendClientCallback;
|
|
};
|
|
|
|
struct FrontendClient : public RefBase {
|
|
|
|
public:
|
|
FrontendClient(shared_ptr<ITunerFrontend> tunerFrontend, int type);
|
|
~FrontendClient();
|
|
|
|
/**
|
|
* Set a FrontendClientCallback to receive frontend events and scan messages.
|
|
*/
|
|
Result setCallback(sp<FrontendClientCallback> frontendClientCallback);
|
|
|
|
// TODO: remove after migration to Tuner Service is done.
|
|
void setHidlFrontend(sp<IFrontend> frontend);
|
|
|
|
/**
|
|
* Tuner Frontend with Frontend Settings.
|
|
*/
|
|
Result tune(const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
|
|
|
|
/**
|
|
* Stop tune Frontend.
|
|
*/
|
|
Result stopTune();
|
|
|
|
/**
|
|
* Scan the frontend to use the settings given.
|
|
*/
|
|
Result scan(const FrontendSettings& settings, FrontendScanType frontendScanType,
|
|
const FrontendSettingsExt1_1& settingsExt1_1);
|
|
|
|
/**
|
|
* Stop the previous scanning.
|
|
*/
|
|
Result stopScan();
|
|
|
|
/**
|
|
* Gets the statuses of the frontend.
|
|
*/
|
|
vector<FrontendStatus> getStatus(vector<FrontendStatusType> statusTypes);
|
|
|
|
/**
|
|
* Gets the 1.1 extended statuses of the frontend.
|
|
*/
|
|
vector<FrontendStatusExt1_1> getStatusExtended_1_1(
|
|
vector<FrontendStatusTypeExt1_1> statusTypes);
|
|
|
|
/**
|
|
* Sets Low-Noise Block downconverter (LNB) for satellite frontend.
|
|
*/
|
|
Result setLnb(sp<LnbClient> lnbClient);
|
|
|
|
/**
|
|
* Enable or Disable Low Noise Amplifier (LNA).
|
|
*/
|
|
Result setLna(bool bEnable);
|
|
|
|
/**
|
|
* Link Frontend to the cicam with given id.
|
|
*
|
|
* @return lts id
|
|
*/
|
|
int linkCiCamToFrontend(int ciCamId);
|
|
|
|
/**
|
|
* Unink Frontend to the cicam with given id.
|
|
*/
|
|
Result unlinkCiCamToFrontend(int ciCamId);
|
|
|
|
/**
|
|
* Close Frontend.
|
|
*/
|
|
Result close();
|
|
|
|
shared_ptr<ITunerFrontend> getAidlFrontend();
|
|
|
|
void setId(int id);
|
|
int getId();
|
|
|
|
private:
|
|
vector<FrontendStatus> getHidlStatus(vector<TunerFrontendStatus>& aidlStatus);
|
|
vector<FrontendStatusExt1_1> getHidlStatusExt(vector<TunerFrontendStatus>& aidlStatus);
|
|
|
|
TunerFrontendSettings getAidlFrontendSettings(
|
|
const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
|
|
TunerFrontendAnalogSettings getAidlAnalogSettings(
|
|
const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
|
|
TunerFrontendDvbsSettings getAidlDvbsSettings(
|
|
const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
|
|
TunerFrontendCableSettings getAidlCableSettings(
|
|
const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
|
|
TunerFrontendDvbtSettings getAidlDvbtSettings(
|
|
const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
|
|
TunerFrontendDtmbSettings getAidlDtmbSettings(const FrontendSettingsExt1_1& settingsExt1_1);
|
|
TunerFrontendAtscSettings getAidlAtscSettings(const FrontendSettings& settings);
|
|
TunerFrontendAtsc3Settings getAidlAtsc3Settings(const FrontendSettings& settings);
|
|
TunerFrontendIsdbsSettings getAidlIsdbsSettings(const FrontendSettings& settings);
|
|
TunerFrontendIsdbs3Settings getAidlIsdbs3Settings(const FrontendSettings& settings);
|
|
TunerFrontendIsdbtSettings getAidlIsdbtSettings(const FrontendSettings& settings);
|
|
|
|
bool validateExtendedSettings(const FrontendSettingsExt1_1& settingsExt1_1);
|
|
|
|
/**
|
|
* An AIDL Tuner Frontend Singleton assigned at the first time when the Tuner Client
|
|
* opens a frontend cient. Default null when the service does not exist.
|
|
*/
|
|
shared_ptr<ITunerFrontend> mTunerFrontend;
|
|
|
|
/**
|
|
* A Frontend 1.0 HAL interface as a fall back interface when the Tuner Service does not exist.
|
|
* This is a temprary connection before the Tuner Framework fully migrates to the TunerService.
|
|
* Default null.
|
|
*/
|
|
sp<IFrontend> mFrontend;
|
|
|
|
/**
|
|
* A Frontend 1.1 HAL interface as a fall back interface when the Tuner Service does not exist.
|
|
* This is a temprary connection before the Tuner Framework fully migrates to the TunerService.
|
|
* Default null.
|
|
*/
|
|
sp<::android::hardware::tv::tuner::V1_1::IFrontend> mFrontend_1_1;
|
|
|
|
int mId;
|
|
int mType;
|
|
};
|
|
} // namespace android
|
|
|
|
#endif // _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_
|