|
- /* -*- Mode: C ; c-basic-offset: 4 -*- */
- /*
- Copyright (C) 2007,2008 Nedko Arnaudov
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- */
-
- #include <stdbool.h>
- #include <stdint.h>
- #include <string.h>
- #include <stdio.h>
- #include <dbus/dbus.h>
-
- #include "controller_internal.h"
-
- void
- jack_controller_settings_set_bool_option(
- const char *value_str,
- int *value_ptr)
- {
- if (strcmp(value_str, "true") == 0)
- {
- *value_ptr = true;
- }
- else if (strcmp(value_str, "false") == 0)
- {
- *value_ptr = false;
- }
- else
- {
- jack_error("ignoring unknown bool value \"%s\"", value_str);
- }
- }
-
- void
- jack_controller_settings_set_sint_option(
- const char *value_str,
- int *value_ptr)
- {
- *value_ptr = atoi(value_str);
- }
-
- void
- jack_controller_settings_set_uint_option(
- const char *value_str,
- unsigned int *value_ptr)
- {
- *value_ptr = strtoul(value_str, NULL, 10);
- }
-
- void
- jack_controller_settings_set_char_option(
- const char *value_str,
- char *value_ptr)
- {
- if (value_str[0] == 0 || value_str[1] != 0)
- {
- jack_error("invalid char option value \"%s\"", value_str);
- return;
- }
-
- *value_ptr = *value_str;
- }
-
- void
- jack_controller_settings_set_string_option(
- const char *value_str,
- char *value_ptr,
- size_t max_size)
- {
- size_t size;
-
- size = strlen(value_str);
-
- if (size >= max_size)
- {
- jack_error("string option value \"%s\" is too long, max is %u chars (including terminating zero)", value_str, (unsigned int)max_size);
- return;
- }
-
- strcpy(value_ptr, value_str);
- }
-
- void
- jack_controller_settings_set_driver_option(
- jackctl_driver_t *driver,
- const char *option_name,
- const char *option_value)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- int value_int;
- unsigned int value_uint;
- union jackctl_parameter_value value;
-
- jack_info("setting driver option \"%s\" to value \"%s\"", option_name, option_value);
-
- parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(driver), option_name);
- if (parameter == NULL)
- {
- jack_error(
- "Unknown parameter \"%s\" of driver \"%s\"",
- option_name,
- jackctl_driver_get_name(driver));
- return;
- }
-
- type = jackctl_parameter_get_type(parameter);
-
- switch (type)
- {
- case JackParamInt:
- jack_controller_settings_set_sint_option(option_value, &value_int);
- value.i = value_int;
- break;
- case JackParamUInt:
- jack_controller_settings_set_uint_option(option_value, &value_uint);
- value.ui = value_uint;
- break;
- case JackParamChar:
- jack_controller_settings_set_char_option(option_value, &value.c);
- break;
- case JackParamString:
- jack_controller_settings_set_string_option(option_value, value.str, sizeof(value.str));
- break;
- case JackParamBool:
- jack_controller_settings_set_bool_option(option_value, &value_int);
- value.i = value_int;
- break;
- default:
- jack_error("Parameter \"%s\" of driver \"%s\" is of unknown type %d",
- jackctl_parameter_get_name(parameter),
- jackctl_driver_get_name(driver),
- type);
- }
-
- jackctl_parameter_set_value(parameter, &value);
- }
-
- void
- jack_controller_settings_set_engine_option(
- struct jack_controller *controller_ptr,
- const char *option_name,
- const char *option_value)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- int value_int;
- unsigned int value_uint;
- union jackctl_parameter_value value;
-
- jack_info("setting engine option \"%s\" to value \"%s\"", option_name, option_value);
-
- if (strcmp(option_name, "driver") == 0)
- {
- if (!jack_controller_select_driver(controller_ptr, option_value))
- {
- jack_error("unknown driver '%s'", option_value);
- }
-
- return;
- }
-
- parameter = jack_controller_find_parameter(jackctl_server_get_parameters(controller_ptr->server), option_name);
- if (parameter == NULL)
- {
- jack_error(
- "Unknown engine parameter \"%s\"",
- option_name);
- return;
- }
-
- type = jackctl_parameter_get_type(parameter);
-
- switch (type)
- {
- case JackParamInt:
- jack_controller_settings_set_sint_option(option_value, &value_int);
- value.i = value_int;
- break;
- case JackParamUInt:
- jack_controller_settings_set_uint_option(option_value, &value_uint);
- value.ui = value_uint;
- break;
- case JackParamChar:
- jack_controller_settings_set_char_option(option_value, &value.c);
- break;
- case JackParamString:
- jack_controller_settings_set_string_option(option_value, value.str, sizeof(value.str));
- break;
- case JackParamBool:
- jack_controller_settings_set_bool_option(option_value, &value_int);
- value.i = value_int;
- break;
- default:
- jack_error("Engine parameter \"%s\" is of unknown type %d",
- jackctl_parameter_get_name(parameter),
- type);
- }
-
- jackctl_parameter_set_value(parameter, &value);
- }
-
- static
- bool
- jack_controller_settings_save_options(
- void *context,
- const JSList * parameters_list,
- void *dbus_call_context_ptr)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- union jackctl_parameter_value value;
- const char * name;
- char value_str[50];
-
- while (parameters_list != NULL)
- {
- parameter = (jackctl_parameter_t *)parameters_list->data;
-
- if (jackctl_parameter_is_set(parameter))
- {
- type = jackctl_parameter_get_type(parameter);
- value = jackctl_parameter_get_value(parameter);
- name = jackctl_parameter_get_name(parameter);
-
- switch (type)
- {
- case JackParamInt:
- sprintf(value_str, "%d", (int)value.i);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamUInt:
- sprintf(value_str, "%u", (unsigned int)value.ui);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamChar:
- sprintf(value_str, "%c", (char)value.c);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamString:
- if (!jack_controller_settings_write_option(context, name, value.str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamBool:
- if (!jack_controller_settings_write_option(context, name, value.b ? "true" : "false", dbus_call_context_ptr))
- {
- return false;
- }
- break;
- default:
- jack_error("parameter of unknown type %d", type);
- }
- }
-
- parameters_list = jack_slist_next(parameters_list);
- }
-
- return true;
- }
-
- bool
- jack_controller_settings_save_engine_options(
- void *context,
- struct jack_controller *controller_ptr,
- void *dbus_call_context_ptr)
- {
- if (controller_ptr->driver != NULL)
- {
- if (!jack_controller_settings_write_option(
- context,
- "driver",
- jackctl_driver_get_name(controller_ptr->driver),
- dbus_call_context_ptr))
- {
- return false;
- }
- }
-
- return jack_controller_settings_save_options(context, jackctl_server_get_parameters(controller_ptr->server), dbus_call_context_ptr);
- }
-
- bool
- jack_controller_settings_save_driver_options(
- void *context,
- jackctl_driver_t *driver,
- void *dbus_call_context_ptr)
- {
- return jack_controller_settings_save_options(context, jackctl_driver_get_parameters(driver), dbus_call_context_ptr);
- }
- /* -*- Mode: C ; c-basic-offset: 4 -*- */
- /*
- Copyright (C) 2007,2008 Nedko Arnaudov
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- */
-
- #include <stdbool.h>
- #include <stdint.h>
- #include <string.h>
- #include <stdio.h>
- #include <dbus/dbus.h>
-
- #include "controller_internal.h"
-
- void
- jack_controller_settings_set_bool_option(
- const char *value_str,
- int *value_ptr)
- {
- if (strcmp(value_str, "true") == 0)
- {
- *value_ptr = true;
- }
- else if (strcmp(value_str, "false") == 0)
- {
- *value_ptr = false;
- }
- else
- {
- jack_error("ignoring unknown bool value \"%s\"", value_str);
- }
- }
-
- void
- jack_controller_settings_set_sint_option(
- const char *value_str,
- int *value_ptr)
- {
- *value_ptr = atoi(value_str);
- }
-
- void
- jack_controller_settings_set_uint_option(
- const char *value_str,
- unsigned int *value_ptr)
- {
- *value_ptr = strtoul(value_str, NULL, 10);
- }
-
- void
- jack_controller_settings_set_char_option(
- const char *value_str,
- char *value_ptr)
- {
- if (value_str[0] == 0 || value_str[1] != 0)
- {
- jack_error("invalid char option value \"%s\"", value_str);
- return;
- }
-
- *value_ptr = *value_str;
- }
-
- void
- jack_controller_settings_set_string_option(
- const char *value_str,
- char *value_ptr,
- size_t max_size)
- {
- size_t size;
-
- size = strlen(value_str);
-
- if (size >= max_size)
- {
- jack_error("string option value \"%s\" is too long, max is %u chars (including terminating zero)", value_str, (unsigned int)max_size);
- return;
- }
-
- strcpy(value_ptr, value_str);
- }
-
- void
- jack_controller_settings_set_driver_option(
- jackctl_driver_t *driver,
- const char *option_name,
- const char *option_value)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- int value_int;
- unsigned int value_uint;
- union jackctl_parameter_value value;
-
- jack_info("setting driver option \"%s\" to value \"%s\"", option_name, option_value);
-
- parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(driver), option_name);
- if (parameter == NULL)
- {
- jack_error(
- "Unknown parameter \"%s\" of driver \"%s\"",
- option_name,
- jackctl_driver_get_name(driver));
- return;
- }
-
- type = jackctl_parameter_get_type(parameter);
-
- switch (type)
- {
- case JackParamInt:
- jack_controller_settings_set_sint_option(option_value, &value_int);
- value.i = value_int;
- break;
- case JackParamUInt:
- jack_controller_settings_set_uint_option(option_value, &value_uint);
- value.ui = value_uint;
- break;
- case JackParamChar:
- jack_controller_settings_set_char_option(option_value, &value.c);
- break;
- case JackParamString:
- jack_controller_settings_set_string_option(option_value, value.str, sizeof(value.str));
- break;
- case JackParamBool:
- jack_controller_settings_set_bool_option(option_value, &value_int);
- value.i = value_int;
- break;
- default:
- jack_error("Parameter \"%s\" of driver \"%s\" is of unknown type %d",
- jackctl_parameter_get_name(parameter),
- jackctl_driver_get_name(driver),
- type);
- }
-
- jackctl_parameter_set_value(parameter, &value);
- }
-
- void
- jack_controller_settings_set_engine_option(
- struct jack_controller *controller_ptr,
- const char *option_name,
- const char *option_value)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- int value_int;
- unsigned int value_uint;
- union jackctl_parameter_value value;
-
- jack_info("setting engine option \"%s\" to value \"%s\"", option_name, option_value);
-
- if (strcmp(option_name, "driver") == 0)
- {
- if (!jack_controller_select_driver(controller_ptr, option_value))
- {
- jack_error("unknown driver '%s'", option_value);
- }
-
- return;
- }
-
- parameter = jack_controller_find_parameter(jackctl_server_get_parameters(controller_ptr->server), option_name);
- if (parameter == NULL)
- {
- jack_error(
- "Unknown engine parameter \"%s\"",
- option_name);
- return;
- }
-
- type = jackctl_parameter_get_type(parameter);
-
- switch (type)
- {
- case JackParamInt:
- jack_controller_settings_set_sint_option(option_value, &value_int);
- value.i = value_int;
- break;
- case JackParamUInt:
- jack_controller_settings_set_uint_option(option_value, &value_uint);
- value.ui = value_uint;
- break;
- case JackParamChar:
- jack_controller_settings_set_char_option(option_value, &value.c);
- break;
- case JackParamString:
- jack_controller_settings_set_string_option(option_value, value.str, sizeof(value.str));
- break;
- case JackParamBool:
- jack_controller_settings_set_bool_option(option_value, &value_int);
- value.i = value_int;
- break;
- default:
- jack_error("Engine parameter \"%s\" is of unknown type %d",
- jackctl_parameter_get_name(parameter),
- type);
- }
-
- jackctl_parameter_set_value(parameter, &value);
- }
-
- static
- bool
- jack_controller_settings_save_options(
- void *context,
- const JSList * parameters_list,
- void *dbus_call_context_ptr)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- union jackctl_parameter_value value;
- const char * name;
- char value_str[50];
-
- while (parameters_list != NULL)
- {
- parameter = (jackctl_parameter_t *)parameters_list->data;
-
- if (jackctl_parameter_is_set(parameter))
- {
- type = jackctl_parameter_get_type(parameter);
- value = jackctl_parameter_get_value(parameter);
- name = jackctl_parameter_get_name(parameter);
-
- switch (type)
- {
- case JackParamInt:
- sprintf(value_str, "%d", (int)value.i);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamUInt:
- sprintf(value_str, "%u", (unsigned int)value.ui);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamChar:
- sprintf(value_str, "%c", (char)value.c);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamString:
- if (!jack_controller_settings_write_option(context, name, value.str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamBool:
- if (!jack_controller_settings_write_option(context, name, value.b ? "true" : "false", dbus_call_context_ptr))
- {
- return false;
- }
- break;
- default:
- jack_error("parameter of unknown type %d", type);
- }
- }
-
- parameters_list = jack_slist_next(parameters_list);
- }
-
- return true;
- }
-
- bool
- jack_controller_settings_save_engine_options(
- void *context,
- struct jack_controller *controller_ptr,
- void *dbus_call_context_ptr)
- {
- if (controller_ptr->driver != NULL)
- {
- if (!jack_controller_settings_write_option(
- context,
- "driver",
- jackctl_driver_get_name(controller_ptr->driver),
- dbus_call_context_ptr))
- {
- return false;
- }
- }
-
- return jack_controller_settings_save_options(context, jackctl_server_get_parameters(controller_ptr->server), dbus_call_context_ptr);
- }
-
- bool
- jack_controller_settings_save_driver_options(
- void *context,
- jackctl_driver_t *driver,
- void *dbus_call_context_ptr)
- {
- return jack_controller_settings_save_options(context, jackctl_driver_get_parameters(driver), dbus_call_context_ptr);
- }
- /* -*- Mode: C ; c-basic-offset: 4 -*- */
- /*
- Copyright (C) 2007,2008 Nedko Arnaudov
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- */
-
- #include <stdbool.h>
- #include <stdint.h>
- #include <string.h>
- #include <stdio.h>
- #include <dbus/dbus.h>
-
- #include "controller_internal.h"
-
- void
- jack_controller_settings_set_bool_option(
- const char *value_str,
- int *value_ptr)
- {
- if (strcmp(value_str, "true") == 0)
- {
- *value_ptr = true;
- }
- else if (strcmp(value_str, "false") == 0)
- {
- *value_ptr = false;
- }
- else
- {
- jack_error("ignoring unknown bool value \"%s\"", value_str);
- }
- }
-
- void
- jack_controller_settings_set_sint_option(
- const char *value_str,
- int *value_ptr)
- {
- *value_ptr = atoi(value_str);
- }
-
- void
- jack_controller_settings_set_uint_option(
- const char *value_str,
- unsigned int *value_ptr)
- {
- *value_ptr = strtoul(value_str, NULL, 10);
- }
-
- void
- jack_controller_settings_set_char_option(
- const char *value_str,
- char *value_ptr)
- {
- if (value_str[0] == 0 || value_str[1] != 0)
- {
- jack_error("invalid char option value \"%s\"", value_str);
- return;
- }
-
- *value_ptr = *value_str;
- }
-
- void
- jack_controller_settings_set_string_option(
- const char *value_str,
- char *value_ptr,
- size_t max_size)
- {
- size_t size;
-
- size = strlen(value_str);
-
- if (size >= max_size)
- {
- jack_error("string option value \"%s\" is too long, max is %u chars (including terminating zero)", value_str, (unsigned int)max_size);
- return;
- }
-
- strcpy(value_ptr, value_str);
- }
-
- void
- jack_controller_settings_set_driver_option(
- jackctl_driver_t *driver,
- const char *option_name,
- const char *option_value)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- int value_int;
- unsigned int value_uint;
- union jackctl_parameter_value value;
-
- jack_info("setting driver option \"%s\" to value \"%s\"", option_name, option_value);
-
- parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(driver), option_name);
- if (parameter == NULL)
- {
- jack_error(
- "Unknown parameter \"%s\" of driver \"%s\"",
- option_name,
- jackctl_driver_get_name(driver));
- return;
- }
-
- type = jackctl_parameter_get_type(parameter);
-
- switch (type)
- {
- case JackParamInt:
- jack_controller_settings_set_sint_option(option_value, &value_int);
- value.i = value_int;
- break;
- case JackParamUInt:
- jack_controller_settings_set_uint_option(option_value, &value_uint);
- value.ui = value_uint;
- break;
- case JackParamChar:
- jack_controller_settings_set_char_option(option_value, &value.c);
- break;
- case JackParamString:
- jack_controller_settings_set_string_option(option_value, value.str, sizeof(value.str));
- break;
- case JackParamBool:
- jack_controller_settings_set_bool_option(option_value, &value_int);
- value.i = value_int;
- break;
- default:
- jack_error("Parameter \"%s\" of driver \"%s\" is of unknown type %d",
- jackctl_parameter_get_name(parameter),
- jackctl_driver_get_name(driver),
- type);
- }
-
- jackctl_parameter_set_value(parameter, &value);
- }
-
- void
- jack_controller_settings_set_engine_option(
- struct jack_controller *controller_ptr,
- const char *option_name,
- const char *option_value)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- int value_int;
- unsigned int value_uint;
- union jackctl_parameter_value value;
-
- jack_info("setting engine option \"%s\" to value \"%s\"", option_name, option_value);
-
- if (strcmp(option_name, "driver") == 0)
- {
- if (!jack_controller_select_driver(controller_ptr, option_value))
- {
- jack_error("unknown driver '%s'", option_value);
- }
-
- return;
- }
-
- parameter = jack_controller_find_parameter(jackctl_server_get_parameters(controller_ptr->server), option_name);
- if (parameter == NULL)
- {
- jack_error(
- "Unknown engine parameter \"%s\"",
- option_name);
- return;
- }
-
- type = jackctl_parameter_get_type(parameter);
-
- switch (type)
- {
- case JackParamInt:
- jack_controller_settings_set_sint_option(option_value, &value_int);
- value.i = value_int;
- break;
- case JackParamUInt:
- jack_controller_settings_set_uint_option(option_value, &value_uint);
- value.ui = value_uint;
- break;
- case JackParamChar:
- jack_controller_settings_set_char_option(option_value, &value.c);
- break;
- case JackParamString:
- jack_controller_settings_set_string_option(option_value, value.str, sizeof(value.str));
- break;
- case JackParamBool:
- jack_controller_settings_set_bool_option(option_value, &value_int);
- value.i = value_int;
- break;
- default:
- jack_error("Engine parameter \"%s\" is of unknown type %d",
- jackctl_parameter_get_name(parameter),
- type);
- }
-
- jackctl_parameter_set_value(parameter, &value);
- }
-
- static
- bool
- jack_controller_settings_save_options(
- void *context,
- const JSList * parameters_list,
- void *dbus_call_context_ptr)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- union jackctl_parameter_value value;
- const char * name;
- char value_str[50];
-
- while (parameters_list != NULL)
- {
- parameter = (jackctl_parameter_t *)parameters_list->data;
-
- if (jackctl_parameter_is_set(parameter))
- {
- type = jackctl_parameter_get_type(parameter);
- value = jackctl_parameter_get_value(parameter);
- name = jackctl_parameter_get_name(parameter);
-
- switch (type)
- {
- case JackParamInt:
- sprintf(value_str, "%d", (int)value.i);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamUInt:
- sprintf(value_str, "%u", (unsigned int)value.ui);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamChar:
- sprintf(value_str, "%c", (char)value.c);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamString:
- if (!jack_controller_settings_write_option(context, name, value.str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamBool:
- if (!jack_controller_settings_write_option(context, name, value.b ? "true" : "false", dbus_call_context_ptr))
- {
- return false;
- }
- break;
- default:
- jack_error("parameter of unknown type %d", type);
- }
- }
-
- parameters_list = jack_slist_next(parameters_list);
- }
-
- return true;
- }
-
- bool
- jack_controller_settings_save_engine_options(
- void *context,
- struct jack_controller *controller_ptr,
- void *dbus_call_context_ptr)
- {
- if (controller_ptr->driver != NULL)
- {
- if (!jack_controller_settings_write_option(
- context,
- "driver",
- jackctl_driver_get_name(controller_ptr->driver),
- dbus_call_context_ptr))
- {
- return false;
- }
- }
-
- return jack_controller_settings_save_options(context, jackctl_server_get_parameters(controller_ptr->server), dbus_call_context_ptr);
- }
-
- bool
- jack_controller_settings_save_driver_options(
- void *context,
- jackctl_driver_t *driver,
- void *dbus_call_context_ptr)
- {
- return jack_controller_settings_save_options(context, jackctl_driver_get_parameters(driver), dbus_call_context_ptr);
- }
- /* -*- Mode: C ; c-basic-offset: 4 -*- */
- /*
- Copyright (C) 2007,2008 Nedko Arnaudov
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- */
-
- #include <stdbool.h>
- #include <stdint.h>
- #include <string.h>
- #include <stdio.h>
- #include <dbus/dbus.h>
-
- #include "controller_internal.h"
-
- void
- jack_controller_settings_set_bool_option(
- const char *value_str,
- int *value_ptr)
- {
- if (strcmp(value_str, "true") == 0)
- {
- *value_ptr = true;
- }
- else if (strcmp(value_str, "false") == 0)
- {
- *value_ptr = false;
- }
- else
- {
- jack_error("ignoring unknown bool value \"%s\"", value_str);
- }
- }
-
- void
- jack_controller_settings_set_sint_option(
- const char *value_str,
- int *value_ptr)
- {
- *value_ptr = atoi(value_str);
- }
-
- void
- jack_controller_settings_set_uint_option(
- const char *value_str,
- unsigned int *value_ptr)
- {
- *value_ptr = strtoul(value_str, NULL, 10);
- }
-
- void
- jack_controller_settings_set_char_option(
- const char *value_str,
- char *value_ptr)
- {
- if (value_str[0] == 0 || value_str[1] != 0)
- {
- jack_error("invalid char option value \"%s\"", value_str);
- return;
- }
-
- *value_ptr = *value_str;
- }
-
- void
- jack_controller_settings_set_string_option(
- const char *value_str,
- char *value_ptr,
- size_t max_size)
- {
- size_t size;
-
- size = strlen(value_str);
-
- if (size >= max_size)
- {
- jack_error("string option value \"%s\" is too long, max is %u chars (including terminating zero)", value_str, (unsigned int)max_size);
- return;
- }
-
- strcpy(value_ptr, value_str);
- }
-
- void
- jack_controller_settings_set_driver_option(
- jackctl_driver_t *driver,
- const char *option_name,
- const char *option_value)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- int value_int;
- unsigned int value_uint;
- union jackctl_parameter_value value;
-
- jack_info("setting driver option \"%s\" to value \"%s\"", option_name, option_value);
-
- parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(driver), option_name);
- if (parameter == NULL)
- {
- jack_error(
- "Unknown parameter \"%s\" of driver \"%s\"",
- option_name,
- jackctl_driver_get_name(driver));
- return;
- }
-
- type = jackctl_parameter_get_type(parameter);
-
- switch (type)
- {
- case JackParamInt:
- jack_controller_settings_set_sint_option(option_value, &value_int);
- value.i = value_int;
- break;
- case JackParamUInt:
- jack_controller_settings_set_uint_option(option_value, &value_uint);
- value.ui = value_uint;
- break;
- case JackParamChar:
- jack_controller_settings_set_char_option(option_value, &value.c);
- break;
- case JackParamString:
- jack_controller_settings_set_string_option(option_value, value.str, sizeof(value.str));
- break;
- case JackParamBool:
- jack_controller_settings_set_bool_option(option_value, &value_int);
- value.i = value_int;
- break;
- default:
- jack_error("Parameter \"%s\" of driver \"%s\" is of unknown type %d",
- jackctl_parameter_get_name(parameter),
- jackctl_driver_get_name(driver),
- type);
- }
-
- jackctl_parameter_set_value(parameter, &value);
- }
-
- void
- jack_controller_settings_set_engine_option(
- struct jack_controller *controller_ptr,
- const char *option_name,
- const char *option_value)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- int value_int;
- unsigned int value_uint;
- union jackctl_parameter_value value;
-
- jack_info("setting engine option \"%s\" to value \"%s\"", option_name, option_value);
-
- if (strcmp(option_name, "driver") == 0)
- {
- if (!jack_controller_select_driver(controller_ptr, option_value))
- {
- jack_error("unknown driver '%s'", option_value);
- }
-
- return;
- }
-
- parameter = jack_controller_find_parameter(jackctl_server_get_parameters(controller_ptr->server), option_name);
- if (parameter == NULL)
- {
- jack_error(
- "Unknown engine parameter \"%s\"",
- option_name);
- return;
- }
-
- type = jackctl_parameter_get_type(parameter);
-
- switch (type)
- {
- case JackParamInt:
- jack_controller_settings_set_sint_option(option_value, &value_int);
- value.i = value_int;
- break;
- case JackParamUInt:
- jack_controller_settings_set_uint_option(option_value, &value_uint);
- value.ui = value_uint;
- break;
- case JackParamChar:
- jack_controller_settings_set_char_option(option_value, &value.c);
- break;
- case JackParamString:
- jack_controller_settings_set_string_option(option_value, value.str, sizeof(value.str));
- break;
- case JackParamBool:
- jack_controller_settings_set_bool_option(option_value, &value_int);
- value.i = value_int;
- break;
- default:
- jack_error("Engine parameter \"%s\" is of unknown type %d",
- jackctl_parameter_get_name(parameter),
- type);
- }
-
- jackctl_parameter_set_value(parameter, &value);
- }
-
- static
- bool
- jack_controller_settings_save_options(
- void *context,
- const JSList * parameters_list,
- void *dbus_call_context_ptr)
- {
- jackctl_parameter_t *parameter;
- jackctl_param_type_t type;
- union jackctl_parameter_value value;
- const char * name;
- char value_str[50];
-
- while (parameters_list != NULL)
- {
- parameter = (jackctl_parameter_t *)parameters_list->data;
-
- if (jackctl_parameter_is_set(parameter))
- {
- type = jackctl_parameter_get_type(parameter);
- value = jackctl_parameter_get_value(parameter);
- name = jackctl_parameter_get_name(parameter);
-
- switch (type)
- {
- case JackParamInt:
- sprintf(value_str, "%d", (int)value.i);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamUInt:
- sprintf(value_str, "%u", (unsigned int)value.ui);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamChar:
- sprintf(value_str, "%c", (char)value.c);
- if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamString:
- if (!jack_controller_settings_write_option(context, name, value.str, dbus_call_context_ptr))
- {
- return false;
- }
- break;
- case JackParamBool:
- if (!jack_controller_settings_write_option(context, name, value.b ? "true" : "false", dbus_call_context_ptr))
- {
- return false;
- }
- break;
- default:
- jack_error("parameter of unknown type %d", type);
- }
- }
-
- parameters_list = jack_slist_next(parameters_list);
- }
-
- return true;
- }
-
- bool
- jack_controller_settings_save_engine_options(
- void *context,
- struct jack_controller *controller_ptr,
- void *dbus_call_context_ptr)
- {
- if (controller_ptr->driver != NULL)
- {
- if (!jack_controller_settings_write_option(
- context,
- "driver",
- jackctl_driver_get_name(controller_ptr->driver),
- dbus_call_context_ptr))
- {
- return false;
- }
- }
-
- return jack_controller_settings_save_options(context, jackctl_server_get_parameters(controller_ptr->server), dbus_call_context_ptr);
- }
-
- bool
- jack_controller_settings_save_driver_options(
- void *context,
- jackctl_driver_t *driver,
- void *dbus_call_context_ptr)
- {
- return jack_controller_settings_save_options(context, jackctl_driver_get_parameters(driver), dbus_call_context_ptr);
- }
|