diff options
author | Pierre MARZIN <pierre.marzin@iot.bzh> | 2019-04-01 10:35:57 +0200 |
---|---|---|
committer | Pierre Marzin <pierre.marzin@iot.bzh> | 2019-04-02 08:16:29 +0000 |
commit | 36721c55b616bdce8b8f79ff3c7042ef54d18478 (patch) | |
tree | 652c6cd69ef9ce9727965d752c4d0c741d264afc /mixer-binding | |
parent | 074e6871959279c4aed3e162f21f677e08338b3a (diff) |
pre-init: Add a config detection
Scan the loaded modules during pre-init to know which config file to
load. If Avirt core module is loaded then load the avirt config file.
Otherwise, load the default config file.
Change the config file name in order to use the prefix to select them.
Change-Id: I8f9d5ed568fa20b06ac3bef443a2392de26c8235
Signed-off-by: Pierre MARZIN <pierre.marzin@iot.bzh>
Diffstat (limited to 'mixer-binding')
-rw-r--r-- | mixer-binding/mixer-binding.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/mixer-binding/mixer-binding.c b/mixer-binding/mixer-binding.c index 64a7f05..f2b6b05 100644 --- a/mixer-binding/mixer-binding.c +++ b/mixer-binding/mixer-binding.c @@ -22,6 +22,9 @@ #include "mixer-binding.h" +#define size_temp 512 + +enum smixer_audio_mode_t { DEFAULT, AVIRT }; // default api to print log when apihandle not avalaible PUBLIC afb_api_t AFB_default; @@ -102,12 +105,44 @@ PUBLIC int afbBindingEntry(afb_api_t apiHandle) { AFB_default = apiHandle; + FILE *fp; + char temp[size_temp]; + char *prefix; + enum smixer_audio_mode_t smixer_audio_mode = DEFAULT; + AFB_API_NOTICE (apiHandle, "Controller in afbBindingEntry"); - const char *dirList= getenv("CONTROL_CONFIG_PATH"); + const char *dirList = getenv("CONTROL_CONFIG_PATH"); if (!dirList) dirList=CONTROL_CONFIG_PATH; - const char *configPath = CtlConfigSearch(apiHandle, dirList, "smixer"); + // Select correct config file + char *configPath = getenv("SMIXER_CONFIG_FILE_PATH"); + if (!configPath) { + // Do a module detection to know which audio config we need (avirt or aloop=default) + if((fp = fopen("/proc/modules", "r")) == NULL) { + goto OnErrorExit; + } + + while(fgets(temp, size_temp, fp) != NULL) { + if((strstr(temp, "snd_avirt_core")) != NULL) { + AFB_API_NOTICE (apiHandle, "CTL-INIT: AVIRT module is loaded, assume that mixer needs avirt config."); + smixer_audio_mode = AVIRT; + break; + } + } + + if(fp) fclose(fp); + + if(smixer_audio_mode == AVIRT) { + prefix = "smixer-avirt"; + } else { + prefix = "smixer-default"; + } + + configPath = CtlConfigSearch(apiHandle, dirList, prefix); + AFB_API_NOTICE (apiHandle, "CTL-INIT: configPath=%s", configPath); + } + if (!configPath) { AFB_API_ERROR(apiHandle, "CtlPreInit: No smixer-%s-* config found in %s ", GetBinderName(), dirList); goto OnErrorExit; |