summaryrefslogtreecommitdiff
path: root/cras/src/server/config/cras_board_config.c
blob: 14d3fa0c490597cb0d57f6b8890aab812b0e6c11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/* Copyright 2017 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 <errno.h>
#include <syslog.h>

#include "cras_board_config.h"
#include "iniparser_wrapper.h"

static const int32_t DEFAULT_OUTPUT_BUFFER_SIZE = 512;
static const int32_t AEC_SUPPORTED_DEFAULT = 0;
static const int32_t AEC_GROUP_ID_DEFAULT = -1;
static const int32_t BLUETOOTH_WBS_ENABLED_INI_DEFAULT = 1;
static const int32_t BLUETOOTH_DEPRIORITIZE_WBS_MIC_INI_DEFAULT = 0;

#define CONFIG_NAME "board.ini"
#define DEFAULT_OUTPUT_BUF_SIZE_INI_KEY "output:default_output_buffer_size"
#define AEC_SUPPORTED_INI_KEY "processing:aec_supported"
#define AEC_GROUP_ID_INI_KEY "processing:group_id"
#define BLUETOOTH_WBS_ENABLED_INI_KEY "bluetooth:wbs_enabled"
#define BLUETOOTH_DEPRIORITIZE_WBS_MIC_INI_KEY "bluetooth:deprioritize_wbs_mic"
#define UCM_IGNORE_SUFFIX_KEY "ucm:ignore_suffix"

void cras_board_config_get(const char *config_path,
			   struct cras_board_config *board_config)
{
	char ini_name[MAX_INI_NAME_LENGTH + 1];
	char ini_key[MAX_INI_KEY_LENGTH + 1];
	const char *ptr;
	dictionary *ini;

	board_config->default_output_buffer_size = DEFAULT_OUTPUT_BUFFER_SIZE;
	board_config->aec_supported = AEC_SUPPORTED_DEFAULT;
	board_config->aec_group_id = AEC_GROUP_ID_DEFAULT;
	board_config->ucm_ignore_suffix = NULL;
	board_config->bt_wbs_enabled = BLUETOOTH_WBS_ENABLED_INI_DEFAULT;
	board_config->deprioritize_bt_wbs_mic =
		BLUETOOTH_DEPRIORITIZE_WBS_MIC_INI_DEFAULT;
	if (config_path == NULL)
		return;

	snprintf(ini_name, MAX_INI_NAME_LENGTH, "%s/%s", config_path,
		 CONFIG_NAME);
	ini_name[MAX_INI_NAME_LENGTH] = '\0';
	ini = iniparser_load_wrapper(ini_name);
	if (ini == NULL) {
		syslog(LOG_DEBUG, "No ini file %s", ini_name);
		return;
	}

	snprintf(ini_key, MAX_INI_KEY_LENGTH, DEFAULT_OUTPUT_BUF_SIZE_INI_KEY);
	ini_key[MAX_INI_KEY_LENGTH] = 0;
	board_config->default_output_buffer_size =
		iniparser_getint(ini, ini_key, DEFAULT_OUTPUT_BUFFER_SIZE);

	snprintf(ini_key, MAX_INI_KEY_LENGTH, AEC_SUPPORTED_INI_KEY);
	ini_key[MAX_INI_KEY_LENGTH] = 0;
	board_config->aec_supported =
		iniparser_getint(ini, ini_key, AEC_SUPPORTED_DEFAULT);

	snprintf(ini_key, MAX_INI_KEY_LENGTH, AEC_GROUP_ID_INI_KEY);
	ini_key[MAX_INI_KEY_LENGTH] = 0;
	board_config->aec_group_id =
		iniparser_getint(ini, ini_key, AEC_GROUP_ID_DEFAULT);

	snprintf(ini_key, MAX_INI_KEY_LENGTH, BLUETOOTH_WBS_ENABLED_INI_KEY);
	ini_key[MAX_INI_KEY_LENGTH] = 0;
	board_config->bt_wbs_enabled = iniparser_getint(
		ini, ini_key, BLUETOOTH_WBS_ENABLED_INI_DEFAULT);

	snprintf(ini_key, MAX_INI_KEY_LENGTH,
		 BLUETOOTH_DEPRIORITIZE_WBS_MIC_INI_KEY);
	ini_key[MAX_INI_KEY_LENGTH] = 0;
	board_config->deprioritize_bt_wbs_mic = iniparser_getint(
		ini, ini_key, BLUETOOTH_DEPRIORITIZE_WBS_MIC_INI_DEFAULT);

	snprintf(ini_key, MAX_INI_KEY_LENGTH, UCM_IGNORE_SUFFIX_KEY);
	ini_key[MAX_INI_KEY_LENGTH] = 0;
	ptr = iniparser_getstring(ini, ini_key, "");
	if (ptr) {
		board_config->ucm_ignore_suffix = strdup(ptr);
		if (!board_config->ucm_ignore_suffix)
			syslog(LOG_ERR, "Failed to call strdup: %d", errno);
	}

	iniparser_freedict(ini);
	syslog(LOG_DEBUG, "Loaded ini file %s", ini_name);
}