From d6e5a4d9ad4200452db1140d2fbe0342c4a43345 Mon Sep 17 00:00:00 2001 From: aishwariya15 <75303024+aishwariya15@users.noreply.github.com> Date: Fri, 11 Apr 2025 20:36:28 +0530 Subject: [PATCH 1/4] RDKEMW-3359:HdmiCecSink RDK-V to RDK-E sync changes (#48) Co-authored-by: apatel859 Co-authored-by: apatel859 <48992974+apatel859@users.noreply.github.com> --- HdmiCecSink/CHANGELOG.md | 1 - HdmiCecSink/HdmiCecSink.cpp | 176 +++++++++++++++++++++++++++--------- HdmiCecSink/HdmiCecSink.h | 9 +- 3 files changed, 138 insertions(+), 48 deletions(-) diff --git a/HdmiCecSink/CHANGELOG.md b/HdmiCecSink/CHANGELOG.md index 2e200c40..140a1d0b 100644 --- a/HdmiCecSink/CHANGELOG.md +++ b/HdmiCecSink/CHANGELOG.md @@ -13,4 +13,3 @@ All notable changes to this RDK Service will be documented in this file. * **Security** in case of vulnerabilities. * 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. - diff --git a/HdmiCecSink/HdmiCecSink.cpp b/HdmiCecSink/HdmiCecSink.cpp index 7c50d696..63b67d79 100644 --- a/HdmiCecSink/HdmiCecSink.cpp +++ b/HdmiCecSink/HdmiCecSink.cpp @@ -75,6 +75,7 @@ #define HDMICECSINK_NUMBER_TV_ADDR 2 #define HDMICECSINK_UPDATE_POWER_STATUS_INTERVA_MS (60 * 1000) #define HDMISINK_ARC_START_STOP_MAX_WAIT_MS 4000 +#define HDMICECSINK_UPDATE_AUDIO_STATUS_INTERVAL_MS 500 #define SAD_FMT_CODE_AC3 2 @@ -174,9 +175,7 @@ static std::vector deviceFeatures = {DEVICE_FEATURES_TV}; #define API_VERSION_NUMBER_MAJOR 1 #define API_VERSION_NUMBER_MINOR 3 -#define API_VERSION_NUMBER_PATCH 7 - -using PowerState = WPEFramework::Exchange::IPowerManager::PowerState; +#define API_VERSION_NUMBER_PATCH 10 namespace WPEFramework { @@ -710,7 +709,10 @@ namespace WPEFramework m_currentActiveSource = -1; m_isHdmiInConnected = false; hdmiCecAudioDeviceConnected = false; - m_audioDevicePowerStatusRequested = false; + m_isAudioStatusInfoUpdated = false; + m_audioStatusReceived = false; + m_audioStatusTimerStarted = false; + m_audioDevicePowerStatusRequested = false; m_pollNextState = POLL_THREAD_STATE_NONE; m_pollThreadState = POLL_THREAD_STATE_NONE; m_video_latency = DEFAULT_VIDEO_LATENCY; @@ -745,6 +747,12 @@ namespace WPEFramework Register(HDMICECSINK_METHOD_SET_LATENCY_INFO, &HdmiCecSink::setLatencyInfoWrapper, this); logicalAddressDeviceType = "None"; logicalAddress = 0xFF; + // load persistence setting + loadSettings(); + + int err; + dsHdmiInGetNumberOfInputsParam_t hdmiInput; + InitializeIARM(); m_sendKeyEventThreadExit = false; m_sendKeyEventThread = std::thread(threadSendKeyEvent); @@ -752,15 +760,10 @@ namespace WPEFramework m_semSignaltoArcRoutingThread.acquire(); m_arcRoutingThread = std::thread(threadArcRouting); - + m_audioStatusDetectionTimer.connect( std::bind( &HdmiCecSink::audioStatusTimerFunction, this ) ); + m_audioStatusDetectionTimer.setSingleShot(true); m_arcStartStopTimer.connect( std::bind( &HdmiCecSink::arcStartStopTimerFunction, this ) ); m_arcStartStopTimer.setSingleShot(true); - // load persistence setting - loadSettings(); - - int err; - dsHdmiInGetNumberOfInputsParam_t hdmiInput; - InitializeIARM(); // get power state: uint32_t res = Core::ERROR_GENERAL; PowerState pwrStateCur = WPEFramework::Exchange::IPowerManager::POWER_STATE_UNKNOWN; @@ -812,7 +815,7 @@ namespace WPEFramework } } getCecVersion(); - getHdmiArcPortID(); + LOGINFO(" HdmiCecSink plugin Initialize completed \n"); return (std::string()); } @@ -1147,6 +1150,18 @@ namespace WPEFramework JsonObject params; if(!HdmiCecSink::_instance) return; + if (m_audioStatusTimerStarted) + { + m_audioStatusReceived = true; + m_isAudioStatusInfoUpdated = true; + m_audioStatusTimerStarted = false; + if (m_audioStatusDetectionTimer.isActive()) + { + LOGINFO("AudioStatus received from the Audio Device and the timer is still active. So stopping the timer!\n"); + m_audioStatusDetectionTimer.stop(); + } + 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); + } 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()); params["muteStatus"] = msg.status.getAudioMuteStatus(); params["volumeLevel"] = msg.status.getAudioVolume(); @@ -2477,7 +2492,14 @@ namespace WPEFramework params["status"] = string("success"); params["audioDeviceConnected"] = string("false"); hdmiCecAudioDeviceConnected = false; - sendNotify(eventString[HDMICECSINK_EVENT_AUDIO_DEVICE_CONNECTED_STATUS], params); + if (m_audioStatusDetectionTimer.isActive()){ + m_audioStatusDetectionTimer.stop(); + } + m_isAudioStatusInfoUpdated = false; + m_audioStatusReceived = false; + m_audioStatusTimerStarted = false; + LOGINFO("Audio device removed, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted); + sendNotify(eventString[HDMICECSINK_EVENT_AUDIO_DEVICE_CONNECTED_STATUS], params) } _instance->deviceList[logicalAddress].m_isRequestRetry = 0; @@ -2720,29 +2742,44 @@ namespace WPEFramework _instance->allocateLogicalAddress(DeviceType::TV); if ( _instance->m_logicalAddressAllocated != LogicalAddress::UNREGISTERED) { - logicalAddress = LogicalAddress(_instance->m_logicalAddressAllocated); - LibCCEC::getInstance().addLogicalAddress(logicalAddress); - _instance->smConnection->setSource(logicalAddress); - _instance->m_numberOfDevices = 0; - _instance->deviceList[_instance->m_logicalAddressAllocated].m_deviceType = DeviceType::TV; - _instance->deviceList[_instance->m_logicalAddressAllocated].m_isDevicePresent = true; - _instance->deviceList[_instance->m_logicalAddressAllocated].update(physical_addr); - _instance->deviceList[_instance->m_logicalAddressAllocated].m_cecVersion = Version::V_1_4; - _instance->deviceList[_instance->m_logicalAddressAllocated].m_vendorID = appVendorId; - _instance->deviceList[_instance->m_logicalAddressAllocated].m_powerStatus = PowerStatus(powerState); - _instance->deviceList[_instance->m_logicalAddressAllocated].m_currentLanguage = defaultLanguage; - _instance->deviceList[_instance->m_logicalAddressAllocated].m_osdName = osdName.toString().c_str(); - if(cecVersion == 2.0) { - _instance->deviceList[_instance->m_logicalAddressAllocated].m_cecVersion = Version::V_2_0; - _instance->smConnection->sendTo(LogicalAddress(LogicalAddress::BROADCAST), - MessageEncoder().encode(ReportFeatures(Version::V_2_0,allDevicetype,rcProfile,deviceFeatures)), 500); - } - _instance->smConnection->addFrameListener(_instance->msgFrameListener); - _instance->smConnection->sendTo(LogicalAddress(LogicalAddress::BROADCAST), - MessageEncoder().encode(ReportPhysicalAddress(physical_addr, _instance->deviceList[_instance->m_logicalAddressAllocated].m_deviceType)), 100); - - _instance->m_sleepTime = 0; - _instance->m_pollThreadState = POLL_THREAD_STATE_PING; + try{ + + logicalAddress = LogicalAddress(_instance->m_logicalAddressAllocated); + LibCCEC::getInstance().addLogicalAddress(logicalAddress); + _instance->smConnection->setSource(logicalAddress); + _instance->m_numberOfDevices = 0; + _instance->deviceList[_instance->m_logicalAddressAllocated].m_deviceType = DeviceType::TV; + _instance->deviceList[_instance->m_logicalAddressAllocated].m_isDevicePresent = true; + _instance->deviceList[_instance->m_logicalAddressAllocated].update(physical_addr); + _instance->deviceList[_instance->m_logicalAddressAllocated].m_cecVersion = Version::V_1_4; + _instance->deviceList[_instance->m_logicalAddressAllocated].m_vendorID = appVendorId; + _instance->deviceList[_instance->m_logicalAddressAllocated].m_powerStatus = PowerStatus(powerState); + _instance->deviceList[_instance->m_logicalAddressAllocated].m_currentLanguage = defaultLanguage; + _instance->deviceList[_instance->m_logicalAddressAllocated].m_osdName = osdName.toString().c_str(); + if(cecVersion == 2.0) { + _instance->deviceList[_instance->m_logicalAddressAllocated].m_cecVersion = Version::V_2_0; + _instance->smConnection->sendTo(LogicalAddress(LogicalAddress::BROADCAST), + MessageEncoder().encode(ReportFeatures(Version::V_2_0,allDevicetype,rcProfile,deviceFeatures)), 500); + } + _instance->smConnection->addFrameListener(_instance->msgFrameListener); + _instance->smConnection->sendTo(LogicalAddress(LogicalAddress::BROADCAST), + MessageEncoder().encode(ReportPhysicalAddress(physical_addr, _instance->deviceList[_instance->m_logicalAddressAllocated].m_deviceType)), 100); + + _instance->m_sleepTime = 0; + _instance->m_pollThreadState = POLL_THREAD_STATE_PING; + } + catch(InvalidStateException &e){ + LOGWARN("InvalidStateException caught while allocated logical address. %s", e.what()); + _instance->m_pollThreadState = POLL_THREAD_STATE_EXIT; + } + catch(IOException &e){ + LOGWARN("IOException caught while allocated logical address. %s", e.what()); + _instance->m_pollThreadState = POLL_THREAD_STATE_EXIT; + } + catch(...){ + LOGWARN("Exception caught while allocated logical address."); + _instance->m_pollThreadState = POLL_THREAD_STATE_EXIT; + } } else { @@ -2978,9 +3015,14 @@ namespace WPEFramework { LibCCEC::getInstance().init("HdmiCecSink"); } - catch (const std::exception& e) - { - LOGWARN("CEC exception caught from LibCCEC::getInstance().init()"); + catch(InvalidStateException &e){ + LOGWARN("InvalidStateException caught in LibCCEC::init %s", e.what()); + } + catch(IOException &e){ + LOGWARN("IOException caught in LibCCEC::init %s", e.what()); + } + catch(...){ + LOGWARN("Exception caught in LibCCEC::init"); } } libcecInitStatus++; @@ -3074,6 +3116,14 @@ namespace WPEFramework m_logicalAddressAllocated = LogicalAddress::UNREGISTERED; m_currentArcRoutingState = ARC_STATE_ARC_TERMINATED; + if (m_audioStatusDetectionTimer.isActive()){ + m_audioStatusDetectionTimer.stop(); + } + m_isAudioStatusInfoUpdated = false; + m_audioStatusReceived = false; + m_audioStatusTimerStarted = false; + LOGINFO("CEC Disabled, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted); + for(int i=0; i< 16; i++) { @@ -3089,9 +3139,14 @@ namespace WPEFramework { LibCCEC::getInstance().term(); } - catch (const std::exception& e) - { - LOGWARN("CEC exception caught from LibCCEC::getInstance().term() "); + catch(InvalidStateException &e){ + LOGWARN("InvalidStateException caught in LibCCEC::term %s", e.what()); + } + catch(IOException &e){ + LOGWARN("IOException caught in LibCCEC::term %s", e.what()); + } + catch(...){ + LOGWARN("Exception caught in LibCCEC::term"); } } @@ -3324,12 +3379,43 @@ namespace WPEFramework if((_instance->m_SendKeyQueue.size()<=1 || (_instance->m_SendKeyQueue.size() % 2 == 0)) && ((keyInfo.keyCode == VOLUME_UP) || (keyInfo.keyCode == VOLUME_DOWN) || (keyInfo.keyCode == MUTE)) ) { - _instance->sendGiveAudioStatusMsg(); - } + if(keyInfo.keyCode == MUTE) + { + _instance->sendGiveAudioStatusMsg(); + } + else + { + LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ",_instance->m_isAudioStatusInfoUpdated,_instance->m_audioStatusReceived,_instance->m_audioStatusTimerStarted); + if (!_instance->m_isAudioStatusInfoUpdated) + { + if ( !(_instance->m_audioStatusDetectionTimer.isActive())) + { + LOGINFO("Audio status info not updated. Starting the Timer!"); + _instance->m_audioStatusTimerStarted = true; + _instance->m_audioStatusDetectionTimer.start((HDMICECSINK_UPDATE_AUDIO_STATUS_INTERVAL_MS)); + } + LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", _instance->m_isAudioStatusInfoUpdated,_instance->m_audioStatusReceived,_instance->m_audioStatusTimerStarted); + } + else + { + if (!_instance->m_audioStatusReceived){ + _instance->sendGiveAudioStatusMsg(); + } + } + } + } }//while(!_instance->m_sendKeyEventThreadExit) }//threadSendKeyEvent + void HdmiCecSink::audioStatusTimerFunction() + { + m_audioStatusTimerStarted = false; + m_isAudioStatusInfoUpdated = true; + LOGINFO("Timer Expired. Requesting the AudioStatus since not received.\n"); + sendGiveAudioStatusMsg(); + LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted); + } void HdmiCecSink::threadArcRouting() { @@ -3340,7 +3426,7 @@ namespace WPEFramework return; LOGINFO("Running threadArcRouting"); - + _instance->getHdmiArcPortID(); while(1) { diff --git a/HdmiCecSink/HdmiCecSink.h b/HdmiCecSink/HdmiCecSink.h index d41b16ab..5c186da5 100644 --- a/HdmiCecSink/HdmiCecSink.h +++ b/HdmiCecSink/HdmiCecSink.h @@ -573,9 +573,10 @@ namespace WPEFramework { void sendKeyReleaseEvent(const int logicalAddress); void sendUserControlPressed(const int logicalAddress, int keyCode); void sendUserControlReleased(const int logicalAddress); - void sendGiveAudioStatusMsg(); void onPowerModeChanged(const PowerState ¤tState, const PowerState &newState); void registerEventHandlers(); + void sendGiveAudioStatusMsg(); + void getHdmiArcPortID(); int m_numberOfDevices; /* Number of connected devices othethan own device */ bool m_audioDevicePowerStatusRequested; @@ -669,6 +670,9 @@ namespace WPEFramework { /* Send Key event related */ bool m_sendKeyEventThreadExit; bool m_sendKeyEventThreadRun; + bool m_isAudioStatusInfoUpdated; + bool m_audioStatusReceived; + bool m_audioStatusTimerStarted; std::thread m_sendKeyEventThread; std::mutex m_sendKeyEventMutex; std::queue m_SendKeyQueue; @@ -687,6 +691,7 @@ namespace WPEFramework { binary_semaphore m_semSignaltoArcRoutingThread; bool m_arcstarting; TpTimer m_arcStartStopTimer; + TpTimer m_audioStatusDetectionTimer; Connection *smConnection; std::vector m_connectedDevices; @@ -733,7 +738,7 @@ namespace WPEFramework { void Send_Request_Arc_Termination_Message(); void Send_Report_Arc_Terminated_Message(); void arcStartStopTimerFunction(); - void getHdmiArcPortID(); + void audioStatusTimerFunction(); void getCecVersion(); }; } // namespace Plugin From 65465ee6c7cc800f3639a616209560ba800a3173 Mon Sep 17 00:00:00 2001 From: apatel859 Date: Fri, 11 Apr 2025 16:52:59 +0000 Subject: [PATCH 2/4] 1.0.7 release change log updates --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 818e68cd..0a6373fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,22 @@ 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.0.7](https://github.com/rdkcentral/entservices-inputoutput/compare/1.0.6...1.0.7) + +- RDKEMW-3359:HdmiCecSink RDK-V to RDK-E sync changes [`#48`](https://github.com/rdkcentral/entservices-inputoutput/pull/48) +- Update run_peru.sh by removing secrets [`#47`](https://github.com/rdkcentral/entservices-inputoutput/pull/47) +- RDK-55408: RDKE Services L2 Test Suite Development [`#30`](https://github.com/rdkcentral/entservices-inputoutput/pull/30) +- RDKEMW-2208 and RDKEMW-2209 Enabling L1 and L2 tests for entservices-inputoutput repo [`#25`](https://github.com/rdkcentral/entservices-inputoutput/pull/25) +- Enabling workflow for L1 and L2 [`4049a2e`](https://github.com/rdkcentral/entservices-inputoutput/commit/4049a2eb188efede1c1547be50847d29ddcb9e03) +- Merge tag '1.0.6' into develop [`f46b084`](https://github.com/rdkcentral/entservices-inputoutput/commit/f46b084ed21e61d89e20868eacdea4ba8198266d) +- Added L2-test.yml [`a199266`](https://github.com/rdkcentral/entservices-inputoutput/commit/a1992664c3dfc807fbb7bceb32b30e8dbe78f305) + #### [1.0.6](https://github.com/rdkcentral/entservices-inputoutput/compare/1.0.5...1.0.6) +> 27 March 2025 + - Removed Cec host header [`#35`](https://github.com/rdkcentral/entservices-inputoutput/pull/35) +- 1.0.9 release change log updates [`8abd094`](https://github.com/rdkcentral/entservices-inputoutput/commit/8abd09439355af4041436e562c4590769b55bc0c) - Merge tag '1.0.5' into develop [`3b26eeb`](https://github.com/rdkcentral/entservices-inputoutput/commit/3b26eebfdf0e992e369e5cd3cdc981748c9cdb69) #### [1.0.5](https://github.com/rdkcentral/entservices-inputoutput/compare/1.0.4...1.0.5) From 9854beb3bd09f9196f777f91404c3fc5e82a5950 Mon Sep 17 00:00:00 2001 From: KaleeswaranGnanagurusamy <151117743+KaleeswaranGnanagurusamy@users.noreply.github.com> Date: Mon, 14 Apr 2025 17:33:46 +0530 Subject: [PATCH 3/4] RDK-57093: Update Plugin Clients to use update Power manager interface (#39) --- HdmiCecSink/HdmiCecSink.cpp | 2 +- HdmiCecSink/HdmiCecSink.h | 5 +++-- HdmiCecSource/HdmiCecSourceImplementation.cpp | 2 +- HdmiCecSource/HdmiCecSourceImplementation.h | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/HdmiCecSink/HdmiCecSink.cpp b/HdmiCecSink/HdmiCecSink.cpp index 63b67d79..79d53a8d 100644 --- a/HdmiCecSink/HdmiCecSink.cpp +++ b/HdmiCecSink/HdmiCecSink.cpp @@ -933,7 +933,7 @@ namespace WPEFramework } } - void HdmiCecSink::onPowerModeChanged(const PowerState ¤tState, const PowerState &newState) + void HdmiCecSink::onPowerModeChanged(const PowerState currentState, const PowerState newState) { if(!HdmiCecSink::_instance) return; diff --git a/HdmiCecSink/HdmiCecSink.h b/HdmiCecSink/HdmiCecSink.h index 5c186da5..4fabda9a 100644 --- a/HdmiCecSink/HdmiCecSink.h +++ b/HdmiCecSink/HdmiCecSink.h @@ -573,7 +573,8 @@ namespace WPEFramework { void sendKeyReleaseEvent(const int logicalAddress); void sendUserControlPressed(const int logicalAddress, int keyCode); void sendUserControlReleased(const int logicalAddress); - void onPowerModeChanged(const PowerState ¤tState, const PowerState &newState); + void sendGiveAudioStatusMsg(); + void onPowerModeChanged(const PowerState currentState, const PowerState newState); void registerEventHandlers(); void sendGiveAudioStatusMsg(); void getHdmiArcPortID(); @@ -599,7 +600,7 @@ namespace WPEFramework { ~PowerManagerNotification() override = default; public: - void OnPowerModeChanged(const PowerState ¤tState, const PowerState &newState) override + void OnPowerModeChanged(const PowerState currentState, const PowerState newState) override { _parent.onPowerModeChanged(currentState, newState); } diff --git a/HdmiCecSource/HdmiCecSourceImplementation.cpp b/HdmiCecSource/HdmiCecSourceImplementation.cpp index a244e2ac..d31b4df1 100644 --- a/HdmiCecSource/HdmiCecSourceImplementation.cpp +++ b/HdmiCecSource/HdmiCecSourceImplementation.cpp @@ -779,7 +779,7 @@ namespace WPEFramework } } - void HdmiCecSourceImplementation::onPowerModeChanged(const PowerState ¤tState, const PowerState &newState) + void HdmiCecSourceImplementation::onPowerModeChanged(const PowerState currentState, const PowerState newState) { if(!HdmiCecSourceImplementation::_instance) return; diff --git a/HdmiCecSource/HdmiCecSourceImplementation.h b/HdmiCecSource/HdmiCecSourceImplementation.h index c4832014..5c10511c 100644 --- a/HdmiCecSource/HdmiCecSourceImplementation.h +++ b/HdmiCecSource/HdmiCecSourceImplementation.h @@ -196,7 +196,7 @@ namespace WPEFramework { public: HdmiCecSourceImplementation(); virtual ~HdmiCecSourceImplementation(); - void onPowerModeChanged(const PowerState ¤tState, const PowerState &newState); + void onPowerModeChanged(const PowerState currentState, const PowerState newState); void registerEventHandlers(); static HdmiCecSourceImplementation* _instance; CECDeviceInfo_2 deviceList[16]; @@ -239,7 +239,7 @@ namespace WPEFramework { ~PowerManagerNotification() override = default; public: - void OnPowerModeChanged(const PowerState ¤tState, const PowerState &newState) override + void OnPowerModeChanged(const PowerState currentState, const PowerState newState) override { _parent.onPowerModeChanged(currentState, newState); } From 2a859d3da652a2ce6718d8bf678ecf73a6d2643f Mon Sep 17 00:00:00 2001 From: apatel859 Date: Mon, 14 Apr 2025 13:13:12 +0000 Subject: [PATCH 4/4] 1.0.8 release change log updates --- CHANGELOG.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a6373fe..d86e146b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,15 +4,22 @@ 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.0.8](https://github.com/rdkcentral/entservices-inputoutput/compare/1.0.7...1.0.8) + +- RDK-57093: Update Plugin Clients to use update Power manager interface [`#39`](https://github.com/rdkcentral/entservices-inputoutput/pull/39) +- Merge tag '1.0.7' into develop [`ac5ef43`](https://github.com/rdkcentral/entservices-inputoutput/commit/ac5ef4349be7cb05477dfbe9785aa1a60d1293a1) + #### [1.0.7](https://github.com/rdkcentral/entservices-inputoutput/compare/1.0.6...1.0.7) +> 11 April 2025 + - RDKEMW-3359:HdmiCecSink RDK-V to RDK-E sync changes [`#48`](https://github.com/rdkcentral/entservices-inputoutput/pull/48) - Update run_peru.sh by removing secrets [`#47`](https://github.com/rdkcentral/entservices-inputoutput/pull/47) - RDK-55408: RDKE Services L2 Test Suite Development [`#30`](https://github.com/rdkcentral/entservices-inputoutput/pull/30) - RDKEMW-2208 and RDKEMW-2209 Enabling L1 and L2 tests for entservices-inputoutput repo [`#25`](https://github.com/rdkcentral/entservices-inputoutput/pull/25) +- 1.0.7 release change log updates [`65465ee`](https://github.com/rdkcentral/entservices-inputoutput/commit/65465ee6c7cc800f3639a616209560ba800a3173) - Enabling workflow for L1 and L2 [`4049a2e`](https://github.com/rdkcentral/entservices-inputoutput/commit/4049a2eb188efede1c1547be50847d29ddcb9e03) - Merge tag '1.0.6' into develop [`f46b084`](https://github.com/rdkcentral/entservices-inputoutput/commit/f46b084ed21e61d89e20868eacdea4ba8198266d) -- Added L2-test.yml [`a199266`](https://github.com/rdkcentral/entservices-inputoutput/commit/a1992664c3dfc807fbb7bceb32b30e8dbe78f305) #### [1.0.6](https://github.com/rdkcentral/entservices-inputoutput/compare/1.0.5...1.0.6)