diff --git a/CHANGELOG.md b/CHANGELOG.md index 74c35ec5..c5dc9e7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,34 @@ 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.21](https://github.com/rdkcentral/devicesettings/compare/1.0.21...1.0.21) +#### [1.0.25](https://github.com/rdkcentral/devicesettings/compare/1.0.24...1.0.25) + +- Feature/rdkemw 7496 [`#134`](https://github.com/rdkcentral/devicesettings/pull/134) +- Merge tag '1.0.24' into develop [`4e94421`](https://github.com/rdkcentral/devicesettings/commit/4e94421d193d4d5e7dea28ccf49198c7dc2bf1d4) + +#### [1.0.24](https://github.com/rdkcentral/devicesettings/compare/1.0.23...1.0.24) + +> 14 November 2025 + +- RDKEMW-10107: Speaker volume level do not persist after reboot [`#169`](https://github.com/rdkcentral/devicesettings/pull/169) +- 1.0.24 release change log updates [`11fb90e`](https://github.com/rdkcentral/devicesettings/commit/11fb90e0cbc4bfde54a426547aa6f0f74374b590) +- Merge tag '1.0.23' into develop [`0fa742c`](https://github.com/rdkcentral/devicesettings/commit/0fa742ce90128f321551ecd9007fbc83a8ef9202) + +#### [1.0.23](https://github.com/rdkcentral/devicesettings/compare/1.0.22...1.0.23) + +> 10 November 2025 + +- RDKEMW-9408: Refactored the code to avoid duplicated lines [`#160`](https://github.com/rdkcentral/devicesettings/pull/160) +- 1.0.23 release change log updates [`7659e1f`](https://github.com/rdkcentral/devicesettings/commit/7659e1f4e0a241bec376b2ba945b9af9b9517fcb) +- Merge tag '1.0.22' into develop [`07dfc36`](https://github.com/rdkcentral/devicesettings/commit/07dfc36c5451cec8841e06746f4c234189c0d127) + +#### [1.0.22](https://github.com/rdkcentral/devicesettings/compare/1.0.21...1.0.22) + +> 15 October 2025 - RDKEMW-9411:TV information not telemetry friendly [`#163`](https://github.com/rdkcentral/devicesettings/pull/163) - Update CODEOWNERS [`#161`](https://github.com/rdkcentral/devicesettings/pull/161) +- 1.0.22 release change log updates [`828258b`](https://github.com/rdkcentral/devicesettings/commit/828258b4c1fbc4385b2437b845d754e7ab0dce05) - Merge tag '1.0.21' into develop [`2c97d46`](https://github.com/rdkcentral/devicesettings/commit/2c97d46c936691b45c3265b05da65976ddb6aef0) #### [1.0.21](https://github.com/rdkcentral/devicesettings/compare/1.0.20...1.0.21) @@ -23,10 +47,21 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - 1.0.21 release change log updates [`e2e586c`](https://github.com/rdkcentral/devicesettings/commit/e2e586cb43068363fd7a8236f97ba7b760e31e8e) - Merge tag '1.0.20' into develop [`b8246d2`](https://github.com/rdkcentral/devicesettings/commit/b8246d21e1fdd0774739553db5cc576a0df10399) -#### [1.0.20](https://github.com/rdkcentral/devicesettings/compare/1.0.19...1.0.20) +#### [1.0.20](https://github.com/rdkcentral/devicesettings/compare/1.0.20-hotfix.2...1.0.20) > 17 September 2025 +#### [1.0.20-hotfix.2](https://github.com/rdkcentral/devicesettings/compare/1.0.20-hotfix.1...1.0.20-hotfix.2) + +> 5 November 2025 + +- RDKEMW-9411:TV information not telemetry friendly [`#163`](https://github.com/rdkcentral/devicesettings/pull/163) + +#### [1.0.20-hotfix.1](https://github.com/rdkcentral/devicesettings/compare/1.0.19...1.0.20-hotfix.1) + +> 29 October 2025 + +- RDKEMW-8665: Init time reference for cond wait API call [`#156`](https://github.com/rdkcentral/devicesettings/pull/156) - RDKEMW-7967: Adding retry logic for dsFPInit [`#144`](https://github.com/rdkcentral/devicesettings/pull/144) - RDKEMW-6149: Implementation of IARM libds event notification APIs [`#121`](https://github.com/rdkcentral/devicesettings/pull/121) - 1.0.20 release change log updates [`8c82428`](https://github.com/rdkcentral/devicesettings/commit/8c82428087b9221d7d46af2baef470c541cb3827) @@ -91,10 +126,16 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - 1.0.13 release change log updates [`46313cd`](https://github.com/rdkcentral/devicesettings/commit/46313cdef42716cfec368f6dd8a71508dd9773ba) - RDKEMW-4128 Coverity Integration [`d6306c5`](https://github.com/rdkcentral/devicesettings/commit/d6306c5712f7212794cd29994dd1dda5091bf81d) -#### [1.0.12](https://github.com/rdkcentral/devicesettings/compare/1.0.12-hotfix.3...1.0.12) +#### [1.0.12](https://github.com/rdkcentral/devicesettings/compare/1.0.12-hotfix.4...1.0.12) > 11 June 2025 +#### [1.0.12-hotfix.4](https://github.com/rdkcentral/devicesettings/compare/1.0.12-hotfix.3...1.0.12-hotfix.4) + +> 15 October 2025 + +- Update dsDisplay.c [`#166`](https://github.com/rdkcentral/devicesettings/pull/166) + #### [1.0.12-hotfix.3](https://github.com/rdkcentral/devicesettings/compare/1.0.12-hotfix.2...1.0.12-hotfix.3) > 11 September 2025 diff --git a/rpc/srv/dsAudio.c b/rpc/srv/dsAudio.c index b41b8874..7d085ffd 100755 --- a/rpc/srv/dsAudio.c +++ b/rpc/srv/dsAudio.c @@ -60,7 +60,6 @@ static bool m_MS12DAPV2Enabled = 0; static bool m_MS12DEEnabled = 0; static bool m_LEEnabled = 0; static int m_volumeDuckingLevel = 0; -static float m_volumeLevel = 0; static int m_MuteStatus = false; static int m_isDuckingInProgress = false; static bool m_AudioPortEnabled[dsAUDIOPORT_TYPE_MAX] = {false}; @@ -83,6 +82,8 @@ dsAudioStereoMode_t _srv_HDMI_Audiomode = dsAUDIO_STEREO_STEREO; dsAudioStereoMode_t _srv_SPDIF_Audiomode = dsAUDIO_STEREO_STEREO; dsAudioStereoMode_t _srv_HDMI_ARC_Audiomode = dsAUDIO_STEREO_STEREO; #endif +int _srv_AudioSPEAKERAuto = 1; +dsAudioStereoMode_t _srv_SPEAKER_Audiomode = dsAUDIO_STEREO_SURROUND; #ifdef DS_AUDIO_SETTINGS_PERSISTENCE static std::atomic persist_audioLevel_timer_threadIsAlive = ATOMIC_VAR_INIT(false); @@ -351,7 +352,6 @@ void AudioConfigInit() audioLevel_cache_spdif = m_audioLevel; if (dsSetAudioLevelFunc(handle, m_audioLevel) == dsERR_NONE) { INT_INFO("Port %s: Initialized audio level : %f\n","SPDIF0", m_audioLevel); - m_volumeLevel = m_audioLevel; } } //SPEAKER init @@ -372,7 +372,6 @@ void AudioConfigInit() m_audioLevel = atof(_AudioLevel.c_str()); audioLevel_cache_speaker = m_audioLevel; if (dsSetAudioLevelFunc(handle, m_audioLevel) == dsERR_NONE) { - m_volumeLevel = m_audioLevel; INT_INFO("Port %s: Initialized audio level : %f\n","SPEAKER0", m_audioLevel); } } @@ -416,7 +415,6 @@ void AudioConfigInit() audioLevel_cache_hdmi = m_audioLevel; if (dsSetAudioLevelFunc(handle, m_audioLevel) == dsERR_NONE) { INT_INFO("Port %s: Initialized audio level : %f\n","HDMI0", m_audioLevel); - m_volumeLevel = m_audioLevel; } } @@ -2209,6 +2207,22 @@ IARM_Result_t dsAudioMgr_init() } } + std::string _SPEAKERAudioModeAuto("TRUE"); + + try { + _SPEAKERAudioModeAuto = device::HostPersistence::getInstance().getProperty("SPEAKER0.AudioMode.AUTO"); + } + catch(...) { + try { + INT_DEBUG("SPEAKER0.AudioMode.AUTO not found in persistence store. Try system default\n"); + _SPEAKERAudioModeAuto = device::HostPersistence::getInstance().getDefaultProperty("SPEAKER0.AudioMode.AUTO"); + } + catch(...) { + _SPEAKERAudioModeAuto = "TRUE"; + } + } + + if(_AudioModeAuto.compare("TRUE") == 0) { _srv_AudioHDMIAuto = 1; @@ -2233,10 +2247,17 @@ IARM_Result_t dsAudioMgr_init() { _srv_AudioSPDIFAuto = 0; } + if (_SPEAKERAudioModeAuto.compare("TRUE") == 0){ + _srv_AudioSPEAKERAuto = 1; + } + else if (_SPEAKERAudioModeAuto.compare("FALSE") == 0){ + _srv_AudioSPEAKERAuto = 0; + } - INT_DEBUG("The HDMI Audio Auto Setting on startup is %s \r\n",_AudioModeAuto.c_str()); - INT_DEBUG("The HDMI ARC Audio Auto Setting on startup is %s \r\n",_ARCAudioModeAuto.c_str()); - INT_DEBUG("The SPDIF Audio Auto Setting on startup is %s \r\n",_SPDIFAudioModeAuto.c_str()); + INT_INFO("The HDMI Audio Auto Setting on startup is %s \r\n",_AudioModeAuto.c_str()); + INT_INFO("The HDMI ARC Audio Auto Setting on startup is %s \r\n",_ARCAudioModeAuto.c_str()); + INT_INFO("The SPDIF Audio Auto Setting on startup is %s \r\n",_SPDIFAudioModeAuto.c_str()); + INT_INFO("The SPEAKER Audio Auto Setting on startup is %s \r\n",_SPEAKERAudioModeAuto.c_str()); /* Get the AudioModesettings for SPDIF from Persistence */ std::string _SPDIFModeSettings("STEREO"); _SPDIFModeSettings = device::HostPersistence::getInstance().getProperty("SPDIF0.AudioMode",_SPDIFModeSettings); @@ -2253,23 +2274,50 @@ IARM_Result_t dsAudioMgr_init() { _srv_SPDIF_Audiomode = dsAUDIO_STEREO_STEREO; } - /* Get the AudioModesettings for HDMI_ARC from Persistence */ - std::string _ARCModeSettings("STEREO"); - _ARCModeSettings = device::HostPersistence::getInstance().getProperty("HDMI_ARC0.AudioMode",_ARCModeSettings); - INT_DEBUG("The HDMI ARC Audio Mode Setting on startup is %s \r\n",_ARCModeSettings.c_str()); - if (_ARCModeSettings.compare("SURROUND") == 0) - { - _srv_HDMI_ARC_Audiomode = dsAUDIO_STEREO_SURROUND; - } - else if (_ARCModeSettings.compare("PASSTHRU") == 0) - { - _srv_HDMI_ARC_Audiomode = dsAUDIO_STEREO_PASSTHRU; - } - else - { - _srv_HDMI_ARC_Audiomode = dsAUDIO_STEREO_STEREO; - } - } + /* Get the AudioModesettings for HDMI_ARC from Persistence */ + std::string _ARCModeSettings("STEREO"); + _ARCModeSettings = device::HostPersistence::getInstance().getProperty("HDMI_ARC0.AudioMode",_ARCModeSettings); + INT_DEBUG("The HDMI ARC Audio Mode Setting on startup is %s \r\n",_ARCModeSettings.c_str()); + if (_ARCModeSettings.compare("SURROUND") == 0) + { + _srv_HDMI_ARC_Audiomode = dsAUDIO_STEREO_SURROUND; + } + else if (_ARCModeSettings.compare("PASSTHRU") == 0) + { + _srv_HDMI_ARC_Audiomode = dsAUDIO_STEREO_PASSTHRU; + } + else + { + _srv_HDMI_ARC_Audiomode = dsAUDIO_STEREO_STEREO; + } + + std::string _SPEAKERModeSettings("SURROUND"); + + try{ + _SPEAKERModeSettings = device::HostPersistence::getInstance().getProperty("SPEAKER0.AudioMode",_SPEAKERModeSettings); + INT_DEBUG("The SPEAKER Audio Mode Setting on startup is %s \r\n",_SPEAKERModeSettings.c_str()); + } + catch(...){ + _SPEAKERModeSettings = "SURROUND"; + } + + if (_SPEAKERModeSettings.compare("SURROUND") == 0) + { + _srv_SPEAKER_Audiomode = dsAUDIO_STEREO_SURROUND; + } + else if (_SPEAKERModeSettings.compare("PASSTHRU") == 0) + { + _srv_SPEAKER_Audiomode = dsAUDIO_STEREO_PASSTHRU; + } + else if (_SPEAKERModeSettings.compare("STEREO") == 0) + { + _srv_SPEAKER_Audiomode = dsAUDIO_STEREO_STEREO; + } + else + { + _srv_SPEAKER_Audiomode = dsAUDIO_STEREO_SURROUND; + } + } catch(...) { INT_INFO("Exception in Getting the Audio settings on Startup..... \r\n"); @@ -2506,6 +2554,12 @@ IARM_Result_t _dsGetStereoMode(void *arg) } param->mode = stereoMode; } + else if (_APortType == dsAUDIOPORT_TYPE_SPEAKER) { + ret = dsGetStereoMode(param->handle, ¶m->mode); + if(ret == dsERR_NONE) { + result = IARM_RESULT_SUCCESS; + } + } else { if (_APortType == dsAUDIOPORT_TYPE_SPDIF) { @@ -2580,6 +2634,14 @@ IARM_Result_t _dsSetStereoMode(void *arg) _srv_HDMI_ARC_Audiomode = dsAUDIO_STEREO_STEREO; } + else if (_APortType == dsAUDIOPORT_TYPE_SPEAKER) + { + if (param->toPersist){ + device::HostPersistence::getInstance().persistHostProperty("SPEAKER0.AudioMode","STEREO"); + } + _srv_SPEAKER_Audiomode = dsAUDIO_STEREO_STEREO; + } + eventData.data.Audioport.mode = dsAUDIO_STEREO_STEREO; eventData.data.Audioport.type = _APortType; IARM_Bus_BroadcastEvent(IARM_BUS_DSMGR_NAME,(IARM_EventId_t)IARM_BUS_DSMGR_EVENT_AUDIO_MODE,(void *)&eventData, sizeof(eventData)); @@ -2610,6 +2672,13 @@ IARM_Result_t _dsSetStereoMode(void *arg) _srv_HDMI_ARC_Audiomode = dsAUDIO_STEREO_SURROUND; } + else if (_APortType == dsAUDIOPORT_TYPE_SPEAKER) + { + if (param->toPersist){ + device::HostPersistence::getInstance().persistHostProperty("SPEAKER0.AudioMode","SURROUND"); + } + _srv_SPEAKER_Audiomode = dsAUDIO_STEREO_SURROUND; + } eventData.data.Audioport.mode = dsAUDIO_STEREO_SURROUND; eventData.data.Audioport.type = _APortType; @@ -2626,6 +2695,14 @@ IARM_Result_t _dsSetStereoMode(void *arg) _srv_HDMI_Audiomode = dsAUDIO_STEREO_DD; } + else if (_APortType == dsAUDIOPORT_TYPE_SPEAKER) + { + if (param->toPersist){ + device::HostPersistence::getInstance().persistHostProperty("SPEAKER0.AudioMode","DOLBYDIGITAL"); + } + _srv_SPEAKER_Audiomode = dsAUDIO_STEREO_DD; + } + eventData.data.Audioport.mode = dsAUDIO_STEREO_DD; eventData.data.Audioport.type = _APortType; IARM_Bus_BroadcastEvent(IARM_BUS_DSMGR_NAME,(IARM_EventId_t)IARM_BUS_DSMGR_EVENT_AUDIO_MODE,(void *)&eventData, sizeof(eventData)); @@ -2641,6 +2718,14 @@ IARM_Result_t _dsSetStereoMode(void *arg) _srv_HDMI_Audiomode = dsAUDIO_STEREO_DDPLUS; } + else if (_APortType == dsAUDIOPORT_TYPE_SPEAKER) + { + if (param->toPersist){ + device::HostPersistence::getInstance().persistHostProperty("SPEAKER0.AudioMode","DOLBYDIGITALPLUS"); + } + _srv_SPEAKER_Audiomode = dsAUDIO_STEREO_DDPLUS; + } + eventData.data.Audioport.mode = dsAUDIO_STEREO_DDPLUS; eventData.data.Audioport.type = _APortType; IARM_Bus_BroadcastEvent(IARM_BUS_DSMGR_NAME,(IARM_EventId_t)IARM_BUS_DSMGR_EVENT_AUDIO_MODE,(void *)&eventData, sizeof(eventData)); @@ -2668,6 +2753,13 @@ IARM_Result_t _dsSetStereoMode(void *arg) _srv_HDMI_ARC_Audiomode = dsAUDIO_STEREO_PASSTHRU; } + else if (_APortType == dsAUDIOPORT_TYPE_SPEAKER) + { + if (param->toPersist){ + device::HostPersistence::getInstance().persistHostProperty("SPEAKER0.AudioMode","PASSTHRU"); + } + _srv_SPEAKER_Audiomode = dsAUDIO_STEREO_PASSTHRU; + } eventData.data.Audioport.mode = dsAUDIO_STEREO_PASSTHRU; eventData.data.Audioport.type = _APortType; @@ -2712,6 +2804,9 @@ IARM_Result_t _dsGetStereoAuto(void *arg) else if (_APortType == dsAUDIOPORT_TYPE_SPDIF) { param->autoMode = _srv_AudioSPDIFAuto ? 1 : 0; } + else if (_APortType == dsAUDIOPORT_TYPE_SPEAKER) { + param->autoMode = _srv_AudioSPEAKERAuto ? 1 : 0; + } } IARM_BUS_Unlock(lock); @@ -2746,6 +2841,10 @@ IARM_Result_t _dsSetStereoAuto(void *arg) _srv_AudioSPDIFAuto = param->autoMode; break; + case dsAUDIOPORT_TYPE_SPEAKER: + device::HostPersistence::getInstance().persistHostProperty("SPEAKER0.AudioMode.AUTO", param->autoMode ? "TRUE" : "FALSE"); + _srv_AudioSPEAKERAuto = param->autoMode; + break; default: break; } @@ -2790,28 +2889,36 @@ IARM_Result_t _dsSetAudioDucking(void *arg) IARM_BUS_Lock(lock); int volume = 0; + float volumeLevel = 0; bool portEnabled = false; dsAudioSetDuckingParam_t *param = (dsAudioSetDuckingParam_t *)arg; IARM_Bus_DSMgr_EventData_t eventData; - INT_DEBUG("%s action : %d type :%d val :%d m_volumeLevel:%f \n",__FUNCTION__,param->action,param->type,param->level,m_volumeLevel ); + INT_DEBUG("%s action : %d type :%d val :%d \n",__FUNCTION__,param->action,param->type,param->level); dsError_t ret = dsIsAudioPortEnabled(param->handle, &portEnabled); if (ret != dsERR_NONE) { INT_INFO("%s failed dsIsAudioPortEnabled\n",__FUNCTION__); } + ret = dsGetAudioLevel (param->handle, &volumeLevel); + if (ret != dsERR_NONE) { + INT_ERROR("%s failed dsGetAudioLevel\n",__FUNCTION__); + } + + INT_DEBUG("%s volumeLevel:%f \n",__FUNCTION__, volumeLevel); + if(param->action == dsAUDIO_DUCKINGACTION_START) { m_isDuckingInProgress = true; if(param->type == dsAUDIO_DUCKINGTYPE_RELATIVE ) { - volume = (m_volumeLevel * param->level) / 100; + volume = (volumeLevel * param->level) / 100; } else { - if(param->level > m_volumeLevel) + if(param->level > volumeLevel) { - volume = m_volumeLevel; + volume = volumeLevel; } else { @@ -2822,7 +2929,7 @@ IARM_Result_t _dsSetAudioDucking(void *arg) else { m_isDuckingInProgress = false; - volume = m_volumeLevel; + volume = volumeLevel; } if(m_MuteStatus || !portEnabled) @@ -3113,11 +3220,9 @@ IARM_Result_t _dsSetAudioLevel(void *arg) if(m_isDuckingInProgress && currlevel != m_volumeDuckingLevel ) { dsSetAudioLevelFunc(param->handle, m_volumeDuckingLevel); - m_volumeLevel = (int) param->level; } else if (m_isDuckingInProgress || dsSetAudioLevelFunc(param->handle, param->level) == dsERR_NONE) { - m_volumeLevel = (int) param->level; result = IARM_RESULT_SUCCESS; } } else if( dsSetAudioLevelFunc(param->handle, param->level) == dsERR_NONE) { @@ -3190,7 +3295,11 @@ static IARM_Result_t setAudioDuckingAudioLevel(intptr_t handle) } else { - volume = m_volumeLevel; + dsError_t ret = dsGetAudioLevel (handle, &volume); + if (ret != dsERR_NONE) { + INT_ERROR("%s dsGetAudioLevel\n",__FUNCTION__); + } + INT_DEBUG("%s: audio level %f\n", __FUNCTION__, volume); } if (dsSetAudioLevelFunc == 0) { @@ -6239,10 +6348,20 @@ static void _GetAudioModeFromPersistent(void *arg) } INT_INFO("The HDMI Audio Mode Setting From Persistent is %s \r\n",_AudioModeSettings.c_str()); } - else if (_APortType == dsAUDIOPORT_TYPE_HDMI_ARC){ - _AudioModeSettings = device::HostPersistence::getInstance().getProperty("HDMI_ARC0.AudioMode",_AudioModeSettings); - INT_INFO("The HDMI_ARC Audio Mode Setting From Persistent is %s \r\n",_AudioModeSettings.c_str()); - } + else if (_APortType == dsAUDIOPORT_TYPE_HDMI_ARC){ + _AudioModeSettings = device::HostPersistence::getInstance().getProperty("HDMI_ARC0.AudioMode",_AudioModeSettings); + INT_INFO("The HDMI_ARC Audio Mode Setting From Persistent is %s \r\n",_AudioModeSettings.c_str()); + } + else if(_APortType == dsAUDIOPORT_TYPE_SPEAKER){ + try{ + _AudioModeSettings = device::HostPersistence::getInstance().getProperty("SPEAKER0.AudioMode",_AudioModeSettings); + } + catch(...){ + INT_INFO("SPEAKER0.AudioMode Not in persistent"); + _AudioModeSettings = "SURROUND"; + } + INT_INFO("The SPEAKER Audio Mode Setting From Persistent is %s \r\n",_AudioModeSettings.c_str()); + } if (_AudioModeSettings.compare("SURROUND") == 0) { diff --git a/rpc/srv/dsHdmiIn.c b/rpc/srv/dsHdmiIn.c index e4b66ca6..7b8693be 100755 --- a/rpc/srv/dsHdmiIn.c +++ b/rpc/srv/dsHdmiIn.c @@ -89,6 +89,7 @@ static tv_hdmi_edid_version_t m_edidversion[dsHDMI_IN_PORT_MAX]; static bool m_edidallmsupport[dsHDMI_IN_PORT_MAX]; static bool m_vrrsupport[dsHDMI_IN_PORT_MAX]; static bool m_hdmiPortVrrCaps[dsHDMI_IN_PORT_MAX]; +static uint8_t noOfSupportedHdmiInputs; IARM_Result_t dsHdmiInMgr_init(); IARM_Result_t dsHdmiInMgr_term(); IARM_Result_t _dsHdmiInInit(void *arg); @@ -278,27 +279,25 @@ static dsError_t setEdidVersion (dsHdmiInPort_t iHdmiPort, tv_hdmi_edid_version_ if (0 != dsSetEdidVersionFunc) { eRet = dsSetEdidVersionFunc (iHdmiPort, iEdidVersion); if (eRet == dsERR_NONE) { - switch (iHdmiPort) { - case dsHDMI_IN_PORT_0: - device::HostPersistence::getInstance().persistHostProperty("HDMI0.edidversion", edidVer); - INT_DEBUG("Port %s: Persist EDID Version: %d\n", "HDMI0", iEdidVersion); - break; - case dsHDMI_IN_PORT_1: - device::HostPersistence::getInstance().persistHostProperty("HDMI1.edidversion", edidVer); - INT_DEBUG("Port %s: Persist EDID Version: %d\n", "HDMI1", iEdidVersion); - break; - case dsHDMI_IN_PORT_2: - device::HostPersistence::getInstance().persistHostProperty("HDMI2.edidversion", edidVer); - INT_DEBUG("Port %s: Persist EDID Version: %d\n", "HDMI2", iEdidVersion); - break; + int port_no = (int)iHdmiPort; + if((port_no >= 0) && (port_no < noOfSupportedHdmiInputs)) + { + std::string port_edidVer = "HDMI"+std::to_string(port_no)+".edidversion"; + device::HostPersistence::getInstance().persistHostProperty(port_edidVer, edidVer); + INT_INFO("Port HDMI%d: Persist EDID Version: %d\n", port_no, iEdidVersion); + } + else + { + INT_INFO("Invalid port number to update in persistence\n"); + } + + // Whenever there is a change in edid version to 2.0, ensure the edid allm and vrr support is updated with latest value + if(iEdidVersion == HDMI_EDID_VER_20) + { + INT_INFO("As the version is changed to 2.0, we are updating the allm and vrr bit in edid\n"); + setEdid2AllmSupport(iHdmiPort,m_edidallmsupport[iHdmiPort]); + setVRRSupport(iHdmiPort,m_vrrsupport[iHdmiPort]); } - // Whenever there is a change in edid version to 2.0, ensure the edid allm support and edid vrr support is updated with latest value - if(iEdidVersion == HDMI_EDID_VER_20) - { - INT_INFO("As the version is changed to 2.0, we are updating the allm bit and the vrr bit in edid\n"); - setEdid2AllmSupport(iHdmiPort,m_edidallmsupport[iHdmiPort]); - setVRRSupport(iHdmiPort,m_vrrsupport[iHdmiPort]); - } } INT_INFO("[srv] %s: dsSetEdidVersionFunc eRet: %d \r\n", __FUNCTION__, eRet); } @@ -669,7 +668,11 @@ IARM_Result_t _dsHdmiInInit(void *arg) int itr = 0; bool isARCCapable = false; - for (itr = 0; itr < dsHDMI_IN_PORT_MAX; itr++) { + + dsHdmiInGetNumberOfInputs(&noOfSupportedHdmiInputs); + INT_INFO("Number of Inputs:%d \n",noOfSupportedHdmiInputs); + + for (itr = 0; itr < noOfSupportedHdmiInputs; itr++) { isARCCapable = false; isHdmiARCPort (itr, &isARCCapable); hdmiInCap_gs.isPortArcCapable[itr] = isARCCapable; @@ -677,157 +680,85 @@ IARM_Result_t _dsHdmiInInit(void *arg) // Getting the edidallmEnable value from persistence upon bootup std::string _EdidAllmSupport("TRUE"); - try { - _EdidAllmSupport = device::HostPersistence::getInstance().getProperty("HDMI0.edidallmEnable"); - if(_EdidAllmSupport == "TRUE") - m_edidallmsupport[dsHDMI_IN_PORT_0] = true; - else - m_edidallmsupport[dsHDMI_IN_PORT_0] = false; - - INT_INFO("Port %s: _EdidAllmSupport: %s , m_edidallmsupport: %d\n", "HDMI0", _EdidAllmSupport.c_str(), m_edidallmsupport[0]); - } - catch(...) { - INT_INFO("Port %s: Exception in Getting the HDMI0 EDID allm support from persistence storage..... \r\n", "HDMI0"); - m_edidallmsupport[dsHDMI_IN_PORT_0] = true; - } - - try { - _EdidAllmSupport = device::HostPersistence::getInstance().getProperty("HDMI1.edidallmEnable"); - if(_EdidAllmSupport == "TRUE") - m_edidallmsupport[dsHDMI_IN_PORT_1] = true; - else - m_edidallmsupport[dsHDMI_IN_PORT_1] = false; - - INT_INFO("Port %s: _EdidAllmSupport: %s , m_edidallmsupport: %d\n", "HDMI1", _EdidAllmSupport.c_str(), m_edidallmsupport[1]); - } - catch(...) { - INT_INFO("Port %s: Exception in Getting the HDMI1 EDID allm support from persistence storage..... \r\n", "HDMI1"); - m_edidallmsupport[dsHDMI_IN_PORT_1] = true; - } - - try { - _EdidAllmSupport = device::HostPersistence::getInstance().getProperty("HDMI2.edidallmEnable"); - if(_EdidAllmSupport == "TRUE") - m_edidallmsupport[dsHDMI_IN_PORT_2] = true; - else - m_edidallmsupport[dsHDMI_IN_PORT_2] = false; - INT_INFO("Port %s: _EdidAllmSupport: %s , m_edidallmsupport: %d\n", "HDMI2", _EdidAllmSupport.c_str(), m_edidallmsupport[2]); - } - catch(...) { - INT_INFO("Port %s: Exception in Getting the HDMI2 EDID allm support from persistence storage..... \r\n", "HDMI2"); - m_edidallmsupport[dsHDMI_IN_PORT_2] = true; - } - // Getting the edidvrrEnable value from persistence upon bootup - std::string _VRRSupport("TRUE"); - try { - _VRRSupport = device::HostPersistence::getInstance().getProperty("HDMI0.vrrEnable"); - if(_VRRSupport == "TRUE") - m_vrrsupport[dsHDMI_IN_PORT_0] = true; - else - m_vrrsupport[dsHDMI_IN_PORT_0] = false; - - INT_INFO("Port %s: _VRRSupport: %s , m_vrrsupport: %d\n", "HDMI0", _VRRSupport.c_str(), m_vrrsupport[0]); - } - catch(...) { - INT_INFO("Port %s: Exception in Getting the HDMI0 EDID VRR support from persistence storage..... \r\n", "HDMI0"); - m_vrrsupport[dsHDMI_IN_PORT_0] = false; - } - - try { - _VRRSupport = device::HostPersistence::getInstance().getProperty("HDMI1.vrrEnable"); - if(_VRRSupport == "TRUE") - m_vrrsupport[dsHDMI_IN_PORT_1] = true; - else - m_vrrsupport[dsHDMI_IN_PORT_1] = false; - - INT_INFO("Port %s: _VRRSupport: %s , m_vrrsupport: %d\n", "HDMI1", _VRRSupport.c_str(), m_vrrsupport[1]); - } - catch(...) { - INT_INFO("Port %s: Exception in Getting the HDMI1 EDID VRR support from persistence storage..... \r\n", "HDMI1"); - m_vrrsupport[dsHDMI_IN_PORT_1] = false; - } - - try { - _VRRSupport = device::HostPersistence::getInstance().getProperty("HDMI2.vrrEnable"); - if(_VRRSupport == "TRUE") - m_vrrsupport[dsHDMI_IN_PORT_2] = true; - else - m_vrrsupport[dsHDMI_IN_PORT_2] = false; - - INT_INFO("Port %s: _vrrSupport: %s , m_vrrsupport: %d\n", "HDMI2", _VRRSupport.c_str(), m_vrrsupport[2]); - } - catch(...) { - INT_INFO("Port %s: Exception in Getting the HDMI2 EDID VRR support from persistence storage..... \r\n", "HDMI2"); - m_vrrsupport[dsHDMI_IN_PORT_2] = true; - } - try { - _VRRSupport = device::HostPersistence::getInstance().getProperty("HDMI3.vrrEnable"); - if(_VRRSupport == "TRUE") - m_vrrsupport[dsHDMI_IN_PORT_3] = true; - else - m_vrrsupport[dsHDMI_IN_PORT_3] = false; - - INT_INFO("Port %s: _vrrSupport: %s , m_vrrsupport: %d\n", "HDMI3", _VRRSupport.c_str(), m_vrrsupport[3]); - } - catch(...) { - INT_INFO("Port %s: Exception in Getting the HDMI3 EDID VRR support from persistence storage..... \r\n", "HDMI3"); - m_vrrsupport[dsHDMI_IN_PORT_3] = true; - } - - std::string _EdidVersion("1"); - try { - _EdidVersion = device::HostPersistence::getInstance().getProperty("HDMI0.edidversion"); - m_edidversion[dsHDMI_IN_PORT_0] = static_cast(atoi (_EdidVersion.c_str())); - } - catch(...) { + for (int i = 0 ; i < noOfSupportedHdmiInputs; i++) + { + std::string port_edidAllmSupport = "HDMI"+std::to_string(i)+".edidallmEnable"; try { - INT_INFO("Port %s: Exception in Getting the HDMI0 EDID version from persistence storage. Try system default...\r\n", "HDMI0"); - _EdidVersion = device::HostPersistence::getInstance().getDefaultProperty("HDMI0.edidversion"); - m_edidversion[dsHDMI_IN_PORT_0] = static_cast(atoi (_EdidVersion.c_str())); - } + _EdidAllmSupport = device::HostPersistence::getInstance().getProperty(port_edidAllmSupport); + if(_EdidAllmSupport == "TRUE") + m_edidallmsupport[i] = true; + else + m_edidallmsupport[i] = false; + } catch(...) { - INT_INFO("Port %s: Exception in Getting the HDMI0 EDID version from system default..... \r\n", "HDMI0"); - m_edidversion[dsHDMI_IN_PORT_0] = HDMI_EDID_VER_20; + try { + INT_INFO("Port %d: Exception in Getting the HDMI%d EDID allm support from persistence storage. Try system default...\r\n", i,i); + _EdidAllmSupport = device::HostPersistence::getInstance().getDefaultProperty(port_edidAllmSupport); + if(_EdidAllmSupport == "TRUE") + m_edidallmsupport[i] = true; + else + m_edidallmsupport[i] = false; } + catch(...) { + INT_INFO("Port %d: Exception in Getting the HDMI%d EDID allm support from system default..... \r\n", i,i); + m_edidallmsupport[i] = true; + } } } - try { - _EdidVersion = device::HostPersistence::getInstance().getProperty("HDMI1.edidversion"); - m_edidversion[dsHDMI_IN_PORT_1] = static_cast(atoi (_EdidVersion.c_str())); - } - catch(...) { + + std::string _EdidVersion("1"); + for (int i = 0 ; i < noOfSupportedHdmiInputs; i++) + { + std::string port_edidVer = "HDMI"+std::to_string(i)+".edidversion"; try { - INT_INFO("Port %s: Exception in Getting the HDMI1 EDID version from persistence storage. Try system default...\r\n", "HDMI1"); - _EdidVersion = device::HostPersistence::getInstance().getDefaultProperty("HDMI1.edidversion"); - m_edidversion[dsHDMI_IN_PORT_1] = static_cast(atoi (_EdidVersion.c_str())); + _EdidVersion = device::HostPersistence::getInstance().getProperty(port_edidVer); + m_edidversion[i] = static_cast(atoi (_EdidVersion.c_str())); } catch(...) { - INT_INFO("Port %s: Exception in Getting the HDMI1 EDID version from system default..... \r\n", "HDMI1"); - m_edidversion[dsHDMI_IN_PORT_1] = HDMI_EDID_VER_20; + try { + INT_INFO("Port %d: Exception in Getting the HDMI%d EDID version from persistence storage. Try system default...\r\n", i,i); + _EdidVersion = device::HostPersistence::getInstance().getDefaultProperty(port_edidVer); + m_edidversion[i] = static_cast(atoi (_EdidVersion.c_str())); + } + catch(...) { + INT_INFO("Port %d: Exception in Getting the HDMI%d EDID version from system default..... \r\n", i,i); + m_edidversion[i] = HDMI_EDID_VER_20; + } } } - try { - _EdidVersion = device::HostPersistence::getInstance().getProperty("HDMI2.edidversion"); - m_edidversion[dsHDMI_IN_PORT_2] = static_cast((atoi (_EdidVersion.c_str()))); - } - catch(...) { + + // Getting the edidvrrEnable value from persistence upon bootup + std::string _VRRSupport("TRUE"); + + for (int i = 0 ; i < noOfSupportedHdmiInputs; i++) + { + std::string port_vrrSupport = "HDMI"+std::to_string(i)+".vrrEnable"; try { - INT_INFO("Port %s: Exception in Getting the HDMI2 EDID version from persistence storage. Try system default...\r\n", "HDMI2"); - _EdidVersion = device::HostPersistence::getInstance().getDefaultProperty("HDMI2.edidversion"); - m_edidversion[dsHDMI_IN_PORT_2] = static_cast(atoi (_EdidVersion.c_str())); + _VRRSupport = device::HostPersistence::getInstance().getProperty(port_vrrSupport); + if(_VRRSupport == "TRUE") + m_vrrsupport[i] = true; + else + m_vrrsupport[i] = false; } catch(...) { - INT_INFO("Port %s: Exception in Getting the HDMI2 EDID version from system default..... \r\n", "HDMI2"); - m_edidversion[dsHDMI_IN_PORT_2] = HDMI_EDID_VER_20; + try { + INT_INFO("Port %d: Exception in Getting the HDMI%d VRR support from persistence storage. Try system default...\r\n", i,i); + _VRRSupport = device::HostPersistence::getInstance().getDefaultProperty(port_vrrSupport); + if(_VRRSupport == "TRUE") + m_vrrsupport[i] = true; + else + m_vrrsupport[i] = false; } + catch(...) { + INT_INFO("Port %d: Exception in Getting the HDMI%d VRR support from system default..... \r\n", i,i); + m_vrrsupport[i] = false; + } } } - for (itr = 0; itr < dsHDMI_IN_PORT_MAX; itr++) { + for (itr = 0; itr < noOfSupportedHdmiInputs; itr++) { if (getVRRSupport(static_cast(itr), &m_hdmiPortVrrCaps[itr]) >= 0) { INT_INFO("Port HDMI%d: VRR capability : %d\n", itr, m_hdmiPortVrrCaps[itr]); } - } - for (itr = 0; itr < dsHDMI_IN_PORT_MAX; itr++) { if (setEdidVersion (static_cast(itr), m_edidversion[itr]) >= 0) { INT_INFO("Port HDMI%d: Initialized EDID Version : %d\n", itr, m_edidversion[itr]); } @@ -1253,20 +1184,18 @@ IARM_Result_t _dsGetAVLatency (void *arg) void updateEdidAllmBitValuesInPersistence(dsHdmiInPort_t iHdmiPort, bool allmSupport) { INT_INFO("[srv]: Updating values of edid allm bit in persistence\n"); - switch(iHdmiPort){ - case dsHDMI_IN_PORT_0: - device::HostPersistence::getInstance().persistHostProperty("HDMI0.edidallmEnable", allmSupport ? "TRUE" : "FALSE"); - INT_INFO("Port %s: Persist EDID Allm Bit: %d\n", "HDMI0", allmSupport); - break; - case dsHDMI_IN_PORT_1: - device::HostPersistence::getInstance().persistHostProperty("HDMI1.edidallmEnable", allmSupport ? "TRUE" : "FALSE"); - INT_INFO("Port %s: Persist EDID Allm Bit: %d\n", "HDMI1", allmSupport); - break; - case dsHDMI_IN_PORT_2: - device::HostPersistence::getInstance().persistHostProperty("HDMI2.edidallmEnable", allmSupport ? "TRUE" : "FALSE"); - INT_INFO("Port %s: Persist EDID Allm Bit: %d\n", "HDMI2", allmSupport); - break; - } + int port_no = (int)iHdmiPort; + if((port_no >= 0) && (port_no < noOfSupportedHdmiInputs)) + { + std::string port_edidAllmSupport = "HDMI"+std::to_string(port_no)+".edidallmEnable"; + device::HostPersistence::getInstance().persistHostProperty(port_edidAllmSupport, allmSupport ? "TRUE" : "FALSE"); + INT_INFO("Port HDMI%d: Persist EDID Allm Bit: %d\n", port_no, allmSupport); + } + else + { + INT_INFO("Invalid port number to update in persistence\n"); + } + } static dsError_t setEdid2AllmSupport (dsHdmiInPort_t iHdmiPort, bool allmSupport) { @@ -1342,24 +1271,17 @@ IARM_Result_t _dsGetEdid2AllmSupport (void *arg) void updateVRRBitValuesInPersistence(dsHdmiInPort_t iHdmiPort, bool vrrSupport) { INT_INFO("[srv]: Updating values of vrr bit in persistence\n"); - switch(iHdmiPort){ - case dsHDMI_IN_PORT_0: - device::HostPersistence::getInstance().persistHostProperty("HDMI0.vrrEnable", vrrSupport ? "TRUE" : "FALSE"); - INT_INFO("Port %s: Persist EDID VRR Bit: %d\n", "HDMI0", vrrSupport); - break; - case dsHDMI_IN_PORT_1: - device::HostPersistence::getInstance().persistHostProperty("HDMI1.vrrEnable", vrrSupport ? "TRUE" : "FALSE"); - INT_INFO("Port %s: Persist EDID VRR Bit: %d\n", "HDMI1", vrrSupport); - break; - case dsHDMI_IN_PORT_2: - device::HostPersistence::getInstance().persistHostProperty("HDMI2.vrrEnable", vrrSupport ? "TRUE" : "FALSE"); - INT_INFO("Port %s: Persist EDID VRR Bit: %d\n", "HDMI2", vrrSupport); - break; - case dsHDMI_IN_PORT_3: - device::HostPersistence::getInstance().persistHostProperty("HDMI3.vrrEnable", vrrSupport ? "TRUE" : "FALSE"); - INT_INFO("Port %s: Persist EDID VRR Bit: %d\n", "HDMI3", vrrSupport); - break; - } + int port_no = (int)iHdmiPort; + if((port_no >= 0) && (port_no < noOfSupportedHdmiInputs)) + { + std::string port_vrrSupport = "HDMI"+std::to_string(port_no)+".vrrEnable"; + device::HostPersistence::getInstance().persistHostProperty(port_vrrSupport, vrrSupport ? "TRUE" : "FALSE"); + INT_INFO("Port HDMI%d: Persist EDID VRR Bit: %d\n", port_no, vrrSupport); + } + else + { + INT_INFO("Invalid port number to update in persistence\n"); + } } static dsError_t setVRRSupport (dsHdmiInPort_t iHdmiPort, bool vrrSupport) { @@ -1411,7 +1333,7 @@ IARM_Result_t _dsSetVRRSupport (void *arg) param->result = setVRRSupport (param->iHdmiPort, param->vrrSupport); } INT_INFO("[srv] %s: dsSetVRRSupport Port: %d vrrSupport: %d eRet: %d\r\n", __FUNCTION__, param->iHdmiPort, param->vrrSupport, param->result); - if(param->result == dsERR_NONE) + if(param->result == dsERR_NONE && m_hdmiPortVrrCaps[param->iHdmiPort])// update the persistence only for VRR supported ports { updateVRRBitValuesInPersistence(param->iHdmiPort,param->vrrSupport); m_vrrsupport[param->iHdmiPort] = param->vrrSupport;