Skip to content

Commit f80c401

Browse files
authored
Merge pull request #226 from rdkcentral/develop
Rebase
2 parents 1e97a01 + be41736 commit f80c401

File tree

8 files changed

+114
-38
lines changed

8 files changed

+114
-38
lines changed

.github/workflows/L1-tests.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ name: L1-tests
22

33
on:
44
workflow_call:
5+
inputs:
6+
caller_source:
7+
description: "Specifies the source type (e.g., local or test framework) for the workflow."
8+
required: true
9+
type: string
510
secrets:
611
RDKCM_RDKE:
712
required: true
@@ -69,6 +74,7 @@ jobs:
6974
- name: ACK External Trigger
7075
run: |
7176
echo "Message: External Trigger Received for L1 Tests"
77+
echo "Trigger Source: ${{ inputs.caller_source }}"
7278
7379
- name: Set up CMake
7480
uses: jwlawson/[email protected]
@@ -121,6 +127,13 @@ jobs:
121127
token: ${{ secrets.RDKCM_RDKE }}
122128

123129
- name: Checkout entservices-inputoutput
130+
if: ${{ inputs.caller_source == 'local' }}
131+
uses: actions/checkout@v3
132+
with:
133+
path: entservices-inputoutput
134+
135+
- name: Checkout entservices-inputoutput-testframework
136+
if: ${{ inputs.caller_source == 'testframework' }}
124137
uses: actions/checkout@v3
125138
with:
126139
repository: rdkcentral/entservices-inputoutput

.github/workflows/L2-tests.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ name: L2-tests
22

33
on:
44
workflow_call:
5+
inputs:
6+
caller_source:
7+
description: "Specifies the source type (e.g., local or test framework) for the workflow."
8+
required: true
9+
type: string
510
secrets:
611
RDKCM_RDKE:
712
required: true
@@ -39,6 +44,7 @@ jobs:
3944
- name: ACK External Trigger
4045
run: |
4146
echo "Message: External Trigger Received for L2 Tests"
47+
echo "Trigger Source: ${{ inputs.caller_source }}"
4248
4349
- name: Set up CMake
4450
uses: jwlawson/[email protected]
@@ -83,6 +89,13 @@ jobs:
8389
ref: R4.4.3
8490

8591
- name: Checkout entservices-inputoutput
92+
if: ${{ inputs.caller_source == 'local' }}
93+
uses: actions/checkout@v3
94+
with:
95+
path: entservices-inputoutput
96+
97+
- name: Checkout entservices-inputoutput-testframework
98+
if: ${{ inputs.caller_source == 'testframework' }}
8699
uses: actions/checkout@v3
87100
with:
88101
repository: rdkcentral/entservices-inputoutput

.github/workflows/tests-trigger.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ on:
1111
jobs:
1212
trigger-L1:
1313
uses: ./.github/workflows/L1-tests.yml
14+
with:
15+
caller_source: local
1416
secrets:
1517
RDKCM_RDKE: ${{ secrets.RDKCM_RDKE }}
1618

1719
trigger-L2:
1820
uses: ./.github/workflows/L2-tests.yml
21+
with:
22+
caller_source: local
1923
secrets:
2024
RDKCM_RDKE: ${{ secrets.RDKCM_RDKE }}
21-

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,36 @@ All notable changes to this project will be documented in this file. Dates are d
44

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

7+
#### [1.4.2](https://github.com/rdkcentral/entservices-inputoutput/compare/1.4.1...1.4.2)
8+
9+
- RDKEMW-4708: Replacing IARM Power manager with Power Manager Plugin [`#194`](https://github.com/rdkcentral/entservices-inputoutput/pull/194)
10+
- Merge tag '1.4.1' into develop [`263272d`](https://github.com/rdkcentral/entservices-inputoutput/commit/263272d6c89623461ace94af863e746fda34f9c3)
11+
12+
#### [1.4.1](https://github.com/rdkcentral/entservices-inputoutput/compare/1.4.0...1.4.1)
13+
14+
> 1 August 2025
15+
16+
- RDKEMW-6582: Improve the ARC volume logo smoothness during the Volume +/- press and hold scenario [`#215`](https://github.com/rdkcentral/entservices-inputoutput/pull/215)
17+
- [RDKEMW-5410] RDKEMW-6572 : Compilation error was not reported for the PR branch [`#211`](https://github.com/rdkcentral/entservices-inputoutput/pull/211)
18+
- 1.4.1 release change log updates [`f6c7916`](https://github.com/rdkcentral/entservices-inputoutput/commit/f6c7916aff03d41fb65e8b631f5c05f666ec92c6)
19+
- Merge tag '1.4.0' into develop [`152ff74`](https://github.com/rdkcentral/entservices-inputoutput/commit/152ff74a4066cd3b6fc10800d1b3835fe7d3b543)
20+
21+
#### [1.4.0](https://github.com/rdkcentral/entservices-inputoutput/compare/1.3.5...1.4.0)
22+
23+
> 28 July 2025
24+
25+
- RDKEMW-2942 : Remove the HdmiInput plugin and replace its references with AVInput [`#205`](https://github.com/rdkcentral/entservices-inputoutput/pull/205)
26+
- [RDKEMW-3513] PR action to run with latest change [`#163`](https://github.com/rdkcentral/entservices-inputoutput/pull/163)
27+
- RDKEMW-6325: platfromSupport is missing from dimmingMode capabilities [`#198`](https://github.com/rdkcentral/entservices-inputoutput/pull/198)
28+
- RDKTV-37015 - Changelog updates for 1.4.0 [`b969871`](https://github.com/rdkcentral/entservices-inputoutput/commit/b969871181dd194dd835750ec8eb908b66d34537)
29+
- Merge tag '1.3.5' into develop [`024be52`](https://github.com/rdkcentral/entservices-inputoutput/commit/024be52d58d512b138b84aee9b12609e603d7110)
30+
731
#### [1.3.5](https://github.com/rdkcentral/entservices-inputoutput/compare/1.3.4...1.3.5)
832

33+
> 23 July 2025
34+
935
- RDKEMW-6230: Retry logic used dsGetHDMIARCPortId in HdmiCecSink [`#203`](https://github.com/rdkcentral/entservices-inputoutput/pull/203)
36+
- 1.3.5 release changelog updates [`b12cd97`](https://github.com/rdkcentral/entservices-inputoutput/commit/b12cd97a05c2dc2b7915cfac28c998fb2277d349)
1037
- Merge tag '1.3.4' into develop [`760ee0f`](https://github.com/rdkcentral/entservices-inputoutput/commit/760ee0f9da46e0b0ed2e2adb4523bfec85c5a927)
1138

1239
#### [1.3.4](https://github.com/rdkcentral/entservices-inputoutput/compare/1.3.3...1.3.4)

HdmiCecSink/HdmiCecSink.cpp

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
#define HDMICECSINK_NUMBER_TV_ADDR 2
7676
#define HDMICECSINK_UPDATE_POWER_STATUS_INTERVA_MS (60 * 1000)
7777
#define HDMISINK_ARC_START_STOP_MAX_WAIT_MS 4000
78-
#define HDMICECSINK_UPDATE_AUDIO_STATUS_INTERVAL_MS 500
78+
#define HDMICECSINK_UPDATE_AUDIO_STATUS_INTERVAL_MS 2000
7979

8080

8181
#define SAD_FMT_CODE_AC3 2
@@ -710,6 +710,7 @@ namespace WPEFramework
710710
m_isHdmiInConnected = false;
711711
hdmiCecAudioDeviceConnected = false;
712712
m_isAudioStatusInfoUpdated = false;
713+
m_audioStatusRequestedCount = 0;
713714
m_audioStatusReceived = false;
714715
m_audioStatusTimerStarted = false;
715716
m_audioDevicePowerStatusRequested = false;
@@ -1161,9 +1162,11 @@ namespace WPEFramework
11611162
LOGINFO("AudioStatus received from the Audio Device and the timer is still active. So stopping the timer!\n");
11621163
m_audioStatusDetectionTimer.stop();
11631164
}
1164-
LOGINFO("AudioStatus received from the Audio Device. Updating the AudioStatus info! m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
1165+
LOGINFO("AudioStatus received from the Audio Device. Updating the AudioStatus info! m_isAudioStatusInfoUpdated :%d, m_audioStatusRequestedCount :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusRequestedCount,m_audioStatusReceived,m_audioStatusTimerStarted);
11651166
}
1166-
LOGINFO("Command: ReportAudioStatus %s audio Mute status %d means %s and current Volume level is %d \n",GetOpName(msg.opCode()),msg.status.getAudioMuteStatus(),msg.status.toString().c_str(),msg.status.getAudioVolume());
1167+
if(m_audioStatusRequestedCount > 0)
1168+
m_audioStatusRequestedCount--;
1169+
LOGINFO("Command: ReportAudioStatus %s audio Mute status %d means %s and current Volume level is %d \n",GetOpName(msg.opCode()),msg.status.getAudioMuteStatus(),msg.status.toString().c_str(),msg.status.getAudioVolume());
11671170
params["muteStatus"] = msg.status.getAudioMuteStatus();
11681171
params["volumeLevel"] = msg.status.getAudioVolume();
11691172
sendNotify(eventString[HDMICECSINK_EVENT_REPORT_AUDIO_STATUS], params);
@@ -1355,7 +1358,15 @@ namespace WPEFramework
13551358
return;
13561359
if(!(_instance->smConnection))
13571360
return;
1361+
if (m_audioStatusDetectionTimer.isActive())
1362+
{
1363+
LOGINFO("Stopping the Audio Status Timer!\n");
1364+
m_audioStatusDetectionTimer.stop();
1365+
m_audioStatusTimerStarted = false;
1366+
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ",m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
1367+
}
13581368
LOGINFO(" Send GiveAudioStatus ");
1369+
m_audioStatusRequestedCount++;
13591370
_instance->smConnection->sendTo(LogicalAddress::AUDIO_SYSTEM,MessageEncoder().encode(GiveAudioStatus()), 100);
13601371

13611372
}
@@ -2497,10 +2508,11 @@ namespace WPEFramework
24972508
m_audioStatusDetectionTimer.stop();
24982509
}
24992510
m_isAudioStatusInfoUpdated = false;
2511+
m_audioStatusRequestedCount = 0;
25002512
m_audioStatusReceived = false;
25012513
m_audioStatusTimerStarted = false;
2502-
LOGINFO("Audio device removed, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
2503-
sendNotify(eventString[HDMICECSINK_EVENT_AUDIO_DEVICE_CONNECTED_STATUS], params);
2514+
LOGINFO("Audio device removed, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusRequestedCount :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d", m_isAudioStatusInfoUpdated,m_audioStatusRequestedCount,m_audioStatusReceived,m_audioStatusTimerStarted);
2515+
sendNotify(eventString[HDMICECSINK_EVENT_AUDIO_DEVICE_CONNECTED_STATUS], params);
25042516
}
25052517

25062518
_instance->deviceList[logicalAddress].m_isRequestRetry = 0;
@@ -3121,10 +3133,10 @@ namespace WPEFramework
31213133
m_audioStatusDetectionTimer.stop();
31223134
}
31233135
m_isAudioStatusInfoUpdated = false;
3136+
m_audioStatusRequestedCount = 0;
31243137
m_audioStatusReceived = false;
31253138
m_audioStatusTimerStarted = false;
3126-
LOGINFO("CEC Disabled, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
3127-
3139+
LOGINFO("CEC Disabled, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusRequestedCount :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusRequestedCount,m_audioStatusReceived,m_audioStatusTimerStarted);
31283140

31293141
for(int i=0; i< 16; i++)
31303142
{
@@ -3361,6 +3373,8 @@ namespace WPEFramework
33613373
keyInfo = _instance->m_SendKeyQueue.front();
33623374
_instance->m_SendKeyQueue.pop();
33633375

3376+
if((keyInfo.logicalAddr != 0x5) || ((keyInfo.logicalAddr == 0x5) && (_instance->hdmiCecAudioDeviceConnected == true)))
3377+
{
33643378
if(keyInfo.UserControl == "sendUserControlPressed" )
33653379
{
33663380
LOGINFO("sendUserControlPressed : logical addr:0x%x keyCode: 0x%x queue size :%zu \n",keyInfo.logicalAddr,keyInfo.keyCode,_instance->m_SendKeyQueue.size());
@@ -3380,16 +3394,16 @@ namespace WPEFramework
33803394

33813395
if((_instance->m_SendKeyQueue.size()<=1 || (_instance->m_SendKeyQueue.size() % 2 == 0)) && ((keyInfo.keyCode == VOLUME_UP) || (keyInfo.keyCode == VOLUME_DOWN) || (keyInfo.keyCode == MUTE)) )
33823396
{
3397+
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusRequestedCount :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ",_instance->m_isAudioStatusInfoUpdated,_instance->m_audioStatusRequestedCount,_instance->m_audioStatusReceived,_instance->m_audioStatusTimerStarted);
33833398
if(keyInfo.keyCode == MUTE)
33843399
{
33853400
_instance->sendGiveAudioStatusMsg();
33863401
}
33873402
else
33883403
{
3389-
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ",_instance->m_isAudioStatusInfoUpdated,_instance->m_audioStatusReceived,_instance->m_audioStatusTimerStarted);
33903404
if (!_instance->m_isAudioStatusInfoUpdated)
33913405
{
3392-
if ( !(_instance->m_audioStatusDetectionTimer.isActive()))
3406+
if ((!(_instance->m_audioStatusDetectionTimer.isActive())) && (_instance->m_audioStatusRequestedCount == 0))
33933407
{
33943408
LOGINFO("Audio status info not updated. Starting the Timer!");
33953409
_instance->m_audioStatusTimerStarted = true;
@@ -3404,6 +3418,7 @@ namespace WPEFramework
34043418
}
34053419
}
34063420
}
3421+
}
34073422
}
34083423

34093424
}//while(!_instance->m_sendKeyEventThreadExit)

HdmiCecSink/HdmiCecSink.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,7 @@ namespace WPEFramework {
673673
bool m_isAudioStatusInfoUpdated;
674674
bool m_audioStatusReceived;
675675
bool m_audioStatusTimerStarted;
676+
int m_audioStatusRequestedCount;
676677
std::thread m_sendKeyEventThread;
677678
std::mutex m_sendKeyEventMutex;
678679
std::queue<SendKeyInfo> m_SendKeyQueue;

Tests/README.md

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,49 +6,54 @@ Hence, any modifications/additions related to mocks should be commited to entser
66

77
# Individual Repo Handling
88
Each individual entservices-* repo was added with a .yml file to trigger L1, L2, L2-OOP test job in github workflow. This yml file triggers below mentioned build jobs in addition to regular build jobs (thunder, thunder tools & etc,).
9-
9+
```
1010
a/ Build mocks => To create TestMock Lib from all required mock relates stubs and copy to install/usr/lib path.
1111
b/ Build entservices-<repo-name> => To create Test Lib of .so type from all applicable test files which are enabled for plugin test.
1212
c/ Build entservices-testframework => To create L1/L2 executable by linking the plugins/test .so files.
13-
13+
```
1414
This ensures everything in-tact in repo level across multiple related plugins when there is a new change comes in.
1515

16-
# testframework Repo Handling
17-
The entservices-testframework repo contains yml files corresponds to L1, L2 & L2-OOP to trigger test job in github workflow.
18-
19-
This yml file triggers below mentioned build jobs in addition to regular build jobs (thunder, thunder tools & etc,).
20-
21-
a/ Build mocks => To create TestMock Lib from all required mock relates stubs and copy to install/usr/lib path.
22-
b/ Build entservices-* => Jobs to checkout/build all individual repo's plugin & test files which are enabled for plugin test and copy all required libs to install/usr/lib path.
23-
c/ Build entservices-testframework => To create L1/L2 executable by linking the plugins/test .so files.
24-
25-
This ensures everything in-tact across multiple repos when there is a new change comes either in mocks or test case or plugins.
26-
2716
##### Steps to run L1, L2, L2-OOP test locally #####
17+
```
2818
1. checkout the entservices-<repo-name> to your working directory in your build machine.
29-
example: git clone https://github.com/rdkcentral/entservices-testframework.git
19+
example: git clone https://github.com/rdkcentral/entservices-deviceanddisplay.git
3020
3121
2. switch to entservices-<repo-name> directory
32-
example: cd entservices-testframework
22+
example: cd entservices-deviceanddisplay
3323
3424
3. check and ensure current working branch points to develop
3525
example: git branch
3626
3727
4. Run below curl command to download act executable to your repo.
3828
example: curl -SL https://raw.githubusercontent.com/nektos/act/master/install.sh | bash
3929
40-
5. 5a/to run L1 test
41-
example: ./bin/act -W .github/workflows/L1-tests.yml -s GITHUB_TOKEN=<your access token>
30+
5. Run L1, L2, L2-oop test
31+
example: ./bin/act -W .github/workflows/tests-trigger.yml -s GITHUB_TOKEN=<your access token>
4232
43-
5. 5b/to run L2 test
44-
example: ./bin/act -W .github/workflows/L2-tests.yml -s GITHUB_TOKEN=<your access token>
45-
46-
5. 5c/to run L2 test OOP
47-
example: ./bin/act -W .github/workflows/L2-tests-oop.yml -s GITHUB_TOKEN=<your access token>
33+
NOTE: By default test-trigger.yml will trigger all tests(L1, L2 and etc) parallely, if you want any one test alone to be triggered/verified then remove the other trigger rules from the tests-trigger.yml
34+
```
35+
# testframework Repo Handling
36+
tf-trigger.yml file of testframework repo will get loaded into github action whenever there is a pull or push happens. This file in-turn triggers all individual repos L1, L2, L2-oop tests. testframework repo test can run only in github workflow.
4837

49-
NOTES:
50-
a/ If you face any secret token related error while run your yml, pls comment the below mentioned line
38+
NOTE:
39+
If you face any secret token related error while run your yml, pls comment the below mentioned line
5140
#token: ${{ secrets.RDKE_GITHUB_TOKEN }}
52-
b/ Coverage Report of both L1 and L2 test are uploaded to artifacts server.
53-
c/ For the case, which has modification in plugin and/or test files as well in entservices-testframework mock files, change the ref key of checkout job to point your own branch instead of develop, in both entservices-testframework and entservices-* repo and ensure L1, L2, L2-OOP test jobs are passing for your PR.
54-
example: ref: feature/L1-test
41+
42+
# Execution usecases where manual change required before triggering the test:
43+
```
44+
a/ changes in testframework repo only:
45+
Need to change ref pointer of "Checkout entservices-testframework" job in individual repo yml file, to point your current working branch of testframework and in tftrigger.yml of testframework repo need to change trigger branch name to your individual repo branch name instead of develop which is default.
46+
example:
47+
ref: topic/method_1 /* Checkout entservices-testframework job */
48+
uses: rdkcentral/entservices-deviceanddisplay/.github/workflows/L1-tests.yml@topic/method_1 /* tf-trigger.yml */
49+
50+
b/ changes in both testframework repo and invidual repo:
51+
Changes mentioned in step (a) above + "Checkout entservices-deviceanddisplay-testframework" job in individual repo yml file, ref field to point your deviceanddisplay current working branch.
52+
example:
53+
ref: topic/method_1 /* Checkout entservices-testframework job */
54+
ref: topic/method_1 /* Checkout entservices-deviceanddisplay-testframework job */
55+
uses: rdkcentral/entservices-deviceanddisplay/.github/workflows/L1-tests.yml@topic/method_1 /* tf-trigger.yml */
56+
57+
c/ changes in individual entservices-* repo only
58+
no changes required
59+
```

helpers/PluginInterfaceBuilder.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ namespace Plugin {
113113
auto pluginInterface = controller->QueryInterfaceByCallsign<INTERFACE>(callsign.c_str());
114114

115115
if (pluginInterface) {
116-
pluginInterface->AddRef();
117116
LOGINFO("plugin interface succeed and retry count: %d",count);
118117
return pluginInterface;
119118
}

0 commit comments

Comments
 (0)