From 1374c074e198ac4a67d5a8bed7c6c1dac1bb6c78 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 30 Oct 2025 11:43:36 +0000 Subject: [PATCH 01/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by:gsanto722 --- ds/audioOutputPortConfig.cpp | 160 +++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index c3ab1cc6..28822598 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -35,6 +35,13 @@ #include "stdlib.h" #include "dslogger.h" +#define DEBUG 1 + +static dsAudioTypeConfig_t *kConfigs1 = NULL; +static dsAudioPortConfig_t *kPorts1 = NULL; +int *pKConSize, *pKPortSize; +static int kConfig_size_local = -1, kPort_size_local = -1; + namespace device { //To Make the instance as thread-safe, using = default, that can request special methods from the compiler. They are Special because only compiler can create them. @@ -108,6 +115,117 @@ List AudioOutputPortConfig::getSupportedTypes() return supportedTypes; } +bool searchConfigs() +{ + IARM_BUS_Lock(lock); + + void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); + if (dllib) { + kConfigs1 = (dsAudioTypeConfig_t *) dlsym(dllib, "kAudioConfigs"); + if (kConfigs1) { + INT_INFO("kAudioConfigs is defined and loaded kConfigs1 = %p\r\n", kConfigs1); + printf("%d:%s: kAudioConfigs is defined and loaded kConfigs1 = %p\n", __LINE__, __func__, kConfigs1); + } + else { + INT_ERROR("kAudioConfigs is not defined\r\n"); + INT_ERROR("%d:%s: kAudioConfigs is not defined\n", __LINE__, __func__); + } + + pKConSize = (int *) dlsym(dllib, "kAudioConfigs_size"); + if(pKConSize) + { + kConfig_size_local = *pKConSize; + INT_INFO("%d:%s: kAudioConfigs_size is defined and loaded kConfig_size_local = %d\n", __LINE__, __func__, kConfig_size_local); + } + else + { + INT_ERROR("%d:%s: kAudioConfigs_size is not defined\n", __LINE__, __func__); + kConfig_size_local = -1; + } + + kPorts1 = (dsAudioPortConfig_t *) dlsym(dllib, "kAudioPorts"); + if (kPorts1) { + INT_INFO("kAudioPorts is defined and loaded kPorts1 = %p\r\n", kPorts1); + INT_INFO("%d:%s: kAudioPorts is defined and loaded kPorts1 = %p\n", __LINE__, __func__, kPorts1); + } + else { + INT_ERROR("kAudioPorts is not defined\r\n"); + INT_ERROR("%d:%s: kAudioPorts is not defined\n", __LINE__, __func__); + } + + pKPortSize = (int *) dlsym(dllib, "kAudioPorts_size"); + if(pKPortSize) + { + kPort_size_local = *pKPortSize; + INT_INFO("%d:%s: kAudioPorts_size is defined and loaded kPort_size_local = %d\n", __LINE__, __func__, kPort_size_local); + } + else + { + INT_ERROR("%d:%s: kAudioPorts_size is not defined\n", __LINE__, __func__); + kPort_size_local = -1; + } + dlclose(dllib); + } + else { + INT_ERROR("Opening libdshalsrv.so failed\r\n"); + INT_ERROR("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); + } + IARM_BUS_Unlock(lock); +#if DEBUG + INT_INFO("\n\n=========================================================================================================================\n\n"); + INT_INFO("\n%d:%s print configs using extern\n", __LINE__, __func__); + //printf("%d:%s: size of(kConfig_audio) = %d size of(kPort_audio) = %d\n", __LINE__, __func__, kConfig_size, kPort_size); + //kConfig_size_local = kConfig_size; + //kPort_size_local = kPort_size; + + if(kConfigs1 != NULL && kConfig_size_local != -1) + { + for (size_t i = 0; i < kConfig_size_local; i++) { + const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; + //AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); + //aPortType.enable(); + INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); + INT_INFO("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); + INT_INFO("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); + INT_INFO("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); + INT_INFO("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); + } + } + else + { + INT_ERROR("%d:%s: kAudioConfigs is NULL and kConfig_size_local is -1\n", __LINE__, __func__); + } + if(kPorts1 != NULL && kPort_size_local != -1) + { + /* + * set up ports based on kPorts[] + */ + for (size_t i = 0; i < kPort_size_local; i++) { + const dsAudioPortConfig_t *port = &kPorts1[i]; + INT_INFO("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); + INT_INFO("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); + } + } + else + { + INT_ERROR("%d:%s: kAudioPorts is NULL and kPort_size_local is -1\n", __LINE__, __func__); + } + INT_INFO("\n\n=========================================================================================================================\n\n"); +#endif + if(kConfigs1 == NULL || kConfig_size_local == -1 || kPorts1 == NULL || kPort_size_local == -1) + { + printf("Either kAudioConfigs or kAudioPorts is NULL and kConfig_size_local is -1, kPort_size_local is -1\n"); + return false; + } + else + { + printf("Both kAudioConfigs and kAudioPorts, kConfig_size_local, kPort_size_local are valid\n"); + return true; + } + //return (kConfigs1 && kPorts1); +} + + void AudioOutputPortConfig::load() { try { @@ -133,6 +251,47 @@ void AudioOutputPortConfig::load() } + if(searchConfigs() == true) + { + /* + * Initialize Audio portTypes (encodings, compressions etc.) + * and its port instances (db, level etc) + */ + if(kConfigs1 != NULL) + { + for (size_t i = 0; i < kConfig_size_local; i++) { + const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; + AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); + aPortType.enable(); + for (size_t j = 0; j < typeCfg->numSupportedEncodings; j++) { + aPortType.addEncoding(AudioEncoding::getInstance(typeCfg->encodings[j])); + _aEncodings.at(typeCfg->encodings[j]).enable(); + } + for (size_t j = 0; j < typeCfg->numSupportedCompressions; j++) { + aPortType.addCompression(typeCfg->compressions[j]); + _aCompressions.at(typeCfg->compressions[j]).enable(); + } + for (size_t j = 0; j < typeCfg->numSupportedStereoModes; j++) { + aPortType.addStereoMode(typeCfg->stereoModes[j]); + _aStereoModes.at(typeCfg->stereoModes[j]).enable(); + } + } + + /* + * set up ports based on kPorts[] + */ + if(kPorts1 != NULL) + { + for (size_t i = 0; i < kPort_size_local; i++) { + const dsAudioPortConfig_t *port = &kPorts1[i]; + _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); + _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); + } + } + } + + } + else{ /* * Initialize Audio portTypes (encodings, compressions etc.) * and its port instances (db, level etc) @@ -165,6 +324,7 @@ void AudioOutputPortConfig::load() _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); } + } } catch(const Exception &e) { From 6b95abb5c78e65dbbe4f211feaf90860ee88f2ea Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 30 Oct 2025 12:15:11 +0000 Subject: [PATCH 02/37] fix build issue --- ds/audioOutputPortConfig.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 28822598..ac53db0a 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -36,11 +36,14 @@ #include "dslogger.h" #define DEBUG 1 +#define IARM_BUS_Lock(lock) pthread_mutex_lock(&dsLock) +#define IARM_BUS_Unlock(lock) pthread_mutex_unlock(&dsLock) static dsAudioTypeConfig_t *kConfigs1 = NULL; static dsAudioPortConfig_t *kPorts1 = NULL; int *pKConSize, *pKPortSize; static int kConfig_size_local = -1, kPort_size_local = -1; +static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; namespace device { From 2f17837670645d76a368f02e6c3f374089e5df9a Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 30 Oct 2025 12:36:56 +0000 Subject: [PATCH 03/37] fix build issue Signed-off-by: grandhi_santoshkumar --- ds/audioOutputPortConfig.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index ac53db0a..89a0ec18 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -34,10 +34,9 @@ #include "dsUtl.h" #include "stdlib.h" #include "dslogger.h" +#include #define DEBUG 1 -#define IARM_BUS_Lock(lock) pthread_mutex_lock(&dsLock) -#define IARM_BUS_Unlock(lock) pthread_mutex_unlock(&dsLock) static dsAudioTypeConfig_t *kConfigs1 = NULL; static dsAudioPortConfig_t *kPorts1 = NULL; @@ -120,7 +119,7 @@ List AudioOutputPortConfig::getSupportedTypes() bool searchConfigs() { - IARM_BUS_Lock(lock); + pthread_mutex_lock(&dsLock); void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); if (dllib) { @@ -173,7 +172,7 @@ bool searchConfigs() INT_ERROR("Opening libdshalsrv.so failed\r\n"); INT_ERROR("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); } - IARM_BUS_Unlock(lock); + pthread_mutex_unlock(&dsLock); #if DEBUG INT_INFO("\n\n=========================================================================================================================\n\n"); INT_INFO("\n%d:%s print configs using extern\n", __LINE__, __func__); From 2e068a59110f1e5259b0f1d90d8816f0e7cca4b0 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 5 Nov 2025 07:58:54 +0000 Subject: [PATCH 04/37] addressed review comments --- ds/audioOutputPortConfig.cpp | 179 +++++++++++++++++++++++++++++++++-- 1 file changed, 172 insertions(+), 7 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 89a0ec18..ba9fda68 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -38,12 +38,16 @@ #define DEBUG 1 -static dsAudioTypeConfig_t *kConfigs1 = NULL; -static dsAudioPortConfig_t *kPorts1 = NULL; -int *pKConSize, *pKPortSize; -static int kConfig_size_local = -1, kPort_size_local = -1; static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; +typedef struct Configs +{ + dsAudioTypeConfig_t *pKConfigs; + dsAudioPortConfig_t *pKPorts; + int *pKConfigSize; + int *pKPortSize; +}Configs_t; + namespace device { //To Make the instance as thread-safe, using = default, that can request special methods from the compiler. They are Special because only compiler can create them. @@ -117,6 +121,115 @@ List AudioOutputPortConfig::getSupportedTypes() return supportedTypes; } +bool searchConfigs(Configs_t *config, char *searchVaribles) +{ + INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); + INT_INFO("%d:%s: searchVaribles[0] = %s\n", __LINE__, __func__, &searchVaribles[0]); + INT_INFO("%d:%s: searchVaribles[1] = %s\n", __LINE__, __func__, &searchVaribles[1]); + INT_INFO("%d:%s: searchVaribles[2] = %s\n", __LINE__, __func__, &searchVaribles[2]); + INT_INFO("%d:%s: searchVaribles[3] = %s\n", __LINE__, __func__, &searchVaribles[4]); + + pthread_mutex_lock(&dsLock); + + void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); + if (dllib) { + config->pKConfigs = (dsAudioTypeConfig_t *) dlsym(dllib, searchVaribles[0]); + if (config->pKConfigs) { + INT_INFO("kAudioConfigs is defined and loaded kConfigs1 = %p\r\n", config->pKConfigs); + else { + INT_ERROR("%d:%s: kAudioConfigs is not defined\n", __LINE__, __func__); + } + + config->pKConfigSize = (int *) dlsym(dllib, searchVaribles[2]); + if(config->pKConfigSize) + { + //kConfig_size_local = *pKConSize; + INT_INFO("%d:%s: kAudioConfigs_size is defined and loaded kConfig_size_local = %d\n", __LINE__, __func__, *config->pKConfigSize); + } + else + { + INT_ERROR("%d:%s: kAudioConfigs_size is not defined\n", __LINE__, __func__); + config->pKConfigSize = -1; + } + + config->pKPorts = (dsAudioPortConfig_t *) dlsym(dllib, searchVaribles[1]); + if (config->pKPorts) {; + INT_INFO("%d:%s: kAudioPorts is defined and loaded config->pKPorts = %p\n", __LINE__, __func__, config->pKPorts); + } + else { + INT_ERROR("%d:%s: kAudioPorts is not defined\n", __LINE__, __func__); + } + + config->pKPortSize = (int *) dlsym(dllib, searchVaribles[3]); + if(config->pKPortSize) + { + INT_INFO("%d:%s: kAudioPorts_size is defined and loaded config->pKPortSize = %d\n", __LINE__, __func__, *config->pKPortSize); + } + else + { + INT_ERROR("%d:%s: kAudioPorts_size is not defined\n", __LINE__, __func__); + config->pKPortSize = -1; + } + dlclose(dllib); + } + else { + INT_ERROR("%d:%s: Opening libds-hal.so failed\n", __LINE__, __func__); + } + pthread_mutex_unlock(&dsLock); +#if DEBUG + INT_INFO("\n\n=========================================================================================================================\n\n"); + INT_INFO("\n%d:%s print configs using extern\n", __LINE__, __func__); + //printf("%d:%s: size of(kConfig_audio) = %d size of(kPort_audio) = %d\n", __LINE__, __func__, kConfig_size, kPort_size); + //kConfig_size_local = kConfig_size; + //kPort_size_local = kPort_size; + + if(config->pKConfigs != NULL && *(config->pKConfigSize) != -1) + { + for (size_t i = 0; i < *(config->pKConfigSize); i++) { + const dsAudioTypeConfig_t *typeCfg = &config->pKConfigs[i]; + //AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); + //aPortType.enable(); + INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); + INT_INFO("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); + INT_INFO("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); + INT_INFO("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); + INT_INFO("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); + } + } + else + { + INT_ERROR("%d:%s: kAudioConfigs is NULL and kConfig_size_local is -1\n", __LINE__, __func__); + } + if(configuration->pKPorts != NULL && *(configuration->pKPortSize) != -1) + { + /* + * set up ports based on kPorts[] + */ + for (size_t i = 0; i < *(configuration->pKPortSize); i++) { + const dsAudioPortConfig_t *port = &configuration->pKPorts[i]; + INT_INFO("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); + INT_INFO("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); + } + } + else + { + INT_ERROR("%d:%s: kAudioPorts is NULL and kPort_size_local is -1\n", __LINE__, __func__); + } + INT_INFO("\n\n=========================================================================================================================\n\n"); +#endif + if(kConfigs1 == NULL || kConfig_size_local == -1 || kPorts1 == NULL || kPort_size_local == -1) + { + printf("Either kAudioConfigs or kAudioPorts is NULL and kConfig_size_local is -1, kPort_size_local is -1\n"); + return false; + } + else + { + printf("Both kAudioConfigs and kAudioPorts, kConfig_size_local, kPort_size_local are valid\n"); + return true; + } +} + +#if 0 bool searchConfigs() { pthread_mutex_lock(&dsLock); @@ -169,8 +282,7 @@ bool searchConfigs() dlclose(dllib); } else { - INT_ERROR("Opening libdshalsrv.so failed\r\n"); - INT_ERROR("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); + INT_ERROR("%d:%s: Opening libds-hal.so failed\n", __LINE__, __func__); } pthread_mutex_unlock(&dsLock); #if DEBUG @@ -226,10 +338,17 @@ bool searchConfigs() } //return (kConfigs1 && kPorts1); } - +#endif void AudioOutputPortConfig::load() { + dsAudioTypeConfig_t *pKConfigs = NULL; + dsAudioPortConfig_t *pKPorts = NULL; + int *pKConfigSize, *pKPortSize; + Configs_t configuration = {0}; + char searchVaribles[][30] = { "kAudioConfigs", "kAudioPorts", "kAudioConfigs_size", "kAudioPorts_size" }; + bool ret; + //static int kConfig_size_local = -1, kPort_size_local = -1; try { /* * Load Constants First. @@ -253,6 +372,51 @@ void AudioOutputPortConfig::load() } + ret = searchConfigs(&configuration, searchVaribles); + if (ret == true) + { + INT_INFO("Both kAudioConfigs and kAudioPorts, kConfig_size_local, kPort_size_local are valid\n"); + } + else + { + INT_ERROR("Invalid kAudioConfigs or kAudioPorts, kConfig_size_local, kPort_size_local\n"); + config.pKConfigs = kConfigs; + config.pKConfigSize = dsUTL_DIM(kConfigs); + config.pKPorts = kPorts; + config.pKPortSize = dsUTL_DIM(kPorts); + } + /* + * Initialize Audio portTypes (encodings, compressions etc.) + * and its port instances (db, level etc) + */ + for (size_t i = 0; i < configuration->pKConfigSize; i++) { + const dsAudioTypeConfig_t *typeCfg = &(configuration->pKConfigs[i]); + AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); + aPortType.enable(); + for (size_t j = 0; j < typeCfg->numSupportedEncodings; j++) { + aPortType.addEncoding(AudioEncoding::getInstance(typeCfg->encodings[j])); + _aEncodings.at(typeCfg->encodings[j]).enable(); + } + for (size_t j = 0; j < typeCfg->numSupportedCompressions; j++) { + aPortType.addCompression(typeCfg->compressions[j]); + _aCompressions.at(typeCfg->compressions[j]).enable(); + } + for (size_t j = 0; j < typeCfg->numSupportedStereoModes; j++) { + aPortType.addStereoMode(typeCfg->stereoModes[j]); + _aStereoModes.at(typeCfg->stereoModes[j]).enable(); + } + } + + /* + * set up ports based on kPorts[] + */ + for (size_t i = 0; i < configuration->pKPortSize; i++) { + const dsAudioPortConfig_t *port = &configuration->pKPorts[i]; + _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); + _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); + } + +#if 0 if(searchConfigs() == true) { /* @@ -327,6 +491,7 @@ void AudioOutputPortConfig::load() _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); } } + #endif } catch(const Exception &e) { From 6fd6b4f05294ec2d62432a19037031688cb0b55b Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 5 Nov 2025 09:52:33 +0000 Subject: [PATCH 05/37] fix build issue --- ds/audioOutputPortConfig.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index ba9fda68..09dc337a 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -121,7 +121,7 @@ List AudioOutputPortConfig::getSupportedTypes() return supportedTypes; } -bool searchConfigs(Configs_t *config, char *searchVaribles) +bool searchConfigs(Configs_t *config, const char *searchVaribles[]) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: searchVaribles[0] = %s\n", __LINE__, __func__, &searchVaribles[0]); @@ -136,6 +136,7 @@ bool searchConfigs(Configs_t *config, char *searchVaribles) config->pKConfigs = (dsAudioTypeConfig_t *) dlsym(dllib, searchVaribles[0]); if (config->pKConfigs) { INT_INFO("kAudioConfigs is defined and loaded kConfigs1 = %p\r\n", config->pKConfigs); + } else { INT_ERROR("%d:%s: kAudioConfigs is not defined\n", __LINE__, __func__); } @@ -149,11 +150,11 @@ bool searchConfigs(Configs_t *config, char *searchVaribles) else { INT_ERROR("%d:%s: kAudioConfigs_size is not defined\n", __LINE__, __func__); - config->pKConfigSize = -1; + *(config->pKConfigSize) = -1; } config->pKPorts = (dsAudioPortConfig_t *) dlsym(dllib, searchVaribles[1]); - if (config->pKPorts) {; + if (config->pKPorts) { INT_INFO("%d:%s: kAudioPorts is defined and loaded config->pKPorts = %p\n", __LINE__, __func__, config->pKPorts); } else { @@ -168,7 +169,7 @@ bool searchConfigs(Configs_t *config, char *searchVaribles) else { INT_ERROR("%d:%s: kAudioPorts_size is not defined\n", __LINE__, __func__); - config->pKPortSize = -1; + *(config->pKPortSize) = -1; } dlclose(dllib); } @@ -200,13 +201,13 @@ bool searchConfigs(Configs_t *config, char *searchVaribles) { INT_ERROR("%d:%s: kAudioConfigs is NULL and kConfig_size_local is -1\n", __LINE__, __func__); } - if(configuration->pKPorts != NULL && *(configuration->pKPortSize) != -1) + if(config->pKPorts != NULL && *(config->pKPortSize) != -1) { /* * set up ports based on kPorts[] */ - for (size_t i = 0; i < *(configuration->pKPortSize); i++) { - const dsAudioPortConfig_t *port = &configuration->pKPorts[i]; + for (size_t i = 0; i < *(config->pKPortSize); i++) { + const dsAudioPortConfig_t *port = &(config->pKPorts[i]); INT_INFO("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); INT_INFO("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); } @@ -217,14 +218,14 @@ bool searchConfigs(Configs_t *config, char *searchVaribles) } INT_INFO("\n\n=========================================================================================================================\n\n"); #endif - if(kConfigs1 == NULL || kConfig_size_local == -1 || kPorts1 == NULL || kPort_size_local == -1) + if(config->pKConfigs == NULL || config->pKConfigSize == -1 || config->pKPorts == NULL || config->pKPortSize == -1) { - printf("Either kAudioConfigs or kAudioPorts is NULL and kConfig_size_local is -1, kPort_size_local is -1\n"); + printf("Either kAudioConfigs or kAudioPorts is NULL and pKConfigSize is -1, pKPortSize is -1\n"); return false; } else { - printf("Both kAudioConfigs and kAudioPorts, kConfig_size_local, kPort_size_local are valid\n"); + printf("Both kAudioConfigs and kAudioPorts, pKConfigSize, pKPortSize are valid\n"); return true; } } @@ -389,8 +390,8 @@ void AudioOutputPortConfig::load() * Initialize Audio portTypes (encodings, compressions etc.) * and its port instances (db, level etc) */ - for (size_t i = 0; i < configuration->pKConfigSize; i++) { - const dsAudioTypeConfig_t *typeCfg = &(configuration->pKConfigs[i]); + for (size_t i = 0; i < configuration.pKConfigSize; i++) { + const dsAudioTypeConfig_t *typeCfg = &(configuration.pKConfigs[i]); AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); aPortType.enable(); for (size_t j = 0; j < typeCfg->numSupportedEncodings; j++) { @@ -410,8 +411,8 @@ void AudioOutputPortConfig::load() /* * set up ports based on kPorts[] */ - for (size_t i = 0; i < configuration->pKPortSize; i++) { - const dsAudioPortConfig_t *port = &configuration->pKPorts[i]; + for (size_t i = 0; i < configuration.pKPortSize; i++) { + const dsAudioPortConfig_t *port = &configuration.pKPorts[i]; _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); } From 9932c3cffd59fd6fc812f4a4714c50920e8e8fa1 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 5 Nov 2025 10:01:47 +0000 Subject: [PATCH 06/37] fix build issue --- ds/audioOutputPortConfig.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 09dc337a..3398f862 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -218,7 +218,7 @@ bool searchConfigs(Configs_t *config, const char *searchVaribles[]) } INT_INFO("\n\n=========================================================================================================================\n\n"); #endif - if(config->pKConfigs == NULL || config->pKConfigSize == -1 || config->pKPorts == NULL || config->pKPortSize == -1) + if(config->pKConfigs == NULL || *(config->pKConfigSize) == -1 || config->pKPorts == NULL || *(config->pKPortSize) == -1) { printf("Either kAudioConfigs or kAudioPorts is NULL and pKConfigSize is -1, pKPortSize is -1\n"); return false; @@ -381,16 +381,17 @@ void AudioOutputPortConfig::load() else { INT_ERROR("Invalid kAudioConfigs or kAudioPorts, kConfig_size_local, kPort_size_local\n"); - config.pKConfigs = kConfigs; - config.pKConfigSize = dsUTL_DIM(kConfigs); - config.pKPorts = kPorts; - config.pKPortSize = dsUTL_DIM(kPorts); + configuration.pKConfigs = kConfigs; + *(configuration.pKConfigSize) = dsUTL_DIM(kConfigs); + configuration.pKPorts = kPorts; + *(configuration.pKPortSize) = dsUTL_DIM(kPorts); } + INT_INFO("configuration.pKConfigs =%p, configuration.pKPorts =%p, *(configuration.pKConfigSize) = %d, *(configuration.pKPortSize) = %d\n", configuration.pKConfigs, configuration.pKPorts, *(configuration.pKConfigSize), *(configuration.pKPortSize)); /* * Initialize Audio portTypes (encodings, compressions etc.) * and its port instances (db, level etc) */ - for (size_t i = 0; i < configuration.pKConfigSize; i++) { + for (size_t i = 0; i < *(configuration.pKConfigSize); i++) { const dsAudioTypeConfig_t *typeCfg = &(configuration.pKConfigs[i]); AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); aPortType.enable(); @@ -411,7 +412,7 @@ void AudioOutputPortConfig::load() /* * set up ports based on kPorts[] */ - for (size_t i = 0; i < configuration.pKPortSize; i++) { + for (size_t i = 0; i < *(configuration.pKPortSize); i++) { const dsAudioPortConfig_t *port = &configuration.pKPorts[i]; _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); From cc2121ad5c787482c0bf1ebb715f57786c389a0b Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 5 Nov 2025 10:28:49 +0000 Subject: [PATCH 07/37] fix build issue --- ds/audioOutputPortConfig.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 3398f862..20f24e45 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -42,8 +42,8 @@ static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; typedef struct Configs { - dsAudioTypeConfig_t *pKConfigs; - dsAudioPortConfig_t *pKPorts; + const dsAudioTypeConfig_t *pKConfigs; + const dsAudioPortConfig_t *pKPorts; int *pKConfigSize; int *pKPortSize; }Configs_t; @@ -187,7 +187,7 @@ bool searchConfigs(Configs_t *config, const char *searchVaribles[]) if(config->pKConfigs != NULL && *(config->pKConfigSize) != -1) { for (size_t i = 0; i < *(config->pKConfigSize); i++) { - const dsAudioTypeConfig_t *typeCfg = &config->pKConfigs[i]; + const dsAudioTypeConfig_t *typeCfg = &(config->pKConfigs[i]); //AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); //aPortType.enable(); INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); @@ -347,9 +347,12 @@ void AudioOutputPortConfig::load() dsAudioPortConfig_t *pKPorts = NULL; int *pKConfigSize, *pKPortSize; Configs_t configuration = {0}; - char searchVaribles[][30] = { "kAudioConfigs", "kAudioPorts", "kAudioConfigs_size", "kAudioPorts_size" }; - bool ret; - //static int kConfig_size_local = -1, kPort_size_local = -1; + const char* searchVaribles[] = { + "kAudioConfigs", + "kAudioPorts", + "kAudioConfigs_size", + "kAudioPorts_size" + }; try { /* * Load Constants First. @@ -385,9 +388,9 @@ void AudioOutputPortConfig::load() *(configuration.pKConfigSize) = dsUTL_DIM(kConfigs); configuration.pKPorts = kPorts; *(configuration.pKPortSize) = dsUTL_DIM(kPorts); + INT_INFO("configuration.pKConfigs =%p, configuration.pKPorts =%p, *(configuration.pKConfigSize) = %d, *(configuration.pKPortSize) = %d\n", configuration.pKConfigs, configuration.pKPorts, *(configuration.pKConfigSize), *(configuration.pKPortSize)); } - INT_INFO("configuration.pKConfigs =%p, configuration.pKPorts =%p, *(configuration.pKConfigSize) = %d, *(configuration.pKPortSize) = %d\n", configuration.pKConfigs, configuration.pKPorts, *(configuration.pKConfigSize), *(configuration.pKPortSize)); - /* + /* * Initialize Audio portTypes (encodings, compressions etc.) * and its port instances (db, level etc) */ From 0d13c484189ff34866bc05a31ae695930d48f695 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 5 Nov 2025 11:10:04 +0000 Subject: [PATCH 08/37] fix build issue --- ds/audioOutputPortConfig.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 20f24e45..5005ff4c 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -353,6 +353,8 @@ void AudioOutputPortConfig::load() "kAudioConfigs_size", "kAudioPorts_size" }; + bool ret = false; + try { /* * Load Constants First. From 397cf756f2c8544d05a3b9b1ae42465b00860199 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 5 Nov 2025 13:05:35 +0000 Subject: [PATCH 09/37] fix build issue --- ds/audioOutputPortConfig.cpp | 128 +++-------------------------------- 1 file changed, 9 insertions(+), 119 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 5005ff4c..478b6e8b 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -124,10 +124,11 @@ List AudioOutputPortConfig::getSupportedTypes() bool searchConfigs(Configs_t *config, const char *searchVaribles[]) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); - INT_INFO("%d:%s: searchVaribles[0] = %s\n", __LINE__, __func__, &searchVaribles[0]); - INT_INFO("%d:%s: searchVaribles[1] = %s\n", __LINE__, __func__, &searchVaribles[1]); - INT_INFO("%d:%s: searchVaribles[2] = %s\n", __LINE__, __func__, &searchVaribles[2]); - INT_INFO("%d:%s: searchVaribles[3] = %s\n", __LINE__, __func__, &searchVaribles[4]); + INT_INFO("%d:%s: searchVaribles[0] = %s\n", __LINE__, __func__, searchVaribles[0]); + INT_INFO("%d:%s: searchVaribles[1] = %s\n", __LINE__, __func__, searchVaribles[1]); + INT_INFO("%d:%s: searchVaribles[2] = %s\n", __LINE__, __func__, searchVaribles[2]); + INT_INFO("%d:%s: searchVaribles[3] = %s\n", __LINE__, __func__, searchVaribles[4]); + static int invalidsize = -1; pthread_mutex_lock(&dsLock); @@ -149,8 +150,8 @@ bool searchConfigs(Configs_t *config, const char *searchVaribles[]) } else { - INT_ERROR("%d:%s: kAudioConfigs_size is not defined\n", __LINE__, __func__); - *(config->pKConfigSize) = -1; + config->pKConfigSize = &invalidsize; + INT_ERROR("%d:%s: kAudioConfigs_size is not defined *(config->pKConfigSize)= %d\n", __LINE__, __func__, *config->pKConfigSize); } config->pKPorts = (dsAudioPortConfig_t *) dlsym(dllib, searchVaribles[1]); @@ -168,8 +169,8 @@ bool searchConfigs(Configs_t *config, const char *searchVaribles[]) } else { - INT_ERROR("%d:%s: kAudioPorts_size is not defined\n", __LINE__, __func__); - *(config->pKPortSize) = -1; + config->pKPortSize = &invalidsize; + INT_ERROR("%d:%s: kAudioPorts_size is not defined *(config->pKPortSize)= %d\n", __LINE__, __func__, *config->pKPortSize); } dlclose(dllib); } @@ -230,117 +231,6 @@ bool searchConfigs(Configs_t *config, const char *searchVaribles[]) } } -#if 0 -bool searchConfigs() -{ - pthread_mutex_lock(&dsLock); - - void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); - if (dllib) { - kConfigs1 = (dsAudioTypeConfig_t *) dlsym(dllib, "kAudioConfigs"); - if (kConfigs1) { - INT_INFO("kAudioConfigs is defined and loaded kConfigs1 = %p\r\n", kConfigs1); - printf("%d:%s: kAudioConfigs is defined and loaded kConfigs1 = %p\n", __LINE__, __func__, kConfigs1); - } - else { - INT_ERROR("kAudioConfigs is not defined\r\n"); - INT_ERROR("%d:%s: kAudioConfigs is not defined\n", __LINE__, __func__); - } - - pKConSize = (int *) dlsym(dllib, "kAudioConfigs_size"); - if(pKConSize) - { - kConfig_size_local = *pKConSize; - INT_INFO("%d:%s: kAudioConfigs_size is defined and loaded kConfig_size_local = %d\n", __LINE__, __func__, kConfig_size_local); - } - else - { - INT_ERROR("%d:%s: kAudioConfigs_size is not defined\n", __LINE__, __func__); - kConfig_size_local = -1; - } - - kPorts1 = (dsAudioPortConfig_t *) dlsym(dllib, "kAudioPorts"); - if (kPorts1) { - INT_INFO("kAudioPorts is defined and loaded kPorts1 = %p\r\n", kPorts1); - INT_INFO("%d:%s: kAudioPorts is defined and loaded kPorts1 = %p\n", __LINE__, __func__, kPorts1); - } - else { - INT_ERROR("kAudioPorts is not defined\r\n"); - INT_ERROR("%d:%s: kAudioPorts is not defined\n", __LINE__, __func__); - } - - pKPortSize = (int *) dlsym(dllib, "kAudioPorts_size"); - if(pKPortSize) - { - kPort_size_local = *pKPortSize; - INT_INFO("%d:%s: kAudioPorts_size is defined and loaded kPort_size_local = %d\n", __LINE__, __func__, kPort_size_local); - } - else - { - INT_ERROR("%d:%s: kAudioPorts_size is not defined\n", __LINE__, __func__); - kPort_size_local = -1; - } - dlclose(dllib); - } - else { - INT_ERROR("%d:%s: Opening libds-hal.so failed\n", __LINE__, __func__); - } - pthread_mutex_unlock(&dsLock); -#if DEBUG - INT_INFO("\n\n=========================================================================================================================\n\n"); - INT_INFO("\n%d:%s print configs using extern\n", __LINE__, __func__); - //printf("%d:%s: size of(kConfig_audio) = %d size of(kPort_audio) = %d\n", __LINE__, __func__, kConfig_size, kPort_size); - //kConfig_size_local = kConfig_size; - //kPort_size_local = kPort_size; - - if(kConfigs1 != NULL && kConfig_size_local != -1) - { - for (size_t i = 0; i < kConfig_size_local; i++) { - const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; - //AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); - //aPortType.enable(); - INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); - INT_INFO("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); - INT_INFO("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); - INT_INFO("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); - INT_INFO("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); - } - } - else - { - INT_ERROR("%d:%s: kAudioConfigs is NULL and kConfig_size_local is -1\n", __LINE__, __func__); - } - if(kPorts1 != NULL && kPort_size_local != -1) - { - /* - * set up ports based on kPorts[] - */ - for (size_t i = 0; i < kPort_size_local; i++) { - const dsAudioPortConfig_t *port = &kPorts1[i]; - INT_INFO("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); - INT_INFO("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); - } - } - else - { - INT_ERROR("%d:%s: kAudioPorts is NULL and kPort_size_local is -1\n", __LINE__, __func__); - } - INT_INFO("\n\n=========================================================================================================================\n\n"); -#endif - if(kConfigs1 == NULL || kConfig_size_local == -1 || kPorts1 == NULL || kPort_size_local == -1) - { - printf("Either kAudioConfigs or kAudioPorts is NULL and kConfig_size_local is -1, kPort_size_local is -1\n"); - return false; - } - else - { - printf("Both kAudioConfigs and kAudioPorts, kConfig_size_local, kPort_size_local are valid\n"); - return true; - } - //return (kConfigs1 && kPorts1); -} -#endif - void AudioOutputPortConfig::load() { dsAudioTypeConfig_t *pKConfigs = NULL; From 8433557e12d6380b6924e731f3a061b7e2ed7642 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 5 Nov 2025 13:26:27 +0000 Subject: [PATCH 10/37] fix coverity issue and removed unwanted code. --- ds/audioOutputPortConfig.cpp | 127 +++++++---------------------------- 1 file changed, 26 insertions(+), 101 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 478b6e8b..c26a20cf 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -127,7 +127,7 @@ bool searchConfigs(Configs_t *config, const char *searchVaribles[]) INT_INFO("%d:%s: searchVaribles[0] = %s\n", __LINE__, __func__, searchVaribles[0]); INT_INFO("%d:%s: searchVaribles[1] = %s\n", __LINE__, __func__, searchVaribles[1]); INT_INFO("%d:%s: searchVaribles[2] = %s\n", __LINE__, __func__, searchVaribles[2]); - INT_INFO("%d:%s: searchVaribles[3] = %s\n", __LINE__, __func__, searchVaribles[4]); + INT_INFO("%d:%s: searchVaribles[3] = %s\n", __LINE__, __func__, searchVaribles[3]); static int invalidsize = -1; pthread_mutex_lock(&dsLock); @@ -233,9 +233,9 @@ bool searchConfigs(Configs_t *config, const char *searchVaribles[]) void AudioOutputPortConfig::load() { - dsAudioTypeConfig_t *pKConfigs = NULL; - dsAudioPortConfig_t *pKPorts = NULL; - int *pKConfigSize, *pKPortSize; + //dsAudioTypeConfig_t *pKConfigs = NULL; + //dsAudioPortConfig_t *pKPorts = NULL; + int configSize, portSize; Configs_t configuration = {0}; const char* searchVaribles[] = { "kAudioConfigs", @@ -268,99 +268,28 @@ void AudioOutputPortConfig::load() } - ret = searchConfigs(&configuration, searchVaribles); - if (ret == true) - { - INT_INFO("Both kAudioConfigs and kAudioPorts, kConfig_size_local, kPort_size_local are valid\n"); - } - else - { - INT_ERROR("Invalid kAudioConfigs or kAudioPorts, kConfig_size_local, kPort_size_local\n"); - configuration.pKConfigs = kConfigs; - *(configuration.pKConfigSize) = dsUTL_DIM(kConfigs); - configuration.pKPorts = kPorts; - *(configuration.pKPortSize) = dsUTL_DIM(kPorts); - INT_INFO("configuration.pKConfigs =%p, configuration.pKPorts =%p, *(configuration.pKConfigSize) = %d, *(configuration.pKPortSize) = %d\n", configuration.pKConfigs, configuration.pKPorts, *(configuration.pKConfigSize), *(configuration.pKPortSize)); - } - /* - * Initialize Audio portTypes (encodings, compressions etc.) - * and its port instances (db, level etc) - */ - for (size_t i = 0; i < *(configuration.pKConfigSize); i++) { - const dsAudioTypeConfig_t *typeCfg = &(configuration.pKConfigs[i]); - AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); - aPortType.enable(); - for (size_t j = 0; j < typeCfg->numSupportedEncodings; j++) { - aPortType.addEncoding(AudioEncoding::getInstance(typeCfg->encodings[j])); - _aEncodings.at(typeCfg->encodings[j]).enable(); - } - for (size_t j = 0; j < typeCfg->numSupportedCompressions; j++) { - aPortType.addCompression(typeCfg->compressions[j]); - _aCompressions.at(typeCfg->compressions[j]).enable(); - } - for (size_t j = 0; j < typeCfg->numSupportedStereoModes; j++) { - aPortType.addStereoMode(typeCfg->stereoModes[j]); - _aStereoModes.at(typeCfg->stereoModes[j]).enable(); + ret = searchConfigs(&configuration, searchVaribles); + if (ret == true) + { + INT_INFO("Both kAudioConfigs and kAudioPorts, kConfig_size_local, kPort_size_local are valid\n"); } - } - - /* - * set up ports based on kPorts[] - */ - for (size_t i = 0; i < *(configuration.pKPortSize); i++) { - const dsAudioPortConfig_t *port = &configuration.pKPorts[i]; - _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); - _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); - } - -#if 0 - if(searchConfigs() == true) + else { - /* - * Initialize Audio portTypes (encodings, compressions etc.) - * and its port instances (db, level etc) - */ - if(kConfigs1 != NULL) - { - for (size_t i = 0; i < kConfig_size_local; i++) { - const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; - AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); - aPortType.enable(); - for (size_t j = 0; j < typeCfg->numSupportedEncodings; j++) { - aPortType.addEncoding(AudioEncoding::getInstance(typeCfg->encodings[j])); - _aEncodings.at(typeCfg->encodings[j]).enable(); - } - for (size_t j = 0; j < typeCfg->numSupportedCompressions; j++) { - aPortType.addCompression(typeCfg->compressions[j]); - _aCompressions.at(typeCfg->compressions[j]).enable(); - } - for (size_t j = 0; j < typeCfg->numSupportedStereoModes; j++) { - aPortType.addStereoMode(typeCfg->stereoModes[j]); - _aStereoModes.at(typeCfg->stereoModes[j]).enable(); - } - } - - /* - * set up ports based on kPorts[] - */ - if(kPorts1 != NULL) - { - for (size_t i = 0; i < kPort_size_local; i++) { - const dsAudioPortConfig_t *port = &kPorts1[i]; - _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); - _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); - } - } - } - + INT_ERROR("Invalid kAudioConfigs or kAudioPorts, kConfig_size_local, kPort_size_local\n"); + configuration.pKConfigs = kConfigs; + configSize = dsUTL_DIM(kConfigs); + *(configuration.pKConfigSize) = &configSize; + configuration.pKPorts = kPorts; + portSize = dsUTL_DIM(kPorts); + *(configuration.pKPortSize) = &portSize; + INT_INFO("configuration.pKConfigs =%p, configuration.pKPorts =%p, *(configuration.pKConfigSize) = %d, *(configuration.pKPortSize) = %d\n", configuration.pKConfigs, configuration.pKPorts, *(configuration.pKConfigSize), *(configuration.pKPortSize)); } - else{ /* - * Initialize Audio portTypes (encodings, compressions etc.) - * and its port instances (db, level etc) - */ - for (size_t i = 0; i < dsUTL_DIM(kConfigs); i++) { - const dsAudioTypeConfig_t *typeCfg = &kConfigs[i]; + * Initialize Audio portTypes (encodings, compressions etc.) + * and its port instances (db, level etc) + */ + for (size_t i = 0; i < *(configuration.pKConfigSize); i++) { + const dsAudioTypeConfig_t *typeCfg = &(configuration.pKConfigs[i]); AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); aPortType.enable(); for (size_t j = 0; j < typeCfg->numSupportedEncodings; j++) { @@ -370,25 +299,21 @@ void AudioOutputPortConfig::load() for (size_t j = 0; j < typeCfg->numSupportedCompressions; j++) { aPortType.addCompression(typeCfg->compressions[j]); _aCompressions.at(typeCfg->compressions[j]).enable(); - } for (size_t j = 0; j < typeCfg->numSupportedStereoModes; j++) { aPortType.addStereoMode(typeCfg->stereoModes[j]); _aStereoModes.at(typeCfg->stereoModes[j]).enable(); - } } /* - * set up ports based on kPorts[] - */ - for (size_t i = 0; i < dsUTL_DIM(kPorts); i++) { - const dsAudioPortConfig_t *port = &kPorts[i]; + * set up ports based on kPorts[] + */ + for (size_t i = 0; i < *(configuration.pKPortSize); i++) { + const dsAudioPortConfig_t *port = &configuration.pKPorts[i]; _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); } - } - #endif } catch(const Exception &e) { From 51c8af54bee58477dce31b858eed04b40ad51ae1 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 5 Nov 2025 13:32:41 +0000 Subject: [PATCH 11/37] Fix build issue. --- ds/audioOutputPortConfig.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index c26a20cf..98d51c7b 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -278,10 +278,10 @@ void AudioOutputPortConfig::load() INT_ERROR("Invalid kAudioConfigs or kAudioPorts, kConfig_size_local, kPort_size_local\n"); configuration.pKConfigs = kConfigs; configSize = dsUTL_DIM(kConfigs); - *(configuration.pKConfigSize) = &configSize; + configuration.pKConfigSize = &configSize; configuration.pKPorts = kPorts; portSize = dsUTL_DIM(kPorts); - *(configuration.pKPortSize) = &portSize; + configuration.pKPortSize = &portSize; INT_INFO("configuration.pKConfigs =%p, configuration.pKPorts =%p, *(configuration.pKConfigSize) = %d, *(configuration.pKPortSize) = %d\n", configuration.pKConfigs, configuration.pKPorts, *(configuration.pKConfigSize), *(configuration.pKPortSize)); } /* From 020d7fc45700663678e07be4dac980df0ebd327f Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 6 Nov 2025 11:47:11 +0000 Subject: [PATCH 12/37] Addressed review comments. --- ds/audioOutputPortConfig.cpp | 116 ++++++++++++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 98d51c7b..e87dabbc 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -121,6 +121,80 @@ List AudioOutputPortConfig::getSupportedTypes() return supportedTypes; } +bool searchConfigs(void *pConfigVar, char *searchConfigStr) +{ + INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); + INT_INFO("%d:%s: searchConfigStr = %s\n", __LINE__, __func__, searchConfigStr); + + static int invalidsize = -1; + + pthread_mutex_lock(&dsLock); + + void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); + if (dllib) { + pConfigVar = (void *) dlsym(dllib, searchConfigStr); + if (pConfigVar != NULL) { + INT_INFO("%s is defined and loaded pConfigVar= %p\r\n", searchConfigStr, pConfigVar); + } + else { + INT_ERROR("%d:%s: %s is not defined\n", __LINE__, __func__, searchConfigStr); + } + + dlclose(dllib); + } + else { + INT_ERROR("%d:%s: Open %s failed\n", __LINE__, __func__, RDK_DSHAL_NAME); + } + pthread_mutex_unlock(&dsLock); + INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); +} + +void dumpconfig(Configs_t *config) +{ + INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); + INT_INFO("%d:%s: pKConfigs = %p\n", __LINE__, __func__, config->pKConfigs); + INT_INFO("%d:%s: pKPorts = %p\n", __LINE__, __func__, config->pKPorts); + INT_INFO("%d:%s: pKConfigSize = %p\n", __LINE__, __func__, config->pKConfigSize); + INT_INFO("%d:%s: pKPortSize = %p\n", __LINE__, __func__, config->pKPortSize); + + INT_INFO("\n\n=========================================================================================================================\n\n"); + if(config->pKConfigs != NULL && *(config->pKConfigSize) != -1) + { + for (size_t i = 0; i < *(config->pKConfigSize); i++) { + const dsAudioTypeConfig_t *typeCfg = &(config->pKConfigs[i]); + //AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); + //aPortType.enable(); + INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); + INT_INFO("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); + INT_INFO("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); + INT_INFO("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); + INT_INFO("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); + } + } + else + { + INT_ERROR("%d:%s: kAudioConfigs is NULL and kConfig_size_local is -1\n", __LINE__, __func__); + } + if(config->pKPorts != NULL && *(config->pKPortSize) != -1) + { + /* + * set up ports based on kPorts[] + */ + for (size_t i = 0; i < *(config->pKPortSize); i++) { + const dsAudioPortConfig_t *port = &(config->pKPorts[i]); + INT_INFO("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); + INT_INFO("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); + } + } + else + { + INT_ERROR("%d:%s: kAudioPorts is NULL and kPort_size_local is -1\n", __LINE__, __func__); + } + INT_INFO("\n\n=========================================================================================================================\n\n"); + INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); +} + +#if 0 bool searchConfigs(Configs_t *config, const char *searchVaribles[]) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); @@ -230,6 +304,7 @@ bool searchConfigs(Configs_t *config, const char *searchVaribles[]) return true; } } +#endif void AudioOutputPortConfig::load() { @@ -267,7 +342,7 @@ void AudioOutputPortConfig::load() _aPortTypes.push_back(AudioOutputPortType(i)); } - +#if 0 ret = searchConfigs(&configuration, searchVaribles); if (ret == true) { @@ -284,6 +359,45 @@ void AudioOutputPortConfig::load() configuration.pKPortSize = &portSize; INT_INFO("configuration.pKConfigs =%p, configuration.pKPorts =%p, *(configuration.pKConfigSize) = %d, *(configuration.pKPortSize) = %d\n", configuration.pKConfigs, configuration.pKPorts, *(configuration.pKConfigSize), *(configuration.pKPortSize)); } +#endif + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); + ret = searchConfigs(configuration.pKConfigs, searchVaribles[0]); + if(ret == true) + { + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[2]); + ret = searchConfigs(configuration.pKConfigSize, (char *)searchVaribles[2]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[2]); + } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); + ret = searchConfigs(configuration.pKPorts, searchVaribles[1]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[1]); + } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[3]); + ret = searchConfigs((void *)configuration.pKPortSize, (char *)searchVaribles[3]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[3]); + } + } + else + { + INT_ERROR("Invalid kAudioConfigs or kAudioPorts, pKConfigSize, pKPortSize\n"); + configuration.pKConfigs = kConfigs; + configSize = dsUTL_DIM(kConfigs); + configuration.pKConfigSize = &configSize; + configuration.pKPorts = kPorts; + portSize = dsUTL_DIM(kPorts); + configuration.pKPortSize = &portSize; + INT_INFO("configuration.pKConfigs =%p, configuration.pKPorts =%p, *(configuration.pKConfigSize) = %d, *(configuration.pKPortSize) = %d\n", configuration.pKConfigs, configuration.pKPorts, *(configuration.pKConfigSize), *(configuration.pKPortSize)); + } + #if DEBUG + dumpconfig(&configuration); + #endif + /* * Initialize Audio portTypes (encodings, compressions etc.) * and its port instances (db, level etc) From 7e8a9f48b84ca19cfe8342fb595a55c5cace0f7e Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 6 Nov 2025 12:43:46 +0000 Subject: [PATCH 13/37] Addressed review comments. --- ds/audioOutputPortConfig.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index e87dabbc..2aa7ad9c 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -121,7 +121,7 @@ List AudioOutputPortConfig::getSupportedTypes() return supportedTypes; } -bool searchConfigs(void *pConfigVar, char *searchConfigStr) +bool searchConfigs(void **pConfigVar, const char *searchConfigStr) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: searchConfigStr = %s\n", __LINE__, __func__, searchConfigStr); @@ -132,9 +132,9 @@ bool searchConfigs(void *pConfigVar, char *searchConfigStr) void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); if (dllib) { - pConfigVar = (void *) dlsym(dllib, searchConfigStr); - if (pConfigVar != NULL) { - INT_INFO("%s is defined and loaded pConfigVar= %p\r\n", searchConfigStr, pConfigVar); + *pConfigVar = (void *) dlsym(dllib, searchConfigStr); + if (*pConfigVar != NULL) { + INT_INFO("%s is defined and loaded pConfigVar= %p\r\n", searchConfigStr, *pConfigVar); } else { INT_ERROR("%d:%s: %s is not defined\n", __LINE__, __func__, searchConfigStr); @@ -145,8 +145,9 @@ bool searchConfigs(void *pConfigVar, char *searchConfigStr) else { INT_ERROR("%d:%s: Open %s failed\n", __LINE__, __func__, RDK_DSHAL_NAME); } - pthread_mutex_unlock(&dsLock); + pthread_mutex_unlock(&dsLock); INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); + return (*pConfigVar != NULL); } void dumpconfig(Configs_t *config) @@ -312,7 +313,7 @@ void AudioOutputPortConfig::load() //dsAudioPortConfig_t *pKPorts = NULL; int configSize, portSize; Configs_t configuration = {0}; - const char* searchVaribles[] = { + const char* searchVaribles[] = { "kAudioConfigs", "kAudioPorts", "kAudioConfigs_size", @@ -361,23 +362,23 @@ void AudioOutputPortConfig::load() } #endif INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); - ret = searchConfigs(configuration.pKConfigs, searchVaribles[0]); + ret = searchConfigs((void **)&configuration.pKConfigs, searchVaribles[0]); if(ret == true) { INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[2]); - ret = searchConfigs(configuration.pKConfigSize, (char *)searchVaribles[2]); + ret = searchConfigs((void **)&configuration.pKConfigSize, (char *)searchVaribles[2]); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[2]); } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); - ret = searchConfigs(configuration.pKPorts, searchVaribles[1]); + ret = searchConfigs((void **)&configuration.pKPorts, searchVaribles[1]); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[1]); } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[3]); - ret = searchConfigs((void *)configuration.pKPortSize, (char *)searchVaribles[3]); + ret = searchConfigs((void **)&configuration.pKPortSize, (char *)searchVaribles[3]); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[3]); From b1e94120f0549379ebb5b6b32c736e1c498ad3ee Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Mon, 10 Nov 2025 14:11:02 +0000 Subject: [PATCH 14/37] addressed review comments. --- ds/audioOutputPortConfig.cpp | 154 ++------------------------- ds/include/manager.hpp | 2 + ds/manager.cpp | 36 +++++++ ds/videoDeviceConfig.cpp | 64 ++++++++++- ds/videoOutputPortConfig.cpp | 198 +++++++++++++++++++++++++++++++++-- 5 files changed, 299 insertions(+), 155 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 2aa7ad9c..d01e78b6 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -35,18 +35,18 @@ #include "stdlib.h" #include "dslogger.h" #include +#include "manager.hpp" -#define DEBUG 1 -static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; +#define DEBUG 1 // Using for dumpconfig -typedef struct Configs +typedef struct audioConfigs { const dsAudioTypeConfig_t *pKConfigs; const dsAudioPortConfig_t *pKPorts; int *pKConfigSize; int *pKPortSize; -}Configs_t; +}audioConfigs_t; namespace device { @@ -121,6 +121,7 @@ List AudioOutputPortConfig::getSupportedTypes() return supportedTypes; } +#if 0 bool searchConfigs(void **pConfigVar, const char *searchConfigStr) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); @@ -149,8 +150,8 @@ bool searchConfigs(void **pConfigVar, const char *searchConfigStr) INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); return (*pConfigVar != NULL); } - -void dumpconfig(Configs_t *config) +#endif +void dumpconfig(audioConfigs_t *config) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: pKConfigs = %p\n", __LINE__, __func__, config->pKConfigs); @@ -163,8 +164,6 @@ void dumpconfig(Configs_t *config) { for (size_t i = 0; i < *(config->pKConfigSize); i++) { const dsAudioTypeConfig_t *typeCfg = &(config->pKConfigs[i]); - //AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); - //aPortType.enable(); INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); INT_INFO("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); INT_INFO("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); @@ -178,9 +177,6 @@ void dumpconfig(Configs_t *config) } if(config->pKPorts != NULL && *(config->pKPortSize) != -1) { - /* - * set up ports based on kPorts[] - */ for (size_t i = 0; i < *(config->pKPortSize); i++) { const dsAudioPortConfig_t *port = &(config->pKPorts[i]); INT_INFO("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); @@ -195,124 +191,11 @@ void dumpconfig(Configs_t *config) INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); } -#if 0 -bool searchConfigs(Configs_t *config, const char *searchVaribles[]) -{ - INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); - INT_INFO("%d:%s: searchVaribles[0] = %s\n", __LINE__, __func__, searchVaribles[0]); - INT_INFO("%d:%s: searchVaribles[1] = %s\n", __LINE__, __func__, searchVaribles[1]); - INT_INFO("%d:%s: searchVaribles[2] = %s\n", __LINE__, __func__, searchVaribles[2]); - INT_INFO("%d:%s: searchVaribles[3] = %s\n", __LINE__, __func__, searchVaribles[3]); - static int invalidsize = -1; - - pthread_mutex_lock(&dsLock); - - void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); - if (dllib) { - config->pKConfigs = (dsAudioTypeConfig_t *) dlsym(dllib, searchVaribles[0]); - if (config->pKConfigs) { - INT_INFO("kAudioConfigs is defined and loaded kConfigs1 = %p\r\n", config->pKConfigs); - } - else { - INT_ERROR("%d:%s: kAudioConfigs is not defined\n", __LINE__, __func__); - } - - config->pKConfigSize = (int *) dlsym(dllib, searchVaribles[2]); - if(config->pKConfigSize) - { - //kConfig_size_local = *pKConSize; - INT_INFO("%d:%s: kAudioConfigs_size is defined and loaded kConfig_size_local = %d\n", __LINE__, __func__, *config->pKConfigSize); - } - else - { - config->pKConfigSize = &invalidsize; - INT_ERROR("%d:%s: kAudioConfigs_size is not defined *(config->pKConfigSize)= %d\n", __LINE__, __func__, *config->pKConfigSize); - } - - config->pKPorts = (dsAudioPortConfig_t *) dlsym(dllib, searchVaribles[1]); - if (config->pKPorts) { - INT_INFO("%d:%s: kAudioPorts is defined and loaded config->pKPorts = %p\n", __LINE__, __func__, config->pKPorts); - } - else { - INT_ERROR("%d:%s: kAudioPorts is not defined\n", __LINE__, __func__); - } - - config->pKPortSize = (int *) dlsym(dllib, searchVaribles[3]); - if(config->pKPortSize) - { - INT_INFO("%d:%s: kAudioPorts_size is defined and loaded config->pKPortSize = %d\n", __LINE__, __func__, *config->pKPortSize); - } - else - { - config->pKPortSize = &invalidsize; - INT_ERROR("%d:%s: kAudioPorts_size is not defined *(config->pKPortSize)= %d\n", __LINE__, __func__, *config->pKPortSize); - } - dlclose(dllib); - } - else { - INT_ERROR("%d:%s: Opening libds-hal.so failed\n", __LINE__, __func__); - } - pthread_mutex_unlock(&dsLock); -#if DEBUG - INT_INFO("\n\n=========================================================================================================================\n\n"); - INT_INFO("\n%d:%s print configs using extern\n", __LINE__, __func__); - //printf("%d:%s: size of(kConfig_audio) = %d size of(kPort_audio) = %d\n", __LINE__, __func__, kConfig_size, kPort_size); - //kConfig_size_local = kConfig_size; - //kPort_size_local = kPort_size; - - if(config->pKConfigs != NULL && *(config->pKConfigSize) != -1) - { - for (size_t i = 0; i < *(config->pKConfigSize); i++) { - const dsAudioTypeConfig_t *typeCfg = &(config->pKConfigs[i]); - //AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); - //aPortType.enable(); - INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); - INT_INFO("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); - INT_INFO("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); - INT_INFO("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); - INT_INFO("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); - } - } - else - { - INT_ERROR("%d:%s: kAudioConfigs is NULL and kConfig_size_local is -1\n", __LINE__, __func__); - } - if(config->pKPorts != NULL && *(config->pKPortSize) != -1) - { - /* - * set up ports based on kPorts[] - */ - for (size_t i = 0; i < *(config->pKPortSize); i++) { - const dsAudioPortConfig_t *port = &(config->pKPorts[i]); - INT_INFO("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); - INT_INFO("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); - } - } - else - { - INT_ERROR("%d:%s: kAudioPorts is NULL and kPort_size_local is -1\n", __LINE__, __func__); - } - INT_INFO("\n\n=========================================================================================================================\n\n"); -#endif - if(config->pKConfigs == NULL || *(config->pKConfigSize) == -1 || config->pKPorts == NULL || *(config->pKPortSize) == -1) - { - printf("Either kAudioConfigs or kAudioPorts is NULL and pKConfigSize is -1, pKPortSize is -1\n"); - return false; - } - else - { - printf("Both kAudioConfigs and kAudioPorts, pKConfigSize, pKPortSize are valid\n"); - return true; - } -} -#endif void AudioOutputPortConfig::load() { - //dsAudioTypeConfig_t *pKConfigs = NULL; - //dsAudioPortConfig_t *pKPorts = NULL; int configSize, portSize; - Configs_t configuration = {0}; + audioConfigs_t configuration = {0}; const char* searchVaribles[] = { "kAudioConfigs", "kAudioPorts", @@ -343,24 +226,7 @@ void AudioOutputPortConfig::load() _aPortTypes.push_back(AudioOutputPortType(i)); } -#if 0 - ret = searchConfigs(&configuration, searchVaribles); - if (ret == true) - { - INT_INFO("Both kAudioConfigs and kAudioPorts, kConfig_size_local, kPort_size_local are valid\n"); - } - else - { - INT_ERROR("Invalid kAudioConfigs or kAudioPorts, kConfig_size_local, kPort_size_local\n"); - configuration.pKConfigs = kConfigs; - configSize = dsUTL_DIM(kConfigs); - configuration.pKConfigSize = &configSize; - configuration.pKPorts = kPorts; - portSize = dsUTL_DIM(kPorts); - configuration.pKPortSize = &portSize; - INT_INFO("configuration.pKConfigs =%p, configuration.pKPorts =%p, *(configuration.pKConfigSize) = %d, *(configuration.pKPortSize) = %d\n", configuration.pKConfigs, configuration.pKPorts, *(configuration.pKConfigSize), *(configuration.pKPortSize)); - } -#endif + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); ret = searchConfigs((void **)&configuration.pKConfigs, searchVaribles[0]); if(ret == true) @@ -386,7 +252,7 @@ void AudioOutputPortConfig::load() } else { - INT_ERROR("Invalid kAudioConfigs or kAudioPorts, pKConfigSize, pKPortSize\n"); + INT_ERROR("Read Old Configs\n"); configuration.pKConfigs = kConfigs; configSize = dsUTL_DIM(kConfigs); configuration.pKConfigSize = &configSize; diff --git a/ds/include/manager.hpp b/ds/include/manager.hpp index 2539569a..089e0e49 100644 --- a/ds/include/manager.hpp +++ b/ds/include/manager.hpp @@ -156,6 +156,8 @@ */ namespace device { +// Forward declaration for searchConfigs function +bool searchConfigs(void **pConfigVar, const char *searchConfigStr); /** * @class Manager diff --git a/ds/manager.cpp b/ds/manager.cpp index eedcd8b2..2fc92ad2 100644 --- a/ds/manager.cpp +++ b/ds/manager.cpp @@ -43,6 +43,12 @@ #include "exception.hpp" #include #include +#include +#include "dsHALConfig.h" + + +static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; + /** * @file manager.cpp @@ -154,6 +160,36 @@ void Manager::load() printf("%d:%s load completed\n", __LINE__, __FUNCTION__); } +bool searchConfigs(void **pConfigVar, const char *searchConfigStr) +{ + INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); + INT_INFO("%d:%s: searchConfigStr = %s\n", __LINE__, __func__, searchConfigStr); + + static int invalidsize = -1; + + pthread_mutex_lock(&dsLock); + + void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); + if (dllib) { + *pConfigVar = (void *) dlsym(dllib, searchConfigStr); + if (*pConfigVar != NULL) { + INT_INFO("%s is defined and loaded pConfigVar= %p\r\n", searchConfigStr, *pConfigVar); + } + else { + INT_ERROR("%d:%s: %s is not defined\n", __LINE__, __func__, searchConfigStr); + } + + dlclose(dllib); + } + else { + INT_ERROR("%d:%s: Open %s failed\n", __LINE__, __func__, RDK_DSHAL_NAME); + } + pthread_mutex_unlock(&dsLock); + INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); + return (*pConfigVar != NULL); +} + + /** * @fn void Manager::DeInitialize() * @brief This API is used to deinitialize the device settings module. diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index 0a25b478..c612e125 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -33,7 +33,9 @@ #include "videoDFC.hpp" #include #include "dslogger.h" +#include "manager.hpp" +#define DEBUG 1 // Using for dumpconfig namespace device { @@ -86,8 +88,42 @@ VideoDFC & VideoDeviceConfig::getDefaultDFC() return _vDFCs.back(); } +void dumpconfig(dsVideoConfig_t *pKVideoDeviceConfigs, int videoDeviceConfigs_size) +{ + INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); + INT_INFO("%d:%s: pKVideoDeviceConfigs = %p\n", __LINE__, __func__, pKVideoDeviceConfigs); + INT_INFO("%d:%s: videoDeviceConfigs_size = %d\n", __LINE__, __func__, videoDeviceConfigs_size); + + INT_INFO("\n\n=========================================================================================================================\n\n"); + if(pKVideoDeviceConfigs != NULL && videoDeviceConfigs_size != -1) + { + for (size_t i = 0; i < videoDeviceConfigs_size; i++) { + INT_INFO("pKVideoDeviceConfigs[%d].numSupportedDFCs = %d\n ", i, pKVideoDeviceConfigs[i]->numSupportedDFCs); + for (size_t j = 0; j < pKVideoDeviceConfigs[i]->numSupportedDFCs; j++) { + INT_INFO(" Address of pKVideoDeviceConfigs[%d].supportedDFCs[%d] = %d", i, j, pKVideoDeviceConfigs[i]->supportedDFCs[j]); + } + } + } + else + { + INT_ERROR("%d:%s: kVideoDeviceConfigs is NULL and videoDeviceConfigs_size is -1\n", __LINE__, __func__); + } + + INT_INFO("\n\n=========================================================================================================================\n\n"); + INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); +} + void VideoDeviceConfig::load() { + int configSize, portSize, invalid_size = -1; + dsVideoConfig_t *pKVideoDeviceConfigs = NULL; + int *pKVideoDeviceConfigs_size = NULL; + const char* searchVaribles[] = { + "kVideoDeviceConfigs", + "kVideoDeviceConfigs_size", + }; + bool ret = false; + /* * Load Constants First. */ @@ -95,16 +131,38 @@ void VideoDeviceConfig::load() _vDFCs.push_back(VideoDFC(i)); } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); + ret = searchConfigs((void **)&pKVideoDeviceConfigs, searchVaribles[0]); + if(ret == true) + { + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); + ret = searchConfigs((void **)&pKVideoDeviceConfigs_size, (char *)searchVaribles[1]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[1]); + } + } + else + { + pKVideoDeviceConfigs = (dsVideoConfig_t *)kConfigs; + *pKVideoDeviceConfigs_size = dsUTL_DIM(kConfigs); + } + #if DEBUG + dumpconfig(pKVideoDeviceConfigs, *pKVideoDeviceConfigs_size); + #endif + /* * Initialize Video Devices (supported DFCs etc.) */ - for (size_t i = 0; i < dsUTL_DIM(kConfigs); i++) { + for (size_t i = 0; i < *pKVideoDeviceConfigs_size; i++) { _vDevices.push_back(VideoDevice(i)); - for (size_t j = 0; j < kConfigs[i].numSupportedDFCs; j++) { - _vDevices.at(i).addDFC(VideoDFC::getInstance(kConfigs[i].supportedDFCs[j])); + for (size_t j = 0; j < pKVideoDeviceConfigs[i].numSupportedDFCs; j++) { + _vDevices.at(i).addDFC(VideoDFC::getInstance(pKVideoDeviceConfigs[i].supportedDFCs[j])); } } + + } void VideoDeviceConfig::release() diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index 8f1e475c..55482f80 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -50,6 +50,18 @@ #include using namespace std; +#define DEBUG 1 // Using for dumpconfig + +typedef struct videoPortConfigs +{ + const dsVideoPortTypeConfig_t *pKConfigs; + int *pKVideoPortConfigs_size; + const kVideoPortPorts *pKPorts; + int *pKVideoPortPorts_size; + const dsVideoPortResolution_t *pKResolutionsSettings; + int *pKResolutionsSettings_size; +}videoPortConfigs_t; + namespace device { static VideoResolution* defaultVideoResolution; @@ -263,10 +275,124 @@ List VideoOutputPortConfig::getSupportedResolutions(bool isIgn return supportedResolutions; } +typedef struct videoPortConfigs +{ + const dsVideoPortTypeConfig_t *pKConfigs; + int *pKVideoPortConfigs_size; + const kVideoPortPorts *pKPorts; + int *pKVideoPortPorts_size; + const dsVideoPortResolution_t *pKResolutionsSettings; + int *pKResolutionsSettings_size; +}videoPortConfigs_t; + +void dumpconfig(videoPortConfigs_t *config) +{ + INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); + INT_INFO("%d:%s: pKConfigs = %p\n", __LINE__, __func__, config->pKConfigs); + INT_INFO("%d:%s: pKConfigSize pointer %p = %d\n", __LINE__, __func__, config->pKVideoPortConfigs_size, *(config->pKVideoPortConfigs_size)); + INT_INFO("%d:%s: pKPorts = %p\n", __LINE__, __func__, config->pKPorts); + INT_INFO("%d:%s: pKPortSize pointer %p = %d\n", __LINE__, __func__, config->pKVideoPortPorts_size, *(config->pKVideoPortPorts_size)); + INT_INFO("%d:%s: pKResolutionsSettings = %p\n", __LINE__, __func__, config->pKResolutionsSettings); + INT_INFO("%d:%s: pKResolutionsSettingsSize pointer %p = %d\n", __LINE__, __func__, config->pKResolutionsSettings_size, *(config->pKResolutionsSettings_size)); + + INT_INFO("\n\n=========================================================================================================================\n\n"); + if(config->pKConfigs != NULL && *(config->pKVideoPortConfigs_size) != -1 && + config->pKPorts != NULL && *(config->pKVideoPortPorts_size) != -1 && + config->pKResolutionsSettings != NULL && *(config->pKResolutionsSettings_size) != -1 ) + { + INT_INFO("\n\n####################################################################### \n\n"); + INT_INFO("%d:%s: Dumping Resolutions Settings\n", __LINE__, __func__); + for (size_t i = 0; i < *(config->pKResolutionsSettings_size); i++) { + dsVideoPortResolution_t *resolution = &(config->pKResolutionsSettings[i]); + INT_INFO("%d:%s: resolution->name = %s\n", __LINE__, __func__, resolution->name); + INT_INFO("%d:%s: resolution->pixelResolution= %d\n", __LINE__, __func__, resolution->pixelResolution); + INT_INFO("%d:%s: resolution->aspectRatio= %d\n", __LINE__, __func__, resolution->aspectRatio); + INT_INFO("%d:%s: resolution->stereoScopicMode= %d\n", __LINE__, __func__, resolution->stereoScopicMode); + INT_INFO("%d:%s: resolution->frameRate= %d\n", __LINE__, __func__, resolution->frameRate); + INT_INFO("%d:%s: resolution->interlaced= %d\n", __LINE__, __func__, resolution->interlaced); + } + INT_INFO("\n\n####################################################################### \n\n"); + #if 0 + /*.typeId = */ dsVIDEOPORT_TYPE_INTERNAL, + /*.name = */ "INTERNAL", + /*.dtcpSupported = */ false, + /*.hdcpSupported = */ true, + /*.restrictedResollution = */ -1, + /*.numSupportedResolutions = */ dsUTL_DIM(kResolutions), // 0 means "Info available at runtime" + /*.supportedResolutons = */ kResolutions, + #endif + INT_INFO("\n\n####################################################################### \n\n"); + INT_INFO("%d:%s: Dumping Video Port Configurations\n", __LINE__, __func__); + for (size_t i = 0; i < *(config->pKVideoPortConfigs_size); i++) + { + const dsVideoPortTypeConfig_t *typeCfg = &(config->pKConfigs[i]); + INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); + INT_INFO("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); + INT_INFO("%d:%s: typeCfg->dtcpSupported= %d\n", __LINE__, __func__, typeCfg->dtcpSupported); + INT_INFO("%d:%s: typeCfg->hdcpSupported = %d\n", __LINE__, __func__, typeCfg->hdcpSupported); + INT_INFO("%d:%s: typeCfg->restrictedResollution = %d\n", __LINE__, __func__, typeCfg->restrictedResollution); + INT_INFO("%d:%s: typeCfg->numSupportedResolutions= %d\n", __LINE__, __func__, typeCfg->numSupportedResolutions); + #if 0 + typedef struct _dsVideoPortResolution_t { + char name[32]; ///< Name the resolution + dsVideoResolution_t pixelResolution; ///< The resolution associated with the name + dsVideoAspectRatio_t aspectRatio; ///< The associated aspect ratio + dsVideoStereoScopicMode_t stereoScopicMode; ///< The associated stereoscopic mode + dsVideoFrameRate_t frameRate; ///< The associated frame rate + bool interlaced; ///< The associated scan mode( @a true if interlaced, @a false if progressive ) + }dsVideoPortResolution_t; + #endif + INT_INFO("%d:%s: typeCfg->supportedResolutons = %p\n", __LINE__, __func__, typeCfg->supportedResolutons); + INT_INFO("%d:%s: typeCfg->supportedResolutons->name = %s\n", __LINE__, __func__, typeCfg->supportedResolutons->name); + INT_INFO("%d:%s: typeCfg->supportedResolutons->pixelResolution= %d\n", __LINE__, __func__, typeCfg->supportedResolutons->pixelResolution); + INT_INFO("%d:%s: typeCfg->supportedResolutons->aspectRatio= %d\n", __LINE__, __func__, typeCfg->supportedResolutons->aspectRatio); + INT_INFO("%d:%s: typeCfg->supportedResolutons->stereoScopicMode= %d\n", __LINE__, __func__, typeCfg->supportedResolutons->stereoScopicMode); + INT_INFO("%d:%s: typeCfg->supportedResolutons->frameRate= %d\n", __LINE__, __func__, typeCfg->supportedResolutons->frameRate); + INT_INFO("%d:%s: typeCfg->supportedResolutons->interlaced= %d\n", __LINE__, __func__, typeCfg->supportedResolutons->interlaced); + } + INT_INFO("\n\n####################################################################### \n\n"); + #if 0 + { + /*.typeId = */ {dsVIDEOPORT_TYPE_INTERNAL, 0}, + /* connectedAOP */ {dsAUDIOPORT_TYPE_SPEAKER, 0}, + /*.defaultResolution = */ "1080i50" + } + #endif + INT_INFO("\n\n####################################################################### \n\n"); + INT_INFO("%d:%s: Dumping Video Port Connections\n", __LINE__, __func__); + for (size_t i = 0; i < *(configuration.pKVideoPortPorts_size); i++) { + const dsVideoPortPortConfig_t *port = &(configuration.pKPorts[i]); + INT_INFO("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); + INT_INFO("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); + INT_INFO("%d:%s: port->connectedAOP.type = %d\n", __LINE__, __func__, port->connectedAOP.type); + INT_INFO("%d:%s: port->connectedAOP.index = %d\n", __LINE__, __func__, port->connectedAOP.index); + INT_INFO("%d:%s: port->defaultResolution = %s\n", __LINE__, __func__, port->defaultResolution); + } + INT_INFO("\n\n####################################################################### \n\n"); + } + else + { + INT_ERROR("%d:%s: pKConfigs or pKPorts or pKResolutionsSettings is NULL, and pKVideoPortConfigs_size or pKVideoPortPorts_size or pKResolutionsSettings_size is -1\n", __LINE__, __func__); + } + INT_INFO("\n\n=========================================================================================================================\n\n"); + INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); +} void VideoOutputPortConfig::load() { + int configSize, portSize, resolutionSize; + videoPortConfigs_t configuration = {0}; + const char* searchVaribles[] = { + "kVideoPortConfigs", + "kVideoPortConfigs_size", + "kVideoPortPorts", + "kVideoPortPorts_size", + "kResolutionsSettings", + "kResolutionsSettings_size" + }; + bool ret = false; + try { /* * Load Constants First. @@ -288,12 +414,68 @@ void VideoOutputPortConfig::load() _vPortTypes.push_back(VideoOutputPortType((int)i)); } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); + ret = searchConfigs((void **)&configuration.pKConfigs, searchVaribles[0]); + if(ret == true) + { + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); + ret = searchConfigs((void **)&configuration.pKConfigSize, (char *)searchVaribles[1]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[1]); + } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[2]); + ret = searchConfigs((void **)&configuration.pKPorts, searchVaribles[2]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[2]); + } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[3]); + ret = searchConfigs((void **)&configuration.pKPortSize, (char *)searchVaribles[3]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[3]); + } + // Resolutions + ret = searchConfigs((void **)&configuration.pKResolutionsSettings, searchVaribles[4]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[4]); + } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[5]); + ret = searchConfigs((void **)&configuration.pKResolutionsSettings_size, (char *)searchVaribles[5]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[5]); + } + } + else + { + INT_ERROR("Read Old Configs\n"); + configuration.pKConfigs = kConfigs; + configSize = dsUTL_DIM(kConfigs); + configuration.pKConfigSize = &configSize; + configuration.pKPorts = kPorts; + portSize = dsUTL_DIM(kPorts); + configuration.pKPortSize = &portSize; + configuration.pKResolutionsSettings = kResolutions; + resolutionSize = dsUTL_DIM(kResolutions); + configuration.pKResolutionsSettings_size = &resolutionSize; + INT_INFO("configuration.pKConfigs =%p, *(configuration.pKConfigSize) = %d\n", configuration.pKConfigs, *(configuration.pKConfigSize)); + INT_INFO("configuration.pKPorts =%p, *(configuration.pKPortSize) = %d\n", configuration.pKPorts, *(configuration.pKPortSize)); + INT_INFO("configuration.pKResolutionsSettings =%p, *(configuration.pKResolutionsSettings_size) = %d\n", configuration.pKResolutionsSettings, *(configuration.pKResolutionsSettings_size)); + } + #if DEBUG + dumpconfig(&configuration); + #endif + + /* Initialize a set of supported resolutions * */ - size_t numResolutions = dsUTL_DIM(kResolutions); - for (size_t i = 0; i < numResolutions; i++) { - dsVideoPortResolution_t *resolution = &kResolutions[i]; + //size_t numResolutions = dsUTL_DIM(kResolutions); + for (size_t i = 0; i < *(configuration.pKResolutionsSettings_size); i++) { + dsVideoPortResolution_t *resolution = &(configuration.pKResolutionsSettings[i]); {std::lock_guard lock(gSupportedResolutionsMutex); _supportedResolutions.push_back( VideoResolution( @@ -312,9 +494,9 @@ void VideoOutputPortConfig::load() * Initialize Video portTypes (Only Enable POrts) * and its port instances (curr resolution) */ - for (size_t i = 0; i < dsUTL_DIM(kConfigs); i++) + for (size_t i = 0; i < *(configuration.pKVideoPortConfigs_size); i++) { - const dsVideoPortTypeConfig_t *typeCfg = &kConfigs[i]; + const dsVideoPortTypeConfig_t *typeCfg = &()configuration.pKConfigs[i]; VideoOutputPortType &vPortType = VideoOutputPortType::getInstance(typeCfg->typeId); vPortType.enable(); vPortType.setRestrictedResolution(typeCfg->restrictedResollution); @@ -323,12 +505,12 @@ void VideoOutputPortConfig::load() /* * set up ports based on kPorts[] */ - for (size_t i = 0; i < dsUTL_DIM(kPorts); i++) { - const dsVideoPortPortConfig_t *port = &kPorts[i]; + for (size_t i = 0; i < *(configuration.pKVideoPortPorts_size); i++) { + const dsVideoPortPortConfig_t *port = &(configuration.pKPorts[i]); _vPorts.push_back( VideoOutputPort((port->id.type), port->id.index, i, - AudioOutputPortType::getInstance(kPorts[i].connectedAOP.type).getPort(kPorts[i].connectedAOP.index).getId(), + AudioOutputPortType::getInstance(configuration.pKPorts[i].connectedAOP.type).getPort(configuration.pKPorts[i].connectedAOP.index).getId(), std::string(port->defaultResolution))); _vPortTypes.at(port->id.type).addPort(_vPorts.at(i)); From 661e8ec6de7b7d92250a17250e08f6fa5067bd06 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Tue, 11 Nov 2025 15:27:31 +0000 Subject: [PATCH 15/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by:gsanto722 --- ds/videoDeviceConfig.cpp | 14 +++++++-- ds/videoOutputPortConfig.cpp | 57 +++++++++++++++++++----------------- 2 files changed, 41 insertions(+), 30 deletions(-) diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index c612e125..965aecf2 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -88,19 +88,27 @@ VideoDFC & VideoDeviceConfig::getDefaultDFC() return _vDFCs.back(); } + void dumpconfig(dsVideoConfig_t *pKVideoDeviceConfigs, int videoDeviceConfigs_size) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: pKVideoDeviceConfigs = %p\n", __LINE__, __func__, pKVideoDeviceConfigs); INT_INFO("%d:%s: videoDeviceConfigs_size = %d\n", __LINE__, __func__, videoDeviceConfigs_size); + #if 0 + typedef struct _dsVideoConfig_t { + size_t numSupportedDFCs; /*!< Number of zoom modes supported */ + const dsVideoZoom_t *supportedDFCs; /*!< List of zoom modes supported */ + dsVideoZoom_t defaultDFC; /*!< The default zoom mode */ + } dsVideoConfig_t; + #endif INT_INFO("\n\n=========================================================================================================================\n\n"); if(pKVideoDeviceConfigs != NULL && videoDeviceConfigs_size != -1) { for (size_t i = 0; i < videoDeviceConfigs_size; i++) { - INT_INFO("pKVideoDeviceConfigs[%d].numSupportedDFCs = %d\n ", i, pKVideoDeviceConfigs[i]->numSupportedDFCs); - for (size_t j = 0; j < pKVideoDeviceConfigs[i]->numSupportedDFCs; j++) { - INT_INFO(" Address of pKVideoDeviceConfigs[%d].supportedDFCs[%d] = %d", i, j, pKVideoDeviceConfigs[i]->supportedDFCs[j]); + INT_INFO("pKVideoDeviceConfigs[%d].numSupportedDFCs = %d\n ", i, pKVideoDeviceConfigs[i].numSupportedDFCs); + for (size_t j = 0; j < pKVideoDeviceConfigs[i].numSupportedDFCs; j++) { + INT_INFO(" Address of pKVideoDeviceConfigs[%d].supportedDFCs[%d] = %d", i, j, pKVideoDeviceConfigs[i].supportedDFCs[j]); } } } diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index 55482f80..9fbe7637 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -42,6 +42,7 @@ #include "videoResolution.hpp" #include "dslogger.h" #include "host.hpp" +#include "manager.hpp" #include @@ -56,9 +57,9 @@ typedef struct videoPortConfigs { const dsVideoPortTypeConfig_t *pKConfigs; int *pKVideoPortConfigs_size; - const kVideoPortPorts *pKPorts; + const dsVideoPortPortConfig_t *pKPorts; int *pKVideoPortPorts_size; - const dsVideoPortResolution_t *pKResolutionsSettings; + dsVideoPortResolution_t *pKResolutionsSettings; int *pKResolutionsSettings_size; }videoPortConfigs_t; @@ -275,15 +276,6 @@ List VideoOutputPortConfig::getSupportedResolutions(bool isIgn return supportedResolutions; } -typedef struct videoPortConfigs -{ - const dsVideoPortTypeConfig_t *pKConfigs; - int *pKVideoPortConfigs_size; - const kVideoPortPorts *pKPorts; - int *pKVideoPortPorts_size; - const dsVideoPortResolution_t *pKResolutionsSettings; - int *pKResolutionsSettings_size; -}videoPortConfigs_t; void dumpconfig(videoPortConfigs_t *config) { @@ -327,6 +319,17 @@ void dumpconfig(videoPortConfigs_t *config) for (size_t i = 0; i < *(config->pKVideoPortConfigs_size); i++) { const dsVideoPortTypeConfig_t *typeCfg = &(config->pKConfigs[i]); + #if 0 + typedef struct _dsVideoPortTypeConfig_t { + dsVideoPortType_t typeId; ///< The video output type + const char *name; ///< Name of the video output port + bool dtcpSupported; ///< Is DTCP supported? + bool hdcpSupported; ///< Is HDCP supported? + int32_t restrictedResollution; ///< Any restricted resolution; -1 if no. + size_t numSupportedResolutions; ///< Number of supported resolutions + dsVideoPortResolution_t *supportedResolutions; ///< List of supported resolutions + } dsVideoPortTypeConfig_t; + #endif INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); INT_INFO("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); INT_INFO("%d:%s: typeCfg->dtcpSupported= %d\n", __LINE__, __func__, typeCfg->dtcpSupported); @@ -343,13 +346,13 @@ void dumpconfig(videoPortConfigs_t *config) bool interlaced; ///< The associated scan mode( @a true if interlaced, @a false if progressive ) }dsVideoPortResolution_t; #endif - INT_INFO("%d:%s: typeCfg->supportedResolutons = %p\n", __LINE__, __func__, typeCfg->supportedResolutons); - INT_INFO("%d:%s: typeCfg->supportedResolutons->name = %s\n", __LINE__, __func__, typeCfg->supportedResolutons->name); - INT_INFO("%d:%s: typeCfg->supportedResolutons->pixelResolution= %d\n", __LINE__, __func__, typeCfg->supportedResolutons->pixelResolution); - INT_INFO("%d:%s: typeCfg->supportedResolutons->aspectRatio= %d\n", __LINE__, __func__, typeCfg->supportedResolutons->aspectRatio); - INT_INFO("%d:%s: typeCfg->supportedResolutons->stereoScopicMode= %d\n", __LINE__, __func__, typeCfg->supportedResolutons->stereoScopicMode); - INT_INFO("%d:%s: typeCfg->supportedResolutons->frameRate= %d\n", __LINE__, __func__, typeCfg->supportedResolutons->frameRate); - INT_INFO("%d:%s: typeCfg->supportedResolutons->interlaced= %d\n", __LINE__, __func__, typeCfg->supportedResolutons->interlaced); + INT_INFO("%d:%s: typeCfg->supportedResolutions = %p\n", __LINE__, __func__, typeCfg->supportedResolutions); + INT_INFO("%d:%s: typeCfg->supportedResolutions->name = %s\n", __LINE__, __func__, typeCfg->supportedResolutions->name); + INT_INFO("%d:%s: typeCfg->supportedResolutions->pixelResolution= %d\n", __LINE__, __func__, typeCfg->supportedResolutions->pixelResolution); + INT_INFO("%d:%s: typeCfg->supportedResolutions->aspectRatio= %d\n", __LINE__, __func__, typeCfg->supportedResolutions->aspectRatio); + INT_INFO("%d:%s: typeCfg->supportedResolutions->stereoScopicMode= %d\n", __LINE__, __func__, typeCfg->supportedResolutions->stereoScopicMode); + INT_INFO("%d:%s: typeCfg->supportedResolutions->frameRate= %d\n", __LINE__, __func__, typeCfg->supportedResolutions->frameRate); + INT_INFO("%d:%s: typeCfg->supportedResolutions->interlaced= %d\n", __LINE__, __func__, typeCfg->supportedResolutions->interlaced); } INT_INFO("\n\n####################################################################### \n\n"); #if 0 @@ -361,8 +364,8 @@ void dumpconfig(videoPortConfigs_t *config) #endif INT_INFO("\n\n####################################################################### \n\n"); INT_INFO("%d:%s: Dumping Video Port Connections\n", __LINE__, __func__); - for (size_t i = 0; i < *(configuration.pKVideoPortPorts_size); i++) { - const dsVideoPortPortConfig_t *port = &(configuration.pKPorts[i]); + for (size_t i = 0; i < *(config->pKVideoPortPorts_size); i++) { + const dsVideoPortPortConfig_t *port = &(config->pKPorts[i]); INT_INFO("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); INT_INFO("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); INT_INFO("%d:%s: port->connectedAOP.type = %d\n", __LINE__, __func__, port->connectedAOP.type); @@ -419,7 +422,7 @@ void VideoOutputPortConfig::load() if(ret == true) { INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); - ret = searchConfigs((void **)&configuration.pKConfigSize, (char *)searchVaribles[1]); + ret = searchConfigs((void **)&configuration.pKVideoPortConfigs_size, (char *)searchVaribles[1]); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[1]); @@ -431,7 +434,7 @@ void VideoOutputPortConfig::load() INT_ERROR("%s is not defined\n", searchVaribles[2]); } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[3]); - ret = searchConfigs((void **)&configuration.pKPortSize, (char *)searchVaribles[3]); + ret = searchConfigs((void **)&configuration.pKVideoPortPorts_size, (char *)searchVaribles[3]); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[3]); @@ -454,15 +457,15 @@ void VideoOutputPortConfig::load() INT_ERROR("Read Old Configs\n"); configuration.pKConfigs = kConfigs; configSize = dsUTL_DIM(kConfigs); - configuration.pKConfigSize = &configSize; + configuration.pKVideoPortConfigs_size = &configSize; configuration.pKPorts = kPorts; portSize = dsUTL_DIM(kPorts); - configuration.pKPortSize = &portSize; + configuration.pKVideoPortPorts_size = &portSize; configuration.pKResolutionsSettings = kResolutions; resolutionSize = dsUTL_DIM(kResolutions); configuration.pKResolutionsSettings_size = &resolutionSize; - INT_INFO("configuration.pKConfigs =%p, *(configuration.pKConfigSize) = %d\n", configuration.pKConfigs, *(configuration.pKConfigSize)); - INT_INFO("configuration.pKPorts =%p, *(configuration.pKPortSize) = %d\n", configuration.pKPorts, *(configuration.pKPortSize)); + INT_INFO("configuration.pKConfigs =%p, *(configuration.pKConfigSize) = %d\n", configuration.pKConfigs, *(configuration.pKVideoPortConfigs_size)); + INT_INFO("configuration.pKPorts =%p, *(configuration.pKPortSize) = %d\n", configuration.pKPorts, *(configuration.pKVideoPortPorts_size)); INT_INFO("configuration.pKResolutionsSettings =%p, *(configuration.pKResolutionsSettings_size) = %d\n", configuration.pKResolutionsSettings, *(configuration.pKResolutionsSettings_size)); } #if DEBUG @@ -496,7 +499,7 @@ void VideoOutputPortConfig::load() */ for (size_t i = 0; i < *(configuration.pKVideoPortConfigs_size); i++) { - const dsVideoPortTypeConfig_t *typeCfg = &()configuration.pKConfigs[i]; + const dsVideoPortTypeConfig_t *typeCfg = &(configuration.pKConfigs[i]); VideoOutputPortType &vPortType = VideoOutputPortType::getInstance(typeCfg->typeId); vPortType.enable(); vPortType.setRestrictedResolution(typeCfg->restrictedResollution); From bbe42f2fd6c2b557d934e57e879d697aca24aa84 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 12 Nov 2025 10:46:22 +0000 Subject: [PATCH 16/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by:gsanto722 --- ds/frontPanelConfig.cpp | 99 ++++++++++++++++++++++++++++++++++++---- ds/videoDeviceConfig.cpp | 35 +++++++++----- 2 files changed, 115 insertions(+), 19 deletions(-) diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index e8c932b2..2a1a6ee0 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -41,9 +41,18 @@ #include "frontPanelSettings.hpp" #include "illegalArgumentException.hpp" #include "dslogger.h" +#include "manager.hpp" using namespace std; +typedef struct fpdConfigs +{ + const dsFPDColorConfig_t *pKFPDIndicatorColors; + const dsFPDIndicatorConfig_t *pKIndicators; + int *pKFPDIndicatorColors_size; + int *pKIndicators_size; +}fpdConfigs_t; + namespace device { /** @@ -337,6 +346,27 @@ List FrontPanelConfig::getTextDisplays() return rTexts; } +void dumpconfig(fpdConfigs_t *configuration) +{ + // Dump the configuration details + printf("Dumping Front Panel Configuration Details:\n"); + printf("Indicator Colors:\n"); + for (size_t i = 0; i < *(configuration->pKFPDIndicatorColors_size); i++) { + printf(" Color ID: %d, Name: %s\n", + configuration->pKFPDIndicatorColors[i].id, + configuration->pKFPDIndicatorColors[i].name); + } + + printf("Indicators:\n"); + for (size_t i = 0; i < *(configuration->pKIndicators_size); i++) { + printf(" Indicator ID: %d, Max Brightness: %d, Max Cycle Rate: %d, Levels: %d, Color Mode: %d\n", + configuration->pKIndicators[i].id, + configuration->pKIndicators[i].maxBrightness, + configuration->pKIndicators[i].maxCycleRate, + configuration->pKIndicators[i].levels, + configuration->pKIndicators[i].colorMode); + } +} /** * @fn FrontPanelConfig::load() @@ -352,18 +382,71 @@ void FrontPanelConfig::load() * 1. Create Supported Colors. * 2. Create Indicators. */ + int indicatorSize, indicatorColorSize, invalid_size = -1; + fpdConfigs_t configuration = {0}; + + const char* searchVaribles[] = { + "kFPDIndicatorColors", + "kFPDIndicatorColors_size", + "kIndicators", + "kIndicators_size" + }; + bool ret = false; + + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); + ret = searchConfigs((void **)&configuration.pKFPDIndicatorColors, searchVaribles[0]); + if(ret == true) + { + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); + ret = searchConfigs((void **)&configuration.pKFPDIndicatorColors_size, (char *)searchVaribles[1]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[1]); + configuration.pKFPDIndicatorColors_size = &invalid_size; + } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[2]); + ret = searchConfigs((void **)&configuration.pKIndicators, searchVaribles[2]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[2]); + } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[3]); + ret = searchConfigs((void **)&configuration.pKIndicators_size, (char *)searchVaribles[3]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[3]); + configuration.pKIndicators_size = &invalid_size; + } + } + else + { + INT_ERROR("Read Old Configs\n"); + configuration.pKFPDIndicatorColors = kIndicatorColors; + indicatorColorSize = dsUTL_DIM(kIndicatorColors); + configuration.pKFPDIndicatorColors_size = &indicatorColorSize; + configuration.pKIndicators = kIndicators; + indicatorSize = dsUTL_DIM(kIndicators); + configuration.pKIndicators_size = &indicatorSize; + + INT_INFO("configuration.pKFPDIndicatorColors =%p, *(configuration.pKFPDIndicatorColors_size) = %d\n", configuration.pKFPDIndicatorColors, *(configuration.pKFPDIndicatorColors_size)); + INT_INFO("configuration.pKIndicators =%p, *(configuration.pKIndicators_size) = %d\n", configuration.pKIndicators, *(configuration.pKIndicators_size)); + } + #if DEBUG + //dumpconfig(&configuration); + #endif + { - for (size_t i = 0; i < dsUTL_DIM(kIndicatorColors); i++) { - _colors.push_back(FrontPanelIndicator::Color(kIndicatorColors[i].id)); + for (size_t i = 0; i < *(configuration.pKFPDIndicatorColors_size); i++) { + _colors.push_back(FrontPanelIndicator::Color(configuration.pKFPDIndicatorColors[i].id)); } - for (size_t i = 0; i < dsUTL_DIM(kIndicators); i++) { + for (size_t i = 0; i < *(configuration.pKIndicators_size); i++) { /* All indicators support a same set of colors */ - _indicators.push_back(FrontPanelIndicator(kIndicators[i].id, - kIndicators[i].maxBrightness, - kIndicators[i].maxCycleRate, - kIndicators[i].levels, - kIndicators[i].colorMode)); + _indicators.push_back(FrontPanelIndicator(configuration.pKIndicators[i].id, + configuration.pKIndicators[i].maxBrightness, + configuration.pKIndicators[i].maxCycleRate, + configuration.pKIndicators[i].levels, + configuration.pKIndicators[i].colorMode)); } } diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index 965aecf2..3c69e421 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -121,11 +121,18 @@ void dumpconfig(dsVideoConfig_t *pKVideoDeviceConfigs, int videoDeviceConfigs_si INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); } +typedef struct videoDeviceConfig +{ + dsVideoConfig_t *pKVideoDeviceConfigs; + int *pKVideoDeviceConfigs_size; +}videoDeviceConfig_t; + void VideoDeviceConfig::load() { - int configSize, portSize, invalid_size = -1; - dsVideoConfig_t *pKVideoDeviceConfigs = NULL; - int *pKVideoDeviceConfigs_size = NULL; + int configSize, invalid_size = -1; + //dsVideoConfig_t *pKVideoDeviceConfigs = NULL; + //int *pKVideoDeviceConfigs_size = NULL; + videoDeviceConfig_t videoDeviceConfig = {0}; const char* searchVaribles[] = { "kVideoDeviceConfigs", "kVideoDeviceConfigs_size", @@ -140,33 +147,39 @@ void VideoDeviceConfig::load() } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); - ret = searchConfigs((void **)&pKVideoDeviceConfigs, searchVaribles[0]); + //ret = searchConfigs((void **)&pKVideoDeviceConfigs, searchVaribles[0]); + ret = searchConfigs((void **)&(videoDeviceConfig.pKVideoDeviceConfigs), searchVaribles[0]); if(ret == true) { INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); - ret = searchConfigs((void **)&pKVideoDeviceConfigs_size, (char *)searchVaribles[1]); + ret = searchConfigs((void **)&(videoDeviceConfig.pKVideoDeviceConfigs_size), (char *)searchVaribles[1]); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[1]); + videoDeviceConfig.pKVideoDeviceConfigs_size = &invalid_size; } } else { - pKVideoDeviceConfigs = (dsVideoConfig_t *)kConfigs; - *pKVideoDeviceConfigs_size = dsUTL_DIM(kConfigs); + //pKVideoDeviceConfigs = (dsVideoConfig_t *)kConfigs; + //*pKVideoDeviceConfigs_size = dsUTL_DIM(kConfigs); + INT_INFO("Read Old Configs\n"); + videoDeviceConfig.pKVideoDeviceConfigs = (dsVideoConfig_t *)kConfigs; + configSize = dsUTL_DIM(kConfigs); + videoDeviceConfig.pKVideoDeviceConfigs_size = &configSize; } #if DEBUG - dumpconfig(pKVideoDeviceConfigs, *pKVideoDeviceConfigs_size); + dumpconfig(videoDeviceConfig.pKVideoDeviceConfigs, *(videoDeviceConfig.pKVideoDeviceConfigs_size)); #endif /* * Initialize Video Devices (supported DFCs etc.) */ - for (size_t i = 0; i < *pKVideoDeviceConfigs_size; i++) { + for (size_t i = 0; i < *(videoDeviceConfig.pKVideoDeviceConfigs_size); i++) { _vDevices.push_back(VideoDevice(i)); - for (size_t j = 0; j < pKVideoDeviceConfigs[i].numSupportedDFCs; j++) { - _vDevices.at(i).addDFC(VideoDFC::getInstance(pKVideoDeviceConfigs[i].supportedDFCs[j])); + for (size_t j = 0; j < videoDeviceConfig.pKVideoDeviceConfigs[i].numSupportedDFCs; j++) { + _vDevices.at(i).addDFC(VideoDFC::getInstance(videoDeviceConfig.pKVideoDeviceConfigs[i].supportedDFCs[j])); } } From 299bf52c87aa6a1c6acf39d70cc7538d9dfb9730 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 12 Nov 2025 12:23:41 +0000 Subject: [PATCH 17/37] fix build issue --- ds/frontPanelConfig.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index 2a1a6ee0..6b439c42 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -352,9 +352,9 @@ void dumpconfig(fpdConfigs_t *configuration) printf("Dumping Front Panel Configuration Details:\n"); printf("Indicator Colors:\n"); for (size_t i = 0; i < *(configuration->pKFPDIndicatorColors_size); i++) { - printf(" Color ID: %d, Name: %s\n", + printf(" Color ID: %d, color: %d\n", configuration->pKFPDIndicatorColors[i].id, - configuration->pKFPDIndicatorColors[i].name); + configuration->pKFPDIndicatorColors[i].color); } printf("Indicators:\n"); From 5f5a6347759a700609718d753968fb527cbf0403 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 13 Nov 2025 06:40:11 +0000 Subject: [PATCH 18/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by:gsanto722 --- ds/frontPanelConfig.cpp | 75 ++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 16 deletions(-) diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index 6b439c42..fc3be5b3 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -43,14 +43,18 @@ #include "dslogger.h" #include "manager.hpp" +#define DEBUG 1 // Using for dumpconfig + using namespace std; typedef struct fpdConfigs { const dsFPDColorConfig_t *pKFPDIndicatorColors; const dsFPDIndicatorConfig_t *pKIndicators; + const dsFPDTextDisplayConfig_t *pKTextDisplays; int *pKFPDIndicatorColors_size; int *pKIndicators_size; + int *pKTextDisplays_size; }fpdConfigs_t; namespace device { @@ -349,23 +353,43 @@ List FrontPanelConfig::getTextDisplays() void dumpconfig(fpdConfigs_t *configuration) { // Dump the configuration details - printf("Dumping Front Panel Configuration Details:\n"); - printf("Indicator Colors:\n"); + INT_INFO("\n\n===========================================================================\n\n"); + INT_INFO("Start of Front Panel Configuration Details:\n"); + INT_INFO("configuration->pKFPDIndicatorColors_size: %d\n", *(configuration->pKFPDIndicatorColors_size)); + INT_INFO("configuration->pKIndicators_size: %d\n", *(configuration->pKIndicators_size)); + INT_INFO("configuration->pKTextDisplays_size: %d\n", *(configuration->pKTextDisplays_size)); + INT_INFO("Dumping Front Panel Configuration Details:\n"); + INT_INFO("Indicator Colors:\n"); for (size_t i = 0; i < *(configuration->pKFPDIndicatorColors_size); i++) { - printf(" Color ID: %d, color: %d\n", + INT_INFO(" Color ID: %d, color: %d\n", configuration->pKFPDIndicatorColors[i].id, configuration->pKFPDIndicatorColors[i].color); } - printf("Indicators:\n"); + INT_INFO("Indicators:\n"); for (size_t i = 0; i < *(configuration->pKIndicators_size); i++) { - printf(" Indicator ID: %d, Max Brightness: %d, Max Cycle Rate: %d, Levels: %d, Color Mode: %d\n", + INT_INFO(" Indicator ID: %d, Max Brightness: %d, Max Cycle Rate: %d, Levels: %d, Color Mode: %d\n", configuration->pKIndicators[i].id, configuration->pKIndicators[i].maxBrightness, configuration->pKIndicators[i].maxCycleRate, configuration->pKIndicators[i].levels, configuration->pKIndicators[i].colorMode); } + INT_INFO("Text Displays:\n"); + + for (size_t i = 0; i < *(configuration->pKTextDisplays_size); i++) { + INT_INFO(" Text Display ID: %d, Max Brightness: %d, Max Cycle Rate: %d, Levels: %d, Max Horizontal Iterations: %d, Max Vertical Iterations: %d, Supported Characters: %d, Color Mode: %d\n", + configuration->pKTextDisplays[i].id, + configuration->pKTextDisplays[i].maxBrightness, + configuration->pKTextDisplays[i].maxCycleRate, + configuration->pKTextDisplays[i].levels, + configuration->pKTextDisplays[i].maxHorizontalIterations, + configuration->pKTextDisplays[i].maxVerticalIterations, + configuration->pKTextDisplays[i].supportedCharacters, + configuration->pKTextDisplays[i].colorMode); + } + INT_INFO("End of Front Panel Configuration Details.\n"); + INT_INFO("\n\n===========================================================================\n\n"); } /** @@ -389,7 +413,9 @@ void FrontPanelConfig::load() "kFPDIndicatorColors", "kFPDIndicatorColors_size", "kIndicators", - "kIndicators_size" + "kIndicators_size", + "kTextDisplays", + "kTextDisplays_size" }; bool ret = false; @@ -417,6 +443,19 @@ void FrontPanelConfig::load() INT_ERROR("%s is not defined\n", searchVaribles[3]); configuration.pKIndicators_size = &invalid_size; } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[4]); + ret = searchConfigs((void **)&configuration.pKTextDisplays, searchVaribles[4]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[4]); + } + INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[5]); + ret = searchConfigs((void **)&configuration.pKTextDisplays_size, (char *)searchVaribles[5]); + if(ret == false) + { + INT_ERROR("%s is not defined\n", searchVaribles[5]); + configuration.pKTextDisplays_size = &invalid_size; + } } else { @@ -427,12 +466,16 @@ void FrontPanelConfig::load() configuration.pKIndicators = kIndicators; indicatorSize = dsUTL_DIM(kIndicators); configuration.pKIndicators_size = &indicatorSize; + configuration.pKTextDisplays = kTextDisplays; + indicatorSize = dsUTL_DIM(kTextDisplays); + configuration.pKTextDisplays_size = &indicatorSize; INT_INFO("configuration.pKFPDIndicatorColors =%p, *(configuration.pKFPDIndicatorColors_size) = %d\n", configuration.pKFPDIndicatorColors, *(configuration.pKFPDIndicatorColors_size)); INT_INFO("configuration.pKIndicators =%p, *(configuration.pKIndicators_size) = %d\n", configuration.pKIndicators, *(configuration.pKIndicators_size)); + INT_INFO("configuration.pKTextDisplays =%p, *(configuration.pKTextDisplays_size) = %d\n", configuration.pKTextDisplays, *(configuration.pKTextDisplays_size)); } #if DEBUG - //dumpconfig(&configuration); + dumpconfig(&configuration); #endif { @@ -457,16 +500,16 @@ void FrontPanelConfig::load() * 1. Use Supported Colors created for indicators. * 2. Create Text Displays. */ - for (size_t i = 0; i < dsUTL_DIM(kTextDisplays); i++) { + for (size_t i = 0; i < *(configuration.pKTextDisplays_size); i++) { _textDisplays.push_back( - FrontPanelTextDisplay(kTextDisplays[i].id, - kTextDisplays[i].maxBrightness, - kTextDisplays[i].maxCycleRate, - kTextDisplays[i].levels, - kTextDisplays[i].maxHorizontalIterations, - kTextDisplays[i].maxVerticalIterations, - kTextDisplays[i].supportedCharacters, - kTextDisplays[i].colorMode)); + FrontPanelTextDisplay(configuration.pKTextDisplays[i].id, + configuration.pKTextDisplays[i].maxBrightness, + configuration.pKTextDisplays[i].maxCycleRate, + configuration.pKTextDisplays[i].levels, + configuration.pKTextDisplays[i].maxHorizontalIterations, + configuration.pKTextDisplays[i].maxVerticalIterations, + configuration.pKTextDisplays[i].supportedCharacters, + configuration.pKTextDisplays[i].colorMode)); } } } From 6553c8f7f6a915786bc6d7b20f543327cbb23967 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Fri, 14 Nov 2025 11:29:45 +0000 Subject: [PATCH 19/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by:gsanto722 --- ds/audioOutputPortConfig.cpp | 104 ++++++++++++++--------------------- ds/frontPanelConfig.cpp | 2 +- ds/videoDeviceConfig.cpp | 18 +----- ds/videoOutputPortConfig.cpp | 42 ++------------ 4 files changed, 49 insertions(+), 117 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index d01e78b6..38fd672e 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -121,44 +121,14 @@ List AudioOutputPortConfig::getSupportedTypes() return supportedTypes; } -#if 0 -bool searchConfigs(void **pConfigVar, const char *searchConfigStr) -{ - INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); - INT_INFO("%d:%s: searchConfigStr = %s\n", __LINE__, __func__, searchConfigStr); - - static int invalidsize = -1; - - pthread_mutex_lock(&dsLock); - - void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); - if (dllib) { - *pConfigVar = (void *) dlsym(dllib, searchConfigStr); - if (*pConfigVar != NULL) { - INT_INFO("%s is defined and loaded pConfigVar= %p\r\n", searchConfigStr, *pConfigVar); - } - else { - INT_ERROR("%d:%s: %s is not defined\n", __LINE__, __func__, searchConfigStr); - } - - dlclose(dllib); - } - else { - INT_ERROR("%d:%s: Open %s failed\n", __LINE__, __func__, RDK_DSHAL_NAME); - } - pthread_mutex_unlock(&dsLock); - INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); - return (*pConfigVar != NULL); -} -#endif void dumpconfig(audioConfigs_t *config) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: pKConfigs = %p\n", __LINE__, __func__, config->pKConfigs); INT_INFO("%d:%s: pKPorts = %p\n", __LINE__, __func__, config->pKPorts); - INT_INFO("%d:%s: pKConfigSize = %p\n", __LINE__, __func__, config->pKConfigSize); - INT_INFO("%d:%s: pKPortSize = %p\n", __LINE__, __func__, config->pKPortSize); - + INT_INFO("%d:%s: pKConfigSize %p = %d \n", __LINE__, __func__, config->pKConfigSize, *(config->pKConfigSize)); + INT_INFO("%d:%s: pKPortSize %p = %d \n", __LINE__, __func__, config->pKPortSize, *(config->pKPortSize)); + INT_INFO("\n\n=========================================================================================================================\n\n"); if(config->pKConfigs != NULL && *(config->pKConfigSize) != -1) { @@ -261,41 +231,49 @@ void AudioOutputPortConfig::load() configuration.pKPortSize = &portSize; INT_INFO("configuration.pKConfigs =%p, configuration.pKPorts =%p, *(configuration.pKConfigSize) = %d, *(configuration.pKPortSize) = %d\n", configuration.pKConfigs, configuration.pKPorts, *(configuration.pKConfigSize), *(configuration.pKPortSize)); } - #if DEBUG - dumpconfig(&configuration); - #endif - /* - * Initialize Audio portTypes (encodings, compressions etc.) - * and its port instances (db, level etc) - */ - for (size_t i = 0; i < *(configuration.pKConfigSize); i++) { - const dsAudioTypeConfig_t *typeCfg = &(configuration.pKConfigs[i]); - AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); - aPortType.enable(); - for (size_t j = 0; j < typeCfg->numSupportedEncodings; j++) { - aPortType.addEncoding(AudioEncoding::getInstance(typeCfg->encodings[j])); - _aEncodings.at(typeCfg->encodings[j]).enable(); - } - for (size_t j = 0; j < typeCfg->numSupportedCompressions; j++) { - aPortType.addCompression(typeCfg->compressions[j]); - _aCompressions.at(typeCfg->compressions[j]).enable(); + * Check if configs are loaded properly + */ + if ( configuration.pKConfigs != NULL || configuration.pKPorts != NULL || + configuration.pKConfigSize != NULL || configuration.pKPortSize != NULL) { + #if DEBUG + dumpconfig(&configuration); + #endif + INT_INFO("%d:%s: Audio Configs loaded successfully\n", __LINE__, __func__); + /* + * Initialize Audio portTypes (encodings, compressions etc.) + * and its port instances (db, level etc) + */ + for (size_t i = 0; i < *(configuration.pKConfigSize); i++) { + const dsAudioTypeConfig_t *typeCfg = &(configuration.pKConfigs[i]); + AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); + aPortType.enable(); + for (size_t j = 0; j < typeCfg->numSupportedEncodings; j++) { + aPortType.addEncoding(AudioEncoding::getInstance(typeCfg->encodings[j])); + _aEncodings.at(typeCfg->encodings[j]).enable(); + } + for (size_t j = 0; j < typeCfg->numSupportedCompressions; j++) { + aPortType.addCompression(typeCfg->compressions[j]); + _aCompressions.at(typeCfg->compressions[j]).enable(); + } + for (size_t j = 0; j < typeCfg->numSupportedStereoModes; j++) { + aPortType.addStereoMode(typeCfg->stereoModes[j]); + _aStereoModes.at(typeCfg->stereoModes[j]).enable(); + } } - for (size_t j = 0; j < typeCfg->numSupportedStereoModes; j++) { - aPortType.addStereoMode(typeCfg->stereoModes[j]); - _aStereoModes.at(typeCfg->stereoModes[j]).enable(); + + /* + * set up ports based on kPorts[] + */ + for (size_t i = 0; i < *(configuration.pKPortSize); i++) { + const dsAudioPortConfig_t *port = &configuration.pKPorts[i]; + _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); + _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); } } - - /* - * set up ports based on kPorts[] - */ - for (size_t i = 0; i < *(configuration.pKPortSize); i++) { - const dsAudioPortConfig_t *port = &configuration.pKPorts[i]; - _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); - _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); + else { + INT_ERROR("%d:%s: Audio Configs loading failed\n", __LINE__, __func__); } - } catch(const Exception &e) { throw e; diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index fc3be5b3..186949ac 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -378,7 +378,7 @@ void dumpconfig(fpdConfigs_t *configuration) INT_INFO("Text Displays:\n"); for (size_t i = 0; i < *(configuration->pKTextDisplays_size); i++) { - INT_INFO(" Text Display ID: %d, Max Brightness: %d, Max Cycle Rate: %d, Levels: %d, Max Horizontal Iterations: %d, Max Vertical Iterations: %d, Supported Characters: %d, Color Mode: %d\n", + INT_INFO(" Text Display ID: %d, Max Brightness: %d, Max Cycle Rate: %d, Levels: %d, Max Horizontal Iterations: %d, Max Vertical Iterations: %d, Supported Characters: %s, Color Mode: %d\n", configuration->pKTextDisplays[i].id, configuration->pKTextDisplays[i].maxBrightness, configuration->pKTextDisplays[i].maxCycleRate, diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index 3c69e421..ca154b6e 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -95,19 +95,12 @@ void dumpconfig(dsVideoConfig_t *pKVideoDeviceConfigs, int videoDeviceConfigs_si INT_INFO("%d:%s: pKVideoDeviceConfigs = %p\n", __LINE__, __func__, pKVideoDeviceConfigs); INT_INFO("%d:%s: videoDeviceConfigs_size = %d\n", __LINE__, __func__, videoDeviceConfigs_size); - #if 0 - typedef struct _dsVideoConfig_t { - size_t numSupportedDFCs; /*!< Number of zoom modes supported */ - const dsVideoZoom_t *supportedDFCs; /*!< List of zoom modes supported */ - dsVideoZoom_t defaultDFC; /*!< The default zoom mode */ - } dsVideoConfig_t; - #endif INT_INFO("\n\n=========================================================================================================================\n\n"); if(pKVideoDeviceConfigs != NULL && videoDeviceConfigs_size != -1) { - for (size_t i = 0; i < videoDeviceConfigs_size; i++) { - INT_INFO("pKVideoDeviceConfigs[%d].numSupportedDFCs = %d\n ", i, pKVideoDeviceConfigs[i].numSupportedDFCs); - for (size_t j = 0; j < pKVideoDeviceConfigs[i].numSupportedDFCs; j++) { + for (int i = 0; i < videoDeviceConfigs_size; i++) { + INT_INFO("pKVideoDeviceConfigs[%d].numSupportedDFCs = %lu\n ", i, pKVideoDeviceConfigs[i].numSupportedDFCs); + for (int j = 0; j < pKVideoDeviceConfigs[i].numSupportedDFCs; j++) { INT_INFO(" Address of pKVideoDeviceConfigs[%d].supportedDFCs[%d] = %d", i, j, pKVideoDeviceConfigs[i].supportedDFCs[j]); } } @@ -130,8 +123,6 @@ typedef struct videoDeviceConfig void VideoDeviceConfig::load() { int configSize, invalid_size = -1; - //dsVideoConfig_t *pKVideoDeviceConfigs = NULL; - //int *pKVideoDeviceConfigs_size = NULL; videoDeviceConfig_t videoDeviceConfig = {0}; const char* searchVaribles[] = { "kVideoDeviceConfigs", @@ -147,7 +138,6 @@ void VideoDeviceConfig::load() } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); - //ret = searchConfigs((void **)&pKVideoDeviceConfigs, searchVaribles[0]); ret = searchConfigs((void **)&(videoDeviceConfig.pKVideoDeviceConfigs), searchVaribles[0]); if(ret == true) { @@ -161,8 +151,6 @@ void VideoDeviceConfig::load() } else { - //pKVideoDeviceConfigs = (dsVideoConfig_t *)kConfigs; - //*pKVideoDeviceConfigs_size = dsUTL_DIM(kConfigs); INT_INFO("Read Old Configs\n"); videoDeviceConfig.pKVideoDeviceConfigs = (dsVideoConfig_t *)kConfigs; configSize = dsUTL_DIM(kConfigs); diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index 9fbe7637..8e43e593 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -305,47 +305,19 @@ void dumpconfig(videoPortConfigs_t *config) } INT_INFO("\n\n####################################################################### \n\n"); - #if 0 - /*.typeId = */ dsVIDEOPORT_TYPE_INTERNAL, - /*.name = */ "INTERNAL", - /*.dtcpSupported = */ false, - /*.hdcpSupported = */ true, - /*.restrictedResollution = */ -1, - /*.numSupportedResolutions = */ dsUTL_DIM(kResolutions), // 0 means "Info available at runtime" - /*.supportedResolutons = */ kResolutions, - #endif INT_INFO("\n\n####################################################################### \n\n"); INT_INFO("%d:%s: Dumping Video Port Configurations\n", __LINE__, __func__); for (size_t i = 0; i < *(config->pKVideoPortConfigs_size); i++) { const dsVideoPortTypeConfig_t *typeCfg = &(config->pKConfigs[i]); - #if 0 - typedef struct _dsVideoPortTypeConfig_t { - dsVideoPortType_t typeId; ///< The video output type - const char *name; ///< Name of the video output port - bool dtcpSupported; ///< Is DTCP supported? - bool hdcpSupported; ///< Is HDCP supported? - int32_t restrictedResollution; ///< Any restricted resolution; -1 if no. - size_t numSupportedResolutions; ///< Number of supported resolutions - dsVideoPortResolution_t *supportedResolutions; ///< List of supported resolutions - } dsVideoPortTypeConfig_t; - #endif + INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); INT_INFO("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); INT_INFO("%d:%s: typeCfg->dtcpSupported= %d\n", __LINE__, __func__, typeCfg->dtcpSupported); INT_INFO("%d:%s: typeCfg->hdcpSupported = %d\n", __LINE__, __func__, typeCfg->hdcpSupported); INT_INFO("%d:%s: typeCfg->restrictedResollution = %d\n", __LINE__, __func__, typeCfg->restrictedResollution); - INT_INFO("%d:%s: typeCfg->numSupportedResolutions= %d\n", __LINE__, __func__, typeCfg->numSupportedResolutions); - #if 0 - typedef struct _dsVideoPortResolution_t { - char name[32]; ///< Name the resolution - dsVideoResolution_t pixelResolution; ///< The resolution associated with the name - dsVideoAspectRatio_t aspectRatio; ///< The associated aspect ratio - dsVideoStereoScopicMode_t stereoScopicMode; ///< The associated stereoscopic mode - dsVideoFrameRate_t frameRate; ///< The associated frame rate - bool interlaced; ///< The associated scan mode( @a true if interlaced, @a false if progressive ) - }dsVideoPortResolution_t; - #endif + INT_INFO("%d:%s: typeCfg->numSupportedResolutions= %lu\n", __LINE__, __func__, typeCfg->numSupportedResolutions); + INT_INFO("%d:%s: typeCfg->supportedResolutions = %p\n", __LINE__, __func__, typeCfg->supportedResolutions); INT_INFO("%d:%s: typeCfg->supportedResolutions->name = %s\n", __LINE__, __func__, typeCfg->supportedResolutions->name); INT_INFO("%d:%s: typeCfg->supportedResolutions->pixelResolution= %d\n", __LINE__, __func__, typeCfg->supportedResolutions->pixelResolution); @@ -355,13 +327,7 @@ void dumpconfig(videoPortConfigs_t *config) INT_INFO("%d:%s: typeCfg->supportedResolutions->interlaced= %d\n", __LINE__, __func__, typeCfg->supportedResolutions->interlaced); } INT_INFO("\n\n####################################################################### \n\n"); - #if 0 - { - /*.typeId = */ {dsVIDEOPORT_TYPE_INTERNAL, 0}, - /* connectedAOP */ {dsAUDIOPORT_TYPE_SPEAKER, 0}, - /*.defaultResolution = */ "1080i50" - } - #endif + INT_INFO("\n\n####################################################################### \n\n"); INT_INFO("%d:%s: Dumping Video Port Connections\n", __LINE__, __func__); for (size_t i = 0; i < *(config->pKVideoPortPorts_size); i++) { From 12f0193b6cd61970f97ec79fd8506c02c7d4a8fe Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Mon, 17 Nov 2025 07:25:05 +0000 Subject: [PATCH 20/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by: grandhi_santoshkumar --- ds/audioOutputPortConfig.cpp | 24 ++++++++++++------------ ds/frontPanelConfig.cpp | 25 +++++++++++++++++-------- ds/include/manager.hpp | 2 +- ds/manager.cpp | 2 +- ds/videoDeviceConfig.cpp | 30 ++++++++++++++++++------------ ds/videoOutputPortConfig.cpp | 24 ++++++++++++++++++------ 6 files changed, 67 insertions(+), 40 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 38fd672e..7baecbda 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -38,8 +38,6 @@ #include "manager.hpp" -#define DEBUG 1 // Using for dumpconfig - typedef struct audioConfigs { const dsAudioTypeConfig_t *pKConfigs; @@ -164,7 +162,7 @@ void dumpconfig(audioConfigs_t *config) void AudioOutputPortConfig::load() { - int configSize, portSize; + static int configSize, portSize, invalidSize = -1; audioConfigs_t configuration = {0}; const char* searchVaribles[] = { "kAudioConfigs", @@ -198,26 +196,28 @@ void AudioOutputPortConfig::load() } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); - ret = searchConfigs((void **)&configuration.pKConfigs, searchVaribles[0]); + ret = searchConfigs(searchVaribles[0], (void **)&configuration.pKConfigs); if(ret == true) { INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[2]); - ret = searchConfigs((void **)&configuration.pKConfigSize, (char *)searchVaribles[2]); + ret = searchConfigs(searchVaribles[2], (void **)&configuration.pKConfigSize); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[2]); + configuration.pKConfigSize = &invalidSize; } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); - ret = searchConfigs((void **)&configuration.pKPorts, searchVaribles[1]); + ret = searchConfigs(searchVaribles[1], (void **)&configuration.pKPorts); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[1]); } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[3]); - ret = searchConfigs((void **)&configuration.pKPortSize, (char *)searchVaribles[3]); + ret = searchConfigs(searchVaribles[3], (void **)&configuration.pKPortSize); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[3]); + configuration.pKPortSize = &invalidSize; } } else @@ -234,12 +234,11 @@ void AudioOutputPortConfig::load() /* * Check if configs are loaded properly */ - if ( configuration.pKConfigs != NULL || configuration.pKPorts != NULL || - configuration.pKConfigSize != NULL || configuration.pKPortSize != NULL) { - #if DEBUG + if ( configuration.pKConfigs != NULL && configuration.pKPorts != NULL && + configuration.pKConfigSize != NULL && (*(configuration.pKConfigSize) > 0 ) && + configuration.pKPortSize != NULL && (*(configuration.pKPortSize) > 0 )) + { dumpconfig(&configuration); - #endif - INT_INFO("%d:%s: Audio Configs loaded successfully\n", __LINE__, __func__); /* * Initialize Audio portTypes (encodings, compressions etc.) * and its port instances (db, level etc) @@ -270,6 +269,7 @@ void AudioOutputPortConfig::load() _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); } + INT_INFO("%d:%s: Audio Configs loaded successfully\n", __LINE__, __func__); } else { INT_ERROR("%d:%s: Audio Configs loading failed\n", __LINE__, __func__); diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index 186949ac..d56f25f9 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -406,7 +406,7 @@ void FrontPanelConfig::load() * 1. Create Supported Colors. * 2. Create Indicators. */ - int indicatorSize, indicatorColorSize, invalid_size = -1; + static int indicatorSize, indicatorColorSize, invalid_size = -1; fpdConfigs_t configuration = {0}; const char* searchVaribles[] = { @@ -420,37 +420,37 @@ void FrontPanelConfig::load() bool ret = false; INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); - ret = searchConfigs((void **)&configuration.pKFPDIndicatorColors, searchVaribles[0]); + ret = searchConfigs(searchVaribles[0], (void **)&configuration.pKFPDIndicatorColors ); if(ret == true) { INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); - ret = searchConfigs((void **)&configuration.pKFPDIndicatorColors_size, (char *)searchVaribles[1]); + ret = searchConfigs(searchVaribles[1], (void **)&configuration.pKFPDIndicatorColors_size); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[1]); configuration.pKFPDIndicatorColors_size = &invalid_size; } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[2]); - ret = searchConfigs((void **)&configuration.pKIndicators, searchVaribles[2]); + ret = searchConfigs(searchVaribles[2], (void **)&configuration.pKIndicators); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[2]); } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[3]); - ret = searchConfigs((void **)&configuration.pKIndicators_size, (char *)searchVaribles[3]); + ret = searchConfigs(searchVaribles[3], (void **)&configuration.pKIndicators_size); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[3]); configuration.pKIndicators_size = &invalid_size; } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[4]); - ret = searchConfigs((void **)&configuration.pKTextDisplays, searchVaribles[4]); + ret = searchConfigs(searchVaribles[4], (void **)&configuration.pKTextDisplays); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[4]); } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[5]); - ret = searchConfigs((void **)&configuration.pKTextDisplays_size, (char *)searchVaribles[5]); + ret = searchConfigs(searchVaribles[5], (void **)&configuration.pKTextDisplays_size); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[5]); @@ -474,6 +474,11 @@ void FrontPanelConfig::load() INT_INFO("configuration.pKIndicators =%p, *(configuration.pKIndicators_size) = %d\n", configuration.pKIndicators, *(configuration.pKIndicators_size)); INT_INFO("configuration.pKTextDisplays =%p, *(configuration.pKTextDisplays_size) = %d\n", configuration.pKTextDisplays, *(configuration.pKTextDisplays_size)); } + if (configuration.pKFPDIndicatorColors != NULL && configuration.pKFPDIndicatorColors_size != NULL && + *(configuration.pKFPDIndicatorColors_size) > 0 && + configuration.pKIndicators != NULL && configuration.pKIndicators_size != NULL && + *(configuration.pKIndicators_size) > 0) + { #if DEBUG dumpconfig(&configuration); #endif @@ -494,6 +499,8 @@ void FrontPanelConfig::load() } + if(configuration.pKTextDisplays != NULL && configuration.pKTextDisplays_size != NULL && + *(configuration.pKTextDisplays_size) > 0) { /* * Create TextDisplays @@ -512,10 +519,12 @@ void FrontPanelConfig::load() configuration.pKTextDisplays[i].colorMode)); } } + } else { + INT_ERROR("No valid front panel configuration found\n"); + } } } - /** @} */ /** @} */ diff --git a/ds/include/manager.hpp b/ds/include/manager.hpp index 089e0e49..0b9408d7 100644 --- a/ds/include/manager.hpp +++ b/ds/include/manager.hpp @@ -157,7 +157,7 @@ namespace device { // Forward declaration for searchConfigs function -bool searchConfigs(void **pConfigVar, const char *searchConfigStr); +bool searchConfigs(const char *searchConfigStr, void **pConfigVar); /** * @class Manager diff --git a/ds/manager.cpp b/ds/manager.cpp index 2fc92ad2..e6b4dcc8 100644 --- a/ds/manager.cpp +++ b/ds/manager.cpp @@ -160,7 +160,7 @@ void Manager::load() printf("%d:%s load completed\n", __LINE__, __FUNCTION__); } -bool searchConfigs(void **pConfigVar, const char *searchConfigStr) +bool searchConfigs(const char *searchConfigStr, void **pConfigVar) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: searchConfigStr = %s\n", __LINE__, __func__, searchConfigStr); diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index ca154b6e..aa931224 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -138,11 +138,11 @@ void VideoDeviceConfig::load() } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); - ret = searchConfigs((void **)&(videoDeviceConfig.pKVideoDeviceConfigs), searchVaribles[0]); + ret = searchConfigs(searchVaribles[0], (void **)&(videoDeviceConfig.pKVideoDeviceConfigs)); if(ret == true) { INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); - ret = searchConfigs((void **)&(videoDeviceConfig.pKVideoDeviceConfigs_size), (char *)searchVaribles[1]); + ret = searchConfigs(searchVaribles[1], (void **)&(videoDeviceConfig.pKVideoDeviceConfigs_size)); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[1]); @@ -156,22 +156,28 @@ void VideoDeviceConfig::load() configSize = dsUTL_DIM(kConfigs); videoDeviceConfig.pKVideoDeviceConfigs_size = &configSize; } - #if DEBUG - dumpconfig(videoDeviceConfig.pKVideoDeviceConfigs, *(videoDeviceConfig.pKVideoDeviceConfigs_size)); - #endif /* * Initialize Video Devices (supported DFCs etc.) */ - for (size_t i = 0; i < *(videoDeviceConfig.pKVideoDeviceConfigs_size); i++) { - _vDevices.push_back(VideoDevice(i)); - - for (size_t j = 0; j < videoDeviceConfig.pKVideoDeviceConfigs[i].numSupportedDFCs; j++) { - _vDevices.at(i).addDFC(VideoDFC::getInstance(videoDeviceConfig.pKVideoDeviceConfigs[i].supportedDFCs[j])); + if (videoDeviceConfig.pKVideoDeviceConfigs != NULL && videoDeviceConfig.pKVideoDeviceConfigs_size != NULL && + *(videoDeviceConfig.pKVideoDeviceConfigs_size) > 0) + { + #if DEBUG + dumpconfig(videoDeviceConfig.pKVideoDeviceConfigs, *(videoDeviceConfig.pKVideoDeviceConfigs_size)); + #endif + for (size_t i = 0; i < *(videoDeviceConfig.pKVideoDeviceConfigs_size); i++) { + _vDevices.push_back(VideoDevice(i)); + + for (size_t j = 0; j < videoDeviceConfig.pKVideoDeviceConfigs[i].numSupportedDFCs; j++) { + _vDevices.at(i).addDFC(VideoDFC::getInstance(videoDeviceConfig.pKVideoDeviceConfigs[i].supportedDFCs[j])); + } } } - - + else + { + INT_ERROR("%d:%s: Congigs are NULL and config size are -1\n", __LINE__, __func__); + } } void VideoDeviceConfig::release() diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index 8e43e593..97cf9f91 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -384,35 +384,35 @@ void VideoOutputPortConfig::load() } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); - ret = searchConfigs((void **)&configuration.pKConfigs, searchVaribles[0]); + ret = searchConfigs(searchVaribles[0], (void **)&configuration.pKConfigs); if(ret == true) { INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); - ret = searchConfigs((void **)&configuration.pKVideoPortConfigs_size, (char *)searchVaribles[1]); + ret = searchConfigs(searchVaribles[1], (void **)&configuration.pKVideoPortConfigs_size); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[1]); } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[2]); - ret = searchConfigs((void **)&configuration.pKPorts, searchVaribles[2]); + ret = searchConfigs(searchVaribles[2], (void **)&configuration.pKPorts); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[2]); } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[3]); - ret = searchConfigs((void **)&configuration.pKVideoPortPorts_size, (char *)searchVaribles[3]); + ret = searchConfigs(searchVaribles[3], (void **)&configuration.pKVideoPortPorts_size); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[3]); } // Resolutions - ret = searchConfigs((void **)&configuration.pKResolutionsSettings, searchVaribles[4]); + ret = searchConfigs(searchVaribles[4], (void **)&configuration.pKResolutionsSettings); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[4]); } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[5]); - ret = searchConfigs((void **)&configuration.pKResolutionsSettings_size, (char *)searchVaribles[5]); + ret = searchConfigs(searchVaribles[5], (void **)&configuration.pKResolutionsSettings_size); if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[5]); @@ -434,6 +434,12 @@ void VideoOutputPortConfig::load() INT_INFO("configuration.pKPorts =%p, *(configuration.pKPortSize) = %d\n", configuration.pKPorts, *(configuration.pKVideoPortPorts_size)); INT_INFO("configuration.pKResolutionsSettings =%p, *(configuration.pKResolutionsSettings_size) = %d\n", configuration.pKResolutionsSettings, *(configuration.pKResolutionsSettings_size)); } + + if(configuration.pKConfigs == NULL && configuration.pKVideoPortConfigs_size == NULL && + configuration.pKPorts == NULL && configuration.pKVideoPortPorts_size == NULL && + configuration.pKResolutionsSettings == NULL && configuration.pKResolutionsSettings_size == NULL) + { + #if DEBUG dumpconfig(&configuration); #endif @@ -485,7 +491,13 @@ void VideoOutputPortConfig::load() _vPortTypes.at(port->id.type).addPort(_vPorts.at(i)); } + } + else + { + cout << "Video Outport Configs or Ports or Resolutions is NULL. ..."< Date: Mon, 17 Nov 2025 10:14:29 +0000 Subject: [PATCH 21/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by:gsanto722 --- ds/frontPanelConfig.cpp | 6 +-- ds/manager.cpp | 2 - ds/videoOutputPortConfig.cpp | 90 ++++++++++++++++++------------------ 3 files changed, 48 insertions(+), 50 deletions(-) diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index d56f25f9..bf83d49a 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -406,7 +406,7 @@ void FrontPanelConfig::load() * 1. Create Supported Colors. * 2. Create Indicators. */ - static int indicatorSize, indicatorColorSize, invalid_size = -1; + static int indicatorSize, indicatorColorSize, textDisplaySize, invalid_size = -1; fpdConfigs_t configuration = {0}; const char* searchVaribles[] = { @@ -467,8 +467,8 @@ void FrontPanelConfig::load() indicatorSize = dsUTL_DIM(kIndicators); configuration.pKIndicators_size = &indicatorSize; configuration.pKTextDisplays = kTextDisplays; - indicatorSize = dsUTL_DIM(kTextDisplays); - configuration.pKTextDisplays_size = &indicatorSize; + textDisplaySize = dsUTL_DIM(kTextDisplays); + configuration.pKTextDisplays_size = &textDisplaySize; INT_INFO("configuration.pKFPDIndicatorColors =%p, *(configuration.pKFPDIndicatorColors_size) = %d\n", configuration.pKFPDIndicatorColors, *(configuration.pKFPDIndicatorColors_size)); INT_INFO("configuration.pKIndicators =%p, *(configuration.pKIndicators_size) = %d\n", configuration.pKIndicators, *(configuration.pKIndicators_size)); diff --git a/ds/manager.cpp b/ds/manager.cpp index e6b4dcc8..dd9aaa58 100644 --- a/ds/manager.cpp +++ b/ds/manager.cpp @@ -165,8 +165,6 @@ bool searchConfigs(const char *searchConfigStr, void **pConfigVar) INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: searchConfigStr = %s\n", __LINE__, __func__, searchConfigStr); - static int invalidsize = -1; - pthread_mutex_lock(&dsLock); void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index 97cf9f91..4e37c5ea 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -350,7 +350,7 @@ void dumpconfig(videoPortConfigs_t *config) void VideoOutputPortConfig::load() { - int configSize, portSize, resolutionSize; + static int configSize, portSize, resolutionSize, invalid_size = -1; videoPortConfigs_t configuration = {0}; const char* searchVaribles[] = { "kVideoPortConfigs", @@ -392,6 +392,7 @@ void VideoOutputPortConfig::load() if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[1]); + configuration.pKVideoPortConfigs_size = &invalid_size; } INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[2]); ret = searchConfigs(searchVaribles[2], (void **)&configuration.pKPorts); @@ -404,6 +405,7 @@ void VideoOutputPortConfig::load() if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[3]); + configuration.pKVideoPortPorts_size = &invalid_size; } // Resolutions ret = searchConfigs(searchVaribles[4], (void **)&configuration.pKResolutionsSettings); @@ -416,6 +418,7 @@ void VideoOutputPortConfig::load() if(ret == false) { INT_ERROR("%s is not defined\n", searchVaribles[5]); + configuration.pKResolutionsSettings_size = &invalid_size; } } else @@ -440,57 +443,54 @@ void VideoOutputPortConfig::load() configuration.pKResolutionsSettings == NULL && configuration.pKResolutionsSettings_size == NULL) { - #if DEBUG - dumpconfig(&configuration); - #endif - - - /* Initialize a set of supported resolutions - * - */ - //size_t numResolutions = dsUTL_DIM(kResolutions); - for (size_t i = 0; i < *(configuration.pKResolutionsSettings_size); i++) { - dsVideoPortResolution_t *resolution = &(configuration.pKResolutionsSettings[i]); - {std::lock_guard lock(gSupportedResolutionsMutex); - _supportedResolutions.push_back( - VideoResolution( - i, /* id */ - std::string(resolution->name), - resolution->pixelResolution, - resolution->aspectRatio, - resolution->stereoScopicMode, - resolution->frameRate, - resolution->interlaced)); + #if DEBUG + dumpconfig(&configuration); + #endif + /* Initialize a set of supported resolutions + * + */ + for (size_t i = 0; i < *(configuration.pKResolutionsSettings_size); i++) { + dsVideoPortResolution_t *resolution = &(configuration.pKResolutionsSettings[i]); + {std::lock_guard lock(gSupportedResolutionsMutex); + _supportedResolutions.push_back( + VideoResolution( + i, /* id */ + std::string(resolution->name), + resolution->pixelResolution, + resolution->aspectRatio, + resolution->stereoScopicMode, + resolution->frameRate, + resolution->interlaced)); + } } - } - /* - * Initialize Video portTypes (Only Enable POrts) - * and its port instances (curr resolution) - */ - for (size_t i = 0; i < *(configuration.pKVideoPortConfigs_size); i++) - { - const dsVideoPortTypeConfig_t *typeCfg = &(configuration.pKConfigs[i]); - VideoOutputPortType &vPortType = VideoOutputPortType::getInstance(typeCfg->typeId); - vPortType.enable(); - vPortType.setRestrictedResolution(typeCfg->restrictedResollution); - } + /* + * Initialize Video portTypes (Only Enable POrts) + * and its port instances (curr resolution) + */ + for (size_t i = 0; i < *(configuration.pKVideoPortConfigs_size); i++) + { + const dsVideoPortTypeConfig_t *typeCfg = &(configuration.pKConfigs[i]); + VideoOutputPortType &vPortType = VideoOutputPortType::getInstance(typeCfg->typeId); + vPortType.enable(); + vPortType.setRestrictedResolution(typeCfg->restrictedResollution); + } - /* - * set up ports based on kPorts[] - */ - for (size_t i = 0; i < *(configuration.pKVideoPortPorts_size); i++) { - const dsVideoPortPortConfig_t *port = &(configuration.pKPorts[i]); + /* + * set up ports based on kPorts[] + */ + for (size_t i = 0; i < *(configuration.pKVideoPortPorts_size); i++) { + const dsVideoPortPortConfig_t *port = &(configuration.pKPorts[i]); - _vPorts.push_back( - VideoOutputPort((port->id.type), port->id.index, i, - AudioOutputPortType::getInstance(configuration.pKPorts[i].connectedAOP.type).getPort(configuration.pKPorts[i].connectedAOP.index).getId(), - std::string(port->defaultResolution))); + _vPorts.push_back( + VideoOutputPort((port->id.type), port->id.index, i, + AudioOutputPortType::getInstance(configuration.pKPorts[i].connectedAOP.type).getPort(configuration.pKPorts[i].connectedAOP.index).getId(), + std::string(port->defaultResolution))); - _vPortTypes.at(port->id.type).addPort(_vPorts.at(i)); + _vPortTypes.at(port->id.type).addPort(_vPorts.at(i)); - } + } } else { From 17faa45580693d1fb342b85ccd6e7827f3fb2ded Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Mon, 17 Nov 2025 12:52:23 +0000 Subject: [PATCH 22/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by:gsanto722 --- ds/videoOutputPortConfig.cpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index 4e37c5ea..8496b3a5 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -433,14 +433,14 @@ void VideoOutputPortConfig::load() configuration.pKResolutionsSettings = kResolutions; resolutionSize = dsUTL_DIM(kResolutions); configuration.pKResolutionsSettings_size = &resolutionSize; - INT_INFO("configuration.pKConfigs =%p, *(configuration.pKConfigSize) = %d\n", configuration.pKConfigs, *(configuration.pKVideoPortConfigs_size)); - INT_INFO("configuration.pKPorts =%p, *(configuration.pKPortSize) = %d\n", configuration.pKPorts, *(configuration.pKVideoPortPorts_size)); + INT_INFO("configuration.pKConfigs =%p, *(configuration.pKVideoPortConfigs_size) = %d\n", configuration.pKConfigs, *(configuration.pKVideoPortConfigs_size)); + INT_INFO("configuration.pKPorts =%p, *(configuration.pKVideoPortPorts_size) = %d\n", configuration.pKPorts, *(configuration.pKVideoPortPorts_size)); INT_INFO("configuration.pKResolutionsSettings =%p, *(configuration.pKResolutionsSettings_size) = %d\n", configuration.pKResolutionsSettings, *(configuration.pKResolutionsSettings_size)); } - if(configuration.pKConfigs == NULL && configuration.pKVideoPortConfigs_size == NULL && - configuration.pKPorts == NULL && configuration.pKVideoPortPorts_size == NULL && - configuration.pKResolutionsSettings == NULL && configuration.pKResolutionsSettings_size == NULL) + if((configuration.pKConfigs != NULL) && (configuration.pKVideoPortConfigs_size != NULL) && + (configuration.pKPorts != NULL) && (configuration.pKVideoPortPorts_size != NULL) && + (configuration.pKResolutionsSettings != NULL) && (configuration.pKResolutionsSettings_size != NULL)) { #if DEBUG @@ -491,13 +491,12 @@ void VideoOutputPortConfig::load() _vPortTypes.at(port->id.type).addPort(_vPorts.at(i)); } - } - else - { - cout << "Video Outport Configs or Ports or Resolutions is NULL. ..."< Date: Thu, 20 Nov 2025 06:39:16 +0000 Subject: [PATCH 23/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by:gsanto722 --- ds/frontPanelConfig.cpp | 104 ++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 46 deletions(-) diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index bf83d49a..c898c401 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -375,18 +375,24 @@ void dumpconfig(fpdConfigs_t *configuration) configuration->pKIndicators[i].levels, configuration->pKIndicators[i].colorMode); } - INT_INFO("Text Displays:\n"); - - for (size_t i = 0; i < *(configuration->pKTextDisplays_size); i++) { - INT_INFO(" Text Display ID: %d, Max Brightness: %d, Max Cycle Rate: %d, Levels: %d, Max Horizontal Iterations: %d, Max Vertical Iterations: %d, Supported Characters: %s, Color Mode: %d\n", - configuration->pKTextDisplays[i].id, - configuration->pKTextDisplays[i].maxBrightness, - configuration->pKTextDisplays[i].maxCycleRate, - configuration->pKTextDisplays[i].levels, - configuration->pKTextDisplays[i].maxHorizontalIterations, - configuration->pKTextDisplays[i].maxVerticalIterations, - configuration->pKTextDisplays[i].supportedCharacters, - configuration->pKTextDisplays[i].colorMode); + + if(configuration->pKTextDisplays == NULL && configuration->pKTextDisplays_size == NULL && *(configuration->pKTextDisplays_size) > 0){ + INT_INFO("Text Displays:\n"); + + for (size_t i = 0; i < *(configuration->pKTextDisplays_size); i++) { + INT_INFO(" Text Display ID: %d, Max Brightness: %d, Max Cycle Rate: %d, Levels: %d, Max Horizontal Iterations: %d, Max Vertical Iterations: %d, Supported Characters: %s, Color Mode: %d\n", + configuration->pKTextDisplays[i].id, + configuration->pKTextDisplays[i].maxBrightness, + configuration->pKTextDisplays[i].maxCycleRate, + configuration->pKTextDisplays[i].levels, + configuration->pKTextDisplays[i].maxHorizontalIterations, + configuration->pKTextDisplays[i].maxVerticalIterations, + configuration->pKTextDisplays[i].supportedCharacters, + configuration->pKTextDisplays[i].colorMode); + } + } + else { + INT_INFO(" No Text Displays configured.\n"); } INT_INFO("End of Front Panel Configuration Details.\n"); INT_INFO("\n\n===========================================================================\n\n"); @@ -414,8 +420,8 @@ void FrontPanelConfig::load() "kFPDIndicatorColors_size", "kIndicators", "kIndicators_size", - "kTextDisplays", - "kTextDisplays_size" + "kFPDTextDisplays", + "kFPDTextDisplays_size" }; bool ret = false; @@ -483,43 +489,49 @@ void FrontPanelConfig::load() dumpconfig(&configuration); #endif - { - for (size_t i = 0; i < *(configuration.pKFPDIndicatorColors_size); i++) { - _colors.push_back(FrontPanelIndicator::Color(configuration.pKFPDIndicatorColors[i].id)); - } + { + for (size_t i = 0; i < *(configuration.pKFPDIndicatorColors_size); i++) { + _colors.push_back(FrontPanelIndicator::Color(configuration.pKFPDIndicatorColors[i].id)); + } - for (size_t i = 0; i < *(configuration.pKIndicators_size); i++) { - /* All indicators support a same set of colors */ - _indicators.push_back(FrontPanelIndicator(configuration.pKIndicators[i].id, - configuration.pKIndicators[i].maxBrightness, - configuration.pKIndicators[i].maxCycleRate, - configuration.pKIndicators[i].levels, - configuration.pKIndicators[i].colorMode)); + for (size_t i = 0; i < *(configuration.pKIndicators_size); i++) { + /* All indicators support a same set of colors */ + _indicators.push_back(FrontPanelIndicator(configuration.pKIndicators[i].id, + configuration.pKIndicators[i].maxBrightness, + configuration.pKIndicators[i].maxCycleRate, + configuration.pKIndicators[i].levels, + configuration.pKIndicators[i].colorMode)); + } } - } - - if(configuration.pKTextDisplays != NULL && configuration.pKTextDisplays_size != NULL && - *(configuration.pKTextDisplays_size) > 0) - { - /* - * Create TextDisplays - * 1. Use Supported Colors created for indicators. - * 2. Create Text Displays. - */ - for (size_t i = 0; i < *(configuration.pKTextDisplays_size); i++) { - _textDisplays.push_back( - FrontPanelTextDisplay(configuration.pKTextDisplays[i].id, - configuration.pKTextDisplays[i].maxBrightness, - configuration.pKTextDisplays[i].maxCycleRate, - configuration.pKTextDisplays[i].levels, - configuration.pKTextDisplays[i].maxHorizontalIterations, - configuration.pKTextDisplays[i].maxVerticalIterations, - configuration.pKTextDisplays[i].supportedCharacters, - configuration.pKTextDisplays[i].colorMode)); + if(configuration.pKTextDisplays != NULL && configuration.pKTextDisplays_size != NULL && + *(configuration.pKTextDisplays_size) > 0) + { + /* + * Create TextDisplays + * 1. Use Supported Colors created for indicators. + * 2. Create Text Displays. + */ + INT_DEBUG("Text Displays \n"); + for (size_t i = 0; i < *(configuration.pKTextDisplays_size); i++) { + _textDisplays.push_back( + FrontPanelTextDisplay(configuration.pKTextDisplays[i].id, + configuration.pKTextDisplays[i].maxBrightness, + configuration.pKTextDisplays[i].maxCycleRate, + configuration.pKTextDisplays[i].levels, + configuration.pKTextDisplays[i].maxHorizontalIterations, + configuration.pKTextDisplays[i].maxVerticalIterations, + configuration.pKTextDisplays[i].supportedCharacters, + configuration.pKTextDisplays[i].colorMode)); + } } + else + { + INT_ERROR("No valid text display configuration found\n"); + } } - } else { + else + { INT_ERROR("No valid front panel configuration found\n"); } } From 7455db3285d918512f74ec0c8728acb3f673739a Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 20 Nov 2025 07:10:44 +0000 Subject: [PATCH 24/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by:gsanto722 --- ds/audioOutputPortConfig.cpp | 3 +-- ds/frontPanelConfig.cpp | 9 ++++----- ds/videoDeviceConfig.cpp | 3 +-- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 7baecbda..113e4f41 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -235,8 +235,7 @@ void AudioOutputPortConfig::load() * Check if configs are loaded properly */ if ( configuration.pKConfigs != NULL && configuration.pKPorts != NULL && - configuration.pKConfigSize != NULL && (*(configuration.pKConfigSize) > 0 ) && - configuration.pKPortSize != NULL && (*(configuration.pKPortSize) > 0 )) + configuration.pKConfigSize != NULL && configuration.pKPortSize != NULL) { dumpconfig(&configuration); /* diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index c898c401..6637b685 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -357,7 +357,7 @@ void dumpconfig(fpdConfigs_t *configuration) INT_INFO("Start of Front Panel Configuration Details:\n"); INT_INFO("configuration->pKFPDIndicatorColors_size: %d\n", *(configuration->pKFPDIndicatorColors_size)); INT_INFO("configuration->pKIndicators_size: %d\n", *(configuration->pKIndicators_size)); - INT_INFO("configuration->pKTextDisplays_size: %d\n", *(configuration->pKTextDisplays_size)); + INT_INFO("configuration->pKTextDisplays_size: %p\n", configuration->pKTextDisplays_size); INT_INFO("Dumping Front Panel Configuration Details:\n"); INT_INFO("Indicator Colors:\n"); for (size_t i = 0; i < *(configuration->pKFPDIndicatorColors_size); i++) { @@ -376,8 +376,8 @@ void dumpconfig(fpdConfigs_t *configuration) configuration->pKIndicators[i].colorMode); } - if(configuration->pKTextDisplays == NULL && configuration->pKTextDisplays_size == NULL && *(configuration->pKTextDisplays_size) > 0){ - INT_INFO("Text Displays:\n"); + if(configuration->pKTextDisplays == NULL && configuration->pKTextDisplays_size == NULL){ + INT_INFO("Text Displays:*(configuration->pKTextDisplays_size) =%d\n", *(configuration->pKTextDisplays_size)); for (size_t i = 0; i < *(configuration->pKTextDisplays_size); i++) { INT_INFO(" Text Display ID: %d, Max Brightness: %d, Max Cycle Rate: %d, Levels: %d, Max Horizontal Iterations: %d, Max Vertical Iterations: %d, Supported Characters: %s, Color Mode: %d\n", @@ -504,8 +504,7 @@ void FrontPanelConfig::load() } } - if(configuration.pKTextDisplays != NULL && configuration.pKTextDisplays_size != NULL && - *(configuration.pKTextDisplays_size) > 0) + if(configuration.pKTextDisplays != NULL && configuration.pKTextDisplays_size != NULL) { /* * Create TextDisplays diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index aa931224..5f514c52 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -160,8 +160,7 @@ void VideoDeviceConfig::load() /* * Initialize Video Devices (supported DFCs etc.) */ - if (videoDeviceConfig.pKVideoDeviceConfigs != NULL && videoDeviceConfig.pKVideoDeviceConfigs_size != NULL && - *(videoDeviceConfig.pKVideoDeviceConfigs_size) > 0) + if (videoDeviceConfig.pKVideoDeviceConfigs != NULL && videoDeviceConfig.pKVideoDeviceConfigs_size != NULL) { #if DEBUG dumpconfig(videoDeviceConfig.pKVideoDeviceConfigs, *(videoDeviceConfig.pKVideoDeviceConfigs_size)); From 8e51e519a37543369ce798955298cb4d9fa504f9 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 20 Nov 2025 07:32:50 +0000 Subject: [PATCH 25/37] RDKEMW-8587: consume the config variables using dlsym() in MW. Reason for change: consume the config variables using dlsym() in MW. Test Procedure: refer RDKEMW-8587 Risks: High Signed-off-by:gsanto722 --- ds/frontPanelConfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index 6637b685..54b60f2b 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -376,7 +376,7 @@ void dumpconfig(fpdConfigs_t *configuration) configuration->pKIndicators[i].colorMode); } - if(configuration->pKTextDisplays == NULL && configuration->pKTextDisplays_size == NULL){ + if(configuration->pKTextDisplays != NULL && configuration->pKTextDisplays_size != NULL){ INT_INFO("Text Displays:*(configuration->pKTextDisplays_size) =%d\n", *(configuration->pKTextDisplays_size)); for (size_t i = 0; i < *(configuration->pKTextDisplays_size); i++) { From 1928496e38a870b75b85d803affb1fbc60ffcf70 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Tue, 9 Dec 2025 17:57:17 +0000 Subject: [PATCH 26/37] debug. disable dumpconfig and add logs --- ds/audioOutputPortConfig.cpp | 7 +++++-- ds/frontPanelConfig.cpp | 9 ++++++--- ds/videoDeviceConfig.cpp | 7 +++++-- ds/videoOutputPortConfig.cpp | 7 +++++-- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 113e4f41..b2071401 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -163,7 +163,7 @@ void dumpconfig(audioConfigs_t *config) void AudioOutputPortConfig::load() { static int configSize, portSize, invalidSize = -1; - audioConfigs_t configuration = {0}; + static audioConfigs_t configuration = {0}; const char* searchVaribles[] = { "kAudioConfigs", "kAudioPorts", @@ -172,6 +172,7 @@ void AudioOutputPortConfig::load() }; bool ret = false; + INT_INFO("Enter function\n"); try { /* * Load Constants First. @@ -237,7 +238,8 @@ void AudioOutputPortConfig::load() if ( configuration.pKConfigs != NULL && configuration.pKPorts != NULL && configuration.pKConfigSize != NULL && configuration.pKPortSize != NULL) { - dumpconfig(&configuration); + //dumpconfig(&configuration); + INT_INFO("disable the dumpconfig()\n"); /* * Initialize Audio portTypes (encodings, compressions etc.) * and its port instances (db, level etc) @@ -277,6 +279,7 @@ void AudioOutputPortConfig::load() catch(const Exception &e) { throw e; } + INT_INFO("Exit funcation\n"); } void AudioOutputPortConfig::release() diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index 54b60f2b..9d85e537 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -413,7 +413,7 @@ void FrontPanelConfig::load() * 2. Create Indicators. */ static int indicatorSize, indicatorColorSize, textDisplaySize, invalid_size = -1; - fpdConfigs_t configuration = {0}; + static fpdConfigs_t configuration = {0}; const char* searchVaribles[] = { "kFPDIndicatorColors", @@ -424,7 +424,8 @@ void FrontPanelConfig::load() "kFPDTextDisplays_size" }; bool ret = false; - + + INT_INFO("Enter function\n"); INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); ret = searchConfigs(searchVaribles[0], (void **)&configuration.pKFPDIndicatorColors ); if(ret == true) @@ -486,7 +487,8 @@ void FrontPanelConfig::load() *(configuration.pKIndicators_size) > 0) { #if DEBUG - dumpconfig(&configuration); + //dumpconfig(&configuration); + INT_INFO("disable the dumpconfig()\n"); #endif { @@ -533,6 +535,7 @@ void FrontPanelConfig::load() { INT_ERROR("No valid front panel configuration found\n"); } + INT_INFO("Exit function\n"); } } diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index 5f514c52..e51c3ba5 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -123,13 +123,14 @@ typedef struct videoDeviceConfig void VideoDeviceConfig::load() { int configSize, invalid_size = -1; - videoDeviceConfig_t videoDeviceConfig = {0}; + static videoDeviceConfig_t videoDeviceConfig = {0}; const char* searchVaribles[] = { "kVideoDeviceConfigs", "kVideoDeviceConfigs_size", }; bool ret = false; + INT_INFO("Enter function\n"); /* * Load Constants First. */ @@ -163,7 +164,8 @@ void VideoDeviceConfig::load() if (videoDeviceConfig.pKVideoDeviceConfigs != NULL && videoDeviceConfig.pKVideoDeviceConfigs_size != NULL) { #if DEBUG - dumpconfig(videoDeviceConfig.pKVideoDeviceConfigs, *(videoDeviceConfig.pKVideoDeviceConfigs_size)); + //dumpconfig(videoDeviceConfig.pKVideoDeviceConfigs, *(videoDeviceConfig.pKVideoDeviceConfigs_size)); + INT_INFO("disable the dumpconfig()\n"); #endif for (size_t i = 0; i < *(videoDeviceConfig.pKVideoDeviceConfigs_size); i++) { _vDevices.push_back(VideoDevice(i)); @@ -177,6 +179,7 @@ void VideoDeviceConfig::load() { INT_ERROR("%d:%s: Congigs are NULL and config size are -1\n", __LINE__, __func__); } + INT_INFO("Exit function\n"); } void VideoDeviceConfig::release() diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index 8496b3a5..ddb4de30 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -351,7 +351,7 @@ void dumpconfig(videoPortConfigs_t *config) void VideoOutputPortConfig::load() { static int configSize, portSize, resolutionSize, invalid_size = -1; - videoPortConfigs_t configuration = {0}; + static videoPortConfigs_t configuration = {0}; const char* searchVaribles[] = { "kVideoPortConfigs", "kVideoPortConfigs_size", @@ -362,6 +362,7 @@ void VideoOutputPortConfig::load() }; bool ret = false; + INT_INFO("Enter function\n"); try { /* * Load Constants First. @@ -444,7 +445,8 @@ void VideoOutputPortConfig::load() { #if DEBUG - dumpconfig(&configuration); + //dumpconfig(&configuration); + INT_INFO("disable the dumpconfig()\n"); #endif /* Initialize a set of supported resolutions * @@ -502,6 +504,7 @@ void VideoOutputPortConfig::load() cout << "VIdeo Outport Exception Thrown. ..."< Date: Wed, 10 Dec 2025 02:10:08 +0000 Subject: [PATCH 27/37] enable debugconfig Signed-off-by: grandhi_santoshkumar --- ds/audioOutputPortConfig.cpp | 14 ++++++++------ ds/frontPanelConfig.cpp | 4 ++-- ds/videoDeviceConfig.cpp | 4 ++-- ds/videoOutputPortConfig.cpp | 4 ++-- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index b2071401..4e40ad5e 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -124,8 +124,10 @@ void dumpconfig(audioConfigs_t *config) INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: pKConfigs = %p\n", __LINE__, __func__, config->pKConfigs); INT_INFO("%d:%s: pKPorts = %p\n", __LINE__, __func__, config->pKPorts); - INT_INFO("%d:%s: pKConfigSize %p = %d \n", __LINE__, __func__, config->pKConfigSize, *(config->pKConfigSize)); - INT_INFO("%d:%s: pKPortSize %p = %d \n", __LINE__, __func__, config->pKPortSize, *(config->pKPortSize)); + INT_INFO("%d:%s: pKConfigSize addr =%p \n", __LINE__, __func__, config->pKConfigSize); + INT_INFO("%d:%s: pKConfigSize value = %d \n", __LINE__, __func__, *(config->pKConfigSize)); + INT_INFO("%d:%s: pKPortSize addr = %p \n", __LINE__, __func__, config->pKPortSize); + INT_INFO("%d:%s: pKPortSize value = %d \n", __LINE__, __func__, *(config->pKPortSize)); INT_INFO("\n\n=========================================================================================================================\n\n"); if(config->pKConfigs != NULL && *(config->pKConfigSize) != -1) @@ -141,7 +143,7 @@ void dumpconfig(audioConfigs_t *config) } else { - INT_ERROR("%d:%s: kAudioConfigs is NULL and kConfig_size_local is -1\n", __LINE__, __func__); + INT_ERROR("%d:%s: kAudioConfigs is NULL and *(config->pKConfigSize) is -1\n", __LINE__, __func__); } if(config->pKPorts != NULL && *(config->pKPortSize) != -1) { @@ -153,7 +155,7 @@ void dumpconfig(audioConfigs_t *config) } else { - INT_ERROR("%d:%s: kAudioPorts is NULL and kPort_size_local is -1\n", __LINE__, __func__); + INT_ERROR("%d:%s: kAudioPorts is NULL and *(config->pKPortSize) is -1\n", __LINE__, __func__); } INT_INFO("\n\n=========================================================================================================================\n\n"); INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); @@ -238,8 +240,8 @@ void AudioOutputPortConfig::load() if ( configuration.pKConfigs != NULL && configuration.pKPorts != NULL && configuration.pKConfigSize != NULL && configuration.pKPortSize != NULL) { - //dumpconfig(&configuration); - INT_INFO("disable the dumpconfig()\n"); + dumpconfig(&configuration); + //INT_INFO("disable the dumpconfig()\n"); /* * Initialize Audio portTypes (encodings, compressions etc.) * and its port instances (db, level etc) diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index 9d85e537..9edbbdc4 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -487,8 +487,8 @@ void FrontPanelConfig::load() *(configuration.pKIndicators_size) > 0) { #if DEBUG - //dumpconfig(&configuration); - INT_INFO("disable the dumpconfig()\n"); + dumpconfig(&configuration); + //INT_INFO("disable the dumpconfig()\n"); #endif { diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index e51c3ba5..e95c4dae 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -164,8 +164,8 @@ void VideoDeviceConfig::load() if (videoDeviceConfig.pKVideoDeviceConfigs != NULL && videoDeviceConfig.pKVideoDeviceConfigs_size != NULL) { #if DEBUG - //dumpconfig(videoDeviceConfig.pKVideoDeviceConfigs, *(videoDeviceConfig.pKVideoDeviceConfigs_size)); - INT_INFO("disable the dumpconfig()\n"); + dumpconfig(videoDeviceConfig.pKVideoDeviceConfigs, *(videoDeviceConfig.pKVideoDeviceConfigs_size)); + //INT_INFO("disable the dumpconfig()\n"); #endif for (size_t i = 0; i < *(videoDeviceConfig.pKVideoDeviceConfigs_size); i++) { _vDevices.push_back(VideoDevice(i)); diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index ddb4de30..ab0cd3e6 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -445,8 +445,8 @@ void VideoOutputPortConfig::load() { #if DEBUG - //dumpconfig(&configuration); - INT_INFO("disable the dumpconfig()\n"); + dumpconfig(&configuration); + //INT_INFO("disable the dumpconfig()\n"); #endif /* Initialize a set of supported resolutions * From 64a4609a8b03b6903702bfff4b58d93befe129da Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 10 Dec 2025 03:49:18 +0000 Subject: [PATCH 28/37] move the debug prints within if condtion for all config dumpconfig Signed-off-by: grandhi_santoshkumar --- ds/audioOutputPortConfig.cpp | 7 +++---- ds/frontPanelConfig.cpp | 14 +++++++++----- ds/videoOutputPortConfig.cpp | 14 +++++++------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 4e40ad5e..31bf728c 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -121,6 +121,9 @@ List AudioOutputPortConfig::getSupportedTypes() void dumpconfig(audioConfigs_t *config) { + INT_INFO("\n\n=========================================================================================================================\n\n"); + if(config->pKConfigs != NULL && *(config->pKConfigSize) != -1) + { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: pKConfigs = %p\n", __LINE__, __func__, config->pKConfigs); INT_INFO("%d:%s: pKPorts = %p\n", __LINE__, __func__, config->pKPorts); @@ -128,10 +131,6 @@ void dumpconfig(audioConfigs_t *config) INT_INFO("%d:%s: pKConfigSize value = %d \n", __LINE__, __func__, *(config->pKConfigSize)); INT_INFO("%d:%s: pKPortSize addr = %p \n", __LINE__, __func__, config->pKPortSize); INT_INFO("%d:%s: pKPortSize value = %d \n", __LINE__, __func__, *(config->pKPortSize)); - - INT_INFO("\n\n=========================================================================================================================\n\n"); - if(config->pKConfigs != NULL && *(config->pKConfigSize) != -1) - { for (size_t i = 0; i < *(config->pKConfigSize); i++) { const dsAudioTypeConfig_t *typeCfg = &(config->pKConfigs[i]); INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index 9edbbdc4..b2eb6406 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -355,11 +355,12 @@ void dumpconfig(fpdConfigs_t *configuration) // Dump the configuration details INT_INFO("\n\n===========================================================================\n\n"); INT_INFO("Start of Front Panel Configuration Details:\n"); - INT_INFO("configuration->pKFPDIndicatorColors_size: %d\n", *(configuration->pKFPDIndicatorColors_size)); - INT_INFO("configuration->pKIndicators_size: %d\n", *(configuration->pKIndicators_size)); - INT_INFO("configuration->pKTextDisplays_size: %p\n", configuration->pKTextDisplays_size); - INT_INFO("Dumping Front Panel Configuration Details:\n"); - INT_INFO("Indicator Colors:\n"); + if((configuration->pKFPDIndicatorColors !=NULL) && *(configuration->pKFPDIndicatorColors_size) != -1 && (configuration->pKIndicators != NULL) && *(configuration->pKIndicators_size) != -1) + { + INT_INFO("configuration->pKFPDIndicatorColors_size addr: %p\n", (configuration->pKFPDIndicatorColors_size)); + INT_INFO("configuration->pKFPDIndicatorColors_size data: %d\n", *(configuration->pKFPDIndicatorColors_size)); + INT_INFO("configuration->pKIndicators_size addr: %p\n", (configuration->pKIndicators_size)); + INT_INFO("configuration->pKIndicators_size data: %d\n", *(configuration->pKIndicators_size)); for (size_t i = 0; i < *(configuration->pKFPDIndicatorColors_size); i++) { INT_INFO(" Color ID: %d, color: %d\n", configuration->pKFPDIndicatorColors[i].id, @@ -375,10 +376,13 @@ void dumpconfig(fpdConfigs_t *configuration) configuration->pKIndicators[i].levels, configuration->pKIndicators[i].colorMode); } + } if(configuration->pKTextDisplays != NULL && configuration->pKTextDisplays_size != NULL){ + INT_INFO("configuration->pKTextDisplays_size: %p\n", configuration->pKTextDisplays_size); INT_INFO("Text Displays:*(configuration->pKTextDisplays_size) =%d\n", *(configuration->pKTextDisplays_size)); + for (size_t i = 0; i < *(configuration->pKTextDisplays_size); i++) { INT_INFO(" Text Display ID: %d, Max Brightness: %d, Max Cycle Rate: %d, Levels: %d, Max Horizontal Iterations: %d, Max Vertical Iterations: %d, Supported Characters: %s, Color Mode: %d\n", configuration->pKTextDisplays[i].id, diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index ab0cd3e6..fcbd45ae 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -280,13 +280,6 @@ List VideoOutputPortConfig::getSupportedResolutions(bool isIgn void dumpconfig(videoPortConfigs_t *config) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); - INT_INFO("%d:%s: pKConfigs = %p\n", __LINE__, __func__, config->pKConfigs); - INT_INFO("%d:%s: pKConfigSize pointer %p = %d\n", __LINE__, __func__, config->pKVideoPortConfigs_size, *(config->pKVideoPortConfigs_size)); - INT_INFO("%d:%s: pKPorts = %p\n", __LINE__, __func__, config->pKPorts); - INT_INFO("%d:%s: pKPortSize pointer %p = %d\n", __LINE__, __func__, config->pKVideoPortPorts_size, *(config->pKVideoPortPorts_size)); - INT_INFO("%d:%s: pKResolutionsSettings = %p\n", __LINE__, __func__, config->pKResolutionsSettings); - INT_INFO("%d:%s: pKResolutionsSettingsSize pointer %p = %d\n", __LINE__, __func__, config->pKResolutionsSettings_size, *(config->pKResolutionsSettings_size)); - INT_INFO("\n\n=========================================================================================================================\n\n"); if(config->pKConfigs != NULL && *(config->pKVideoPortConfigs_size) != -1 && config->pKPorts != NULL && *(config->pKVideoPortPorts_size) != -1 && @@ -294,6 +287,13 @@ void dumpconfig(videoPortConfigs_t *config) { INT_INFO("\n\n####################################################################### \n\n"); INT_INFO("%d:%s: Dumping Resolutions Settings\n", __LINE__, __func__); + INT_INFO("%d:%s: pKConfigs = %p\n", __LINE__, __func__, config->pKConfigs); + INT_INFO("%d:%s: pKConfigSize pointer %p = %d\n", __LINE__, __func__, config->pKVideoPortConfigs_size, *(config->pKVideoPortConfigs_size)); + INT_INFO("%d:%s: pKPorts = %p\n", __LINE__, __func__, config->pKPorts); + INT_INFO("%d:%s: pKPortSize pointer %p = %d\n", __LINE__, __func__, config->pKVideoPortPorts_size, *(config->pKVideoPortPorts_size)); + INT_INFO("%d:%s: pKResolutionsSettings = %p\n", __LINE__, __func__, config->pKResolutionsSettings); + INT_INFO("%d:%s: pKResolutionsSettingsSize pointer %p = %d\n", __LINE__, __func__, config->pKResolutionsSettings_size, *(config->pKResolutionsSettings_size)); + for (size_t i = 0; i < *(config->pKResolutionsSettings_size); i++) { dsVideoPortResolution_t *resolution = &(config->pKResolutionsSettings[i]); INT_INFO("%d:%s: resolution->name = %s\n", __LINE__, __func__, resolution->name); From 9789231cd17acb66add110b47bfc6ecd1420f283 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 10 Dec 2025 07:07:20 +0000 Subject: [PATCH 29/37] added few more logs, lock_guard in searchconfig Signed-off-by: grandhi_santoshkumar --- ds/audioOutputPortConfig.cpp | 5 +++-- ds/manager.cpp | 13 +++++++++---- ds/videoDeviceConfig.cpp | 4 ++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 31bf728c..f8003e83 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -129,8 +129,7 @@ void dumpconfig(audioConfigs_t *config) INT_INFO("%d:%s: pKPorts = %p\n", __LINE__, __func__, config->pKPorts); INT_INFO("%d:%s: pKConfigSize addr =%p \n", __LINE__, __func__, config->pKConfigSize); INT_INFO("%d:%s: pKConfigSize value = %d \n", __LINE__, __func__, *(config->pKConfigSize)); - INT_INFO("%d:%s: pKPortSize addr = %p \n", __LINE__, __func__, config->pKPortSize); - INT_INFO("%d:%s: pKPortSize value = %d \n", __LINE__, __func__, *(config->pKPortSize)); + for (size_t i = 0; i < *(config->pKConfigSize); i++) { const dsAudioTypeConfig_t *typeCfg = &(config->pKConfigs[i]); INT_INFO("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); @@ -146,6 +145,8 @@ void dumpconfig(audioConfigs_t *config) } if(config->pKPorts != NULL && *(config->pKPortSize) != -1) { + INT_INFO("%d:%s: pKPortSize addr = %p \n", __LINE__, __func__, config->pKPortSize); + INT_INFO("%d:%s: pKPortSize value = %d \n", __LINE__, __func__, *(config->pKPortSize)); for (size_t i = 0; i < *(config->pKPortSize); i++) { const dsAudioPortConfig_t *port = &(config->pKPorts[i]); INT_INFO("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); diff --git a/ds/manager.cpp b/ds/manager.cpp index dd9aaa58..fda317e1 100644 --- a/ds/manager.cpp +++ b/ds/manager.cpp @@ -68,6 +68,7 @@ namespace device { int Manager::IsInitialized = 0; //!< Indicates the application has initialized with devicettings modules. static std::mutex gManagerInitMutex; +static std::mutex gSearchMutex; Manager::Manager() { // TODO Auto-generated constructor stub @@ -164,9 +165,12 @@ bool searchConfigs(const char *searchConfigStr, void **pConfigVar) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: searchConfigStr = %s\n", __LINE__, __func__, searchConfigStr); + INT_INFO("%d:%s: RDK_DSHAL_NAME = %s\n", __LINE__, __func__, RDK_DSHAL_NAME); - pthread_mutex_lock(&dsLock); - + //pthread_mutex_lock(&dsLock); + std::lock_guard lock(gSearchMutex); + INT_INFO("%d:%s: using lock_guard() instead pthread_mutex_lock \n", __LINE__, __func__); + dlerror(); // clear old error void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); if (dllib) { *pConfigVar = (void *) dlsym(dllib, searchConfigStr); @@ -180,9 +184,10 @@ bool searchConfigs(const char *searchConfigStr, void **pConfigVar) dlclose(dllib); } else { - INT_ERROR("%d:%s: Open %s failed\n", __LINE__, __func__, RDK_DSHAL_NAME); + const char* err = dlerror(); + INT_ERROR("%d:%s: Open %s failed with error err= %s\n", __LINE__, __func__, RDK_DSHAL_NAME, err ? err: "unknown"); } - pthread_mutex_unlock(&dsLock); + //pthread_mutex_unlock(&dsLock); INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); return (*pConfigVar != NULL); } diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index e95c4dae..bdc74453 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -92,12 +92,12 @@ VideoDFC & VideoDeviceConfig::getDefaultDFC() void dumpconfig(dsVideoConfig_t *pKVideoDeviceConfigs, int videoDeviceConfigs_size) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); - INT_INFO("%d:%s: pKVideoDeviceConfigs = %p\n", __LINE__, __func__, pKVideoDeviceConfigs); - INT_INFO("%d:%s: videoDeviceConfigs_size = %d\n", __LINE__, __func__, videoDeviceConfigs_size); INT_INFO("\n\n=========================================================================================================================\n\n"); if(pKVideoDeviceConfigs != NULL && videoDeviceConfigs_size != -1) { + INT_INFO("%d:%s: pKVideoDeviceConfigs = %p\n", __LINE__, __func__, pKVideoDeviceConfigs); + INT_INFO("%d:%s: videoDeviceConfigs_size = %d\n", __LINE__, __func__, videoDeviceConfigs_size); for (int i = 0; i < videoDeviceConfigs_size; i++) { INT_INFO("pKVideoDeviceConfigs[%d].numSupportedDFCs = %lu\n ", i, pKVideoDeviceConfigs[i].numSupportedDFCs); for (int j = 0; j < pKVideoDeviceConfigs[i].numSupportedDFCs; j++) { From dde8258003bd8374094cc83047770b01c00fd5ef Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 10 Dec 2025 11:42:26 +0000 Subject: [PATCH 30/37] add delay while every load --- ds/include/manager.hpp | 4 +++ ds/manager.cpp | 71 ++++++++++++++++++++++++++++++++++++++++-- sample/dsMgr-test.c | 31 ++++++++++++++++++ 3 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 sample/dsMgr-test.c diff --git a/ds/include/manager.hpp b/ds/include/manager.hpp index 0b9408d7..fab1e96c 100644 --- a/ds/include/manager.hpp +++ b/ds/include/manager.hpp @@ -149,6 +149,9 @@ #ifndef _DS_MANAGER_HPP_ #define _DS_MANAGER_HPP_ +#include + +using namespace std; /** * @file manager.hpp @@ -158,6 +161,7 @@ namespace device { // Forward declaration for searchConfigs function bool searchConfigs(const char *searchConfigStr, void **pConfigVar); +std::string parse_opt_flag( std::string file_name , bool integer_check= false , bool debugStats = true); /** * @class Manager diff --git a/ds/manager.cpp b/ds/manager.cpp index fda317e1..81ac241e 100644 --- a/ds/manager.cpp +++ b/ds/manager.cpp @@ -44,10 +44,11 @@ #include #include #include +#include #include "dsHALConfig.h" -static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; +//static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; /** @@ -86,6 +87,62 @@ Manager::~Manager() { }\ } +std::string parse_opt_flag( std::string file_name , bool integer_check , bool debugStats ) +{ + std::string return_buffer = ""; + std::ifstream parse_opt_flag_file( file_name.c_str()); + + if (!parse_opt_flag_file) + { + if ( debugStats ){ + INT_INFO("Failed to open [%s] file",file_name.c_str()); + } + } + else + { + std::string line = ""; + if (std::getline(parse_opt_flag_file, line)) + { + if ( debugStats ){ + INT_INFO("Content in [%s] is [%s]",file_name.c_str(),line.c_str()); + } + } + else + { + if ( debugStats ){ + INT_INFO("No Content in [%s]",file_name.c_str()); + } + } + parse_opt_flag_file.close(); + + return_buffer = line; + + if (integer_check) + { + if (line.empty()) + { + integer_check = false; + } + else + { + for (char c : line) { + if (!isdigit(c)) + { + integer_check = false; + break; + } + } + } + + if ( false == integer_check ) + { + return_buffer = ""; + } + } + } + return return_buffer; +} + /** * @addtogroup dssettingsmanagerapi * @{ @@ -113,6 +170,8 @@ Manager::~Manager() { void Manager::Initialize() { {std::lock_guard lock(gManagerInitMutex); + + int delay = 1; printf("Entering %s count %d with thread id %lu\n",__FUNCTION__,IsInitialized,pthread_self()); try { @@ -138,9 +197,17 @@ void Manager::Initialize() CHECK_RET_VAL(err); err = dsVideoDeviceInit(); CHECK_RET_VAL(err); + std::string delaystr = parse_opt_flag("/opt/delay", true, true); + if (!delaystr.empty()) + { + INT_INFO("dealy: [%s]", delaystr.c_str()); + delay = std::stoi(delaystr); + } AudioOutputPortConfig::getInstance().load(); + sleep(delay); VideoOutputPortConfig::getInstance().load(); - VideoDeviceConfig::getInstance().load(); + sleep(delay); + VideoDeviceConfig::getInstance().load(); } IsInitialized++; } diff --git a/sample/dsMgr-test.c b/sample/dsMgr-test.c new file mode 100644 index 00000000..467a75ec --- /dev/null +++ b/sample/dsMgr-test.c @@ -0,0 +1,31 @@ + +#include +#include +#include +#include +#include "exception.hpp" +#include "host.hpp" +#include "manager.hpp" + + +int main(int argc, char *argv[]) +{ + printf("%d:%s: enter\n", __LINE__, __func__); + try { + device::Manager::Initialize(); + } catch (const device::Exception& e) { + printf("Exception caught %s", e.what()); + } catch (const std::exception& e) { + printf("Exception caught %s", e.what()); + } catch (...) { + printf("Exception caught unknown"); + } + printf("%d:%s: Exit\n", __LINE__, __func__); + return 0; +} + + + + +/** @} */ +/** @} */ From edb8f55740497f9ad42b3f045797146474713dd1 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 11 Dec 2025 10:15:34 +0000 Subject: [PATCH 31/37] add count variable for close the opened hal file --- ds/audioOutputPortConfig.cpp | 4 ++ ds/frontPanelConfig.cpp | 2 + ds/include/manager.hpp | 7 +++ ds/manager.cpp | 96 +++++++++++++++++++++++++++++------- ds/videoDeviceConfig.cpp | 2 + ds/videoOutputPortConfig.cpp | 3 ++ 6 files changed, 95 insertions(+), 19 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index f8003e83..3e665016 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -166,6 +166,7 @@ void AudioOutputPortConfig::load() { static int configSize, portSize, invalidSize = -1; static audioConfigs_t configuration = {0}; + const char* searchVaribles[] = { "kAudioConfigs", "kAudioPorts", @@ -175,6 +176,8 @@ void AudioOutputPortConfig::load() bool ret = false; INT_INFO("Enter function\n"); + startLoad(); + try { /* * Load Constants First. @@ -281,6 +284,7 @@ void AudioOutputPortConfig::load() catch(const Exception &e) { throw e; } + finishLoad(); INT_INFO("Exit funcation\n"); } diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index b2eb6406..4bf90f75 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -430,6 +430,7 @@ void FrontPanelConfig::load() bool ret = false; INT_INFO("Enter function\n"); + startLoad(); INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); ret = searchConfigs(searchVaribles[0], (void **)&configuration.pKFPDIndicatorColors ); if(ret == true) @@ -539,6 +540,7 @@ void FrontPanelConfig::load() { INT_ERROR("No valid front panel configuration found\n"); } + finishLoad(); INT_INFO("Exit function\n"); } diff --git a/ds/include/manager.hpp b/ds/include/manager.hpp index fab1e96c..12bfa53a 100644 --- a/ds/include/manager.hpp +++ b/ds/include/manager.hpp @@ -160,7 +160,11 @@ using namespace std; namespace device { // Forward declaration for searchConfigs function +bool openFile(); +bool closeFile(); bool searchConfigs(const char *searchConfigStr, void **pConfigVar); +void startLoad(); +void finishLoad(); std::string parse_opt_flag( std::string file_name , bool integer_check= false , bool debugStats = true); /** @@ -171,11 +175,14 @@ std::string parse_opt_flag( std::string file_name , bool integer_check= false , class Manager { Manager(); virtual ~Manager(); + static bool fpInit; public: static void Initialize(); static void DeInitialize(); static void load(); //!< This function is being used for loading configure in-process DSMgr. static int IsInitialized; //!< Indicates the application has initialized with devicettings modules. + bool setFpInit(bool init){ Manager::fpInit = init;} + }; } diff --git a/ds/manager.cpp b/ds/manager.cpp index 81ac241e..16ce523d 100644 --- a/ds/manager.cpp +++ b/ds/manager.cpp @@ -70,6 +70,9 @@ namespace device { int Manager::IsInitialized = 0; //!< Indicates the application has initialized with devicettings modules. static std::mutex gManagerInitMutex; static std::mutex gSearchMutex; +static void *dllib = NULL; +int activeLoads = 0; // reference counter +static std::mutex gMtx; Manager::Manager() { // TODO Auto-generated constructor stub @@ -172,6 +175,7 @@ void Manager::Initialize() {std::lock_guard lock(gManagerInitMutex); int delay = 1; + bool ret = false; printf("Entering %s count %d with thread id %lu\n",__FUNCTION__,IsInitialized,pthread_self()); try { @@ -203,10 +207,20 @@ void Manager::Initialize() INT_INFO("dealy: [%s]", delaystr.c_str()); delay = std::stoi(delaystr); } - AudioOutputPortConfig::getInstance().load(); - sleep(delay); + INT_INFO("Open the hal file\n"); + ret = openFile(); + if(ret == true) + { + INT_INFO("File opened successfully\n"); + } + else + { + INT_ERROR("Failed to open the hal file\n"); + } + AudioOutputPortConfig::getInstance().load(); + //sleep(delay); VideoOutputPortConfig::getInstance().load(); - sleep(delay); + //sleep(delay); VideoDeviceConfig::getInstance().load(); } IsInitialized++; @@ -228,33 +242,77 @@ void Manager::load() printf("%d:%s load completed\n", __LINE__, __FUNCTION__); } +bool openFile() +{ + bool ret = false; + + INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); + INT_INFO("%d:%s: RDK_DSHAL_NAME = %s\n", __LINE__, __func__, RDK_DSHAL_NAME); + + dlerror(); // clear old error + dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); + if (dllib) { + INT_INFO("open %s success", RDK_DSHAL_NAME); + ret = true; + } + else { + const char* err = dlerror(); + INT_ERROR("%d:%s: Open %s failed with error err= %s\n", __LINE__, __func__, RDK_DSHAL_NAME, err ? err: "unknown"); + ret = false; + } + INT_INFO("%d:%s: Exiting function\n", __LINE__, __func__); + return ret; +} + +void startLoad() +{ + std::lock_guard lock(gMtx); + INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); + activeLoads++; + INT_INFO("%d:%s: Exit function. activeLoads = %d\n", __LINE__, __func__, activeLoads); + +} + +void finishLoad() +{ + std::lock_guard lock(gMtx); + INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); + + activeLoads--; + INT_INFO("%d:%s: activeLoads = %d\n", __LINE__, __func__, activeLoads); + if (activeLoads == 0) { + if (dllib) { + dlclose(dllib); + INT_INFO("%d:%s: Closed the hal file\n", __LINE__, __func__); + dllib = NULL; + } + else { + INT_ERROR("dllib is NULL\n"); + } + } + INT_INFO("%d:%s: Exiting function\n", __LINE__, __func__); +} + bool searchConfigs(const char *searchConfigStr, void **pConfigVar) { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); INT_INFO("%d:%s: searchConfigStr = %s\n", __LINE__, __func__, searchConfigStr); INT_INFO("%d:%s: RDK_DSHAL_NAME = %s\n", __LINE__, __func__, RDK_DSHAL_NAME); - //pthread_mutex_lock(&dsLock); std::lock_guard lock(gSearchMutex); INT_INFO("%d:%s: using lock_guard() instead pthread_mutex_lock \n", __LINE__, __func__); - dlerror(); // clear old error - void *dllib = dlopen(RDK_DSHAL_NAME, RTLD_LAZY); - if (dllib) { - *pConfigVar = (void *) dlsym(dllib, searchConfigStr); - if (*pConfigVar != NULL) { - INT_INFO("%s is defined and loaded pConfigVar= %p\r\n", searchConfigStr, *pConfigVar); - } - else { - INT_ERROR("%d:%s: %s is not defined\n", __LINE__, __func__, searchConfigStr); - } - - dlclose(dllib); + if (dllib) { + *pConfigVar = (void *) dlsym(dllib, searchConfigStr); + if (*pConfigVar != NULL) { + INT_INFO("%s is defined and loaded pConfigVar= %p\r\n", searchConfigStr, *pConfigVar); } else { - const char* err = dlerror(); - INT_ERROR("%d:%s: Open %s failed with error err= %s\n", __LINE__, __func__, RDK_DSHAL_NAME, err ? err: "unknown"); + INT_ERROR("%d:%s: %s is not defined\n", __LINE__, __func__, searchConfigStr); } - //pthread_mutex_unlock(&dsLock); + } + else { + INT_ERROR("dllib is NULL\n"); + } INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); return (*pConfigVar != NULL); } diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index bdc74453..9eb9d659 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -131,6 +131,7 @@ void VideoDeviceConfig::load() bool ret = false; INT_INFO("Enter function\n"); + startLoad(); /* * Load Constants First. */ @@ -179,6 +180,7 @@ void VideoDeviceConfig::load() { INT_ERROR("%d:%s: Congigs are NULL and config size are -1\n", __LINE__, __func__); } + finishLoad(); INT_INFO("Exit function\n"); } diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index fcbd45ae..dc511d0f 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -352,6 +352,7 @@ void VideoOutputPortConfig::load() { static int configSize, portSize, resolutionSize, invalid_size = -1; static videoPortConfigs_t configuration = {0}; + const char* searchVaribles[] = { "kVideoPortConfigs", "kVideoPortConfigs_size", @@ -363,6 +364,7 @@ void VideoOutputPortConfig::load() bool ret = false; INT_INFO("Enter function\n"); + startLoad(); try { /* * Load Constants First. @@ -504,6 +506,7 @@ void VideoOutputPortConfig::load() cout << "VIdeo Outport Exception Thrown. ..."< Date: Thu, 11 Dec 2025 12:02:33 +0000 Subject: [PATCH 32/37] fix build issue. --- ds/include/manager.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/ds/include/manager.hpp b/ds/include/manager.hpp index 12bfa53a..a9f90dde 100644 --- a/ds/include/manager.hpp +++ b/ds/include/manager.hpp @@ -181,8 +181,6 @@ class Manager { static void DeInitialize(); static void load(); //!< This function is being used for loading configure in-process DSMgr. static int IsInitialized; //!< Indicates the application has initialized with devicettings modules. - bool setFpInit(bool init){ Manager::fpInit = init;} - }; } From e287d3a582dbe0f3748fb8a8e6352a097c17a998 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 11 Dec 2025 18:26:59 +0000 Subject: [PATCH 33/37] add condition wait for 4 loads complete. --- ds/audioOutputPortConfig.cpp | 4 ++-- ds/frontPanelConfig.cpp | 4 ++-- ds/include/manager.hpp | 12 +++++++----- ds/manager.cpp | 36 +++++++++++++++++++++++++++++++++--- ds/videoDeviceConfig.cpp | 4 ++-- ds/videoOutputPortConfig.cpp | 4 ++-- 6 files changed, 48 insertions(+), 16 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 3e665016..3fc5dfae 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -176,7 +176,7 @@ void AudioOutputPortConfig::load() bool ret = false; INT_INFO("Enter function\n"); - startLoad(); + //startLoad(); try { /* @@ -284,7 +284,7 @@ void AudioOutputPortConfig::load() catch(const Exception &e) { throw e; } - finishLoad(); + notifyLoadComplete(); INT_INFO("Exit funcation\n"); } diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index 4bf90f75..c655269c 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -430,7 +430,7 @@ void FrontPanelConfig::load() bool ret = false; INT_INFO("Enter function\n"); - startLoad(); + //startLoad(); INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); ret = searchConfigs(searchVaribles[0], (void **)&configuration.pKFPDIndicatorColors ); if(ret == true) @@ -540,7 +540,7 @@ void FrontPanelConfig::load() { INT_ERROR("No valid front panel configuration found\n"); } - finishLoad(); + notifyLoadComplete(); INT_INFO("Exit function\n"); } diff --git a/ds/include/manager.hpp b/ds/include/manager.hpp index a9f90dde..f5ddae7a 100644 --- a/ds/include/manager.hpp +++ b/ds/include/manager.hpp @@ -160,11 +160,14 @@ using namespace std; namespace device { // Forward declaration for searchConfigs function -bool openFile(); -bool closeFile(); +bool openDLFile(); +//bool closeFile(); bool searchConfigs(const char *searchConfigStr, void **pConfigVar); -void startLoad(); -void finishLoad(); +//void startLoad(); +//void finishLoad(); +void notifyLoadComplete(); +void waitAndClose(); + std::string parse_opt_flag( std::string file_name , bool integer_check= false , bool debugStats = true); /** @@ -175,7 +178,6 @@ std::string parse_opt_flag( std::string file_name , bool integer_check= false , class Manager { Manager(); virtual ~Manager(); - static bool fpInit; public: static void Initialize(); static void DeInitialize(); diff --git a/ds/manager.cpp b/ds/manager.cpp index 16ce523d..db15cadb 100644 --- a/ds/manager.cpp +++ b/ds/manager.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include "dsHALConfig.h" @@ -73,6 +74,8 @@ static std::mutex gSearchMutex; static void *dllib = NULL; int activeLoads = 0; // reference counter static std::mutex gMtx; +std::condition_variable cv; +const int REQUIRED = 4; // wait for 4 loads to finish Manager::Manager() { // TODO Auto-generated constructor stub @@ -208,7 +211,7 @@ void Manager::Initialize() delay = std::stoi(delaystr); } INT_INFO("Open the hal file\n"); - ret = openFile(); + ret = openDLFile(); if(ret == true) { INT_INFO("File opened successfully\n"); @@ -222,6 +225,7 @@ void Manager::Initialize() VideoOutputPortConfig::getInstance().load(); //sleep(delay); VideoDeviceConfig::getInstance().load(); + waitAndClose(); } IsInitialized++; } @@ -242,7 +246,7 @@ void Manager::load() printf("%d:%s load completed\n", __LINE__, __FUNCTION__); } -bool openFile() +bool openDLFile() { bool ret = false; @@ -264,6 +268,7 @@ bool openFile() return ret; } +#if 0 void startLoad() { std::lock_guard lock(gMtx); @@ -273,12 +278,13 @@ void startLoad() } + void finishLoad() { std::lock_guard lock(gMtx); INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); - activeLoads--; + activeLoads++; INT_INFO("%d:%s: activeLoads = %d\n", __LINE__, __func__, activeLoads); if (activeLoads == 0) { if (dllib) { @@ -292,6 +298,7 @@ void finishLoad() } INT_INFO("%d:%s: Exiting function\n", __LINE__, __func__); } +#endif bool searchConfigs(const char *searchConfigStr, void **pConfigVar) { @@ -318,6 +325,29 @@ bool searchConfigs(const char *searchConfigStr, void **pConfigVar) } +void notifyLoadComplete() { + INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); + std::unique_lock lock(gMtx); + + activeLoads++; + // Wake waiting thread + cv.notify_all(); + INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); +} + +void waitAndClose() { + std::unique_lock lock(gMtx); + INT_INFO("%d:%s: Entering function activeLoads = %d\n", __LINE__, __func__, activeLoads); + + cv.wait(lock, [&] { return activeLoads >= REQUIRED; }); // wait for 4 loads complete + + if (dllib) { + dlclose(dllib); + dllib = nullptr; + } + INT_INFO("%d:%s: Exit function\n", __LINE__, __func__); +} + /** * @fn void Manager::DeInitialize() * @brief This API is used to deinitialize the device settings module. diff --git a/ds/videoDeviceConfig.cpp b/ds/videoDeviceConfig.cpp index 9eb9d659..43f99db5 100644 --- a/ds/videoDeviceConfig.cpp +++ b/ds/videoDeviceConfig.cpp @@ -131,7 +131,7 @@ void VideoDeviceConfig::load() bool ret = false; INT_INFO("Enter function\n"); - startLoad(); + //startLoad(); /* * Load Constants First. */ @@ -180,7 +180,7 @@ void VideoDeviceConfig::load() { INT_ERROR("%d:%s: Congigs are NULL and config size are -1\n", __LINE__, __func__); } - finishLoad(); + notifyLoadComplete(); INT_INFO("Exit function\n"); } diff --git a/ds/videoOutputPortConfig.cpp b/ds/videoOutputPortConfig.cpp index dc511d0f..22fc0c76 100644 --- a/ds/videoOutputPortConfig.cpp +++ b/ds/videoOutputPortConfig.cpp @@ -364,7 +364,7 @@ void VideoOutputPortConfig::load() bool ret = false; INT_INFO("Enter function\n"); - startLoad(); + //startLoad(); try { /* * Load Constants First. @@ -506,7 +506,7 @@ void VideoOutputPortConfig::load() cout << "VIdeo Outport Exception Thrown. ..."< Date: Fri, 12 Dec 2025 05:58:18 +0000 Subject: [PATCH 34/37] disable the dlclose. --- ds/manager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ds/manager.cpp b/ds/manager.cpp index db15cadb..f70c8660 100644 --- a/ds/manager.cpp +++ b/ds/manager.cpp @@ -225,7 +225,8 @@ void Manager::Initialize() VideoOutputPortConfig::getInstance().load(); //sleep(delay); VideoDeviceConfig::getInstance().load(); - waitAndClose(); + INT_INFO("disabled waitAndClose()\n"); + //waitAndClose(); } IsInitialized++; } From 103ec2a2c3b3e3e8068b868a07b7bacb9f66d01d Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Fri, 12 Dec 2025 16:32:20 +0000 Subject: [PATCH 35/37] Force to use FP old config to check crash. --- ds/frontPanelConfig.cpp | 2 ++ ds/manager.cpp | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index c655269c..f35b3331 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -433,6 +433,8 @@ void FrontPanelConfig::load() //startLoad(); INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); ret = searchConfigs(searchVaribles[0], (void **)&configuration.pKFPDIndicatorColors ); + ret = false; + INT_INFO("disable the new FP config ret= %d \n", ret); if(ret == true) { INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); diff --git a/ds/manager.cpp b/ds/manager.cpp index f70c8660..c3c146f4 100644 --- a/ds/manager.cpp +++ b/ds/manager.cpp @@ -84,6 +84,11 @@ Manager::Manager() { Manager::~Manager() { // TODO Auto-generated destructor stub + // Ensure close if not already + if (dllib) { + dlclose(dllib); + INT_INFO("Destructor dlclose\n"); + } } #define CHECK_RET_VAL(ret) {\ @@ -204,12 +209,14 @@ void Manager::Initialize() CHECK_RET_VAL(err); err = dsVideoDeviceInit(); CHECK_RET_VAL(err); + #if 0 std::string delaystr = parse_opt_flag("/opt/delay", true, true); if (!delaystr.empty()) { INT_INFO("dealy: [%s]", delaystr.c_str()); delay = std::stoi(delaystr); } + #endif INT_INFO("Open the hal file\n"); ret = openDLFile(); if(ret == true) @@ -270,6 +277,14 @@ bool openDLFile() } #if 0 +void EE::requestClose() { + std::lock_guard lock(m); + closeRequested = true; + if (active == 0 && handle) { + dlclose(handle); + handle = nullptr; + } +} void startLoad() { std::lock_guard lock(gMtx); @@ -325,7 +340,6 @@ bool searchConfigs(const char *searchConfigStr, void **pConfigVar) return (*pConfigVar != NULL); } - void notifyLoadComplete() { INT_INFO("%d:%s: Entering function\n", __LINE__, __func__); std::unique_lock lock(gMtx); From 76d0910f2259441647da5eab46049f04a5594d19 Mon Sep 17 00:00:00 2001 From: Santosh Kumar G <149996998+santoshcomcast@users.noreply.github.com> Date: Mon, 15 Dec 2025 09:52:08 +0530 Subject: [PATCH 36/37] fix fp Update frontPanelConfig.cpp --- ds/frontPanelConfig.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index f35b3331..7550fdad 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -44,6 +44,7 @@ #include "manager.hpp" #define DEBUG 1 // Using for dumpconfig +#define DEFAULT_FPD_TEXT_DISPLAY_SUPPORTED_CHARACTERS "ABCEDFG" using namespace std; @@ -391,7 +392,7 @@ void dumpconfig(fpdConfigs_t *configuration) configuration->pKTextDisplays[i].levels, configuration->pKTextDisplays[i].maxHorizontalIterations, configuration->pKTextDisplays[i].maxVerticalIterations, - configuration->pKTextDisplays[i].supportedCharacters, + (fpdTextDisplayCfg->supportedCharacters) ? fpdTextDisplayCfg->supportedCharacters : "NULL", configuration->pKTextDisplays[i].colorMode); } } @@ -433,8 +434,8 @@ void FrontPanelConfig::load() //startLoad(); INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[0]); ret = searchConfigs(searchVaribles[0], (void **)&configuration.pKFPDIndicatorColors ); - ret = false; - INT_INFO("disable the new FP config ret= %d \n", ret); + //ret = false; + //INT_INFO("disable the new FP config ret= %d \n", ret); if(ret == true) { INT_INFO("%d:%s: Calling searchConfigs( %s)\n", __LINE__, __func__, searchVaribles[1]); @@ -529,7 +530,8 @@ void FrontPanelConfig::load() configuration.pKTextDisplays[i].levels, configuration.pKTextDisplays[i].maxHorizontalIterations, configuration.pKTextDisplays[i].maxVerticalIterations, - configuration.pKTextDisplays[i].supportedCharacters, + (fpdTextDisplayCfg->supportedCharacters) ? std::string(fpdTextDisplayCfg->supportedCharacters) : + std::string(DEFAULT_FPD_TEXT_DISPLAY_SUPPORTED_CHARACTERS), configuration.pKTextDisplays[i].colorMode)); } } From acd9e707c9baf2ac91cef5dabd26807b10265339 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Mon, 15 Dec 2025 05:19:21 +0000 Subject: [PATCH 37/37] fix build error --- ds/frontPanelConfig.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ds/frontPanelConfig.cpp b/ds/frontPanelConfig.cpp index 7550fdad..3c18b340 100644 --- a/ds/frontPanelConfig.cpp +++ b/ds/frontPanelConfig.cpp @@ -392,7 +392,7 @@ void dumpconfig(fpdConfigs_t *configuration) configuration->pKTextDisplays[i].levels, configuration->pKTextDisplays[i].maxHorizontalIterations, configuration->pKTextDisplays[i].maxVerticalIterations, - (fpdTextDisplayCfg->supportedCharacters) ? fpdTextDisplayCfg->supportedCharacters : "NULL", + (configuration->pKTextDisplays[i].supportedCharacters) ? configuration->pKTextDisplays[i].supportedCharacters : "NULL", configuration->pKTextDisplays[i].colorMode); } } @@ -530,7 +530,7 @@ void FrontPanelConfig::load() configuration.pKTextDisplays[i].levels, configuration.pKTextDisplays[i].maxHorizontalIterations, configuration.pKTextDisplays[i].maxVerticalIterations, - (fpdTextDisplayCfg->supportedCharacters) ? std::string(fpdTextDisplayCfg->supportedCharacters) : + (configuration.pKTextDisplays[i].supportedCharacters) ? std::string(configuration.pKTextDisplays[i].supportedCharacters) : std::string(DEFAULT_FPD_TEXT_DISPLAY_SUPPORTED_CHARACTERS), configuration.pKTextDisplays[i].colorMode)); }