1 /* Copyright 2017 The Chromium OS Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
4 */
5
6 #include <errno.h>
7 #include <syslog.h>
8
9 #include "cras_board_config.h"
10 #include "iniparser_wrapper.h"
11
12 static const int32_t DEFAULT_OUTPUT_BUFFER_SIZE = 512;
13 static const int32_t AEC_SUPPORTED_DEFAULT = 0;
14 static const int32_t AEC_GROUP_ID_DEFAULT = -1;
15 static const int32_t BLUETOOTH_WBS_ENABLED_INI_DEFAULT = 1;
16 static const int32_t BLUETOOTH_DEPRIORITIZE_WBS_MIC_INI_DEFAULT = 0;
17 static const int32_t HOTWORD_PAUSE_AT_SUSPEND_DEFAULT = 0;
18
19 #define CONFIG_NAME "board.ini"
20 #define DEFAULT_OUTPUT_BUF_SIZE_INI_KEY "output:default_output_buffer_size"
21 #define AEC_SUPPORTED_INI_KEY "processing:aec_supported"
22 #define AEC_GROUP_ID_INI_KEY "processing:group_id"
23 #define BLUETOOTH_WBS_ENABLED_INI_KEY "bluetooth:wbs_enabled"
24 #define BLUETOOTH_DEPRIORITIZE_WBS_MIC_INI_KEY "bluetooth:deprioritize_wbs_mic"
25 #define UCM_IGNORE_SUFFIX_KEY "ucm:ignore_suffix"
26 #define HOTWORD_PAUSE_AT_SUSPEND "hotword:pause_at_suspend"
27
cras_board_config_get(const char * config_path,struct cras_board_config * board_config)28 void cras_board_config_get(const char *config_path,
29 struct cras_board_config *board_config)
30 {
31 char ini_name[MAX_INI_NAME_LENGTH + 1];
32 char ini_key[MAX_INI_KEY_LENGTH + 1];
33 const char *ptr;
34 dictionary *ini;
35
36 board_config->default_output_buffer_size = DEFAULT_OUTPUT_BUFFER_SIZE;
37 board_config->aec_supported = AEC_SUPPORTED_DEFAULT;
38 board_config->aec_group_id = AEC_GROUP_ID_DEFAULT;
39 board_config->ucm_ignore_suffix = NULL;
40 board_config->bt_wbs_enabled = BLUETOOTH_WBS_ENABLED_INI_DEFAULT;
41 board_config->deprioritize_bt_wbs_mic =
42 BLUETOOTH_DEPRIORITIZE_WBS_MIC_INI_DEFAULT;
43 if (config_path == NULL)
44 return;
45
46 snprintf(ini_name, MAX_INI_NAME_LENGTH, "%s/%s", config_path,
47 CONFIG_NAME);
48 ini_name[MAX_INI_NAME_LENGTH] = '\0';
49 ini = iniparser_load_wrapper(ini_name);
50 if (ini == NULL) {
51 syslog(LOG_DEBUG, "No ini file %s", ini_name);
52 return;
53 }
54
55 snprintf(ini_key, MAX_INI_KEY_LENGTH, DEFAULT_OUTPUT_BUF_SIZE_INI_KEY);
56 ini_key[MAX_INI_KEY_LENGTH] = 0;
57 board_config->default_output_buffer_size =
58 iniparser_getint(ini, ini_key, DEFAULT_OUTPUT_BUFFER_SIZE);
59
60 snprintf(ini_key, MAX_INI_KEY_LENGTH, AEC_SUPPORTED_INI_KEY);
61 ini_key[MAX_INI_KEY_LENGTH] = 0;
62 board_config->aec_supported =
63 iniparser_getint(ini, ini_key, AEC_SUPPORTED_DEFAULT);
64
65 snprintf(ini_key, MAX_INI_KEY_LENGTH, AEC_GROUP_ID_INI_KEY);
66 ini_key[MAX_INI_KEY_LENGTH] = 0;
67 board_config->aec_group_id =
68 iniparser_getint(ini, ini_key, AEC_GROUP_ID_DEFAULT);
69
70 snprintf(ini_key, MAX_INI_KEY_LENGTH, BLUETOOTH_WBS_ENABLED_INI_KEY);
71 ini_key[MAX_INI_KEY_LENGTH] = 0;
72 board_config->bt_wbs_enabled = iniparser_getint(
73 ini, ini_key, BLUETOOTH_WBS_ENABLED_INI_DEFAULT);
74
75 snprintf(ini_key, MAX_INI_KEY_LENGTH,
76 BLUETOOTH_DEPRIORITIZE_WBS_MIC_INI_KEY);
77 ini_key[MAX_INI_KEY_LENGTH] = 0;
78 board_config->deprioritize_bt_wbs_mic = iniparser_getint(
79 ini, ini_key, BLUETOOTH_DEPRIORITIZE_WBS_MIC_INI_DEFAULT);
80
81 snprintf(ini_key, MAX_INI_KEY_LENGTH, UCM_IGNORE_SUFFIX_KEY);
82 ini_key[MAX_INI_KEY_LENGTH] = 0;
83 ptr = iniparser_getstring(ini, ini_key, "");
84 if (ptr) {
85 board_config->ucm_ignore_suffix = strdup(ptr);
86 if (!board_config->ucm_ignore_suffix)
87 syslog(LOG_ERR, "Failed to call strdup: %d", errno);
88 }
89
90 snprintf(ini_key, MAX_INI_KEY_LENGTH, HOTWORD_PAUSE_AT_SUSPEND);
91 ini_key[MAX_INI_KEY_LENGTH] = 0;
92 board_config->hotword_pause_at_suspend = iniparser_getint(
93 ini, ini_key, HOTWORD_PAUSE_AT_SUSPEND_DEFAULT);
94
95 iniparser_freedict(ini);
96 syslog(LOG_DEBUG, "Loaded ini file %s", ini_name);
97 }
98