/* Copyright 2018 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include <syslog.h>
#include "apm_config.h"
#include "iniparser_wrapper.h"
static const unsigned int MAX_INI_NAME_LEN = 63;
#define APM_CONFIG_NAME "apm.ini"
#define APM_GET_INT(ini, key) \
iniparser_getint( \
ini, key, \
key ## _VALUE)
#define APM_GET_FLOAT(ini, key) \
iniparser_getdouble( \
ini, key, \
key ## _VALUE)
struct apm_config *apm_config_get(const char *device_config_dir)
{
struct apm_config *config;
char ini_name[MAX_INI_NAME_LEN + 1];
dictionary *ini;
snprintf(ini_name, MAX_INI_NAME_LEN, "%s/%s",
device_config_dir, APM_CONFIG_NAME);
ini_name[MAX_INI_NAME_LEN] = '\0';
ini = iniparser_load_wrapper(ini_name);
if (ini == NULL) {
syslog(LOG_DEBUG, "No ini file %s", ini_name);
return NULL;
}
config = (struct apm_config *)calloc(1, sizeof(*config));
config->residual_echo_detector_enabled =
APM_GET_INT(ini, APM_RESIDUAL_ECHO_DETECTOR_ENABLED);
config->high_pass_filter_enabled =
APM_GET_INT(ini, APM_HIGH_PASS_FILTER_ENABLED);
config->pre_amplifier_enabled =
APM_GET_INT(ini, APM_PRE_AMPLIFIER_ENABLED);
config->pre_amplifier_fixed_gain_factor =
APM_GET_FLOAT(ini, APM_PRE_AMPLIFIER_FIXED_GAIN_FACTOR);
config->gain_controller2_enabled =
APM_GET_INT(ini, APM_GAIN_CONTROLLER2_ENABLED);
config->gain_controller2_fixed_gain_db =
APM_GET_FLOAT(ini, APM_GAIN_CONTROLLER2_FIXED_GAIN_DB);
config->gain_controller2_adaptive_digital_mode =
APM_GET_INT(ini, APM_GAIN_CONTROLLER2_ADAPTIVE_DIGITAL_MODE);
config->gain_control_compression_gain_db =
APM_GET_INT(ini, APM_GAIN_CONTROL_COMPRESSION_GAIN_DB);
config->agc_mode = (enum gain_control_mode)
APM_GET_INT(ini, APM_GAIN_CONTROL_MODE);
config->gain_control_enabled =
APM_GET_INT(ini, APM_GAIN_CONTROL_ENABLED);
config->ns_level = (enum noise_suppression_level)
APM_GET_INT(ini, APM_NOISE_SUPPRESSION_LEVEL);
config->noise_suppression_enabled =
APM_GET_INT(ini, APM_NOISE_SUPPRESSION_ENABLED);
return config;
}
void apm_config_dump(struct apm_config *config)
{
syslog(LOG_ERR, "---- apm config dump ----");
syslog(LOG_ERR, "residual_echo_detector_enabled %u",
config->residual_echo_detector_enabled);
syslog(LOG_ERR, "high_pass_filter_enabled %u",
config->high_pass_filter_enabled);
syslog(LOG_ERR, "pre_amplifier_enabled %u",
config->pre_amplifier_enabled);
syslog(LOG_ERR, "pre_amplifier_fixed_gain_factor %f",
config->pre_amplifier_fixed_gain_factor);
syslog(LOG_ERR, "gain_controller2_enabled %u",
config->gain_controller2_enabled);
syslog(LOG_ERR, "gain_controller2_fixed_gain_db %f",
config->gain_controller2_fixed_gain_db);
syslog(LOG_ERR, "gain_controller2_adaptive_digital_mode %d",
config->gain_controller2_adaptive_digital_mode);
syslog(LOG_ERR, "gain_control_compression_gain_db %u",
config->gain_control_compression_gain_db);
syslog(LOG_ERR, "gain_control_mode %u", config->agc_mode);
syslog(LOG_ERR, "gain_control_enabled %u",
config->gain_control_enabled);
syslog(LOG_ERR, "noise_suppression_level %u", config->ns_level);
syslog(LOG_ERR, "noise_suppression_enabled %u",
config->noise_suppression_enabled);
}