diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 1bbd5749..268057b1 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -128,7 +128,7 @@ if(CMAKE_IARM_MGR) set(EXT_SOURCES "${EXT_SOURCES}" rdk/IIarm/DeviceIARMInterface.cpp) set(EXT_SOURCES "${EXT_SOURCES}" rdk/IFirebolt/DeviceFireboltInterface.cpp) set(EXT_SOURCES "${EXT_SOURCES}" IFirebolt/FireboltInterface.cpp) - list(APPEND LIB_EXT_DEPENDS -lIARMBus -lds -ldshalcli) + list(APPEND LIB_EXT_DEPENDS -lIARMBus) endif() if(CMAKE_PLAYER_RFC_REQUIRED) diff --git a/externals/PlayerExternalsInterface.cpp b/externals/PlayerExternalsInterface.cpp index f62d9fff..ba747a74 100644 --- a/externals/PlayerExternalsInterface.cpp +++ b/externals/PlayerExternalsInterface.cpp @@ -153,6 +153,10 @@ bool PlayerExternalsInterface::IsConfigWifiCurlHeader() return bRet; } +/** + * @brief Deprecated runtime selector for Firebolt/IARM path. + * @deprecated Path selection is compile-time controlled by FIREBOLT_SUPPORTED. + */ void PlayerExternalsInterface::SetUseFireBoltSDK(bool t_use_firebolt_sdk) { m_pIarmInterface->SetUseFireBoltSDK(t_use_firebolt_sdk); diff --git a/externals/PlayerExternalsInterface.h b/externals/PlayerExternalsInterface.h index d6ae3a5c..304a2d19 100644 --- a/externals/PlayerExternalsInterface.h +++ b/externals/PlayerExternalsInterface.h @@ -200,6 +200,10 @@ class FakePlayerExternalsInterface : public PlayerExternalsInterfaceBase */ bool GetActiveInterface()override{return false;} + /** + * @brief Deprecated runtime selector retained for interface compatibility. + * @deprecated Path selection is compile-time controlled by FIREBOLT_SUPPORTED. + */ void SetUseFireBoltSDK(bool t_use_firebolt_sdk) override {} void SetPowerEvent(bool powerEvt) override {} @@ -324,7 +328,11 @@ class PlayerExternalsInterface */ bool IsConfigWifiCurlHeader(); - + /** + * @brief Deprecated runtime selector for Firebolt/IARM path. + * @deprecated Path selection is compile-time controlled by FIREBOLT_SUPPORTED. + * This API is retained only for backward compatibility. + */ void SetUseFireBoltSDK(bool t_use_firebolt_sdk); void SetPowerEvent(bool powerEvt); diff --git a/externals/PlayerExternalsInterfaceBase.h b/externals/PlayerExternalsInterfaceBase.h index 6630af77..0871a604 100644 --- a/externals/PlayerExternalsInterfaceBase.h +++ b/externals/PlayerExternalsInterfaceBase.h @@ -137,6 +137,11 @@ class PlayerExternalsInterfaceBase virtual ~PlayerExternalsInterfaceBase(){} + /** + * @brief Deprecated runtime selector for Firebolt/IARM path. + * @deprecated Path selection is compile-time controlled by FIREBOLT_SUPPORTED. + * Implementations may ignore this input. + */ virtual void SetUseFireBoltSDK(bool t_use_firebolt_sdk) = 0; virtual void SetPowerEvent(bool powerEvt) = 0; diff --git a/externals/PlayerThunderAccessBase.h b/externals/PlayerThunderAccessBase.h index 8bde0c7c..d8d9be7c 100644 --- a/externals/PlayerThunderAccessBase.h +++ b/externals/PlayerThunderAccessBase.h @@ -44,7 +44,9 @@ enum PlayerThunderAccessPlugin SECMANAGER, WATERMARK, HDMIINPUT, - COMPOSITEINPUT + COMPOSITEINPUT, + HDCPPROFILE, + DISPLAYINFO }; /* diff --git a/externals/rdk/DeviceInterfaceBase.h b/externals/rdk/DeviceInterfaceBase.h index 88453a7d..ecbffabf 100644 --- a/externals/rdk/DeviceInterfaceBase.h +++ b/externals/rdk/DeviceInterfaceBase.h @@ -44,11 +44,11 @@ class DeviceInterfaceBase { DeviceInterfaceBase() {} - virtual void RegisterDsMgrEventHandler() = 0; + //virtual void RegisterDsMgrEventHandler() = 0; virtual void RegisterNtwMgrEventHandler() = 0; - virtual void RemoveEventHandlers() = 0; + //virtual void RemoveEventHandlers() = 0; virtual char *GetTR181Config(const char * paramName, size_t & iConfigLen) = 0; diff --git a/externals/rdk/IFirebolt/DeviceFireboltInterface.cpp b/externals/rdk/IFirebolt/DeviceFireboltInterface.cpp index 2f08631b..1997caee 100644 --- a/externals/rdk/IFirebolt/DeviceFireboltInterface.cpp +++ b/externals/rdk/IFirebolt/DeviceFireboltInterface.cpp @@ -71,7 +71,7 @@ DeviceFireboltInterface::DeviceFireboltInterface() DeviceFireboltInterface::~DeviceFireboltInterface() { MW_PRE_LOGGER_LOG("DeviceFireboltInterface destructor called \n"); - RemoveEventHandlers(); + Firebolt::IFireboltAampAccessor::Instance().DeviceInterface().unsubscribeAll(); m_pFireboltInterface = nullptr; } @@ -81,7 +81,6 @@ void DeviceFireboltInterface::Initialize() if(s_pDeviceFireboltInterface) { MW_PRE_LOGGER_LOG("Registering events \n"); - s_pDeviceFireboltInterface->RegisterDsMgrEventHandler(); s_pDeviceFireboltInterface->RegisterNtwMgrEventHandler(); } else @@ -93,6 +92,7 @@ void DeviceFireboltInterface::Initialize() } +#if 0 // RegisterDsMgrEventHandler removed: declaration commented out in all headers void DeviceFireboltInterface::RegisterDsMgrEventHandler() { @@ -135,12 +135,7 @@ void DeviceFireboltInterface::RegisterDsMgrEventHandler() } } - -void DeviceFireboltInterface::RemoveEventHandlers() -{ - //removes everything ... - Firebolt::IFireboltAampAccessor::Instance().DeviceInterface().unsubscribeAll(); -} +#endif // RegisterDsMgrEventHandler disabled void DeviceFireboltInterface::RegisterNtwMgrEventHandler() { @@ -231,12 +226,12 @@ static void HDCPEventHandlerFirebolt(const Firebolt::Device::HDCPVersionMap& t_H if(t_HDCPVersionMap.hdcp2_2) { - pInstance->setHdcpProtocol(dsHDCP_VERSION_2X); + pInstance->setHdcpProtocol(HdcpProtocolVersion::V2X); MW_LOG_INFO("HDCP protocol updated 2_2"); } else if(t_HDCPVersionMap.hdcp1_4) { - pInstance->setHdcpProtocol(dsHDCP_VERSION_1X); + pInstance->setHdcpProtocol(HdcpProtocolVersion::V1X); MW_LOG_INFO("HDCP protocol updated 1_4"); } else diff --git a/externals/rdk/IFirebolt/DeviceFireboltInterface.h b/externals/rdk/IFirebolt/DeviceFireboltInterface.h index 0a8a0ff7..8f42b678 100644 --- a/externals/rdk/IFirebolt/DeviceFireboltInterface.h +++ b/externals/rdk/IFirebolt/DeviceFireboltInterface.h @@ -74,11 +74,11 @@ class DeviceFireboltInterface : public DeviceInterfaceBase { void ConnectionChanged(const bool connected, int error); - void RegisterDsMgrEventHandler() override; + //void RegisterDsMgrEventHandler() override; void RegisterNtwMgrEventHandler() override; - void RemoveEventHandlers() override; + //void RemoveEventHandlers() override; void DestroyFireboltInstance(); diff --git a/externals/rdk/IIarm/DeviceIARMInterface.cpp b/externals/rdk/IIarm/DeviceIARMInterface.cpp index fdea214e..ecc95ea6 100644 --- a/externals/rdk/IIarm/DeviceIARMInterface.cpp +++ b/externals/rdk/IIarm/DeviceIARMInterface.cpp @@ -90,7 +90,7 @@ typedef struct _IARM_BUS_NetSrvMgr_Iface_EventData_t { std::shared_ptr s_pDeviceIARMInterface = nullptr; -#ifndef USE_DS_EVENT_SUPPORTED +#ifndef USE_DS_THUNDER_PLUGIN static void HDMIEventHandler(const char *owner, IARM_EventId_t eventId, void *data, size_t len); static void ResolutionHandler(const char *owner, IARM_EventId_t eventId, void *data, size_t len); #endif @@ -119,7 +119,7 @@ DeviceIARMInterface::~DeviceIARMInterface() { MW_PRE_LOGGER_LOG("DeviceIARMInterface destructor called \n"); - RemoveEventHandlers(); + IARM_Bus_RemoveEventHandler("NET_SRV_MGR", IARM_BUS_NETWORK_MANAGER_EVENT_INTERFACE_IPADDRESS, getActiveInterfaceEventHandler); s_pDeviceIARMInterface = nullptr; } @@ -135,7 +135,6 @@ void DeviceIARMInterface::Initialize() terminatePowerController(); } #endif - s_pDeviceIARMInterface->RegisterDsMgrEventHandler(); s_pDeviceIARMInterface->RegisterNtwMgrEventHandler(); } @@ -307,7 +306,7 @@ void DeviceIARMInterface::IARMInit() MW_PRE_LOGGER_LOG("IARM Interface Init completed in Player\n"); } - +/* void DeviceIARMInterface::RegisterDsMgrEventHandler() { #ifndef USE_DS_EVENT_SUPPORTED @@ -325,7 +324,7 @@ void DeviceIARMInterface::RemoveEventHandlers() IARM_Bus_RemoveEventHandler(IARM_BUS_DSMGR_NAME,IARM_BUS_DSMGR_EVENT_RES_POSTCHANGE, ResolutionHandler); #endif IARM_Bus_RemoveEventHandler("NET_SRV_MGR", IARM_BUS_NETWORK_MANAGER_EVENT_INTERFACE_IPADDRESS, getActiveInterfaceEventHandler); -} +}*/ void DeviceIARMInterface::RegisterNtwMgrEventHandler() { @@ -420,7 +419,7 @@ static void getActiveInterfaceEventHandler (const char *owner, IARM_EventId_t ev } -#ifndef USE_DS_EVENT_SUPPORTED +#ifndef USE_DS_THUNDER_PLUGIN /** * @brief IARM event handler for HDCP and HDMI hot plug events */ diff --git a/externals/rdk/IIarm/DeviceIARMInterface.h b/externals/rdk/IIarm/DeviceIARMInterface.h index 5a4c35f1..dd1170fb 100644 --- a/externals/rdk/IIarm/DeviceIARMInterface.h +++ b/externals/rdk/IIarm/DeviceIARMInterface.h @@ -54,11 +54,11 @@ class DeviceIARMInterface : public DeviceInterfaceBase{ private: - void RegisterDsMgrEventHandler() override; + //void RegisterDsMgrEventHandler() override; void RegisterNtwMgrEventHandler() override; - void RemoveEventHandlers() override; + //void RemoveEventHandlers() override; DeviceIARMInterface(); diff --git a/externals/rdk/PlayerExternalsRdkInterface.cpp b/externals/rdk/PlayerExternalsRdkInterface.cpp index 50334504..9320ac51 100644 --- a/externals/rdk/PlayerExternalsRdkInterface.cpp +++ b/externals/rdk/PlayerExternalsRdkInterface.cpp @@ -73,23 +73,19 @@ void PlayerExternalsRdkInterface::Initialize() //initialize only if needed if(m_initialized != InitState::NOT_INITIALIZED) { - if(m_initialized == InitState::FIREBOLT && (m_use_firebolt_sdk || IsContainerEnvironment())) + #ifdef FIREBOLT_SUPPORTED { MW_PRE_LOGGER_LOG("Firebolt already Inited \n"); //firebolt already inited return; } - else if(m_initialized == InitState::IARM && (!m_use_firebolt_sdk) && (!IsContainerEnvironment())) + #else { MW_PRE_LOGGER_LOG("IARM already Inited \n"); //IARM already inited return; } - else - { - MW_PRE_LOGGER_LOG("m_use_firebolt_sdk or IsContainerEnvironment() has changed, init again \n"); - //m_use_firebolt_sdk has changed init again - } + } else { @@ -102,10 +98,10 @@ void PlayerExternalsRdkInterface::Initialize() m_pDeviceInterfaceBase = nullptr; } - MW_PRE_LOGGER_LOG("m_use_firebolt_sdk : %d, IsContainerEnvironment() : %d \n", m_use_firebolt_sdk, IsContainerEnvironment()); + MW_PRE_LOGGER_LOG("IsContainerEnvironment() : %d \n", IsContainerEnvironment()); //remove-start - if(m_use_firebolt_sdk || IsContainerEnvironment()) //if explicitly config'd to or if in container go for firebolt + #ifdef FIREBOLT_SUPPORTED { //remove-end MW_PRE_LOGGER_LOG("Using Firebolt \n"); @@ -114,97 +110,35 @@ void PlayerExternalsRdkInterface::Initialize() //remove-start m_initialized = PlayerExternalsRdkInterface::InitState::FIREBOLT; } - else + #else { MW_PRE_LOGGER_LOG("Using IARM \n"); m_pDeviceInterfaceBase = DeviceIARMInterface::GetInstance(); DeviceIARMInterface::Initialize(); m_initialized = PlayerExternalsRdkInterface::InitState::IARM; } + #endif //remove-end MW_PRE_LOGGER_LOG("Done getting interface \n"); - SetHDMIStatus(); -#ifdef USE_DS_EVENT_SUPPORTED - RegisterDsClientEventHandler(); +#ifdef USE_DS_THUNDER_PLUGIN + if (!m_thunderEventHandlersRegistered) { + RegisterThunderEventHandlers(); + } else { + MW_PRE_LOGGER_LOG("Thunder event handlers already registered\n"); + } #endif - MW_PRE_LOGGER_LOG("Initializing completed \n"); -} - -#ifdef USE_DS_EVENT_SUPPORTED -void PlayerExternalsRdkInterface::RegisterDsClientEventHandler() -{ - try { - device::Manager::Initialize(); - device::Host::getInstance().Register(baseInterface(),"PI::DisplayInfo"); - device::Host::getInstance().Register(baseInterface(), "PI::DisplaySettings"); - } - catch (const std::exception& e) { - MW_LOG_WARN("DeviceSettings exception caught: %s\n", e.what()); - } - catch (...) { - MW_LOG_WARN("DeviceSettings unknown exception caught\n"); - } -} - -void PlayerExternalsRdkInterface::RemoveDsClientEventHandlers() -{ - try - { - device::Host::getInstance().UnRegister(baseInterface()); - device::Host::getInstance().UnRegister(baseInterface()); - device::Manager::DeInitialize(); - } - catch (const std::exception& e) - { - MW_LOG_WARN("DeviceSettings exception caught: %s\n", e.what()); - } - catch(...) - { - MW_LOG_WARN("DeviceSettings unknown exception caught\n"); - } -} - -void PlayerExternalsRdkInterface::OnDisplayHDMIHotPlug(dsDisplayEvent_t displayEvent) -{ - const char *hdmihotplug = (displayEvent == dsDISPLAY_EVENT_CONNECTED) ? "connected" : "disconnected"; - MW_LOG_WARN(" Received Display HDMI HotPlug event data:%d status: %s\n", - (int)displayEvent, hdmihotplug); - - SetHDMIStatus(); -} - -void PlayerExternalsRdkInterface::OnHDCPStatusChange(dsHdcpStatus_t hdcpStatus) -{ - const char *hdcpStatusStr = (hdcpStatus == dsHDCP_STATUS_AUTHENTICATED) ? "authenticated" : "authentication failure"; - MW_LOG_WARN(" Received HDCP Status Change event data:%d status:%s\n", - hdcpStatus, hdcpStatusStr); - - SetHDMIStatus(); -} - -/** - * @brief event handler for resolution changes - */ -void PlayerExternalsRdkInterface::OnResolutionPostChange(int width, int height) -{ - - MW_LOG_WARN(" Received Resolution Post Change event width : %d height : %d\n", width, height); - SetResolution(width, height); -} + SetHDMIStatus(); -void PlayerExternalsRdkInterface::OnResolutionPreChange(int width, int height) -{ - MW_LOG_WARN(" Received Resolution PreChange event \n"); + MW_PRE_LOGGER_LOG("Initializing completed \n"); } -#endif PlayerExternalsRdkInterface::~PlayerExternalsRdkInterface() { -#ifdef USE_DS_EVENT_SUPPORTED - RemoveDsClientEventHandlers(); +#ifdef USE_DS_THUNDER_PLUGIN + RemoveThunderEventHandlers(); #endif m_pDeviceInterfaceBase = nullptr; s_pPlayerIarmRdkOP = nullptr; @@ -228,120 +162,168 @@ void PlayerExternalsRdkInterface::SetResolution(int width, int height) */ void PlayerExternalsRdkInterface::SetHDMIStatus() { - std::unique_lock lock(m_hdmiStatusMutex, std::try_to_lock); - if (!lock.owns_lock()) { - MW_LOG_WARN("SetHDMIStatus: Already in progress on another thread, skipping\n"); - return; + #ifdef USE_DS_THUNDER_PLUGIN + /* + * Thunder path: replaces all libds (device::Manager / VideoOutputPort) calls. + * CSV mapping: + * getHDCPCurrentProtocol -> HdcpProfile.1 getHDCPStatus -> currentHDCPVersion + * getHDCPReceiverProtocol -> HdcpProfile.1 getHDCPStatus -> receiverHDCPVersion + * isContentProtected -> HdcpProfile.1 getHDCPStatus -> isHDCPEnabled + * isDisplayConnected -> HdcpProfile.1 getHDCPStatus -> isConnected + * getPixelResolution -> DisplayInfo.1 displayinfo -> width / height + */ + bool isConnected = false; + bool isHDCPEnabled = false; + HdcpProtocolVersion hdcpCurrentProtocol = HdcpProtocolVersion::V1X; + + /* --- Query HDCP status via HdcpProfile.1 --- */ + if (m_hdcpProfileThunder) { + JsonObject param, result; + if (m_hdcpProfileThunder->InvokeJSONRPC("getHDCPStatus", param, result)) { + isConnected = result["isConnected"].Boolean(); + isHDCPEnabled = result["isHDCPEnabled"].Boolean(); + std::string currentVer = result["currentHDCPVersion"].String(); + hdcpCurrentProtocol = (currentVer == "2.2") ? HdcpProtocolVersion::V2X : HdcpProtocolVersion::V1X; + MW_LOG_WARN("SetHDMIStatus: connected=%d enabled=%d currentHDCPVersion=%s\n", + isConnected, isHDCPEnabled, currentVer.c_str()); + } else { + MW_LOG_WARN("SetHDMIStatus: getHDCPStatus JSONRPC failed\n"); + } + } else { + MW_LOG_WARN("SetHDMIStatus: HdcpProfile Thunder object not initialised\n"); } - bool isConnected = false; - bool isHDCPCompliant = false; - bool isHDCPEnabled = true; - dsHdcpProtocolVersion_t hdcpProtocol = dsHDCP_VERSION_MAX; - dsHdcpProtocolVersion_t hdcpReceiverProtocol = dsHDCP_VERSION_MAX; - dsHdcpProtocolVersion_t hdcpCurrentProtocol = dsHDCP_VERSION_MAX; - - - - - try { - //Get the HDMI port - device::Manager::Initialize(); - std::string strVideoPort = device::Host::getInstance().getDefaultVideoPortName(); - ::device::VideoOutputPort &vPort = ::device::Host::getInstance().getVideoOutputPort(strVideoPort); - isConnected = vPort.isDisplayConnected(); - hdcpProtocol = (dsHdcpProtocolVersion_t)vPort.getHDCPProtocol(); - if(isConnected) { - isHDCPCompliant = (vPort.getHDCPStatus() == dsHDCP_STATUS_AUTHENTICATED); - isHDCPEnabled = vPort.isContentProtected(); - hdcpReceiverProtocol = (dsHdcpProtocolVersion_t)vPort.getHDCPReceiverProtocol(); - hdcpCurrentProtocol = (dsHdcpProtocolVersion_t)vPort.getHDCPCurrentProtocol(); - //get the resolution of the TV - int width,height; - int iResID = vPort.getResolution().getPixelResolution().getId(); - if( device::PixelResolution::k720x480 == iResID ) - { - width = 720; - height = 480; - } - else if( device::PixelResolution::k720x576 == iResID ) - { - width = 720; - height = 576; - } - else if( device::PixelResolution::k1280x720 == iResID ) - { - width = 1280; - height = 720; - } - else if( device::PixelResolution::k1920x1080 == iResID ) - { - width = 1920; - height = 1080; - } - else if( device::PixelResolution::k3840x2160 == iResID ) - { - width = 3840; - height = 2160; - } - else if( device::PixelResolution::k4096x2160 == iResID ) - { - width = 4096; - height = 2160; - } - else - { - width = DISPLAY_WIDTH_UNKNOWN; - height = DISPLAY_HEIGHT_UNKNOWN; - std::string _res = vPort.getResolution().getName(); - MW_LOG_ERR(" ERR parse failed for getResolution().getName():%s id:%d\n",(_res.empty() ? "NULL" : _res.c_str()),iResID); - } - SetResolution(width, height); - } - else { - isHDCPCompliant = false; - isHDCPEnabled = false; - SetResolution(DISPLAY_RESOLUTION_NA,DISPLAY_RESOLUTION_NA); + /* --- Query pixel resolution via DisplayInfo.1 --- */ + if (isConnected && m_displayInfoThunder) { + JsonObject param, result; + if (m_displayInfoThunder->InvokeJSONRPC("displayinfo", param, result)) { + int w = static_cast(result["width"].Number()); + int h = static_cast(result["height"].Number()); + MW_LOG_WARN("SetHDMIStatus: resolution %dx%d\n", w, h); + SetResolution(w, h); + } else { + MW_LOG_WARN("SetHDMIStatus: displayinfo JSONRPC failed\n"); } + } else if (!isConnected) { + SetResolution(DISPLAY_RESOLUTION_NA, DISPLAY_RESOLUTION_NA); + } - device::Manager::DeInitialize(); + m_isHDCPEnabled = isHDCPEnabled; + if (m_isHDCPEnabled) { + m_hdcpCurrentProtocol = hdcpCurrentProtocol; + MW_LOG_WARN(" detected HDCP version %s\n", m_hdcpCurrentProtocol == HdcpProtocolVersion::V2X ? "2.x" : "1.4"); + } else { + MW_LOG_WARN("HDCP is not enabled\n"); } - catch (const std::exception& e) { - MW_LOG_WARN("DeviceSettings exception caught: %s\n", e.what()); + if (!isConnected) { + m_hdcpCurrentProtocol = HdcpProtocolVersion::V1X; + MW_LOG_WARN(" GetHDCPVersion: Did not detect HDCP version defaulting to 1.4 (%d)\n", static_cast(m_hdcpCurrentProtocol)); } - catch (...) { - MW_LOG_WARN("DeviceSettings unknown exception caught\n"); - try { device::Manager::DeInitialize(); } catch (...) {} + #endif +} + +#ifdef USE_DS_THUNDER_PLUGIN +/** + * @brief Create Thunder plugin objects and subscribe to HDMI/HDCP/resolution events. + * CSV mapping: + * IARM_BUS_DSMGR_EVENT_HDCP_STATUS -> HdcpProfile.1 onDisplayConnectionChanged + * IARM_BUS_DSMGR_EVENT_HDMI_HOTPLUG -> DisplaySettings.1 connectedVideoDisplaysUpdated + * IARM_BUS_DSMGR_EVENT_RES_POSTCHANGE -> DisplaySettings.1 resolutionChanged + * IARM_BUS_DSMGR_EVENT_RES_PRECHANGE -> DisplaySettings.1 resolutionPreChange + */ +void PlayerExternalsRdkInterface::RegisterThunderEventHandlers() +{ + if (m_thunderEventHandlersRegistered) { + MW_PRE_LOGGER_LOG("RegisterThunderEventHandlers skipped: already registered\n"); + return; } - m_isHDCPEnabled = isHDCPEnabled; + /* ---- HdcpProfile.1 ---- */ + m_hdcpProfileThunder = std::make_unique(PlayerThunderAccessPlugin::HDCPPROFILE); + m_hdcpProfileThunder->ActivatePlugin(); + + /* onDisplayConnectionChanged: replaces IARM_BUS_DSMGR_EVENT_HDCP_STATUS */ + m_hdcpProfileThunder->SubscribeEvent( + "onDisplayConnectionChanged", + [](const WPEFramework::Core::JSON::VariantContainer& params) { + MW_LOG_WARN("[Thunder] onDisplayConnectionChanged received\n"); + auto pInstance = PlayerExternalsRdkInterface::GetPlayerExternalsRdkInterfaceInstance(); + if (pInstance) { + pInstance->SetHDMIStatus(); + } + }); + + /* ---- DisplaySettings.1 ---- */ + m_dsThunder = std::make_unique(PlayerThunderAccessPlugin::DS); + m_dsThunder->ActivatePlugin(); + + /* connectedVideoDisplaysUpdated: replaces IARM_BUS_DSMGR_EVENT_HDMI_HOTPLUG */ + m_dsThunder->SubscribeEvent( + "connectedVideoDisplaysUpdated", + [](const WPEFramework::Core::JSON::VariantContainer& params) { + MW_LOG_WARN("[Thunder] connectedVideoDisplaysUpdated received\n"); + auto pInstance = PlayerExternalsRdkInterface::GetPlayerExternalsRdkInterfaceInstance(); + if (pInstance) { + pInstance->SetHDMIStatus(); + } + }); + + /* resolutionChanged: replaces IARM_BUS_DSMGR_EVENT_RES_POSTCHANGE */ + m_dsThunder->SubscribeEvent( + "resolutionChanged", + [](const WPEFramework::Core::JSON::VariantContainer& params) { + MW_LOG_WARN("[Thunder] resolutionChanged received\n"); + auto pInstance = PlayerExternalsRdkInterface::GetPlayerExternalsRdkInterfaceInstance(); + if (pInstance) { + pInstance->SetHDMIStatus(); + } + }); - if(m_isHDCPEnabled) { - if(hdcpCurrentProtocol == dsHDCP_VERSION_2X) { - m_hdcpCurrentProtocol = hdcpCurrentProtocol; - } - else { - m_hdcpCurrentProtocol = dsHDCP_VERSION_1X; - } - MW_LOG_WARN(" detected HDCP version %s\n", m_hdcpCurrentProtocol == dsHDCP_VERSION_2X ? "2.x" : "1.4"); - } - else { - MW_LOG_WARN("DeviceSettings HDCP is not enabled\n"); - } + /* resolutionPreChange: replaces IARM_BUS_DSMGR_EVENT_RES_PRECHANGE */ + m_dsThunder->SubscribeEvent( + "resolutionPreChange", + [](const WPEFramework::Core::JSON::VariantContainer& params) { + MW_LOG_WARN("[Thunder] resolutionPreChange received\n"); + }); - if(!isConnected) { - m_hdcpCurrentProtocol = dsHDCP_VERSION_1X; - MW_LOG_WARN(" GetHDCPVersion: Did not detect HDCP version defaulting to 1.4 (%d)\n", m_hdcpCurrentProtocol); + /* ---- DisplayInfo.1 ---- */ + m_displayInfoThunder = std::make_unique(PlayerThunderAccessPlugin::DISPLAYINFO); + m_displayInfoThunder->ActivatePlugin(); + + m_thunderEventHandlersRegistered = true; +} + +/** + * @brief Unsubscribe Thunder events and release plugin objects. + */ +void PlayerExternalsRdkInterface::RemoveThunderEventHandlers() +{ + if (!m_thunderEventHandlersRegistered) { + return; } + if (m_hdcpProfileThunder) { + m_hdcpProfileThunder->UnSubscribeEvent("onDisplayConnectionChanged"); + m_hdcpProfileThunder.reset(); + } + if (m_dsThunder) { + m_dsThunder->UnSubscribeEvent("connectedVideoDisplaysUpdated"); + m_dsThunder->UnSubscribeEvent("resolutionChanged"); + m_dsThunder->UnSubscribeEvent("resolutionPreChange"); + m_dsThunder.reset(); + } + if (m_displayInfoThunder) { + m_displayInfoThunder.reset(); + } - return; + m_thunderEventHandlersRegistered = false; } +#endif /* USE_DS_THUNDER_PLUGIN */ -void PlayerExternalsRdkInterface::setHdcpProtocol(dsHdcpProtocolVersion_t t_protocol) +void PlayerExternalsRdkInterface::setHdcpProtocol(HdcpProtocolVersion t_protocol) { m_hdcpCurrentProtocol = t_protocol; - MW_LOG_WARN(" detected HDCP version %s\n", m_hdcpCurrentProtocol == dsHDCP_VERSION_2X ? "2.x" : "1.4"); + MW_LOG_WARN(" detected HDCP version %s\n", m_hdcpCurrentProtocol == HdcpProtocolVersion::V2X ? "2.x" : "1.4"); } std::shared_ptr PlayerExternalsRdkInterface::GetDeviceInterface() @@ -366,16 +348,12 @@ char * PlayerExternalsRdkInterface::GetTR181Config(const char * paramName, size_ void PlayerExternalsRdkInterface::SetUseFireBoltSDK(bool t_use_firebolt_sdk) { - MW_PRE_LOGGER_LOG("old : %d, new : %d \n", m_use_firebolt_sdk, t_use_firebolt_sdk); - if(m_use_firebolt_sdk != t_use_firebolt_sdk) - { - m_use_firebolt_sdk = t_use_firebolt_sdk; - //reinitialize - m_initialized = InitState::NOT_INITIALIZED; - Initialize(); - - } - + (void)t_use_firebolt_sdk; +#ifdef FIREBOLT_SUPPORTED + MW_PRE_LOGGER_LOG("SetUseFireBoltSDK ignored: build uses FIREBOLT path selection\n"); +#else + MW_PRE_LOGGER_LOG("SetUseFireBoltSDK ignored: build uses IARM path selection\n"); +#endif } void PlayerExternalsRdkInterface::SetPowerEvent(bool powerEvt) diff --git a/externals/rdk/PlayerExternalsRdkInterface.h b/externals/rdk/PlayerExternalsRdkInterface.h index 567020f7..64d2e905 100644 --- a/externals/rdk/PlayerExternalsRdkInterface.h +++ b/externals/rdk/PlayerExternalsRdkInterface.h @@ -22,8 +22,10 @@ * @brief player interface with IARM specific to RDK */ -#ifndef PLAYER_IARM_RDK_INTERFACE_H -#define PLAYER_IARM_RDK_INTERFACE_H +#ifndef PLAYER_EXTERNALS_RDK_INTERFACE_H +#define PLAYER_EXTERNALS_RDK_INTERFACE_H +//these need to be deprecated when libds is deprecated? +#ifndef USE_DS_THUNDER_PLUGIN #include "manager.hpp" #include "host.hpp" #include "videoResolution.hpp" @@ -34,6 +36,10 @@ #include "audioOutputPort.hpp" #include "dsAudio.h" +#else +#include "PlayerThunderAccess.h" +#endif + #include #include "PlayerExternalsInterfaceBase.h" #include @@ -56,9 +62,14 @@ Replace the section between the comment section replace-start, replace-with and class DeviceInterfaceBase; +enum class HdcpProtocolVersion : int { + V1X = 14, + V2X = 22 +}; + //class representing IARM interface in rdk class PlayerExternalsRdkInterface : public PlayerExternalsInterfaceBase -#ifdef USE_DS_EVENT_SUPPORTED +#ifndef USE_DS_THUNDER_PLUGIN , public device::Host::IDisplayDeviceEvents , public device::Host::IVideoOutputPortEvents #endif @@ -70,7 +81,7 @@ class PlayerExternalsRdkInterface : public PlayerExternalsInterfaceBase IARM }; - dsHdcpProtocolVersion_t m_hdcpCurrentProtocol = dsHDCP_VERSION_1X; + HdcpProtocolVersion m_hdcpCurrentProtocol = HdcpProtocolVersion::V1X; //replace-start std::shared_ptr m_pDeviceInterfaceBase = nullptr; @@ -79,8 +90,6 @@ class PlayerExternalsRdkInterface : public PlayerExternalsInterfaceBase //replace-end //remove-start - bool m_use_firebolt_sdk = false; - InitState m_initialized = NOT_INITIALIZED; //remove-end @@ -89,10 +98,19 @@ class PlayerExternalsRdkInterface : public PlayerExternalsInterfaceBase /**< Callback function for fake tune operations */ std::function m_doFakeTuneCallback = nullptr; + #ifdef USE_DS_THUNDER_PLUGIN + std::unique_ptr m_hdcpProfileThunder; + std::unique_ptr m_dsThunder; + std::unique_ptr m_displayInfoThunder; + bool m_thunderEventHandlersRegistered = false; + void RegisterThunderEventHandlers(); + void RemoveThunderEventHandlers(); + #endif + PlayerExternalsRdkInterface(); public: -#ifdef USE_DS_EVENT_SUPPORTED +#ifndef USE_DS_THUNDER_PLUGIN template T* baseInterface() { @@ -146,7 +164,7 @@ class PlayerExternalsRdkInterface : public PlayerExternalsInterfaceBase * @brief Is current HDCP protocol 2.2 * @return True if current HDCP protocol is 2.2. False, if not. */ - bool isHDCPConnection2_2() override { return m_hdcpCurrentProtocol == dsHDCP_VERSION_2X; } + bool isHDCPConnection2_2() override { return m_hdcpCurrentProtocol == HdcpProtocolVersion::V2X; } /** * @fn GetActiveInterface @@ -159,8 +177,12 @@ class PlayerExternalsRdkInterface : public PlayerExternalsInterfaceBase std::shared_ptr GetDeviceInterface(); - void setHdcpProtocol(dsHdcpProtocolVersion_t t_protocol); + void setHdcpProtocol(HdcpProtocolVersion t_protocol); + /** + * @brief Deprecated runtime selector retained for interface compatibility. + * @deprecated Path selection is compile-time controlled by FIREBOLT_SUPPORTED. + */ void SetUseFireBoltSDK(bool t_use_firebolt_sdk) override; void SetPowerEvent(bool powerEvt) override; @@ -181,7 +203,7 @@ class PlayerExternalsRdkInterface : public PlayerExternalsInterfaceBase ~PlayerExternalsRdkInterface(); -#ifdef USE_DS_EVENT_SUPPORTED +#ifndef USE_DS_THUNDER_PLUGIN void RegisterDsClientEventHandler(); void RemoveDsClientEventHandlers();