From bec9c03ff5ecfe46b876762ab4080e3ed46f776f Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 10 Sep 2025 09:55:23 +0000 Subject: [PATCH 01/10] POC: read the variable through dlsym utlity. --- ds/Makefile | 2 +- ds/audioOutputPortConfig.cpp | 139 ++++++++++++++++++++++++++++++++++- rpc/srv/dsAudio.c | 3 + 3 files changed, 142 insertions(+), 2 deletions(-) diff --git a/ds/Makefile b/ds/Makefile index d69caba9..f266afeb 100644 --- a/ds/Makefile +++ b/ds/Makefile @@ -59,7 +59,7 @@ all: install library: $(OBJS) @echo "Building $(LIBNAMEFULL) ...." - $(CXX) $(OBJS) $(CFLAGS) $(DSHAL_LDFLAGS) -L$(INSTALL)/lib -ldshalcli -shared -o $(LIBNAMEFULL) + $(CXX) $(OBJS) $(CFLAGS) $(DSHAL_LDFLAGS) -L$(INSTALL)/lib -ldshalcli -ldshalsrv -shared -o $(LIBNAMEFULL) $(CXX) $(OBJS) $(CFLAGS) -L$(INSTALL)/lib -ldshalcli -shared -o $(LIBNAMECLI) %.o: %.cpp diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index c3ab1cc6..5e80fd35 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -35,6 +35,16 @@ #include "stdlib.h" #include "dslogger.h" +#include +#include "libIARM.h" +#include "libIBus.h" +#include "iarmUtil.h" + +//extern dsAudioTypeConfig_t *kConfig_audio; +//extern dsAudioPortConfig_t *kPort_audio; +static dsAudioTypeConfig_t *kConfigs1 = NULL; +static dsAudioPortConfig_t *kPorts1 = NULL; + 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 +118,85 @@ List AudioOutputPortConfig::getSupportedTypes() return supportedTypes; } +bool searchConfigs() +{ + //static dsAudioTypeConfig_t *kConfigs1 = NULL; + //static dsAudioPortConfig_t *kPorts1 = NULL; + + //if ( kConfigs1 == NULL) + { + void *dllib = dlopen("libdshalsrv.so", RTLD_LAZY); + if (dllib) { + kConfigs1 = (dsAudioTypeConfig_t *) dlsym(dllib, "kConfig_audio"); + if (kConfigs1) { + INT_DEBUG("kConfig_audio is defined and loaded kConfigs1 = %p\r\n", kConfigs1); + printf("%d:%s: kConfig_audio is defined and loaded kConfigs1 = %p\n", __LINE__, __func__, kConfigs1); + } + else { + INT_INFO("kConfig_audio is not defined\r\n"); + printf("%d:%s: kConfig_audio is not defined\n", __LINE__, __func__); + IARM_BUS_Unlock(lock); + dlclose(dllib); + return IARM_RESULT_INVALID_STATE; + } + dlclose(dllib); + } + else { + INT_ERROR("Opening libdshalsrv.so failed\r\n"); + printf("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); + } + } + + //if ( kPorts1 == NULL) + { + void *dllib = dlopen("libdshalsrv.so", RTLD_LAZY); + if (dllib) { + kPorts1 = (dsAudioPortConfig_t *) dlsym(dllib, "kPort_audio"); + if (kPorts1) { + INT_DEBUG("kPort_audio is defined and loaded kPorts1 = %p\r\n", kPorts1); + printf("%d:%s: kPort_audio is defined and loaded kPorts1 = %p\n", __LINE__, __func__, kPorts1); + } + else { + INT_INFO("kPort_audio is not defined\r\n"); + printf("%d:%s: kPort_audio is not defined\n", __LINE__, __func__); + IARM_BUS_Unlock(lock); + dlclose(dllib); + return IARM_RESULT_INVALID_STATE; + } + dlclose(dllib); + } + else { + INT_ERROR("Opening libdshalsrv.so failed\r\n"); + printf("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); + } + } + printf("\n\n=========================================================================================================================\n\n"); + printf("\n%d:%s print configs\n", __LINE__, __func__); + for (size_t i = 0; i < dsUTL_DIM(kConfigs1); i++) { + const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; + AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); + aPortType.enable(); + printf("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); + printf("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); + printf("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); + printf("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); + printf("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); + } + + + /* + * set up ports based on kPorts[] + */ + for (size_t i = 0; i < dsUTL_DIM(kPorts1); i++) { + const dsAudioPortConfig_t *port = &kPorts1[i]; + printf("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); + printf("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); + } + printf("\n\n=========================================================================================================================\n\n"); + + return (kConfigs1 || kPorts1); +} + void AudioOutputPortConfig::load() { try { @@ -132,7 +221,7 @@ void AudioOutputPortConfig::load() _aPortTypes.push_back(AudioOutputPortType(i)); } - +#if 1 /* * Initialize Audio portTypes (encodings, compressions etc.) * and its port instances (db, level etc) @@ -165,6 +254,54 @@ void AudioOutputPortConfig::load() _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); } + searchConfigs(); +#else //gsk + if(searchConfigs()) + { + /*if(kConfig_audio == NULL || kPort_audio == NULL) { + throw IllegalArgumentException(); + }*/ + //dsAudioTypeConfig_t *kConfigs = kConfig_audio; + //dsAudioPortConfig_t *kPorts = kPort_audio; + /* + * Initialize Audio portTypes (encodings, compressions etc.) + * and its port instances (db, level etc) + */ + for (size_t i = 0; i < dsUTL_DIM(kConfigs1); 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[] + */ + for (size_t i = 0; i < dsUTL_DIM(kPorts1); 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 + { + printf("%d:%s: kConfig and kPorts are not available\n", __LINE__, __func__); + } +#endif } catch(const Exception &e) { diff --git a/rpc/srv/dsAudio.c b/rpc/srv/dsAudio.c index 90b1504a..46206b68 100755 --- a/rpc/srv/dsAudio.c +++ b/rpc/srv/dsAudio.c @@ -53,6 +53,9 @@ #include "safec_lib.h" +const dsAudioTypeConfig_t *kConfig_audio = kConfigs; +const dsAudioPortConfig_t *kPort_audio = kPorts; + static int m_isInitialized = 0; static int m_isPlatInitialized = 0; From a1ce0ddd779ba4b41a08ea09df6361a201515af2 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 10 Sep 2025 10:27:06 +0000 Subject: [PATCH 02/10] read variable through dlsym utility Signed-off-by: grandhi_santoshkumar --- ds/audioOutputPortConfig.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 5e80fd35..c28aa0b6 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -135,7 +135,7 @@ bool searchConfigs() else { INT_INFO("kConfig_audio is not defined\r\n"); printf("%d:%s: kConfig_audio is not defined\n", __LINE__, __func__); - IARM_BUS_Unlock(lock); + //IARM_BUS_Unlock(lock); dlclose(dllib); return IARM_RESULT_INVALID_STATE; } @@ -159,7 +159,7 @@ bool searchConfigs() else { INT_INFO("kPort_audio is not defined\r\n"); printf("%d:%s: kPort_audio is not defined\n", __LINE__, __func__); - IARM_BUS_Unlock(lock); + //IARM_BUS_Unlock(lock); dlclose(dllib); return IARM_RESULT_INVALID_STATE; } From 34ef765b5fe8e6d33350318499e26dc397721f89 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Wed, 10 Sep 2025 12:23:44 +0000 Subject: [PATCH 03/10] debug extern from lib --- ds/audioOutputPortConfig.cpp | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index c28aa0b6..4c04d494 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -40,11 +40,15 @@ #include "libIBus.h" #include "iarmUtil.h" -//extern dsAudioTypeConfig_t *kConfig_audio; -//extern dsAudioPortConfig_t *kPort_audio; +#define IARM_BUS_Lock(lock) pthread_mutex_lock(&dsLock) +#define IARM_BUS_Unlock(lock) pthread_mutex_unlock(&dsLock) +extern dsAudioTypeConfig_t *kConfig_audio; +extern dsAudioPortConfig_t *kPort_audio; static dsAudioTypeConfig_t *kConfigs1 = NULL; static dsAudioPortConfig_t *kPorts1 = NULL; +static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; + 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. @@ -193,6 +197,31 @@ bool searchConfigs() printf("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); } printf("\n\n=========================================================================================================================\n\n"); + + printf("\n\n=========================================================================================================================\n\n"); + printf("\n%d:%s print configs using extern\n", __LINE__, __func__); + for (size_t i = 0; i < dsUTL_DIM(kConfig_audio); i++) { + const dsAudioTypeConfig_t *typeCfg = &kConfig_audio[i]; + AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); + aPortType.enable(); + printf("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); + printf("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); + printf("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); + printf("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); + printf("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); + } + + + /* + * set up ports based on kPorts[] + */ + for (size_t i = 0; i < dsUTL_DIM(kPort_audio); i++) { + const dsAudioPortConfig_t *port = &kPort_audio[i]; + printf("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); + printf("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); + } + printf("\n\n=========================================================================================================================\n\n"); + return (kConfigs1 || kPorts1); } From 7deaac8d806bc8717758aebd195ebb093771947f Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 11 Sep 2025 07:42:18 +0000 Subject: [PATCH 04/10] debug poc Signed-off-by: grandhi_santoshkumar --- ds/audioOutputPortConfig.cpp | 95 +++++++++++++++++++++----- rpc/srv/dsAudio.c | 127 ++++++++++++++++++++++++++++++++++- 2 files changed, 203 insertions(+), 19 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 4c04d494..a00205ec 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -42,10 +42,13 @@ #define IARM_BUS_Lock(lock) pthread_mutex_lock(&dsLock) #define IARM_BUS_Unlock(lock) pthread_mutex_unlock(&dsLock) -extern dsAudioTypeConfig_t *kConfig_audio; -extern dsAudioPortConfig_t *kPort_audio; +extern dsAudioTypeConfig_t kConfig_audio [dsAUDIOPORT_TYPE_MAX]; +extern dsAudioPortConfig_t kPort_audio [dsAUDIOPORT_TYPE_MAX]; +extern int kConfig_size, kPort_size; static dsAudioTypeConfig_t *kConfigs1 = NULL; static dsAudioPortConfig_t *kPorts1 = NULL; +int *pKConSize, *pKPortSize; + static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; @@ -126,12 +129,14 @@ bool searchConfigs() { //static dsAudioTypeConfig_t *kConfigs1 = NULL; //static dsAudioPortConfig_t *kPorts1 = NULL; - + int kConfig_size_local = -1, kPort_size_local = -1; + int kConfig_size_dl = -1, kPort_size_dl = -1; + IARM_BUS_Lock(lock); //if ( kConfigs1 == NULL) { void *dllib = dlopen("libdshalsrv.so", RTLD_LAZY); if (dllib) { - kConfigs1 = (dsAudioTypeConfig_t *) dlsym(dllib, "kConfig_audio"); + kConfigs1 = (dsAudioTypeConfig_t *) dlsym(dllib, "kConfigs_audio"); if (kConfigs1) { INT_DEBUG("kConfig_audio is defined and loaded kConfigs1 = %p\r\n", kConfigs1); printf("%d:%s: kConfig_audio is defined and loaded kConfigs1 = %p\n", __LINE__, __func__, kConfigs1); @@ -139,10 +144,44 @@ bool searchConfigs() else { INT_INFO("kConfig_audio is not defined\r\n"); printf("%d:%s: kConfig_audio is not defined\n", __LINE__, __func__); - //IARM_BUS_Unlock(lock); + IARM_BUS_Unlock(lock); dlclose(dllib); - return IARM_RESULT_INVALID_STATE; + //return IARM_RESULT_INVALID_STATE; + } + kPorts1 = (dsAudioPortConfig_t *) dlsym(dllib, "kPort_audio"); + if (kPorts1) { + INT_DEBUG("kPort_audio is defined and loaded kPorts1 = %p\r\n", kPorts1); + printf("%d:%s: kPort_audio is defined and loaded kPorts1 = %p\n", __LINE__, __func__, kPorts1); } + else { + INT_INFO("kPort_audio is not defined\r\n"); + printf("%d:%s: kPort_audio is not defined\n", __LINE__, __func__); + IARM_BUS_Unlock(lock); + dlclose(dllib); + //return IARM_RESULT_INVALID_STATE; + } + pKConSize = (int *) dlsym(dllib, "kConfig_size"); + pKPortSize = (int *) dlsym(dllib, "kPort_size"); + if(pKConSize) + { + kConfig_size_local = *pKConSize; + printf("%d:%s: pKConSize is defined and loaded kConfig_size_local = %d\n", __LINE__, __func__, kConfig_size_local); + } + else + { + printf("%d:%s: pKConSize is not defined\n", __LINE__, __func__); + kConfig_size_local = -1; + } + if(pKPortSize) + { + kPort_size_local = *pKPortSize; + printf("%d:%s: pKPortSize is defined and loaded kPort_size_local = %d\n", __LINE__, __func__, kPort_size_local); + } + else + { + printf("%d:%s: pKPortSize is not defined\n", __LINE__, __func__); + kPort_size_local = -1; + } dlclose(dllib); } else { @@ -163,7 +202,7 @@ bool searchConfigs() else { INT_INFO("kPort_audio is not defined\r\n"); printf("%d:%s: kPort_audio is not defined\n", __LINE__, __func__); - //IARM_BUS_Unlock(lock); + IARM_BUS_Unlock(lock); dlclose(dllib); return IARM_RESULT_INVALID_STATE; } @@ -174,9 +213,15 @@ bool searchConfigs() printf("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); } } + IARM_BUS_Unlock(lock); + kConfig_size_dl = dsUTL_DIM(kConfigs1); + kPort_size_dl = dsUTL_DIM(kPorts1); + printf("%d:%s: dsUTL_DIM kConfig_size_dl = %d kPort_size_dl = %d\n", __LINE__, __func__, kConfig_size_dl, kPort_size_dl); + #if 1 printf("\n\n=========================================================================================================================\n\n"); - printf("\n%d:%s print configs\n", __LINE__, __func__); - for (size_t i = 0; i < dsUTL_DIM(kConfigs1); i++) { + printf("\n%d:%s print configs dlsym\n", __LINE__, __func__); + + for (size_t i = 0; i < kConfig_size_local; i++) { const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); aPortType.enable(); @@ -191,16 +236,22 @@ bool searchConfigs() /* * set up ports based on kPorts[] */ - for (size_t i = 0; i < dsUTL_DIM(kPorts1); i++) { + for (size_t i = 0; i < kPort_size_local; i++) { const dsAudioPortConfig_t *port = &kPorts1[i]; printf("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); printf("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); } printf("\n\n=========================================================================================================================\n\n"); - + #else printf("\n\n=========================================================================================================================\n\n"); - printf("\n%d:%s print configs using extern\n", __LINE__, __func__); - for (size_t i = 0; i < dsUTL_DIM(kConfig_audio); i++) { + printf("\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) + { + for (size_t i = 0; i < kConfig_size_local; i++) { const dsAudioTypeConfig_t *typeCfg = &kConfig_audio[i]; AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); aPortType.enable(); @@ -210,18 +261,28 @@ bool searchConfigs() printf("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); printf("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); } - - + } + else + { + printf("%d:%s: kConfig_audio is NULL\n", __LINE__, __func__); + } + if(kPorts1 != NULL) + { /* * set up ports based on kPorts[] */ - for (size_t i = 0; i < dsUTL_DIM(kPort_audio); i++) { + for (size_t i = 0; i < kPort_size_local; i++) { const dsAudioPortConfig_t *port = &kPort_audio[i]; printf("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); printf("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); } + } + else + { + printf("%d:%s: kPort_audio is NULL\n", __LINE__, __func__); + } printf("\n\n=========================================================================================================================\n\n"); - + #endif return (kConfigs1 || kPorts1); } diff --git a/rpc/srv/dsAudio.c b/rpc/srv/dsAudio.c index 46206b68..5450032a 100755 --- a/rpc/srv/dsAudio.c +++ b/rpc/srv/dsAudio.c @@ -53,8 +53,131 @@ #include "safec_lib.h" -const dsAudioTypeConfig_t *kConfig_audio = kConfigs; -const dsAudioPortConfig_t *kPort_audio = kPorts; +//const dsAudioTypeConfig_t kConfig_audio ; +//const dsAudioPortConfig_t kPort_audio ; + +/* + * Setup the supported configurations here. + */ +#ifdef HAS_SPDIF_SUPPORT +static const dsAudioPortType_t kSupportedPortTypes1[] = { dsAUDIOPORT_TYPE_SPDIF, dsAUDIOPORT_TYPE_SPEAKER, dsAUDIOPORT_TYPE_HDMI_ARC, dsAUDIOPORT_TYPE_HEADPHONE }; +#else +static const dsAudioPortType_t kSupportedPortTypes1[] = { dsAUDIOPORT_TYPE_SPEAKER, dsAUDIOPORT_TYPE_HDMI_ARC }; +#endif +#ifdef HAS_SPDIF_SUPPORT +static const dsAudioEncoding_t kSupportedSPDIFEncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; +static const dsAudioCompression_t kSupportedSPDIFCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; +static const dsAudioStereoMode_t kSupportedSPDIFStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; +#endif +#ifdef HAS_HEADPHONE_SUPPORT +static const dsAudioEncoding_t kSupportedHEADPHONEEncodings1[] = { dsAUDIO_ENC_PCM, }; +static const dsAudioCompression_t kSupportedHEADPHONECompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; +static const dsAudioStereoMode_t kSupportedHEADPHONEStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, }; +#endif +static const dsAudioEncoding_t kSupportedSPEAKEREncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; +static const dsAudioCompression_t kSupportedSPEAKERCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; +static const dsAudioStereoMode_t kSupportedSPEAKERStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, }; + +static const dsAudioEncoding_t kSupportedARCEncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; +static const dsAudioCompression_t kSupportedARCCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; +static const dsAudioStereoMode_t kSupportedARCStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; + + +static const dsAudioTypeConfig_t kConfig_audio[]= { +#ifdef HAS_SPDIF_SUPPORT + { + /*.typeId = */ dsAUDIOPORT_TYPE_SPDIF, + /*.name = */ "SPDIF", //SPDIF + /*.numSupportedCompressions = */dsUTL_DIM(kSupportedSPDIFCompressions1), + /*.compressions = */ kSupportedSPDIFCompressions1, + /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedSPDIFEncodings1), + /*.encodings = */ kSupportedSPDIFEncodings1, + /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedSPDIFStereoModes1), + /*.stereoModes = */ kSupportedSPDIFStereoModes1, + }, +#endif +#ifdef HAS_HEADPHONE_SUPPORT + { + /*.typeId = */ dsAUDIOPORT_TYPE_HEADPHONE, + /*.name = */ "HEADPHONE", //HEADPHONE + /*.numSupportedCompressions = */dsUTL_DIM(kSupportedHEADPHONECompressions1), + /*.compressions = */ kSupportedHEADPHONECompressions1, + /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedHEADPHONEEncodings1), + /*.encodings = */ kSupportedHEADPHONEEncodings1, + /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedHEADPHONEStereoModes1), + /*.stereoModes = */ kSupportedHEADPHONEStereoModes1, + }, +#endif + { + /*.typeId = */ dsAUDIOPORT_TYPE_SPEAKER, + /*.name = */ "SPEAKER", //SPEAKER + /*.numSupportedCompressions = */dsUTL_DIM(kSupportedSPEAKERCompressions1), + /*.compressions = */ kSupportedSPEAKERCompressions1, + /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedSPEAKEREncodings1), + /*.encodings = */ kSupportedSPEAKEREncodings1, + /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedSPEAKERStereoModes1), + /*.stereoModes = */ kSupportedSPEAKERStereoModes1, + }, + { + /*.typeId = */ dsAUDIOPORT_TYPE_HDMI_ARC, + /*.name = */ "HDMI_ARC", //ARC/eARC + /*.numSupportedCompressions = */dsUTL_DIM(kSupportedARCCompressions1), + /*.compressions = */ kSupportedARCCompressions1, + /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedARCEncodings1), + /*.encodings = */ kSupportedARCEncodings1, + /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedARCStereoModes1), + /*.stereoModes = */ kSupportedARCStereoModes1, + } +}; + +static const dsVideoPortPortId_t connectedVOPs1[dsAUDIOPORT_TYPE_MAX][dsVIDEOPORT_TYPE_MAX] = { + {/*VOPs connected to LR Audio */ + + }, + {/*VOPs connected to HDMI Audio */ + }, + {/*VOPs connected to SPDIF Audio */ + {dsVIDEOPORT_TYPE_INTERNAL, 0}, + }, + {/*VOPs connected to SPEAKER Audio */ + {dsVIDEOPORT_TYPE_INTERNAL, 0}, + }, + {/*VOPs connected to ARC Audio */ + {dsVIDEOPORT_TYPE_INTERNAL, 0}, + }, + {/*VOPs connected to HEADPHONE Audio */ + {dsVIDEOPORT_TYPE_INTERNAL, 0}, + } +}; + +static const dsAudioPortConfig_t kPort_audio[] = { +#ifdef HAS_SPDIF_SUPPORT + { + /*.typeId = */ {dsAUDIOPORT_TYPE_SPDIF, 0}, + /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_SPDIF], + }, +#endif +#ifdef HAS_HEADPHONE_SUPPORT + { + /*.typeId = */ {dsAUDIOPORT_TYPE_HEADPHONE, 0}, + /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_HEADPHONE], + }, +#endif + { + /*.typeId = */ {dsAUDIOPORT_TYPE_SPEAKER, 0}, + /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_SPEAKER], + }, + { + /*.typeId = */ {dsAUDIOPORT_TYPE_HDMI_ARC, 0}, + /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_HDMI_ARC], + } +}; + +int kConfig_size = sizeof(kConfig_audio) / sizeof(kConfig_audio[0]); +int kPort_size = sizeof(kPort_audio) / sizeof(kPort_audio[0]); + + + static int m_isInitialized = 0; static int m_isPlatInitialized = 0; From adf06cce6c6504e3a73a439e7da782a934a0bbbd Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Thu, 11 Sep 2025 08:50:33 +0000 Subject: [PATCH 05/10] debug poc Signed-off-by: grandhi_santoshkumar --- ds/audioOutputPortConfig.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index a00205ec..0849b755 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -136,7 +136,7 @@ bool searchConfigs() { void *dllib = dlopen("libdshalsrv.so", RTLD_LAZY); if (dllib) { - kConfigs1 = (dsAudioTypeConfig_t *) dlsym(dllib, "kConfigs_audio"); + kConfigs1 = (dsAudioTypeConfig_t *) dlsym(dllib, "kConfig_audio"); if (kConfigs1) { INT_DEBUG("kConfig_audio is defined and loaded kConfigs1 = %p\r\n", kConfigs1); printf("%d:%s: kConfig_audio is defined and loaded kConfigs1 = %p\n", __LINE__, __func__, kConfigs1); @@ -157,7 +157,7 @@ bool searchConfigs() INT_INFO("kPort_audio is not defined\r\n"); printf("%d:%s: kPort_audio is not defined\n", __LINE__, __func__); IARM_BUS_Unlock(lock); - dlclose(dllib); + //dlclose(dllib); //return IARM_RESULT_INVALID_STATE; } pKConSize = (int *) dlsym(dllib, "kConfig_size"); @@ -204,7 +204,7 @@ bool searchConfigs() printf("%d:%s: kPort_audio is not defined\n", __LINE__, __func__); IARM_BUS_Unlock(lock); dlclose(dllib); - return IARM_RESULT_INVALID_STATE; + //return IARM_RESULT_INVALID_STATE; } dlclose(dllib); } From eb49b4a92fdebb328e07047a504a7fb649bdbeb6 Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Fri, 12 Sep 2025 07:15:37 +0000 Subject: [PATCH 06/10] debug poc Signed-off-by: grandhi_santoshkumar --- ds/audioOutputPortConfig.cpp | 59 +++++++++++++++++------------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 0849b755..229777b9 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -42,16 +42,16 @@ #define IARM_BUS_Lock(lock) pthread_mutex_lock(&dsLock) #define IARM_BUS_Unlock(lock) pthread_mutex_unlock(&dsLock) -extern dsAudioTypeConfig_t kConfig_audio [dsAUDIOPORT_TYPE_MAX]; -extern dsAudioPortConfig_t kPort_audio [dsAUDIOPORT_TYPE_MAX]; +extern dsAudioTypeConfig_t kConfig_audio[dsAUDIOPORT_TYPE_MAX]; +extern dsAudioPortConfig_t kPort_audio[dsAUDIOPORT_TYPE_MAX]; extern int kConfig_size, kPort_size; -static dsAudioTypeConfig_t *kConfigs1 = NULL; -static dsAudioPortConfig_t *kPorts1 = NULL; +static dsAudioTypeConfig_t *kConfigs1 = NULL;//, *kConfigs2 = kConfig_audio; +static dsAudioPortConfig_t *kPorts1 = NULL;//, *kPorts2 = kPort_audio; int *pKConSize, *pKPortSize; - static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; + 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. @@ -125,13 +125,14 @@ List AudioOutputPortConfig::getSupportedTypes() return supportedTypes; } +#if 1 bool searchConfigs() { //static dsAudioTypeConfig_t *kConfigs1 = NULL; //static dsAudioPortConfig_t *kPorts1 = NULL; int kConfig_size_local = -1, kPort_size_local = -1; int kConfig_size_dl = -1, kPort_size_dl = -1; - IARM_BUS_Lock(lock); + //IARM_BUS_Lock(lock); //if ( kConfigs1 == NULL) { void *dllib = dlopen("libdshalsrv.so", RTLD_LAZY); @@ -144,22 +145,11 @@ bool searchConfigs() else { INT_INFO("kConfig_audio is not defined\r\n"); printf("%d:%s: kConfig_audio is not defined\n", __LINE__, __func__); - IARM_BUS_Unlock(lock); - dlclose(dllib); - //return IARM_RESULT_INVALID_STATE; - } - kPorts1 = (dsAudioPortConfig_t *) dlsym(dllib, "kPort_audio"); - if (kPorts1) { - INT_DEBUG("kPort_audio is defined and loaded kPorts1 = %p\r\n", kPorts1); - printf("%d:%s: kPort_audio is defined and loaded kPorts1 = %p\n", __LINE__, __func__, kPorts1); - } - else { - INT_INFO("kPort_audio is not defined\r\n"); - printf("%d:%s: kPort_audio is not defined\n", __LINE__, __func__); - IARM_BUS_Unlock(lock); + //IARM_BUS_Unlock(lock); //dlclose(dllib); //return IARM_RESULT_INVALID_STATE; } + pKConSize = (int *) dlsym(dllib, "kConfig_size"); pKPortSize = (int *) dlsym(dllib, "kPort_size"); if(pKConSize) @@ -202,8 +192,8 @@ bool searchConfigs() else { INT_INFO("kPort_audio is not defined\r\n"); printf("%d:%s: kPort_audio is not defined\n", __LINE__, __func__); - IARM_BUS_Unlock(lock); - dlclose(dllib); + //IARM_BUS_Unlock(lock); + //dlclose(dllib); //return IARM_RESULT_INVALID_STATE; } dlclose(dllib); @@ -213,16 +203,18 @@ bool searchConfigs() printf("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); } } - IARM_BUS_Unlock(lock); - kConfig_size_dl = dsUTL_DIM(kConfigs1); - kPort_size_dl = dsUTL_DIM(kPorts1); - printf("%d:%s: dsUTL_DIM kConfig_size_dl = %d kPort_size_dl = %d\n", __LINE__, __func__, kConfig_size_dl, kPort_size_dl); - #if 1 + //dlclose(dllib); + //IARM_BUS_Unlock(lock); + //kConfig_size_dl = dsUTL_DIM(kConfigs1); + //kPort_size_dl = dsUTL_DIM(kPorts1); + //printf("%d:%s: dsUTL_DIM kConfig_size_dl = %d kPort_size_dl = %d\n", __LINE__, __func__, kConfig_size_dl, kPort_size_dl); + #if 0 printf("\n\n=========================================================================================================================\n\n"); printf("\n%d:%s print configs dlsym\n", __LINE__, __func__); - + if for (size_t i = 0; i < kConfig_size_local; i++) { - const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; + //const dsAudioTypeConfig_t *typeCfg = &kConfig_audio[i]; + const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; //NO compile issues AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); aPortType.enable(); printf("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); @@ -237,6 +229,7 @@ bool searchConfigs() * set up ports based on kPorts[] */ for (size_t i = 0; i < kPort_size_local; i++) { + //const dsAudioPortConfig_t *port = &kPort_audio[i]; const dsAudioPortConfig_t *port = &kPorts1[i]; printf("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); printf("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); @@ -252,7 +245,8 @@ bool searchConfigs() if(kConfigs1 != NULL) { for (size_t i = 0; i < kConfig_size_local; i++) { - const dsAudioTypeConfig_t *typeCfg = &kConfig_audio[i]; + //const dsAudioTypeConfig_t *typeCfg = &kConfig_audio[i]; + const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); aPortType.enable(); printf("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); @@ -272,7 +266,8 @@ bool searchConfigs() * set up ports based on kPorts[] */ for (size_t i = 0; i < kPort_size_local; i++) { - const dsAudioPortConfig_t *port = &kPort_audio[i]; + //const dsAudioPortConfig_t *port = &kPort_audio[i]; + const dsAudioPortConfig_t *port = &kPorts1[i]; printf("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); printf("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); } @@ -286,6 +281,7 @@ bool searchConfigs() return (kConfigs1 || kPorts1); } +#endif void AudioOutputPortConfig::load() { @@ -336,6 +332,7 @@ void AudioOutputPortConfig::load() } } + /* * set up ports based on kPorts[] */ @@ -346,7 +343,7 @@ void AudioOutputPortConfig::load() } searchConfigs(); #else //gsk - if(searchConfigs()) + if(searchConfigs()) { /*if(kConfig_audio == NULL || kPort_audio == NULL) { throw IllegalArgumentException(); From 1de2bef83131b753a983618b2d7b2cbf9ce4087f Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Fri, 12 Sep 2025 12:57:43 +0000 Subject: [PATCH 07/10] debug poc Signed-off-by: grandhi_santoshkumar --- rpc/srv/dsAudio.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/rpc/srv/dsAudio.c b/rpc/srv/dsAudio.c index 5450032a..ec10aaeb 100755 --- a/rpc/srv/dsAudio.c +++ b/rpc/srv/dsAudio.c @@ -60,30 +60,30 @@ * Setup the supported configurations here. */ #ifdef HAS_SPDIF_SUPPORT -static const dsAudioPortType_t kSupportedPortTypes1[] = { dsAUDIOPORT_TYPE_SPDIF, dsAUDIOPORT_TYPE_SPEAKER, dsAUDIOPORT_TYPE_HDMI_ARC, dsAUDIOPORT_TYPE_HEADPHONE }; + const dsAudioPortType_t kSupportedPortTypes1[] = { dsAUDIOPORT_TYPE_SPDIF, dsAUDIOPORT_TYPE_SPEAKER, dsAUDIOPORT_TYPE_HDMI_ARC, dsAUDIOPORT_TYPE_HEADPHONE }; #else -static const dsAudioPortType_t kSupportedPortTypes1[] = { dsAUDIOPORT_TYPE_SPEAKER, dsAUDIOPORT_TYPE_HDMI_ARC }; + const dsAudioPortType_t kSupportedPortTypes1[] = { dsAUDIOPORT_TYPE_SPEAKER, dsAUDIOPORT_TYPE_HDMI_ARC }; #endif #ifdef HAS_SPDIF_SUPPORT -static const dsAudioEncoding_t kSupportedSPDIFEncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; -static const dsAudioCompression_t kSupportedSPDIFCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; -static const dsAudioStereoMode_t kSupportedSPDIFStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; + const dsAudioEncoding_t kSupportedSPDIFEncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; + const dsAudioCompression_t kSupportedSPDIFCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; + const dsAudioStereoMode_t kSupportedSPDIFStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; #endif #ifdef HAS_HEADPHONE_SUPPORT -static const dsAudioEncoding_t kSupportedHEADPHONEEncodings1[] = { dsAUDIO_ENC_PCM, }; -static const dsAudioCompression_t kSupportedHEADPHONECompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; -static const dsAudioStereoMode_t kSupportedHEADPHONEStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, }; + const dsAudioEncoding_t kSupportedHEADPHONEEncodings1[] = { dsAUDIO_ENC_PCM, }; + const dsAudioCompression_t kSupportedHEADPHONECompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; + const dsAudioStereoMode_t kSupportedHEADPHONEStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, }; #endif -static const dsAudioEncoding_t kSupportedSPEAKEREncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; -static const dsAudioCompression_t kSupportedSPEAKERCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; -static const dsAudioStereoMode_t kSupportedSPEAKERStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, }; + const dsAudioEncoding_t kSupportedSPEAKEREncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; + const dsAudioCompression_t kSupportedSPEAKERCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; + const dsAudioStereoMode_t kSupportedSPEAKERStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, }; -static const dsAudioEncoding_t kSupportedARCEncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; -static const dsAudioCompression_t kSupportedARCCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; -static const dsAudioStereoMode_t kSupportedARCStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; + const dsAudioEncoding_t kSupportedARCEncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; + const dsAudioCompression_t kSupportedARCCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; + const dsAudioStereoMode_t kSupportedARCStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; -static const dsAudioTypeConfig_t kConfig_audio[]= { + const dsAudioTypeConfig_t kConfig_audio[]= { #ifdef HAS_SPDIF_SUPPORT { /*.typeId = */ dsAUDIOPORT_TYPE_SPDIF, @@ -130,7 +130,7 @@ static const dsAudioTypeConfig_t kConfig_audio[]= { } }; -static const dsVideoPortPortId_t connectedVOPs1[dsAUDIOPORT_TYPE_MAX][dsVIDEOPORT_TYPE_MAX] = { + const dsVideoPortPortId_t connectedVOPs1[dsAUDIOPORT_TYPE_MAX][dsVIDEOPORT_TYPE_MAX] = { {/*VOPs connected to LR Audio */ }, @@ -150,7 +150,7 @@ static const dsVideoPortPortId_t connectedVOPs1[dsAUDIOPORT_TYPE_MAX][dsVIDEOPOR } }; -static const dsAudioPortConfig_t kPort_audio[] = { + const dsAudioPortConfig_t kPort_audio[] = { #ifdef HAS_SPDIF_SUPPORT { /*.typeId = */ {dsAUDIOPORT_TYPE_SPDIF, 0}, From 4e473dd38421c22c37c87cd95d1a98e4c6938e4e Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Mon, 15 Sep 2025 05:50:00 +0000 Subject: [PATCH 08/10] debug build issue Signed-off-by: grandhi_santoshkumar --- rpc/srv/dsAudio.c | 1 + 1 file changed, 1 insertion(+) diff --git a/rpc/srv/dsAudio.c b/rpc/srv/dsAudio.c index ec10aaeb..d2be232d 100755 --- a/rpc/srv/dsAudio.c +++ b/rpc/srv/dsAudio.c @@ -82,6 +82,7 @@ const dsAudioCompression_t kSupportedARCCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; const dsAudioStereoMode_t kSupportedARCStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; +#error const dsAudioTypeConfig_t kConfig_audio[]= { #ifdef HAS_SPDIF_SUPPORT From 1211fad68a98cee8f675cd6397d7c9b57420905f Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Mon, 15 Sep 2025 06:22:41 +0000 Subject: [PATCH 09/10] debug poc Signed-off-by: grandhi_santoshkumar --- rpc/srv/dsAudio.c | 1 - 1 file changed, 1 deletion(-) diff --git a/rpc/srv/dsAudio.c b/rpc/srv/dsAudio.c index d2be232d..ec10aaeb 100755 --- a/rpc/srv/dsAudio.c +++ b/rpc/srv/dsAudio.c @@ -82,7 +82,6 @@ const dsAudioCompression_t kSupportedARCCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; const dsAudioStereoMode_t kSupportedARCStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; -#error const dsAudioTypeConfig_t kConfig_audio[]= { #ifdef HAS_SPDIF_SUPPORT From 0521d96e0688cdcf7e9cb7a260dc3c3b9402201a Mon Sep 17 00:00:00 2001 From: grandhi_santoshkumar Date: Tue, 16 Sep 2025 10:50:57 +0000 Subject: [PATCH 10/10] debug poc Signed-off-by: grandhi_santoshkumar --- ds/audioOutputPortConfig.cpp | 338 ++++++++++++----------------------- rpc/srv/dsAudio.c | 260 +++++++++++++++------------ 2 files changed, 258 insertions(+), 340 deletions(-) mode change 100755 => 100644 rpc/srv/dsAudio.c diff --git a/ds/audioOutputPortConfig.cpp b/ds/audioOutputPortConfig.cpp index 229777b9..aab97ef3 100644 --- a/ds/audioOutputPortConfig.cpp +++ b/ds/audioOutputPortConfig.cpp @@ -35,21 +35,124 @@ #include "stdlib.h" #include "dslogger.h" -#include -#include "libIARM.h" -#include "libIBus.h" -#include "iarmUtil.h" +//const dsAudioTypeConfig_t kConfig_audio ; +//const dsAudioPortConfig_t kPort_audio ; -#define IARM_BUS_Lock(lock) pthread_mutex_lock(&dsLock) -#define IARM_BUS_Unlock(lock) pthread_mutex_unlock(&dsLock) -extern dsAudioTypeConfig_t kConfig_audio[dsAUDIOPORT_TYPE_MAX]; -extern dsAudioPortConfig_t kPort_audio[dsAUDIOPORT_TYPE_MAX]; -extern int kConfig_size, kPort_size; -static dsAudioTypeConfig_t *kConfigs1 = NULL;//, *kConfigs2 = kConfig_audio; -static dsAudioPortConfig_t *kPorts1 = NULL;//, *kPorts2 = kPort_audio; -int *pKConSize, *pKPortSize; -static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; +/* + * Setup the supported configurations here. + */ + dsAudioPortType_t kSupportedPortTypes1[] = { dsAUDIOPORT_TYPE_SPDIF, dsAUDIOPORT_TYPE_SPEAKER, dsAUDIOPORT_TYPE_HDMI_ARC, dsAUDIOPORT_TYPE_HEADPHONE }; + + dsAudioEncoding_t kSupportedSPDIFEncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; + dsAudioCompression_t kSupportedSPDIFCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; + dsAudioStereoMode_t kSupportedSPDIFStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; + + dsAudioEncoding_t kSupportedHEADPHONEEncodings1[] = { dsAUDIO_ENC_PCM, }; + dsAudioCompression_t kSupportedHEADPHONECompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; + dsAudioStereoMode_t kSupportedHEADPHONEStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, }; + + dsAudioEncoding_t kSupportedSPEAKEREncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; + dsAudioCompression_t kSupportedSPEAKERCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; + dsAudioStereoMode_t kSupportedSPEAKERStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, }; + + dsAudioEncoding_t kSupportedARCEncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; + dsAudioCompression_t kSupportedARCCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; + dsAudioStereoMode_t kSupportedARCStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; + + + dsAudioTypeConfig_t kConfig_audio[]= { + + { + /*.typeId = */ dsAUDIOPORT_TYPE_SPDIF, + /*.name = */ "SPDIF", //SPDIF + /*.numSupportedCompressions = */dsUTL_DIM(kSupportedSPDIFCompressions1), + /*.compressions = */ kSupportedSPDIFCompressions1, + /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedSPDIFEncodings1), + /*.encodings = */ kSupportedSPDIFEncodings1, + /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedSPDIFStereoModes1), + /*.stereoModes = */ kSupportedSPDIFStereoModes1, + }, + + { + /*.typeId = */ dsAUDIOPORT_TYPE_HEADPHONE, + /*.name = */ "HEADPHONE", //HEADPHONE + /*.numSupportedCompressions = */dsUTL_DIM(kSupportedHEADPHONECompressions1), + /*.compressions = */ kSupportedHEADPHONECompressions1, + /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedHEADPHONEEncodings1), + /*.encodings = */ kSupportedHEADPHONEEncodings1, + /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedHEADPHONEStereoModes1), + /*.stereoModes = */ kSupportedHEADPHONEStereoModes1, + }, + + { + /*.typeId = */ dsAUDIOPORT_TYPE_SPEAKER, + /*.name = */ "SPEAKER", //SPEAKER + /*.numSupportedCompressions = */dsUTL_DIM(kSupportedSPEAKERCompressions1), + /*.compressions = */ kSupportedSPEAKERCompressions1, + /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedSPEAKEREncodings1), + /*.encodings = */ kSupportedSPEAKEREncodings1, + /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedSPEAKERStereoModes1), + /*.stereoModes = */ kSupportedSPEAKERStereoModes1, + }, + { + /*.typeId = */ dsAUDIOPORT_TYPE_HDMI_ARC, + /*.name = */ "HDMI_ARC", //ARC/eARC + /*.numSupportedCompressions = */dsUTL_DIM(kSupportedARCCompressions1), + /*.compressions = */ kSupportedARCCompressions1, + /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedARCEncodings1), + /*.encodings = */ kSupportedARCEncodings1, + /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedARCStereoModes1), + /*.stereoModes = */ kSupportedARCStereoModes1, + } +}; + + dsVideoPortPortId_t connectedVOPs1[dsAUDIOPORT_TYPE_MAX][dsVIDEOPORT_TYPE_MAX] = { + {/*VOPs connected to LR Audio */ + + }, + {/*VOPs connected to HDMI Audio */ + }, + {/*VOPs connected to SPDIF Audio */ + {dsVIDEOPORT_TYPE_INTERNAL, 0}, + }, + {/*VOPs connected to SPEAKER Audio */ + {dsVIDEOPORT_TYPE_INTERNAL, 0}, + }, + {/*VOPs connected to ARC Audio */ + {dsVIDEOPORT_TYPE_INTERNAL, 0}, + }, + {/*VOPs connected to HEADPHONE Audio */ + {dsVIDEOPORT_TYPE_INTERNAL, 0}, + } +}; + + dsAudioPortConfig_t kPort_audio[] = { + + { + /*.typeId = */ {dsAUDIOPORT_TYPE_SPDIF, 0}, + /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_SPDIF], + }, + + + + { + /*.typeId = */ {dsAUDIOPORT_TYPE_HEADPHONE, 0}, + /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_HEADPHONE], + }, + + { + /*.typeId = */ {dsAUDIOPORT_TYPE_SPEAKER, 0}, + /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_SPEAKER], + }, + { + /*.typeId = */ {dsAUDIOPORT_TYPE_HDMI_ARC, 0}, + /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_HDMI_ARC], + } +}; + +int kConfig_size = sizeof(kConfig_audio) / sizeof(kConfig_audio[0]); +int kPort_size = sizeof(kPort_audio) / sizeof(kPort_audio[0]); namespace device { @@ -125,164 +228,6 @@ List AudioOutputPortConfig::getSupportedTypes() return supportedTypes; } -#if 1 -bool searchConfigs() -{ - //static dsAudioTypeConfig_t *kConfigs1 = NULL; - //static dsAudioPortConfig_t *kPorts1 = NULL; - int kConfig_size_local = -1, kPort_size_local = -1; - int kConfig_size_dl = -1, kPort_size_dl = -1; - //IARM_BUS_Lock(lock); - //if ( kConfigs1 == NULL) - { - void *dllib = dlopen("libdshalsrv.so", RTLD_LAZY); - if (dllib) { - kConfigs1 = (dsAudioTypeConfig_t *) dlsym(dllib, "kConfig_audio"); - if (kConfigs1) { - INT_DEBUG("kConfig_audio is defined and loaded kConfigs1 = %p\r\n", kConfigs1); - printf("%d:%s: kConfig_audio is defined and loaded kConfigs1 = %p\n", __LINE__, __func__, kConfigs1); - } - else { - INT_INFO("kConfig_audio is not defined\r\n"); - printf("%d:%s: kConfig_audio is not defined\n", __LINE__, __func__); - //IARM_BUS_Unlock(lock); - //dlclose(dllib); - //return IARM_RESULT_INVALID_STATE; - } - - pKConSize = (int *) dlsym(dllib, "kConfig_size"); - pKPortSize = (int *) dlsym(dllib, "kPort_size"); - if(pKConSize) - { - kConfig_size_local = *pKConSize; - printf("%d:%s: pKConSize is defined and loaded kConfig_size_local = %d\n", __LINE__, __func__, kConfig_size_local); - } - else - { - printf("%d:%s: pKConSize is not defined\n", __LINE__, __func__); - kConfig_size_local = -1; - } - if(pKPortSize) - { - kPort_size_local = *pKPortSize; - printf("%d:%s: pKPortSize is defined and loaded kPort_size_local = %d\n", __LINE__, __func__, kPort_size_local); - } - else - { - printf("%d:%s: pKPortSize is not defined\n", __LINE__, __func__); - kPort_size_local = -1; - } - dlclose(dllib); - } - else { - INT_ERROR("Opening libdshalsrv.so failed\r\n"); - printf("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); - } - } - - //if ( kPorts1 == NULL) - { - void *dllib = dlopen("libdshalsrv.so", RTLD_LAZY); - if (dllib) { - kPorts1 = (dsAudioPortConfig_t *) dlsym(dllib, "kPort_audio"); - if (kPorts1) { - INT_DEBUG("kPort_audio is defined and loaded kPorts1 = %p\r\n", kPorts1); - printf("%d:%s: kPort_audio is defined and loaded kPorts1 = %p\n", __LINE__, __func__, kPorts1); - } - else { - INT_INFO("kPort_audio is not defined\r\n"); - printf("%d:%s: kPort_audio is not defined\n", __LINE__, __func__); - //IARM_BUS_Unlock(lock); - //dlclose(dllib); - //return IARM_RESULT_INVALID_STATE; - } - dlclose(dllib); - } - else { - INT_ERROR("Opening libdshalsrv.so failed\r\n"); - printf("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); - } - } - //dlclose(dllib); - //IARM_BUS_Unlock(lock); - //kConfig_size_dl = dsUTL_DIM(kConfigs1); - //kPort_size_dl = dsUTL_DIM(kPorts1); - //printf("%d:%s: dsUTL_DIM kConfig_size_dl = %d kPort_size_dl = %d\n", __LINE__, __func__, kConfig_size_dl, kPort_size_dl); - #if 0 - printf("\n\n=========================================================================================================================\n\n"); - printf("\n%d:%s print configs dlsym\n", __LINE__, __func__); - if - for (size_t i = 0; i < kConfig_size_local; i++) { - //const dsAudioTypeConfig_t *typeCfg = &kConfig_audio[i]; - const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; //NO compile issues - AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); - aPortType.enable(); - printf("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); - printf("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); - printf("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); - printf("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); - printf("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); - } - - - /* - * set up ports based on kPorts[] - */ - for (size_t i = 0; i < kPort_size_local; i++) { - //const dsAudioPortConfig_t *port = &kPort_audio[i]; - const dsAudioPortConfig_t *port = &kPorts1[i]; - printf("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); - printf("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); - } - printf("\n\n=========================================================================================================================\n\n"); - #else - printf("\n\n=========================================================================================================================\n\n"); - printf("\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) - { - for (size_t i = 0; i < kConfig_size_local; i++) { - //const dsAudioTypeConfig_t *typeCfg = &kConfig_audio[i]; - const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; - AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); - aPortType.enable(); - printf("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); - printf("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); - printf("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); - printf("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); - printf("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); - } - } - else - { - printf("%d:%s: kConfig_audio is NULL\n", __LINE__, __func__); - } - if(kPorts1 != NULL) - { - /* - * set up ports based on kPorts[] - */ - for (size_t i = 0; i < kPort_size_local; i++) { - //const dsAudioPortConfig_t *port = &kPort_audio[i]; - const dsAudioPortConfig_t *port = &kPorts1[i]; - printf("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); - printf("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); - } - } - else - { - printf("%d:%s: kPort_audio is NULL\n", __LINE__, __func__); - } - printf("\n\n=========================================================================================================================\n\n"); - #endif - - return (kConfigs1 || kPorts1); -} -#endif - void AudioOutputPortConfig::load() { try { @@ -307,7 +252,7 @@ void AudioOutputPortConfig::load() _aPortTypes.push_back(AudioOutputPortType(i)); } -#if 1 + /* * Initialize Audio portTypes (encodings, compressions etc.) * and its port instances (db, level etc) @@ -341,55 +286,6 @@ void AudioOutputPortConfig::load() _aPorts.push_back(AudioOutputPort((port->id.type), port->id.index, i)); _aPortTypes.at(port->id.type).addPort(_aPorts.at(i)); } - searchConfigs(); -#else //gsk - if(searchConfigs()) - { - /*if(kConfig_audio == NULL || kPort_audio == NULL) { - throw IllegalArgumentException(); - }*/ - //dsAudioTypeConfig_t *kConfigs = kConfig_audio; - //dsAudioPortConfig_t *kPorts = kPort_audio; - /* - * Initialize Audio portTypes (encodings, compressions etc.) - * and its port instances (db, level etc) - */ - for (size_t i = 0; i < dsUTL_DIM(kConfigs1); 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[] - */ - for (size_t i = 0; i < dsUTL_DIM(kPorts1); 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 - { - printf("%d:%s: kConfig and kPorts are not available\n", __LINE__, __func__); - } -#endif - } catch(const Exception &e) { throw e; diff --git a/rpc/srv/dsAudio.c b/rpc/srv/dsAudio.c old mode 100755 new mode 100644 index ec10aaeb..70c46553 --- a/rpc/srv/dsAudio.c +++ b/rpc/srv/dsAudio.c @@ -53,129 +53,26 @@ #include "safec_lib.h" -//const dsAudioTypeConfig_t kConfig_audio ; -//const dsAudioPortConfig_t kPort_audio ; - -/* - * Setup the supported configurations here. - */ -#ifdef HAS_SPDIF_SUPPORT - const dsAudioPortType_t kSupportedPortTypes1[] = { dsAUDIOPORT_TYPE_SPDIF, dsAUDIOPORT_TYPE_SPEAKER, dsAUDIOPORT_TYPE_HDMI_ARC, dsAUDIOPORT_TYPE_HEADPHONE }; -#else - const dsAudioPortType_t kSupportedPortTypes1[] = { dsAUDIOPORT_TYPE_SPEAKER, dsAUDIOPORT_TYPE_HDMI_ARC }; -#endif -#ifdef HAS_SPDIF_SUPPORT - const dsAudioEncoding_t kSupportedSPDIFEncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; - const dsAudioCompression_t kSupportedSPDIFCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; - const dsAudioStereoMode_t kSupportedSPDIFStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; -#endif -#ifdef HAS_HEADPHONE_SUPPORT - const dsAudioEncoding_t kSupportedHEADPHONEEncodings1[] = { dsAUDIO_ENC_PCM, }; - const dsAudioCompression_t kSupportedHEADPHONECompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; - const dsAudioStereoMode_t kSupportedHEADPHONEStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, }; -#endif - const dsAudioEncoding_t kSupportedSPEAKEREncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; - const dsAudioCompression_t kSupportedSPEAKERCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; - const dsAudioStereoMode_t kSupportedSPEAKERStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, }; - - const dsAudioEncoding_t kSupportedARCEncodings1[] = { dsAUDIO_ENC_PCM, dsAUDIO_ENC_AC3, }; - const dsAudioCompression_t kSupportedARCCompressions1[] = { dsAUDIO_CMP_NONE, dsAUDIO_CMP_LIGHT, dsAUDIO_CMP_MEDIUM, dsAUDIO_CMP_HEAVY, }; - const dsAudioStereoMode_t kSupportedARCStereoModes1[] = { dsAUDIO_STEREO_STEREO, dsAUDIO_STEREO_SURROUND, dsAUDIO_STEREO_PASSTHRU }; - +#if 0 +#include +#include "libIARM.h" +#include "libIBus.h" +#include "iarmUtil.h" +#include "dsAudioSettings.h" - const dsAudioTypeConfig_t kConfig_audio[]= { -#ifdef HAS_SPDIF_SUPPORT - { - /*.typeId = */ dsAUDIOPORT_TYPE_SPDIF, - /*.name = */ "SPDIF", //SPDIF - /*.numSupportedCompressions = */dsUTL_DIM(kSupportedSPDIFCompressions1), - /*.compressions = */ kSupportedSPDIFCompressions1, - /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedSPDIFEncodings1), - /*.encodings = */ kSupportedSPDIFEncodings1, - /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedSPDIFStereoModes1), - /*.stereoModes = */ kSupportedSPDIFStereoModes1, - }, -#endif -#ifdef HAS_HEADPHONE_SUPPORT - { - /*.typeId = */ dsAUDIOPORT_TYPE_HEADPHONE, - /*.name = */ "HEADPHONE", //HEADPHONE - /*.numSupportedCompressions = */dsUTL_DIM(kSupportedHEADPHONECompressions1), - /*.compressions = */ kSupportedHEADPHONECompressions1, - /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedHEADPHONEEncodings1), - /*.encodings = */ kSupportedHEADPHONEEncodings1, - /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedHEADPHONEStereoModes1), - /*.stereoModes = */ kSupportedHEADPHONEStereoModes1, - }, -#endif - { - /*.typeId = */ dsAUDIOPORT_TYPE_SPEAKER, - /*.name = */ "SPEAKER", //SPEAKER - /*.numSupportedCompressions = */dsUTL_DIM(kSupportedSPEAKERCompressions1), - /*.compressions = */ kSupportedSPEAKERCompressions1, - /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedSPEAKEREncodings1), - /*.encodings = */ kSupportedSPEAKEREncodings1, - /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedSPEAKERStereoModes1), - /*.stereoModes = */ kSupportedSPEAKERStereoModes1, - }, - { - /*.typeId = */ dsAUDIOPORT_TYPE_HDMI_ARC, - /*.name = */ "HDMI_ARC", //ARC/eARC - /*.numSupportedCompressions = */dsUTL_DIM(kSupportedARCCompressions1), - /*.compressions = */ kSupportedARCCompressions1, - /*.numSupportedEncodings = */ dsUTL_DIM(kSupportedARCEncodings1), - /*.encodings = */ kSupportedARCEncodings1, - /*.numSupportedStereoModes = */ dsUTL_DIM(kSupportedARCStereoModes1), - /*.stereoModes = */ kSupportedARCStereoModes1, - } -}; - - const dsVideoPortPortId_t connectedVOPs1[dsAUDIOPORT_TYPE_MAX][dsVIDEOPORT_TYPE_MAX] = { - {/*VOPs connected to LR Audio */ - - }, - {/*VOPs connected to HDMI Audio */ - }, - {/*VOPs connected to SPDIF Audio */ - {dsVIDEOPORT_TYPE_INTERNAL, 0}, - }, - {/*VOPs connected to SPEAKER Audio */ - {dsVIDEOPORT_TYPE_INTERNAL, 0}, - }, - {/*VOPs connected to ARC Audio */ - {dsVIDEOPORT_TYPE_INTERNAL, 0}, - }, - {/*VOPs connected to HEADPHONE Audio */ - {dsVIDEOPORT_TYPE_INTERNAL, 0}, - } -}; +#define IARM_BUS_Lock(lock) pthread_mutex_lock(&dsLock) +#define IARM_BUS_Unlock(lock) pthread_mutex_unlock(&dsLock) - const dsAudioPortConfig_t kPort_audio[] = { -#ifdef HAS_SPDIF_SUPPORT - { - /*.typeId = */ {dsAUDIOPORT_TYPE_SPDIF, 0}, - /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_SPDIF], - }, -#endif -#ifdef HAS_HEADPHONE_SUPPORT - { - /*.typeId = */ {dsAUDIOPORT_TYPE_HEADPHONE, 0}, - /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_HEADPHONE], - }, +static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER; #endif - { - /*.typeId = */ {dsAUDIOPORT_TYPE_SPEAKER, 0}, - /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_SPEAKER], - }, - { - /*.typeId = */ {dsAUDIOPORT_TYPE_HDMI_ARC, 0}, - /*.connectedVOPs = */ connectedVOPs1[dsAUDIOPORT_TYPE_HDMI_ARC], - } -}; - -int kConfig_size = sizeof(kConfig_audio) / sizeof(kConfig_audio[0]); -int kPort_size = sizeof(kPort_audio) / sizeof(kPort_audio[0]); +extern dsAudioTypeConfig_t kConfig_audio[dsAUDIOPORT_TYPE_MAX]; +extern dsAudioPortConfig_t kPort_audio[dsAUDIOPORT_TYPE_MAX]; +extern int kConfig_size, kPort_size; +static dsAudioTypeConfig_t *kConfigs1 = NULL;//, *kConfigs2 = kConfig_audio; +static dsAudioPortConfig_t *kPorts1 = NULL;//, *kPorts2 = kPort_audio; +int *pKConSize, *pKPortSize; +static int kConfig_size_local = -1, kPort_size_local = -1; @@ -2217,10 +2114,135 @@ void AudioConfigInit() #endif //DS_AUDIO_SETTINGS_PERSISTENCE } +bool searchConfigs() +{ + //int kConfig_size_local = -1, kPort_size_local = -1; + + //IARM_BUS_Lock(lock); + + //if ( kConfigs1 == NULL) + { + void *dllib = dlopen("libds.so", RTLD_LAZY); + if (dllib) { + kConfigs1 = (dsAudioTypeConfig_t *) dlsym(dllib, "kConfig_audio"); + if (kConfigs1) { + INT_DEBUG("kConfig_audio is defined and loaded kConfigs1 = %p\r\n", kConfigs1); + printf("%d:%s: kConfig_audio is defined and loaded kConfigs1 = %p\n", __LINE__, __func__, kConfigs1); + } + else { + INT_INFO("kConfig_audio is not defined\r\n"); + printf("%d:%s: kConfig_audio is not defined\n", __LINE__, __func__); + //IARM_BUS_Unlock(lock); + //dlclose(dllib); + //return IARM_RESULT_INVALID_STATE; + } + + pKConSize = (int *) dlsym(dllib, "kConfig_size"); + pKPortSize = (int *) dlsym(dllib, "kPort_size"); + if(pKConSize) + { + kConfig_size_local = *pKConSize; + printf("%d:%s: pKConSize is defined and loaded kConfig_size_local = %d\n", __LINE__, __func__, kConfig_size_local); + } + else + { + printf("%d:%s: pKConSize is not defined\n", __LINE__, __func__); + kConfig_size_local = -1; + } + if(pKPortSize) + { + kPort_size_local = *pKPortSize; + printf("%d:%s: pKPortSize is defined and loaded kPort_size_local = %d\n", __LINE__, __func__, kPort_size_local); + } + else + { + printf("%d:%s: pKPortSize is not defined\n", __LINE__, __func__); + kPort_size_local = -1; + } + dlclose(dllib); + } + else { + INT_ERROR("Opening libdshalsrv.so failed\r\n"); + printf("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); + } + } + + //if ( kPorts1 == NULL) + { + void *dllib = dlopen("libds.so", RTLD_LAZY); + if (dllib) { + kPorts1 = (dsAudioPortConfig_t *) dlsym(dllib, "kPort_audio"); + if (kPorts1) { + INT_DEBUG("kPort_audio is defined and loaded kPorts1 = %p\r\n", kPorts1); + printf("%d:%s: kPort_audio is defined and loaded kPorts1 = %p\n", __LINE__, __func__, kPorts1); + } + else { + INT_INFO("kPort_audio is not defined\r\n"); + printf("%d:%s: kPort_audio is not defined\n", __LINE__, __func__); + //IARM_BUS_Unlock(lock); + //dlclose(dllib); + //return IARM_RESULT_INVALID_STATE; + } + dlclose(dllib); + } + else { + INT_ERROR("Opening libdshalsrv.so failed\r\n"); + printf("%d:%s: Opening libdshalsrv.so failed\n", __LINE__, __func__); + } + } + printf("\n\n=========================================================================================================================\n\n"); + printf("\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) + { + for (size_t i = 0; i < kConfig_size_local; i++) { + //const dsAudioTypeConfig_t *typeCfg = &kConfig_audio[i]; + const dsAudioTypeConfig_t *typeCfg = &kConfigs1[i]; + //AudioOutputPortType &aPortType = AudioOutputPortType::getInstance(typeCfg->typeId); + //aPortType.enable(); + printf("%d:%s: typeCfg->typeId = %d\n", __LINE__, __func__, typeCfg->typeId); + printf("%d:%s: typeCfg->name = %s\n", __LINE__, __func__, typeCfg->name); + printf("%d:%s: typeCfg->numSupportedEncodings = %zu\n", __LINE__, __func__, typeCfg->numSupportedEncodings); + printf("%d:%s: typeCfg->numSupportedCompressions = %zu\n", __LINE__, __func__, typeCfg->numSupportedCompressions); + printf("%d:%s: typeCfg->numSupportedStereoModes = %zu\n", __LINE__, __func__, typeCfg->numSupportedStereoModes); + } + } + else + { + printf("%d:%s: kConfig_audio is NULL\n", __LINE__, __func__); + } + if(kPorts1 != NULL) + { + /* + * set up ports based on kPorts[] + */ + for (size_t i = 0; i < kPort_size_local; i++) { + //const dsAudioPortConfig_t *port = &kPort_audio[i]; + const dsAudioPortConfig_t *port = &kPorts1[i]; + printf("%d:%s: port->id.type = %d\n", __LINE__, __func__, port->id.type); + printf("%d:%s: port->id.index = %d\n", __LINE__, __func__, port->id.index); + } + } + else + { + printf("%d:%s: kPort_audio is NULL\n", __LINE__, __func__); + } + printf("\n\n=========================================================================================================================\n\n"); + + return (kConfigs1 || kPorts1); +} IARM_Result_t dsAudioMgr_init() { IARM_Bus_RegisterCall(IARM_BUS_DSMGR_API_dsAudioPortInit, _dsAudioPortInit); + + INT_INFO("[%s]: Calling searchConfigs()\r\n", __FUNCTION__); + searchConfigs(); + INT_INFO("[%s]: end searchConfigs()\r\n", __FUNCTION__); + IARM_BUS_Lock(lock); try {