mobile/vty_interface.c: add new 'audio' section

This change introduces a new node named 'AUDIO', which is intended
to organize some audio related settings, such as:

  - io-target - TCH frame I/O back-end (e.g. gapk, hardware);
  - alsa-output-dev - ALSA playback (i.e. speakers) device name;
  - alsa-input-dev - ALSA recording (i.e. mic) device name.

The last two are actual when 'io-target' is set to 'gapk'.
For now, all introduced parameters don't affect anything.

Change-Id: I62cd5ef22ca2290fcafe65c78537ddbcb39fb8c6
This commit is contained in:
Vadim Yanitskiy 2017-12-12 03:49:43 +07:00
parent 273c504425
commit ba1a4dbe12
6 changed files with 164 additions and 0 deletions

View File

@ -61,4 +61,8 @@ ms 1
ki comp128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ki comp128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
no barred-access no barred-access
rplmn 001 01 rplmn 001 01
audio
io-target hardware
alsa-output-dev default
alsa-input-dev default
no shutdown no shutdown

View File

@ -61,6 +61,10 @@ ms one
ki comp128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ki comp128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
no barred-access no barred-access
rplmn 001 01 rplmn 001 01
audio
io-target hardware
alsa-output-dev default
alsa-input-dev default
no shutdown no shutdown
! !
ms two ms two
@ -113,4 +117,8 @@ ms two
ki comp128 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ki comp128 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
no barred-access no barred-access
rplmn 001 01 rplmn 001 01
audio
io-target hardware
alsa-output-dev default
alsa-input-dev default
no shutdown no shutdown

View File

@ -13,6 +13,24 @@ enum mncc_handler_t {
MNCC_HANDLER_DUMMY, MNCC_HANDLER_DUMMY,
}; };
/* TCH frame I/O target */
enum audio_io_target {
/* Nothing, don't care about TCH */
AUDIO_IO_NONE = 0,
/* L1 hardware (e.g. Calypso DSP) */
AUDIO_IO_HARDWARE,
/* External MNCC application (e.g. LCR) */
AUDIO_IO_SOCKET,
/* Built-in GAPK-based back-end */
AUDIO_IO_GAPK,
};
struct audio_settings {
enum audio_io_target io_target;
char alsa_output_dev[128];
char alsa_input_dev[128];
};
struct gsm_settings { struct gsm_settings {
char layer2_socket_path[128]; char layer2_socket_path[128];
char sap_socket_path[128]; char sap_socket_path[128];
@ -21,6 +39,9 @@ struct gsm_settings {
/* MNCC handler */ /* MNCC handler */
enum mncc_handler_t mncc_handler; enum mncc_handler_t mncc_handler;
/* Audio settings */
struct audio_settings audio;
/* IMEI */ /* IMEI */
char imei[16]; char imei[16];
char imeisv[17]; char imeisv[17];

View File

@ -10,6 +10,7 @@ enum ms_vty_node {
MS_NODE = _LAST_OSMOVTY_NODE + 1, MS_NODE = _LAST_OSMOVTY_NODE + 1,
TESTSIM_NODE, TESTSIM_NODE,
SUPPORT_NODE, SUPPORT_NODE,
AUDIO_NODE,
}; };
int ms_vty_go_parent(struct vty *vty); int ms_vty_go_parent(struct vty *vty);

View File

@ -33,6 +33,7 @@
static char *layer2_socket_path = "/tmp/osmocom_l2"; static char *layer2_socket_path = "/tmp/osmocom_l2";
static char *sap_socket_path = "/tmp/osmocom_sap"; static char *sap_socket_path = "/tmp/osmocom_sap";
static char *mncc_socket_path = "/tmp/ms_mncc.%s"; static char *mncc_socket_path = "/tmp/ms_mncc.%s";
static char *alsa_dev_default = "default";
int gsm_settings_init(struct osmocom_ms *ms) int gsm_settings_init(struct osmocom_ms *ms)
{ {
@ -49,6 +50,13 @@ int gsm_settings_init(struct osmocom_ms *ms)
/* Built-in MNCC handler */ /* Built-in MNCC handler */
set->mncc_handler = MNCC_HANDLER_MOBILE; set->mncc_handler = MNCC_HANDLER_MOBILE;
/* Audio settings */
set->audio.io_target = AUDIO_IO_GAPK;
strncpy(set->audio.alsa_output_dev, alsa_dev_default,
sizeof(set->audio.alsa_output_dev) - 1);
strncpy(set->audio.alsa_input_dev, alsa_dev_default,
sizeof(set->audio.alsa_input_dev) - 1);
/* network search */ /* network search */
set->plmn_mode = PLMN_MODE_AUTO; set->plmn_mode = PLMN_MODE_AUTO;

View File

@ -71,6 +71,12 @@ struct cmd_node support_node = {
1 1
}; };
struct cmd_node audio_node = {
AUDIO_NODE,
"%s(audio)# ",
1
};
static void print_vty(void *priv, const char *fmt, ...) static void print_vty(void *priv, const char *fmt, ...)
{ {
char buffer[1000]; char buffer[1000];
@ -1544,6 +1550,26 @@ static void config_write_ms(struct vty *vty, struct osmocom_ms *ms)
vty_out(vty, " c7-any-timeout %d%s", vty_out(vty, " c7-any-timeout %d%s",
set->any_timeout, VTY_NEWLINE); set->any_timeout, VTY_NEWLINE);
vty_out(vty, " audio%s", VTY_NEWLINE);
switch (set->audio.io_target) {
case AUDIO_IO_HARDWARE:
vty_out(vty, " io-target hardware%s", VTY_NEWLINE);
break;
case AUDIO_IO_SOCKET:
vty_out(vty, " io-target socket%s", VTY_NEWLINE);
break;
case AUDIO_IO_GAPK:
vty_out(vty, " io-target gapk%s", VTY_NEWLINE);
break;
case AUDIO_IO_NONE:
default:
vty_out(vty, " no io-target%s", VTY_NEWLINE);
}
vty_out(vty, " alsa-output-dev %s%s",
set->audio.alsa_output_dev, VTY_NEWLINE);
vty_out(vty, " alsa-input-dev %s%s",
set->audio.alsa_input_dev, VTY_NEWLINE);
/* no shutdown must be written to config, because shutdown is default */ /* no shutdown must be written to config, because shutdown is default */
vty_out(vty, " %sshutdown%s", (ms->shutdown != MS_SHUTDOWN_NONE) ? "" : "no ", vty_out(vty, " %sshutdown%s", (ms->shutdown != MS_SHUTDOWN_NONE) ? "" : "no ",
VTY_NEWLINE); VTY_NEWLINE);
@ -2807,6 +2833,94 @@ DEFUN(cfg_test_hplmn, cfg_test_hplmn_cmd, "hplmn-search (everywhere|foreign-coun
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/* per audio config */
DEFUN(cfg_ms_audio, cfg_ms_audio_cmd, "audio",
"Configure audio settings")
{
vty->node = AUDIO_NODE;
return CMD_SUCCESS;
}
DEFUN(cfg_ms_audio_io_target, cfg_ms_audio_io_target_cmd,
"io-target (gapk|hardware|socket)", "Set TCH frame I/O target\n"
"Built-in GAPK-based back-end (default)\n"
"L1 hardware (e.g. Calypso DSP)\n"
"External MNCC application (e.g. LCR)")
{
struct osmocom_ms *ms = vty->index;
struct gsm_settings *set = &ms->settings;
switch (argv[0][0]) {
case 'g':
set->audio.io_target = AUDIO_IO_GAPK;
break;
case 'h':
set->audio.io_target = AUDIO_IO_HARDWARE;
break;
case 's':
set->audio.io_target = AUDIO_IO_SOCKET;
break;
default:
vty_out(vty, "Given io-target invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* Restart required */
vty_restart_if_started(vty, ms);
return CMD_SUCCESS;
}
DEFUN(cfg_ms_audio_no_io_target, cfg_ms_audio_no_io_target_cmd,
"no io-target", NO_STR "Disable TCH frame processing")
{
struct osmocom_ms *ms = vty->index;
struct gsm_settings *set = &ms->settings;
/* Nothing, don't care about TCH */
set->audio.io_target = AUDIO_IO_NONE;
/* Restart required */
vty_restart_if_started(vty, ms);
return CMD_SUCCESS;
}
DEFUN(cfg_ms_audio_alsa_out_dev, cfg_ms_audio_alsa_out_dev_cmd,
"alsa-output-dev (default|NAME)",
"Set ALSA playback (i.e. speakers) device name\n"
"Default system playback device (default)\n"
"Name of a custom playback device")
{
struct osmocom_ms *ms = vty->index;
struct gsm_settings *set = &ms->settings;
const char *dev_name = argv[0];
/* Just copy device name */
strncpy(set->audio.alsa_output_dev, dev_name,
sizeof(set->audio.alsa_output_dev) - 1);
return CMD_SUCCESS;
}
DEFUN(cfg_ms_audio_alsa_in_dev, cfg_ms_audio_alsa_in_dev_cmd,
"alsa-input-dev (default|NAME)",
"Set ALSA recording (i.e. mic) device name\n"
"Default system recording device (default)\n"
"Name of a custom recording device")
{
struct osmocom_ms *ms = vty->index;
struct gsm_settings *set = &ms->settings;
const char *dev_name = argv[0];
/* Just copy device name */
strncpy(set->audio.alsa_input_dev, dev_name,
sizeof(set->audio.alsa_input_dev) - 1);
return CMD_SUCCESS;
}
DEFUN(cfg_no_shutdown, cfg_ms_no_shutdown_cmd, "no shutdown", DEFUN(cfg_no_shutdown, cfg_ms_no_shutdown_cmd, "no shutdown",
NO_STR "Activate and run MS") NO_STR "Activate and run MS")
{ {
@ -2887,6 +3001,7 @@ int ms_vty_go_parent(struct vty *vty)
break; break;
case TESTSIM_NODE: case TESTSIM_NODE:
case SUPPORT_NODE: case SUPPORT_NODE:
case AUDIO_NODE:
vty->node = MS_NODE; vty->node = MS_NODE;
break; break;
default: default:
@ -3001,6 +3116,7 @@ int ms_vty_init(void)
install_element(MS_NODE, &cfg_ms_abbrev_cmd); install_element(MS_NODE, &cfg_ms_abbrev_cmd);
install_element(MS_NODE, &cfg_ms_no_abbrev_cmd); install_element(MS_NODE, &cfg_ms_no_abbrev_cmd);
install_element(MS_NODE, &cfg_ms_testsim_cmd); install_element(MS_NODE, &cfg_ms_testsim_cmd);
install_element(MS_NODE, &cfg_ms_audio_cmd);
install_element(MS_NODE, &cfg_ms_neighbour_cmd); install_element(MS_NODE, &cfg_ms_neighbour_cmd);
install_element(MS_NODE, &cfg_ms_no_neighbour_cmd); install_element(MS_NODE, &cfg_ms_no_neighbour_cmd);
install_element(MS_NODE, &cfg_ms_any_timeout_cmd); install_element(MS_NODE, &cfg_ms_any_timeout_cmd);
@ -3078,6 +3194,12 @@ int ms_vty_init(void)
install_element(MS_NODE, &cfg_ms_script_load_run_cmd); install_element(MS_NODE, &cfg_ms_script_load_run_cmd);
install_element(MS_NODE, &cfg_ms_no_script_load_run_cmd); install_element(MS_NODE, &cfg_ms_no_script_load_run_cmd);
install_node(&audio_node, config_write_dummy);
install_element(AUDIO_NODE, &cfg_ms_audio_io_target_cmd);
install_element(AUDIO_NODE, &cfg_ms_audio_no_io_target_cmd);
install_element(AUDIO_NODE, &cfg_ms_audio_alsa_out_dev_cmd);
install_element(AUDIO_NODE, &cfg_ms_audio_alsa_in_dev_cmd);
/* Register the talloc context introspection command */ /* Register the talloc context introspection command */
osmo_talloc_vty_add_cmds(); osmo_talloc_vty_add_cmds();