diff options
| author | Vladimir Kokarev <matrix47@gmail.com> | 2009-11-05 04:55:21 +0100 | 
|---|---|---|
| committer | Lennart Poettering <lennart@poettering.net> | 2009-11-05 04:57:15 +0100 | 
| commit | 7793da371bbf70e23c0b45de1e188f5dd58f3324 (patch) | |
| tree | 8f13592b73f6043175c263bed7a7792e1141edfa | |
| parent | d2c59354d554f136739be7bbcd326f1d254f778e (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
| -rw-r--r-- | src/modules/module-lirc.c | 26 | ||||
| -rw-r--r-- | src/modules/module-mmkbd-evdev.c | 26 | 
2 files changed, 42 insertions, 10 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."); diff --git a/src/modules/module-mmkbd-evdev.c b/src/modules/module-mmkbd-evdev.c index 14a9dd3d..193c1f40 100644 --- a/src/modules/module-mmkbd-evdev.c +++ b/src/modules/module-mmkbd-evdev.c @@ -48,13 +48,15 @@ PA_MODULE_AUTHOR("Lennart Poettering");  PA_MODULE_DESCRIPTION("Multimedia keyboard support via Linux evdev");  PA_MODULE_VERSION(PACKAGE_VERSION);  PA_MODULE_LOAD_ONCE(FALSE); -PA_MODULE_USAGE("device=<evdev device> sink=<sink name>"); +PA_MODULE_USAGE("device=<evdev device> sink=<sink name> volume_limit=<volume limit> volume_step=<volume change step>");  #define DEFAULT_DEVICE "/dev/input/event0"  static const char* const valid_modargs[] = {      "device",      "sink", +    "volume_limit", +    "volume_step",      NULL,  }; @@ -63,10 +65,10 @@ struct userdata {      pa_io_event *io;      char *sink_name;      pa_module *module; +    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; @@ -120,12 +122,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; @@ -160,6 +162,8 @@ int pa__init(pa_module*m) {      struct input_id input_id;      char name[256];      uint8_t evtype_bitmask[EV_MAX/8 + 1]; +    pa_volume_t volume_limit = PA_VOLUME_NORM*3/2; +    pa_volume_t volume_step = PA_VOLUME_NORM/20;      pa_assert(m); @@ -168,12 +172,24 @@ 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;      u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));      u->fd = -1;      u->fd_type = 0; +    u->volume_limit = volume_limit; +    u->volume_step = volume_step;      if ((u->fd = pa_open_cloexec(pa_modargs_get_value(ma, "device", DEFAULT_DEVICE), O_RDONLY, 0)) < 0) {          pa_log("Failed to open evdev device: %s", pa_cstrerror(errno)); | 
