Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
f8c01b3
Feature/rdkemw 7169 (#245)
hgfell683 Sep 4, 2025
7a0d569
1.4.6 release changelog updates
actions-user Sep 4, 2025
bef0aa3
Merge tag '1.4.6' into develop
actions-user Sep 4, 2025
7c031cf
Merge branch 'release/1.4.6'
actions-user Sep 4, 2025
b334b82
RDKEMW-7712: Sync low latency for AVOutput initialization (#6338)
arjunbinu Aug 22, 2025
81cc8f5
Merge pull request #249 from rdkcentral/feature/RDKEMW-7712
utkarshece14 Sep 9, 2025
5979423
1.4.7 release changelog updates
actions-user Sep 9, 2025
2bf6395
Merge branch 'release/1.4.7'
actions-user Sep 9, 2025
1ea0522
Merge tag '1.4.7' into develop
actions-user Sep 9, 2025
919f2de
CEC source and sink changes
karuppaiyak Sep 4, 2025
4d59de8
added host.hpp
karuppaiyak Sep 4, 2025
54daae7
base interface template change
karuppaiyak Sep 9, 2025
8a169f8
copilot warnings
karuppaiyak Sep 9, 2025
2965ff4
review comments added
karuppaiyak Sep 9, 2025
b45107c
moved device setting init to plugin init
karuppaiyak Sep 9, 2025
8606999
reverted changes in HdmiCecSource/HdmiCecSource.cpp
karuppaiyak Sep 15, 2025
1ba78d1
reverted init failure
karuppaiyak Sep 15, 2025
1bcbf2b
test1
karuppaiyak Sep 17, 2025
cfc3f0c
compilation fixed
karuppaiyak Sep 17, 2025
ff9fcdb
added exception handling
karuppaiyak Sep 17, 2025
dee3405
corrected reference
karuppaiyak Sep 18, 2025
39b9eef
handled return value
karuppaiyak Sep 18, 2025
f41b6f4
unit test addition
karuppaiyak Sep 19, 2025
1e0b57c
removed tests-trigger changes
karuppaiyak Sep 19, 2025
5797322
L1 unit test for source
karuppaiyak Sep 19, 2025
0951d07
instance pb
karuppaiyak Sep 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/L1-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ jobs:
with:
repository: rdkcentral/entservices-testframework
path: entservices-testframework
ref: develop
ref: feature/RDKEMW-6167-PR
token: ${{ secrets.RDKCM_RDKE }}

- name: Checkout entservices-inputoutput
Expand Down Expand Up @@ -460,10 +460,10 @@ jobs:
-DDS_FOUND=ON
-DHAS_FRONT_PANEL=ON
-DRDK_SERVICES_L1_TEST=ON
-DPLUGIN_AVINPUT=ON
-DPLUGIN_HDCPPROFILE=ON
-DPLUGIN_AVINPUT=OFF
-DPLUGIN_HDCPPROFILE=OFF
-DPLUGIN_HDMICECSOURCE=ON
-DPLUGIN_HDMICECSINK=ON
-DPLUGIN_HDMICECSINK=OFF
-DUSE_THUNDER_R4=ON
-DHIDE_NON_EXTERNAL_SYMBOLS=OFF
&&
Expand Down
7 changes: 7 additions & 0 deletions AVOutput/AVOutputTVHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1209,6 +1209,13 @@ namespace Plugin {
LOGERR("Backlight Sync to cache Failed !!!\n");
}

if( !updateAVoutputTVParam("sync","LowLatencyState",info,PQ_PARAM_LOWLATENCY_STATE,level) ) {
LOGINFO("LowLatencyState Successfully Synced to Drive Cache\n");
}
else {
LOGERR("LowLatencyState Sync to cache Failed !!!\n");
}

syncCMSParams(); //sync CMS

syncWBParams();
Expand Down
5 changes: 5 additions & 0 deletions AVOutput/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ All notable changes to this RDK Service will be documented in this file.

* Changes in CHANGELOG should be updated when commits are added to the main or release branches. There should be one CHANGELOG entry per JIRA Ticket. This is not enforced on sprint branches since there could be multiple changes for the same JIRA ticket during development.

<<<<<<< HEAD
## [1.1.4] - 2025-09-08
### Fixed
- Sync low latency for AVOutput initialization

## [1.1.3] - 2025-08-08
### Fixed
- Fixed getDolbyVisionMode() for non DV content
Expand Down
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,25 @@ All notable changes to this project will be documented in this file. Dates are d

Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).

#### [1.4.7](https://github.com/rdkcentral/entservices-inputoutput/compare/1.4.6...1.4.7)

- RDKEMW-7712: Sync low latency for AVOutput initialization (#6338) [`#249`](https://github.com/rdkcentral/entservices-inputoutput/pull/249)
- Merge tag '1.4.6' into develop [`bef0aa3`](https://github.com/rdkcentral/entservices-inputoutput/commit/bef0aa3bf2638d0223008f10babecde595d850df)

#### [1.4.6](https://github.com/rdkcentral/entservices-inputoutput/compare/1.4.5...1.4.6)

> 4 September 2025

- Feature/rdkemw 7169 [`#245`](https://github.com/rdkcentral/entservices-inputoutput/pull/245)
- 1.4.6 release changelog updates [`7a0d569`](https://github.com/rdkcentral/entservices-inputoutput/commit/7a0d569f253b8a08926e959509e329159aa2d509)
- Merge tag '1.4.5' into develop [`7268514`](https://github.com/rdkcentral/entservices-inputoutput/commit/7268514652bf9f0cda3f3a6433a0f0720bf9d63c)

#### [1.4.5](https://github.com/rdkcentral/entservices-inputoutput/compare/1.4.4...1.4.5)

> 3 September 2025

- RDKEMW-7169 - Gtest Add missing empty files [`#241`](https://github.com/rdkcentral/entservices-inputoutput/pull/241)
- 1.4.5 release changelog updates [`4354afa`](https://github.com/rdkcentral/entservices-inputoutput/commit/4354afac08c4671cbed356d81a2ed2f612139464)
- Merge tag '1.4.4' into develop [`0fabfaf`](https://github.com/rdkcentral/entservices-inputoutput/commit/0fabfaf0816dda67077fd7fe59e074a962e644ef)

#### [1.4.4](https://github.com/rdkcentral/entservices-inputoutput/compare/1.4.3...1.4.4)
Expand Down
463 changes: 225 additions & 238 deletions HdmiCecSink/HdmiCecSink.cpp

Large diffs are not rendered by default.

12 changes: 11 additions & 1 deletion HdmiCecSink/HdmiCecSink.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/**

Check failure on line 1 in HdmiCecSink/HdmiCecSink.h

View workflow job for this annotation

GitHub Actions / call-fossid-workflow / Fossid Annotate PR

FossID License Issue Detected

Source code with 'Apache-2.0' license found in local file 'HdmiCecSink/HdmiCecSink.h' (Match: rdkcentral/rdkservices/1, 755 lines, url: https://github.com/rdkcentral/rdkservices/archive/GRT_v1.tar.gz, file: HdmiCecSink/HdmiCecSink.h)

Check failure on line 1 in HdmiCecSink/HdmiCecSink.h

View workflow job for this annotation

GitHub Actions / call-fossid-workflow / Fossid Annotate PR

FossID License Issue Detected

Source code with 'Apache-2.0' license found in local file 'HdmiCecSink/HdmiCecSink.h' (Match: rdkcentral/rdkservices/1, 755 lines, url: https://github.com/rdkcentral/rdkservices/archive/GRT_v1.tar.gz, file: HdmiCecSink/HdmiCecSink.h)
* If not stated otherwise in this file or this component's LICENSE
* file the following copyright and licenses apply:
*
Expand Down Expand Up @@ -41,6 +41,8 @@
#include "UtilsLogging.h"
#include <interfaces/IPowerManager.h>
#include "PowerManagerInterface.h"
#include "host.hpp"


using namespace WPEFramework;
using PowerState = WPEFramework::Exchange::IPowerManager::PowerState;
Expand Down Expand Up @@ -482,7 +484,7 @@
// As the registration/unregistration of notifications is realized by the class PluginHost::JSONRPC,
// this class exposes a public method called, Notify(), using this methods, all subscribed clients
// will receive a JSONRPC message as a notification, in case this method is called.
class HdmiCecSink : public PluginHost::IPlugin, public PluginHost::JSONRPC {
class HdmiCecSink : public PluginHost::IPlugin, public PluginHost::JSONRPC, public device::Host::IHdmiInEvents {

enum {
POLL_THREAD_STATE_NONE,
Expand Down Expand Up @@ -530,6 +532,7 @@
virtual const string Initialize(PluginHost::IShell* shell) override;
virtual void Deinitialize(PluginHost::IShell* service) override;
virtual string Information() const override { return {}; }
virtual void OnHdmiInEventHotPlug(dsHdmiInPort_t port, bool isConnected) override;
static HdmiCecSink* _instance;
CECDeviceParams deviceList[16];
std::vector<HdmiPortMap> hdmiInputs;
Expand Down Expand Up @@ -586,6 +589,13 @@
END_INTERFACE_MAP

private:
template <typename T>
T* baseInterface()
{
static_assert(std::is_base_of<T, HdmiCecSink>(), "base type mismatch");
return static_cast<T*>(this);
}

class PowerManagerNotification : public Exchange::IPowerManager::IModeChangedNotification {
private:
PowerManagerNotification(const PowerManagerNotification&) = delete;
Expand Down
51 changes: 16 additions & 35 deletions HdmiCecSource/HdmiCecSourceImplementation.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/**

Check failure on line 1 in HdmiCecSource/HdmiCecSourceImplementation.cpp

View workflow job for this annotation

GitHub Actions / call-fossid-workflow / Fossid Annotate PR

FossID License Issue Detected

Source code with 'Apache-2.0' license found in local file 'HdmiCecSource/HdmiCecSourceImplementation.cpp' (Match: rdkcentral/rdkservices/1, 1569 lines, url: https://github.com/rdkcentral/rdkservices/archive/GRT_v1.tar.gz, file: HdmiCecSource/HdmiCecSource.cpp)

Check failure on line 1 in HdmiCecSource/HdmiCecSourceImplementation.cpp

View workflow job for this annotation

GitHub Actions / call-fossid-workflow / Fossid Annotate PR

FossID License Issue Detected

Source code with 'Apache-2.0' license found in local file 'HdmiCecSource/HdmiCecSourceImplementation.cpp' (Match: rdkcentral/rdkservices/1, 1569 lines, url: https://github.com/rdkcentral/rdkservices/archive/GRT_v1.tar.gz, file: HdmiCecSource/HdmiCecSource.cpp)
* If not stated otherwise in this file or this component's LICENSE
* file the following copyright and licenses apply:
*
Expand All @@ -25,7 +25,6 @@
#include "ccec/MessageEncoder.hpp"
#include "host.hpp"

#include "dsMgr.h"
#include "dsDisplay.h"
#include "videoOutputPort.hpp"
#include "manager.hpp"
Expand Down Expand Up @@ -389,8 +388,7 @@
_powerManagerPlugin.Reset();
}
_registeredEventHandlers = false;

DeinitializeIARM();
device::Host::getInstance().UnRegister(baseInterface<device::Host::IDisplayDeviceEvents>());
}

Core::hresult HdmiCecSourceImplementation::Configure(PluginHost::IShell* service)
Expand All @@ -409,7 +407,6 @@
logicalAddress = 0xFF;

//CEC plugin functionalities will only work if CECmgr is available. If plugin Initialize failure upper layer will call dtor directly.
InitializeIARM();
InitializePowerManager(service);

// load persistence setting
Expand All @@ -418,6 +415,8 @@
{
//TODO(MROLLINS) this is probably per process so we either need to be running in our own process or be carefull no other plugin is calling it
device::Manager::Initialize();
device::Host::getInstance().Register(baseInterface<device::Host::IDisplayDeviceEvents>(), "WPE::CecSource");

std::string strVideoPort = device::Host::getInstance().getDefaultVideoPortName();
device::VideoOutputPort vPort = device::Host::getInstance().getVideoOutputPort(strVideoPort.c_str());
if (vPort.isDisplayConnected())
Expand Down Expand Up @@ -731,20 +730,6 @@
registerEventHandlers();
}

const void HdmiCecSourceImplementation::InitializeIARM()
{
IARM_Result_t res;
IARM_CHECK( IARM_Bus_RegisterEventHandler(IARM_BUS_DSMGR_NAME,IARM_BUS_DSMGR_EVENT_HDMI_HOTPLUG, dsHdmiEventHandler) );
}

void HdmiCecSourceImplementation::DeinitializeIARM()
{
if (Utils::IARM::isConnected())
{
IARM_Result_t res;
IARM_CHECK( IARM_Bus_RemoveEventHandler(IARM_BUS_DSMGR_NAME,IARM_BUS_DSMGR_EVENT_HDMI_HOTPLUG,dsHdmiEventHandler) );
}
}
void HdmiCecSourceImplementation::threadHotPlugEventHandler(int data)
{
LOGINFO("entry threadHotPlugEventHandler \r\n");
Expand All @@ -759,25 +744,21 @@
LOGINFO("Exit threadHotPlugEventHandler \r\n");
}

void HdmiCecSourceImplementation::dsHdmiEventHandler(const char *owner, IARM_EventId_t eventId, void *data, size_t len)
void HdmiCecSourceImplementation::OnDisplayHDMIHotPlug(dsDisplayEvent_t displayEvent)
{
if(!HdmiCecSourceImplementation::_instance || !_instance->cecEnableStatus)
{
LOGINFO("Return from dsHdmiEventHandler due HdmiCecSourceImplementation::_instance:%p cecEnableStatus:%d \r\n", HdmiCecSourceImplementation::_instance, _instance->cecEnableStatus);
return;
}
LOGINFO("HdmiCecSourceImplementation::OnDisplayHDMIHotPlug : displayEvent = %d ", displayEvent);

if(!HdmiCecSourceImplementation::_instance || !_instance->cecEnableStatus)
{
LOGINFO("HdmiCecSourceImplementation::OnDisplayHDMIHotPlug failed _instance:%p cecEnableStatus:%d \r\n", HdmiCecSourceImplementation::_instance, _instance->cecEnableStatus);
return;
}

int hdmi_hotplug_event = (int) displayEvent;
LOGINFO("Received IARM_BUS_DSMGR_EVENT_HDMI_HOTPLUG event data:%d \r\n", hdmi_hotplug_event);
std::thread worker(threadHotPlugEventHandler,hdmi_hotplug_event);
worker.detach();

if (owner && !strcmp(owner, IARM_BUS_DSMGR_NAME) && (IARM_BUS_DSMGR_EVENT_HDMI_HOTPLUG == eventId))
{
IARM_Bus_DSMgr_EventData_t *eventData = (IARM_Bus_DSMgr_EventData_t *)data;
if(eventData)
{
int hdmi_hotplug_event = eventData->data.hdmi_hpd.event;
LOGINFO("Received IARM_BUS_DSMGR_EVENT_HDMI_HOTPLUG event data:%d \r\n", hdmi_hotplug_event);
std::thread worker(threadHotPlugEventHandler,hdmi_hotplug_event);
worker.detach();
}
}
}

void HdmiCecSourceImplementation::onPowerModeChanged(const PowerState currentState, const PowerState newState)
Expand Down
12 changes: 11 additions & 1 deletion HdmiCecSource/HdmiCecSourceImplementation.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
#include <interfaces/IPowerManager.h>
#include "PowerManagerInterface.h"
#include <interfaces/IHdmiCecSource.h>
#include "host.hpp"


using namespace WPEFramework;
using PowerState = WPEFramework::Exchange::IPowerManager::PowerState;
Expand Down Expand Up @@ -170,7 +172,7 @@ namespace WPEFramework {
// As the registration/unregistration of notifications is realized by the class PluginHost::JSONRPC,
// this class exposes a public method called, Notify(), using this methods, all subscribed clients
// will receive a JSONRPC message as a notification, in case this method is called.
class HdmiCecSourceImplementation : public Exchange::IHdmiCecSource {
class HdmiCecSourceImplementation : public Exchange::IHdmiCecSource, public device::Host::IDisplayDeviceEvents {
enum {
VOLUME_UP = 0x41,
VOLUME_DOWN = 0x42,
Expand All @@ -196,6 +198,7 @@ namespace WPEFramework {
public:
HdmiCecSourceImplementation();
virtual ~HdmiCecSourceImplementation();
virtual void OnDisplayHDMIHotPlug(dsDisplayEvent_t displayEvent) override;
void onPowerModeChanged(const PowerState currentState, const PowerState newState);
void registerEventHandlers();
static HdmiCecSourceImplementation* _instance;
Expand Down Expand Up @@ -226,6 +229,13 @@ namespace WPEFramework {


private:
template <typename T>
T* baseInterface()
{
static_assert(std::is_base_of<T, HdmiCecSourceImplementation>(), "base type mismatch");
return static_cast<T*>(this);
}

class PowerManagerNotification : public Exchange::IPowerManager::IModeChangedNotification {
private:
PowerManagerNotification(const PowerManagerNotification&) = delete;
Expand Down
34 changes: 5 additions & 29 deletions Tests/L1Tests/tests/test_HdmiCecSource.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* If not stated otherwise in this file or this component's LICENSE file the

Check failure on line 2 in Tests/L1Tests/tests/test_HdmiCecSource.cpp

View workflow job for this annotation

GitHub Actions / call-fossid-workflow / Fossid Annotate PR

FossID License Issue Detected

Source code with 'Apache-2.0' license found in local file 'Tests/L1Tests/tests/test_HdmiCecSource.cpp' (Match: rdkcentral/rdkservices/1, 1377 lines, url: https://github.com/rdkcentral/rdkservices/archive/GRT_v1.tar.gz, file: Tests/tests/test_HdmiCecSource.cpp)

Check failure on line 2 in Tests/L1Tests/tests/test_HdmiCecSource.cpp

View workflow job for this annotation

GitHub Actions / call-fossid-workflow / Fossid Annotate PR

FossID License Issue Detected

Source code with 'Apache-2.0' license found in local file 'Tests/L1Tests/tests/test_HdmiCecSource.cpp' (Match: rdkcentral/rdkservices/1, 1377 lines, url: https://github.com/rdkcentral/rdkservices/archive/GRT_v1.tar.gz, file: Tests/tests/test_HdmiCecSource.cpp)
* following copyright and licenses apply:
*
* Copyright 2022 RDK Management
Expand Down Expand Up @@ -342,29 +342,9 @@
.WillByDefault(::testing::Return());
ON_CALL(*p_connectionImplMock, addFrameListener(::testing::_))
.WillByDefault(::testing::Return());
ON_CALL(*p_iarmBusImplMock, IARM_Bus_RegisterEventHandler(::testing::_, ::testing::_, ::testing::_))
.WillByDefault(::testing::Invoke(
[&](const char* ownerName, IARM_EventId_t eventId, IARM_EventHandler_t handler) {
if ((string(IARM_BUS_CECMGR_NAME) == string(ownerName)) && (eventId == IARM_BUS_CECMGR_EVENT_DAEMON_INITIALIZED)) {
EXPECT_TRUE(handler != nullptr);
cecMgrEventHandler = handler;
}
if ((string(IARM_BUS_CECMGR_NAME) == string(ownerName)) && (eventId == IARM_BUS_CECMGR_EVENT_STATUS_UPDATED)) {
EXPECT_TRUE(handler != nullptr);
cecMgrEventHandler = handler;
}
if ((string(IARM_BUS_DSMGR_NAME) == string(ownerName)) && (eventId == IARM_BUS_DSMGR_EVENT_HDMI_HOTPLUG)) {
EXPECT_TRUE(handler != nullptr);
dsHdmiEventHandler = handler;
}
if ((string(IARM_BUS_PWRMGR_NAME) == string(ownerName)) && (eventId == IARM_BUS_PWRMGR_EVENT_MODECHANGED)) {
EXPECT_TRUE(handler != nullptr);
pwrMgrEventHandler = handler;
}

return IARM_RESULT_SUCCESS;
}));

EXPECT_CALL(*p_managerImplMock, Initialize())
.Times(::testing::AnyNumber())
.WillRepeatedly(::testing::Return());
}
virtual ~HdmiCecSourceTest() override
{
Expand Down Expand Up @@ -1408,18 +1388,14 @@
iCounter ++;
}

ASSERT_TRUE(dsHdmiEventHandler != nullptr);
EXPECT_CALL(*p_hostImplMock, getDefaultVideoPortName())
.Times(1)
.WillOnce(::testing::Return("TEST"));


IARM_Bus_DSMgr_EventData_t eventData;
eventData.data.hdmi_hpd.event = 0;

EVENT_SUBSCRIBE(0, _T("onHdmiHotPlug"), _T("client.events.onHdmiHotPlug"), message);

dsHdmiEventHandler(IARM_BUS_DSMGR_NAME, IARM_BUS_DSMGR_EVENT_HDMI_HOTPLUG, &eventData , 0);
//plugin->OnDisplayHDMIHotPlug(dsDISPLAY_EVENT_CONNECTED);
Plugin::HdmiCecSourceImplementation::_instance->OnDisplayHDMIHotPlug(dsDISPLAY_EVENT_CONNECTED);

EVENT_UNSUBSCRIBE(0, _T("onHdmiHotPlug"), _T("client.events.onHdmiHotPlug"), message);
}
Expand Down
2 changes: 0 additions & 2 deletions build_dependencies.sh
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,6 @@ touch telemetry_busmessage_sender.h
touch maintenanceMGR.h
touch pkg.h
touch edid-parser.hpp
touch drm.h
touch drm_mode.h
touch secure_wrapper.h
touch wpa_ctrl.h
touch btmgr.h
Expand Down
1 change: 1 addition & 0 deletions cov_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ cmake -G Ninja -S "$GITHUB_WORKSPACE" -B build/entservices-inputoutput \
-I ${GITHUB_WORKSPACE}/entservices-testframework/Tests/mocks \
-I ${GITHUB_WORKSPACE}/entservices-testframework/Tests/mocks/thunder \
-I ${GITHUB_WORKSPACE}/entservices-testframework/Tests/mocks/devicesettings \
-I /usr/include/libdrm \
-include ${GITHUB_WORKSPACE}/entservices-testframework/Tests/mocks/devicesettings.h \
-include ${GITHUB_WORKSPACE}/entservices-testframework/Tests/mocks/Iarm.h \
-include ${GITHUB_WORKSPACE}/entservices-testframework/Tests/mocks/Rfc.h \
Expand Down
Loading