2 * module-murphy-ivi -- PulseAudio module for providing audio routing support
3 * Copyright (c) 2012, Intel Corporation.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU Lesser General Public License,
7 * version 2.1, as published by the Free Software Foundation.
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.
12 * See the GNU Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this program; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, Boston,
25 #include <pulsecore/pulsecore-config.h>
27 #include "murphy-config.h"
31 #include "scripting.h"
36 mir_rtgroup_accept_t accept;
37 mir_rtgroup_compare_t compare;
58 static rtgroup_def rtgroups[] = {
61 mir_router_phone_accept,
62 mir_router_phone_compare
67 mir_router_default_accept,
68 mir_router_default_compare
73 mir_router_phone_accept,
74 mir_router_phone_compare
80 static classmap_def classmap[] = {
81 {mir_phone , mir_input , "phone" },
83 {mir_radio , mir_output, "default"},
84 {mir_player , mir_output, "default"},
85 {mir_navigator, mir_output, "default"},
86 {mir_game , mir_output, "default"},
87 {mir_browser , mir_output, "default"},
88 {mir_phone , mir_output, "phone" },
89 {mir_event , mir_output, "default"},
90 {mir_node_type_unknown, mir_direction_unknown, NULL}
93 static typemap_def rolemap[] = {
94 {"video" , mir_player },
95 {"music" , mir_player },
97 {"event" , mir_event },
98 {"navigator", mir_navigator },
99 {"phone" , mir_phone },
100 {"carkit" , mir_phone },
101 {"animation", mir_browser },
102 {"test" , mir_player },
103 {"ringtone" , mir_alert },
104 {"alarm" , mir_alert },
105 {"camera" , mir_camera },
106 {"system" , mir_system },
107 {NULL, mir_node_type_unknown}
110 static typemap_def binmap[] = {
111 {"rhytmbox" , mir_player },
112 {"firefox" , mir_browser},
113 {"chrome" , mir_browser},
114 {"sound-juicer", mir_player },
115 {NULL, mir_node_type_unknown}
118 static prior_def priormap[] = {
126 {mir_node_type_unknown, 0}
129 static double speedvol;
130 static double supprvol = -20.0;
131 static int exception_classes[] = {mir_phone, mir_navigator};
132 static mir_volume_suppress_arg suppress = {
133 &supprvol, {DIM(exception_classes), exception_classes}
137 static pa_bool_t use_default_configuration(struct userdata *);
140 static pa_bool_t parse_config_file(struct userdata *, FILE *);
143 pa_mir_config *pa_mir_config_init(struct userdata *u)
145 pa_mir_config *config;
149 config = pa_xnew0(pa_mir_config, 1);
154 void pa_mir_config_done(struct userdata *u)
156 pa_mir_config *config;
158 if (u && (config = u->config)) {
165 pa_bool_t pa_mir_config_parse_file(struct userdata *u, const char *path)
168 pa_mir_config *config;
173 pa_assert_se((module = u->module));
174 pa_assert_se((config = u->config));
179 pa_log_info("%s: configuration file is '%s'", module->name, path);
180 success = pa_scripting_dofile(u, path);
184 pa_log_info("%s: builtin default configuration applies", module->name);
185 success = use_default_configuration(u);
188 pa_nodeset_print_maps(u, buf, sizeof(buf));
194 static pa_bool_t use_default_configuration(struct userdata *u)
203 for (r = rtgroups; r->name; r++)
204 mir_router_create_rtgroup(u, r->type, r->name, r->accept, r->compare);
206 for (c = classmap; c->rtgroup; c++)
207 mir_router_assign_class_to_rtgroup(u, c->class, c->type, c->rtgroup);
209 for (t = rolemap; t->id; t++)
210 pa_nodeset_add_role(u, t->id, t->type, NULL);
212 for (t = binmap; t->id; t++)
213 pa_nodeset_add_binary(u, t->id, t->type, NULL);
215 for (p = priormap; p->class; p++)
216 mir_router_assign_class_priority(u, p->class, p->priority);
219 mir_volume_add_generic_limit(u, mir_volume_correction, &speedvol);
221 mir_volume_add_class_limit(u, mir_phone,mir_volume_suppress, &suppress);
222 mir_volume_add_class_limit(u, mir_navigator,mir_volume_suppress,&suppress);
231 * indent-tabs-mode: nil