Loading services/tuner/Android.bp +2 −28 Original line number Original line Diff line number Diff line filegroup { filegroup { name: "tv_tuner_aidl", name: "tv_tuner_aidl", srcs: [ srcs: [ "aidl/android/media/tv/tuner/ITunerFrontend.aidl", "aidl/android/media/tv/tuner/*.aidl", "aidl/android/media/tv/tuner/ITunerFrontendCallback.aidl", "aidl/android/media/tv/tuner/ITunerService.aidl", "aidl/android/media/tv/tuner/TunerAtsc3PlpInfo.aidl", "aidl/android/media/tv/tuner/TunerFrontendAnalogCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendAtscCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendAtsc3Capabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendCableCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendDvbsCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendDvbtCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbsCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbs3Capabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbtCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendAnalogSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendAtsc3PlpSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendAtsc3Settings.aidl", "aidl/android/media/tv/tuner/TunerFrontendAtscSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendCableSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendDvbsCodeRate.aidl", "aidl/android/media/tv/tuner/TunerFrontendDvbsSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendDvbtSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbs3Settings.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbsSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbtSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendStatus.aidl", "aidl/android/media/tv/tuner/TunerServiceFrontendInfo.aidl", ], ], path: "aidl", path: "aidl", } } Loading Loading @@ -67,6 +40,7 @@ cc_library { shared_libs: [ shared_libs: [ "android.hardware.tv.tuner@1.0", "android.hardware.tv.tuner@1.0", "android.hardware.tv.tuner@1.1", "libbase", "libbase", "libbinder_ndk", "libbinder_ndk", "libcutils", "libcutils", Loading services/tuner/TunerFrontend.cpp +75 −29 Original line number Original line Diff line number Diff line Loading @@ -19,8 +19,8 @@ #include "TunerFrontend.h" #include "TunerFrontend.h" #include "TunerService.h" #include "TunerService.h" using ::aidl::android::media::tv::tuner::TunerAtsc3PlpInfo; using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3PlpSettings; using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3PlpSettings; using ::aidl::android::media::tv::tuner::TunerFrontendScanAtsc3PlpInfo; using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard; using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard; using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType; using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType; using ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation; using ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation; Loading Loading @@ -69,12 +69,13 @@ using ::android::hardware::tv::tuner::V1_0::FrontendScanAtsc3PlpInfo; using ::android::hardware::tv::tuner::V1_0::FrontendScanType; using ::android::hardware::tv::tuner::V1_0::FrontendScanType; using ::android::hardware::tv::tuner::V1_0::FrontendSettings;; using ::android::hardware::tv::tuner::V1_0::FrontendSettings;; using ::android::hardware::tv::tuner::V1_0::Result; using ::android::hardware::tv::tuner::V1_0::Result; using ::android::hardware::tv::tuner::V1_1::FrontendModulation; namespace android { namespace android { TunerFrontend::TunerFrontend(sp<ITuner> tuner, int frontendHandle) { TunerFrontend::TunerFrontend(sp<ITuner> tuner, int id) { mTuner = tuner; mTuner = tuner; mId = TunerService::getResourceIdFromHandle(frontendHandle); mId = id; if (mTuner != NULL) { if (mTuner != NULL) { Result status; Result status; Loading Loading @@ -312,6 +313,10 @@ Status TunerFrontend::getStatus(const std::vector<int32_t>& /*statusTypes*/, return Status::ok(); return Status::ok(); } } Status TunerFrontend::getFrontendId(int* _aidl_return) { *_aidl_return = mId; return Status::ok(); } /////////////// FrontendCallback /////////////////////// /////////////// FrontendCallback /////////////////////// Return<void> TunerFrontend::FrontendCallback::onEvent(FrontendEventType frontendEventType) { Return<void> TunerFrontend::FrontendCallback::onEvent(FrontendEventType frontendEventType) { Loading @@ -323,59 +328,56 @@ Return<void> TunerFrontend::FrontendCallback::onEvent(FrontendEventType frontend Return<void> TunerFrontend::FrontendCallback::onScanMessage( Return<void> TunerFrontend::FrontendCallback::onScanMessage( FrontendScanMessageType type, const FrontendScanMessage& message) { FrontendScanMessageType type, const FrontendScanMessage& message) { ALOGD("FrontendCallback::onScanMessage, type=%d", type); ALOGD("FrontendCallback::onScanMessage, type=%d", type); TunerFrontendScanMessage scanMessage; switch(type) { switch(type) { case FrontendScanMessageType::LOCKED: { case FrontendScanMessageType::LOCKED: { if (message.isLocked()) { scanMessage.set<TunerFrontendScanMessage::isLocked>(message.isLocked()); mTunerFrontendCallback->onLocked(); } break; break; } } case FrontendScanMessageType::END: { case FrontendScanMessageType::END: { if (message.isEnd()) { scanMessage.set<TunerFrontendScanMessage::isEnd>(message.isEnd()); mTunerFrontendCallback->onScanStopped(); } break; break; } } case FrontendScanMessageType::PROGRESS_PERCENT: { case FrontendScanMessageType::PROGRESS_PERCENT: { mTunerFrontendCallback->onProgress((int)message.progressPercent()); scanMessage.set<TunerFrontendScanMessage::progressPercent>(message.progressPercent()); break; break; } } case FrontendScanMessageType::FREQUENCY: { case FrontendScanMessageType::FREQUENCY: { auto f = message.frequencies(); auto f = message.frequencies(); std::vector<int32_t> frequencies(std::begin(f), std::end(f)); std::vector<int> frequencies(std::begin(f), std::end(f)); mTunerFrontendCallback->onFrequenciesReport(frequencies); scanMessage.set<TunerFrontendScanMessage::frequencies>(frequencies); break; break; } } case FrontendScanMessageType::SYMBOL_RATE: { case FrontendScanMessageType::SYMBOL_RATE: { auto s = message.symbolRates(); auto s = message.symbolRates(); std::vector<int32_t> symbolRates(std::begin(s), std::end(s)); std::vector<int> symbolRates(std::begin(s), std::end(s)); mTunerFrontendCallback->onSymbolRates(symbolRates); scanMessage.set<TunerFrontendScanMessage::symbolRates>(symbolRates); break; break; } } case FrontendScanMessageType::HIERARCHY: { case FrontendScanMessageType::HIERARCHY: { mTunerFrontendCallback->onHierarchy((int)message.hierarchy()); scanMessage.set<TunerFrontendScanMessage::hierarchy>((int)message.hierarchy()); break; break; } } case FrontendScanMessageType::ANALOG_TYPE: { case FrontendScanMessageType::ANALOG_TYPE: { mTunerFrontendCallback->onSignalType((int)message.analogType()); scanMessage.set<TunerFrontendScanMessage::analogType>((int)message.analogType()); break; break; } } case FrontendScanMessageType::PLP_IDS: { case FrontendScanMessageType::PLP_IDS: { auto p = message.plpIds(); auto p = message.plpIds(); std::vector<int32_t> plpIds(std::begin(p), std::end(p)); std::vector<uint8_t> plpIds(std::begin(p), std::end(p)); mTunerFrontendCallback->onPlpIds(plpIds); scanMessage.set<TunerFrontendScanMessage::plpIds>(plpIds); break; break; } } case FrontendScanMessageType::GROUP_IDS: { case FrontendScanMessageType::GROUP_IDS: { auto g = message.groupIds(); auto g = message.groupIds(); std::vector<int32_t> groupIds(std::begin(g), std::end(g)); std::vector<uint8_t> groupIds(std::begin(g), std::end(g)); mTunerFrontendCallback->onGroupIds(groupIds); scanMessage.set<TunerFrontendScanMessage::groupIds>(groupIds); break; break; } } case FrontendScanMessageType::INPUT_STREAM_IDS: { case FrontendScanMessageType::INPUT_STREAM_IDS: { auto i = message.inputStreamIds(); auto i = message.inputStreamIds(); std::vector<int32_t> streamIds(std::begin(i), std::end(i)); std::vector<char16_t> streamIds(std::begin(i), std::end(i)); mTunerFrontendCallback->onInputStreamIds(streamIds); scanMessage.set<TunerFrontendScanMessage::inputStreamIds>(streamIds); break; break; } } case FrontendScanMessageType::STANDARD: { case FrontendScanMessageType::STANDARD: { Loading @@ -383,37 +385,81 @@ Return<void> TunerFrontend::FrontendCallback::onScanMessage( int standard; int standard; if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sStd) { if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sStd) { standard = (int) std.sStd(); standard = (int) std.sStd(); mTunerFrontendCallback->onDvbsStandard(standard); } else if (std.getDiscriminator() == } else if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::tStd) { FrontendScanMessage::Standard::hidl_discriminator::tStd) { standard = (int) std.tStd(); standard = (int) std.tStd(); mTunerFrontendCallback->onDvbsStandard(standard); } else if (std.getDiscriminator() == } else if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sifStd) { FrontendScanMessage::Standard::hidl_discriminator::sifStd) { standard = (int) std.sifStd(); standard = (int) std.sifStd(); mTunerFrontendCallback->onAnalogSifStandard(standard); } } scanMessage.set<TunerFrontendScanMessage::std>(standard); break; break; } } case FrontendScanMessageType::ATSC3_PLP_INFO: { case FrontendScanMessageType::ATSC3_PLP_INFO: { std::vector<FrontendScanAtsc3PlpInfo> plpInfos = message.atsc3PlpInfos(); std::vector<FrontendScanAtsc3PlpInfo> plpInfos = message.atsc3PlpInfos(); std::vector<TunerAtsc3PlpInfo> tunerPlpInfos; std::vector<TunerFrontendScanAtsc3PlpInfo> tunerPlpInfos; for (int i = 0; i < plpInfos.size(); i++) { for (int i = 0; i < plpInfos.size(); i++) { auto info = plpInfos[i]; auto info = plpInfos[i]; int plpId = (int) info.plpId; int plpId = (int) info.plpId; bool lls = (bool) info.bLlsFlag; bool lls = (bool) info.bLlsFlag; TunerAtsc3PlpInfo plpInfo{ TunerFrontendScanAtsc3PlpInfo plpInfo{ .plpId = plpId, .plpId = plpId, .llsFlag = lls, .llsFlag = lls, }; }; tunerPlpInfos.push_back(plpInfo); tunerPlpInfos.push_back(plpInfo); } } mTunerFrontendCallback->onAtsc3PlpInfos(tunerPlpInfos); scanMessage.set<TunerFrontendScanMessage::atsc3PlpInfos>(tunerPlpInfos); break; } default: break; } mTunerFrontendCallback->onScanMessage((int)type, scanMessage); return Void(); } Return<void> TunerFrontend::FrontendCallback::onScanMessageExt1_1( FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& message) { ALOGD("onScanMessageExt1_1::onScanMessage, type=%d", type); TunerFrontendScanMessage scanMessage; switch(type) { case FrontendScanMessageTypeExt1_1::MODULATION: { FrontendModulation m = message.modulation(); int modulation; if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::dvbc) { modulation = (int) m.dvbc(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::dvbt) { modulation = (int) m.dvbt(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::dvbs) { modulation = (int) m.dvbs(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::isdbs) { modulation = (int) m.isdbs(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::isdbs3) { modulation = (int) m.isdbs3(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::isdbt) { modulation = (int) m.isdbt(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::atsc) { modulation = (int) m.atsc(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::atsc3) { modulation = (int) m.atsc3(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::dtmb) { modulation = (int) m.dtmb(); } scanMessage.set<TunerFrontendScanMessage::modulation>(modulation); break; } case FrontendScanMessageTypeExt1_1::DVBC_ANNEX: { scanMessage.set<TunerFrontendScanMessage::annex>((int)message.annex()); break; } case FrontendScanMessageTypeExt1_1::HIGH_PRIORITY: { scanMessage.set<TunerFrontendScanMessage::isHighPriority>(message.isHighPriority()); break; break; } } default: default: break; break; } } mTunerFrontendCallback->onScanMessage((int)type, scanMessage); return Void(); return Void(); } } Loading services/tuner/TunerFrontend.h +9 −3 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <aidl/android/media/tv/tuner/BnTunerFrontend.h> #include <aidl/android/media/tv/tuner/BnTunerFrontend.h> #include <android/hardware/tv/tuner/1.0/ITuner.h> #include <android/hardware/tv/tuner/1.0/ITuner.h> #include <android/hardware/tv/tuner/1.1/IFrontendCallback.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/ADebug.h> #include <utils/Log.h> #include <utils/Log.h> Loading @@ -27,6 +28,7 @@ using ::aidl::android::media::tv::tuner::BnTunerFrontend; using ::aidl::android::media::tv::tuner::ITunerFrontendCallback; using ::aidl::android::media::tv::tuner::ITunerFrontendCallback; using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3Settings; using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3Settings; using ::aidl::android::media::tv::tuner::TunerFrontendDvbsCodeRate; using ::aidl::android::media::tv::tuner::TunerFrontendDvbsCodeRate; using ::aidl::android::media::tv::tuner::TunerFrontendScanMessage; using ::aidl::android::media::tv::tuner::TunerFrontendSettings; using ::aidl::android::media::tv::tuner::TunerFrontendSettings; using ::aidl::android::media::tv::tuner::TunerFrontendStatus; using ::aidl::android::media::tv::tuner::TunerFrontendStatus; using ::android::hardware::Return; using ::android::hardware::Return; Loading @@ -39,16 +41,17 @@ using ::android::hardware::tv::tuner::V1_0::FrontendId; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType; using ::android::hardware::tv::tuner::V1_0::IFrontend; using ::android::hardware::tv::tuner::V1_0::IFrontend; using ::android::hardware::tv::tuner::V1_0::IFrontendCallback; using ::android::hardware::tv::tuner::V1_0::ITuner; using ::android::hardware::tv::tuner::V1_0::ITuner; using ::android::hardware::tv::tuner::V1_1::IFrontendCallback; using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageTypeExt1_1; namespace android { namespace android { class TunerFrontend : public BnTunerFrontend { class TunerFrontend : public BnTunerFrontend { public: public: TunerFrontend(sp<ITuner> tuner, int frontendHandle); TunerFrontend(sp<ITuner> tuner, int id); virtual ~TunerFrontend(); virtual ~TunerFrontend(); Status setCallback( Status setCallback( const std::shared_ptr<ITunerFrontendCallback>& tunerFrontendCallback) override; const std::shared_ptr<ITunerFrontendCallback>& tunerFrontendCallback) override; Loading @@ -61,6 +64,7 @@ public: Status close() override; Status close() override; Status getStatus(const std::vector<int32_t>& statusTypes, Status getStatus(const std::vector<int32_t>& statusTypes, std::vector<TunerFrontendStatus>* _aidl_return) override; std::vector<TunerFrontendStatus>* _aidl_return) override; Status getFrontendId(int* _aidl_return) override; struct FrontendCallback : public IFrontendCallback { struct FrontendCallback : public IFrontendCallback { FrontendCallback(const std::shared_ptr<ITunerFrontendCallback> tunerFrontendCallback) FrontendCallback(const std::shared_ptr<ITunerFrontendCallback> tunerFrontendCallback) Loading @@ -69,6 +73,8 @@ public: virtual Return<void> onEvent(FrontendEventType frontendEventType); virtual Return<void> onEvent(FrontendEventType frontendEventType); virtual Return<void> onScanMessage( virtual Return<void> onScanMessage( FrontendScanMessageType type, const FrontendScanMessage& message); FrontendScanMessageType type, const FrontendScanMessage& message); virtual Return<void> onScanMessageExt1_1( FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& message); std::shared_ptr<ITunerFrontendCallback> mTunerFrontendCallback; std::shared_ptr<ITunerFrontendCallback> mTunerFrontendCallback; }; }; Loading services/tuner/TunerService.cpp +2 −1 Original line number Original line Diff line number Diff line Loading @@ -252,7 +252,8 @@ Status TunerService::openFrontend( static_cast<int32_t>(Result::UNAVAILABLE)); static_cast<int32_t>(Result::UNAVAILABLE)); } } *_aidl_return = ::ndk::SharedRefBase::make<TunerFrontend>(mTuner, frontendHandle); int id = getResourceIdFromHandle(frontendHandle); *_aidl_return = ::ndk::SharedRefBase::make<TunerFrontend>(mTuner, id); return Status::ok(); return Status::ok(); } } Loading services/tuner/TunerService.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -80,6 +80,7 @@ public: TunerService(); TunerService(); virtual ~TunerService(); virtual ~TunerService(); // TODO: create a map between resource id and handles. static int getResourceIdFromHandle(int resourceHandle) { static int getResourceIdFromHandle(int resourceHandle) { return (resourceHandle & 0x00ff0000) >> 16; return (resourceHandle & 0x00ff0000) >> 16; } } Loading Loading
services/tuner/Android.bp +2 −28 Original line number Original line Diff line number Diff line filegroup { filegroup { name: "tv_tuner_aidl", name: "tv_tuner_aidl", srcs: [ srcs: [ "aidl/android/media/tv/tuner/ITunerFrontend.aidl", "aidl/android/media/tv/tuner/*.aidl", "aidl/android/media/tv/tuner/ITunerFrontendCallback.aidl", "aidl/android/media/tv/tuner/ITunerService.aidl", "aidl/android/media/tv/tuner/TunerAtsc3PlpInfo.aidl", "aidl/android/media/tv/tuner/TunerFrontendAnalogCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendAtscCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendAtsc3Capabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendCableCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendDvbsCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendDvbtCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbsCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbs3Capabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbtCapabilities.aidl", "aidl/android/media/tv/tuner/TunerFrontendAnalogSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendAtsc3PlpSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendAtsc3Settings.aidl", "aidl/android/media/tv/tuner/TunerFrontendAtscSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendCableSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendDvbsCodeRate.aidl", "aidl/android/media/tv/tuner/TunerFrontendDvbsSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendDvbtSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbs3Settings.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbsSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendIsdbtSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendSettings.aidl", "aidl/android/media/tv/tuner/TunerFrontendStatus.aidl", "aidl/android/media/tv/tuner/TunerServiceFrontendInfo.aidl", ], ], path: "aidl", path: "aidl", } } Loading Loading @@ -67,6 +40,7 @@ cc_library { shared_libs: [ shared_libs: [ "android.hardware.tv.tuner@1.0", "android.hardware.tv.tuner@1.0", "android.hardware.tv.tuner@1.1", "libbase", "libbase", "libbinder_ndk", "libbinder_ndk", "libcutils", "libcutils", Loading
services/tuner/TunerFrontend.cpp +75 −29 Original line number Original line Diff line number Diff line Loading @@ -19,8 +19,8 @@ #include "TunerFrontend.h" #include "TunerFrontend.h" #include "TunerService.h" #include "TunerService.h" using ::aidl::android::media::tv::tuner::TunerAtsc3PlpInfo; using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3PlpSettings; using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3PlpSettings; using ::aidl::android::media::tv::tuner::TunerFrontendScanAtsc3PlpInfo; using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard; using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard; using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType; using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType; using ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation; using ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation; Loading Loading @@ -69,12 +69,13 @@ using ::android::hardware::tv::tuner::V1_0::FrontendScanAtsc3PlpInfo; using ::android::hardware::tv::tuner::V1_0::FrontendScanType; using ::android::hardware::tv::tuner::V1_0::FrontendScanType; using ::android::hardware::tv::tuner::V1_0::FrontendSettings;; using ::android::hardware::tv::tuner::V1_0::FrontendSettings;; using ::android::hardware::tv::tuner::V1_0::Result; using ::android::hardware::tv::tuner::V1_0::Result; using ::android::hardware::tv::tuner::V1_1::FrontendModulation; namespace android { namespace android { TunerFrontend::TunerFrontend(sp<ITuner> tuner, int frontendHandle) { TunerFrontend::TunerFrontend(sp<ITuner> tuner, int id) { mTuner = tuner; mTuner = tuner; mId = TunerService::getResourceIdFromHandle(frontendHandle); mId = id; if (mTuner != NULL) { if (mTuner != NULL) { Result status; Result status; Loading Loading @@ -312,6 +313,10 @@ Status TunerFrontend::getStatus(const std::vector<int32_t>& /*statusTypes*/, return Status::ok(); return Status::ok(); } } Status TunerFrontend::getFrontendId(int* _aidl_return) { *_aidl_return = mId; return Status::ok(); } /////////////// FrontendCallback /////////////////////// /////////////// FrontendCallback /////////////////////// Return<void> TunerFrontend::FrontendCallback::onEvent(FrontendEventType frontendEventType) { Return<void> TunerFrontend::FrontendCallback::onEvent(FrontendEventType frontendEventType) { Loading @@ -323,59 +328,56 @@ Return<void> TunerFrontend::FrontendCallback::onEvent(FrontendEventType frontend Return<void> TunerFrontend::FrontendCallback::onScanMessage( Return<void> TunerFrontend::FrontendCallback::onScanMessage( FrontendScanMessageType type, const FrontendScanMessage& message) { FrontendScanMessageType type, const FrontendScanMessage& message) { ALOGD("FrontendCallback::onScanMessage, type=%d", type); ALOGD("FrontendCallback::onScanMessage, type=%d", type); TunerFrontendScanMessage scanMessage; switch(type) { switch(type) { case FrontendScanMessageType::LOCKED: { case FrontendScanMessageType::LOCKED: { if (message.isLocked()) { scanMessage.set<TunerFrontendScanMessage::isLocked>(message.isLocked()); mTunerFrontendCallback->onLocked(); } break; break; } } case FrontendScanMessageType::END: { case FrontendScanMessageType::END: { if (message.isEnd()) { scanMessage.set<TunerFrontendScanMessage::isEnd>(message.isEnd()); mTunerFrontendCallback->onScanStopped(); } break; break; } } case FrontendScanMessageType::PROGRESS_PERCENT: { case FrontendScanMessageType::PROGRESS_PERCENT: { mTunerFrontendCallback->onProgress((int)message.progressPercent()); scanMessage.set<TunerFrontendScanMessage::progressPercent>(message.progressPercent()); break; break; } } case FrontendScanMessageType::FREQUENCY: { case FrontendScanMessageType::FREQUENCY: { auto f = message.frequencies(); auto f = message.frequencies(); std::vector<int32_t> frequencies(std::begin(f), std::end(f)); std::vector<int> frequencies(std::begin(f), std::end(f)); mTunerFrontendCallback->onFrequenciesReport(frequencies); scanMessage.set<TunerFrontendScanMessage::frequencies>(frequencies); break; break; } } case FrontendScanMessageType::SYMBOL_RATE: { case FrontendScanMessageType::SYMBOL_RATE: { auto s = message.symbolRates(); auto s = message.symbolRates(); std::vector<int32_t> symbolRates(std::begin(s), std::end(s)); std::vector<int> symbolRates(std::begin(s), std::end(s)); mTunerFrontendCallback->onSymbolRates(symbolRates); scanMessage.set<TunerFrontendScanMessage::symbolRates>(symbolRates); break; break; } } case FrontendScanMessageType::HIERARCHY: { case FrontendScanMessageType::HIERARCHY: { mTunerFrontendCallback->onHierarchy((int)message.hierarchy()); scanMessage.set<TunerFrontendScanMessage::hierarchy>((int)message.hierarchy()); break; break; } } case FrontendScanMessageType::ANALOG_TYPE: { case FrontendScanMessageType::ANALOG_TYPE: { mTunerFrontendCallback->onSignalType((int)message.analogType()); scanMessage.set<TunerFrontendScanMessage::analogType>((int)message.analogType()); break; break; } } case FrontendScanMessageType::PLP_IDS: { case FrontendScanMessageType::PLP_IDS: { auto p = message.plpIds(); auto p = message.plpIds(); std::vector<int32_t> plpIds(std::begin(p), std::end(p)); std::vector<uint8_t> plpIds(std::begin(p), std::end(p)); mTunerFrontendCallback->onPlpIds(plpIds); scanMessage.set<TunerFrontendScanMessage::plpIds>(plpIds); break; break; } } case FrontendScanMessageType::GROUP_IDS: { case FrontendScanMessageType::GROUP_IDS: { auto g = message.groupIds(); auto g = message.groupIds(); std::vector<int32_t> groupIds(std::begin(g), std::end(g)); std::vector<uint8_t> groupIds(std::begin(g), std::end(g)); mTunerFrontendCallback->onGroupIds(groupIds); scanMessage.set<TunerFrontendScanMessage::groupIds>(groupIds); break; break; } } case FrontendScanMessageType::INPUT_STREAM_IDS: { case FrontendScanMessageType::INPUT_STREAM_IDS: { auto i = message.inputStreamIds(); auto i = message.inputStreamIds(); std::vector<int32_t> streamIds(std::begin(i), std::end(i)); std::vector<char16_t> streamIds(std::begin(i), std::end(i)); mTunerFrontendCallback->onInputStreamIds(streamIds); scanMessage.set<TunerFrontendScanMessage::inputStreamIds>(streamIds); break; break; } } case FrontendScanMessageType::STANDARD: { case FrontendScanMessageType::STANDARD: { Loading @@ -383,37 +385,81 @@ Return<void> TunerFrontend::FrontendCallback::onScanMessage( int standard; int standard; if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sStd) { if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sStd) { standard = (int) std.sStd(); standard = (int) std.sStd(); mTunerFrontendCallback->onDvbsStandard(standard); } else if (std.getDiscriminator() == } else if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::tStd) { FrontendScanMessage::Standard::hidl_discriminator::tStd) { standard = (int) std.tStd(); standard = (int) std.tStd(); mTunerFrontendCallback->onDvbsStandard(standard); } else if (std.getDiscriminator() == } else if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sifStd) { FrontendScanMessage::Standard::hidl_discriminator::sifStd) { standard = (int) std.sifStd(); standard = (int) std.sifStd(); mTunerFrontendCallback->onAnalogSifStandard(standard); } } scanMessage.set<TunerFrontendScanMessage::std>(standard); break; break; } } case FrontendScanMessageType::ATSC3_PLP_INFO: { case FrontendScanMessageType::ATSC3_PLP_INFO: { std::vector<FrontendScanAtsc3PlpInfo> plpInfos = message.atsc3PlpInfos(); std::vector<FrontendScanAtsc3PlpInfo> plpInfos = message.atsc3PlpInfos(); std::vector<TunerAtsc3PlpInfo> tunerPlpInfos; std::vector<TunerFrontendScanAtsc3PlpInfo> tunerPlpInfos; for (int i = 0; i < plpInfos.size(); i++) { for (int i = 0; i < plpInfos.size(); i++) { auto info = plpInfos[i]; auto info = plpInfos[i]; int plpId = (int) info.plpId; int plpId = (int) info.plpId; bool lls = (bool) info.bLlsFlag; bool lls = (bool) info.bLlsFlag; TunerAtsc3PlpInfo plpInfo{ TunerFrontendScanAtsc3PlpInfo plpInfo{ .plpId = plpId, .plpId = plpId, .llsFlag = lls, .llsFlag = lls, }; }; tunerPlpInfos.push_back(plpInfo); tunerPlpInfos.push_back(plpInfo); } } mTunerFrontendCallback->onAtsc3PlpInfos(tunerPlpInfos); scanMessage.set<TunerFrontendScanMessage::atsc3PlpInfos>(tunerPlpInfos); break; } default: break; } mTunerFrontendCallback->onScanMessage((int)type, scanMessage); return Void(); } Return<void> TunerFrontend::FrontendCallback::onScanMessageExt1_1( FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& message) { ALOGD("onScanMessageExt1_1::onScanMessage, type=%d", type); TunerFrontendScanMessage scanMessage; switch(type) { case FrontendScanMessageTypeExt1_1::MODULATION: { FrontendModulation m = message.modulation(); int modulation; if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::dvbc) { modulation = (int) m.dvbc(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::dvbt) { modulation = (int) m.dvbt(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::dvbs) { modulation = (int) m.dvbs(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::isdbs) { modulation = (int) m.isdbs(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::isdbs3) { modulation = (int) m.isdbs3(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::isdbt) { modulation = (int) m.isdbt(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::atsc) { modulation = (int) m.atsc(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::atsc3) { modulation = (int) m.atsc3(); } else if (m.getDiscriminator() == FrontendModulation::hidl_discriminator::dtmb) { modulation = (int) m.dtmb(); } scanMessage.set<TunerFrontendScanMessage::modulation>(modulation); break; } case FrontendScanMessageTypeExt1_1::DVBC_ANNEX: { scanMessage.set<TunerFrontendScanMessage::annex>((int)message.annex()); break; } case FrontendScanMessageTypeExt1_1::HIGH_PRIORITY: { scanMessage.set<TunerFrontendScanMessage::isHighPriority>(message.isHighPriority()); break; break; } } default: default: break; break; } } mTunerFrontendCallback->onScanMessage((int)type, scanMessage); return Void(); return Void(); } } Loading
services/tuner/TunerFrontend.h +9 −3 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <aidl/android/media/tv/tuner/BnTunerFrontend.h> #include <aidl/android/media/tv/tuner/BnTunerFrontend.h> #include <android/hardware/tv/tuner/1.0/ITuner.h> #include <android/hardware/tv/tuner/1.0/ITuner.h> #include <android/hardware/tv/tuner/1.1/IFrontendCallback.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/ADebug.h> #include <utils/Log.h> #include <utils/Log.h> Loading @@ -27,6 +28,7 @@ using ::aidl::android::media::tv::tuner::BnTunerFrontend; using ::aidl::android::media::tv::tuner::ITunerFrontendCallback; using ::aidl::android::media::tv::tuner::ITunerFrontendCallback; using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3Settings; using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3Settings; using ::aidl::android::media::tv::tuner::TunerFrontendDvbsCodeRate; using ::aidl::android::media::tv::tuner::TunerFrontendDvbsCodeRate; using ::aidl::android::media::tv::tuner::TunerFrontendScanMessage; using ::aidl::android::media::tv::tuner::TunerFrontendSettings; using ::aidl::android::media::tv::tuner::TunerFrontendSettings; using ::aidl::android::media::tv::tuner::TunerFrontendStatus; using ::aidl::android::media::tv::tuner::TunerFrontendStatus; using ::android::hardware::Return; using ::android::hardware::Return; Loading @@ -39,16 +41,17 @@ using ::android::hardware::tv::tuner::V1_0::FrontendId; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType; using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType; using ::android::hardware::tv::tuner::V1_0::IFrontend; using ::android::hardware::tv::tuner::V1_0::IFrontend; using ::android::hardware::tv::tuner::V1_0::IFrontendCallback; using ::android::hardware::tv::tuner::V1_0::ITuner; using ::android::hardware::tv::tuner::V1_0::ITuner; using ::android::hardware::tv::tuner::V1_1::IFrontendCallback; using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageExt1_1; using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageTypeExt1_1; namespace android { namespace android { class TunerFrontend : public BnTunerFrontend { class TunerFrontend : public BnTunerFrontend { public: public: TunerFrontend(sp<ITuner> tuner, int frontendHandle); TunerFrontend(sp<ITuner> tuner, int id); virtual ~TunerFrontend(); virtual ~TunerFrontend(); Status setCallback( Status setCallback( const std::shared_ptr<ITunerFrontendCallback>& tunerFrontendCallback) override; const std::shared_ptr<ITunerFrontendCallback>& tunerFrontendCallback) override; Loading @@ -61,6 +64,7 @@ public: Status close() override; Status close() override; Status getStatus(const std::vector<int32_t>& statusTypes, Status getStatus(const std::vector<int32_t>& statusTypes, std::vector<TunerFrontendStatus>* _aidl_return) override; std::vector<TunerFrontendStatus>* _aidl_return) override; Status getFrontendId(int* _aidl_return) override; struct FrontendCallback : public IFrontendCallback { struct FrontendCallback : public IFrontendCallback { FrontendCallback(const std::shared_ptr<ITunerFrontendCallback> tunerFrontendCallback) FrontendCallback(const std::shared_ptr<ITunerFrontendCallback> tunerFrontendCallback) Loading @@ -69,6 +73,8 @@ public: virtual Return<void> onEvent(FrontendEventType frontendEventType); virtual Return<void> onEvent(FrontendEventType frontendEventType); virtual Return<void> onScanMessage( virtual Return<void> onScanMessage( FrontendScanMessageType type, const FrontendScanMessage& message); FrontendScanMessageType type, const FrontendScanMessage& message); virtual Return<void> onScanMessageExt1_1( FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& message); std::shared_ptr<ITunerFrontendCallback> mTunerFrontendCallback; std::shared_ptr<ITunerFrontendCallback> mTunerFrontendCallback; }; }; Loading
services/tuner/TunerService.cpp +2 −1 Original line number Original line Diff line number Diff line Loading @@ -252,7 +252,8 @@ Status TunerService::openFrontend( static_cast<int32_t>(Result::UNAVAILABLE)); static_cast<int32_t>(Result::UNAVAILABLE)); } } *_aidl_return = ::ndk::SharedRefBase::make<TunerFrontend>(mTuner, frontendHandle); int id = getResourceIdFromHandle(frontendHandle); *_aidl_return = ::ndk::SharedRefBase::make<TunerFrontend>(mTuner, id); return Status::ok(); return Status::ok(); } } Loading
services/tuner/TunerService.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -80,6 +80,7 @@ public: TunerService(); TunerService(); virtual ~TunerService(); virtual ~TunerService(); // TODO: create a map between resource id and handles. static int getResourceIdFromHandle(int resourceHandle) { static int getResourceIdFromHandle(int resourceHandle) { return (resourceHandle & 0x00ff0000) >> 16; return (resourceHandle & 0x00ff0000) >> 16; } } Loading