summaryrefslogtreecommitdiffstats
path: root/src/modules/module-lirc.c
diff options
context:
space:
mode:
authorVladimir Kokarev <matrix47@gmail.com>2009-11-05 04:55:21 +0100
committerLennart Poettering <lennart@poettering.net>2009-11-05 04:57:15 +0100
commit7793da371bbf70e23c0b45de1e188f5dd58f3324 (patch)
tree8f13592b73f6043175c263bed7a7792e1141edfa /src/modules/module-lirc.c
parentd2c59354d554f136739be7bbcd326f1d254f778e (diff)
lirc,mmkvd: added module parameters volume_limit, volume_step
volume_limit sets maximum volume that can be set from the module default is PA_VOLUME_NORM*3/2 (150%) volume_step sets step in volume changing default is PA_VOLUME_NORM/20 values are of raw pa_volume_t type
Diffstat (limited to 'src/modules/module-lirc.c')
-rw-r--r--src/modules/module-lirc.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/modules/module-lirc.c b/src/modules/module-lirc.c
index d0e902f6..e9778620 100644
--- a/src/modules/module-lirc.c
+++ b/src/modules/module-lirc.c
@@ -45,12 +45,14 @@ PA_MODULE_AUTHOR("Lennart Poettering");
PA_MODULE_DESCRIPTION("LIRC volume control");
PA_MODULE_VERSION(PACKAGE_VERSION);
PA_MODULE_LOAD_ONCE(TRUE);
-PA_MODULE_USAGE("config=<config file> sink=<sink name> appname=<lirc application name>");
+PA_MODULE_USAGE("config=<config file> sink=<sink name> appname=<lirc application name> volume_limit=<volume limit> volume_step=<volume change step>");
static const char* const valid_modargs[] = {
"config",
"sink",
"appname",
+ "volume_limit",
+ "volume_step",
NULL,
};
@@ -61,10 +63,10 @@ struct userdata {
char *sink_name;
pa_module *module;
float mute_toggle_save;
+ pa_volume_t volume_limit;
+ pa_volume_t volume_step;
};
-#define DELTA (PA_VOLUME_NORM/20)
-
static void io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void*userdata) {
struct userdata *u = userdata;
char *name = NULL, *code = NULL;
@@ -125,12 +127,12 @@ static void io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event
switch (volchange) {
case UP:
- pa_cvolume_inc(&cv, DELTA);
+ pa_cvolume_inc_clamp(&cv, u->volume_step, u->volume_limit);
pa_sink_set_volume(s, &cv, TRUE, TRUE);
break;
case DOWN:
- pa_cvolume_dec(&cv, DELTA);
+ pa_cvolume_dec(&cv, u->volume_step);
pa_sink_set_volume(s, &cv, TRUE, TRUE);
break;
@@ -170,6 +172,8 @@ fail:
int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
struct userdata *u;
+ pa_volume_t volume_limit = PA_VOLUME_NORM*3/2;
+ pa_volume_t volume_step = PA_VOLUME_NORM/20;
pa_assert(m);
@@ -178,6 +182,16 @@ int pa__init(pa_module*m) {
goto fail;
}
+ if (pa_modargs_get_value_u32(ma, "volume_limit", &volume_limit) < 0) {
+ pa_log("Failed to parse volume limit");
+ goto fail;
+ }
+
+ if (pa_modargs_get_value_u32(ma, "volume_step", &volume_step) < 0) {
+ pa_log("Failed to parse volume step");
+ goto fail;
+ }
+
m->userdata = u = pa_xnew(struct userdata, 1);
u->module = m;
u->io = NULL;
@@ -185,6 +199,8 @@ int pa__init(pa_module*m) {
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
u->lirc_fd = -1;
u->mute_toggle_save = 0;
+ u->volume_limit = volume_limit;
+ u->volume_step = volume_step;
if ((u->lirc_fd = lirc_init((char*) pa_modargs_get_value(ma, "appname", "pulseaudio"), 1)) < 0) {
pa_log("lirc_init() failed.");