Ticket #654: 0002-lirc-mmkvd-added-module-parameters-volume_limit-volu.patch

File 0002-lirc-mmkvd-added-module-parameters-volume_limit-volu.patch, 6.1 KB (added by matrix47, 3 years ago)
  • src/modules/module-lirc.c

    From 15a8f2fc7e46aa92b37d46673fd90c679a9180b6 Mon Sep 17 00:00:00 2001
    From: Vladimir Kokarev <matrix47@gmail.com>
    Date: Sat, 19 Sep 2009 19:48:43 +0400
    Subject: [PATCH 2/2] 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
    
    Signed-off-by: Vladimir Kokarev <matrix47@gmail.com>
    ---
     src/modules/module-lirc.c        |   25 ++++++++++++++++++++-----
     src/modules/module-mmkbd-evdev.c |   25 ++++++++++++++++++++-----
     2 files changed, 40 insertions(+), 10 deletions(-)
    
    diff --git a/src/modules/module-lirc.c b/src/modules/module-lirc.c
    index d0e902f..59da31f 100644
    a b  
    4545PA_MODULE_DESCRIPTION("LIRC volume control"); 
    4646PA_MODULE_VERSION(PACKAGE_VERSION); 
    4747PA_MODULE_LOAD_ONCE(TRUE); 
    48 PA_MODULE_USAGE("config=<config file> sink=<sink name> appname=<lirc application name>"); 
     48PA_MODULE_USAGE("config=<config file> sink=<sink name> appname=<lirc application name> volume_limit=<volume limit> volume_step=<volume change step>"); 
    4949 
    5050static const char* const valid_modargs[] = { 
    5151    "config", 
    5252    "sink", 
    5353    "appname", 
     54    "volume_limit", 
     55    "volume_step", 
    5456    NULL, 
    5557}; 
    5658 
     
    6163    char *sink_name; 
    6264    pa_module *module; 
    6365    float mute_toggle_save; 
     66    pa_volume_t volume_limit; 
     67    pa_volume_t volume_step; 
    6468}; 
    6569 
    66 #define DELTA (PA_VOLUME_NORM/20) 
    67  
    6870static void io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void*userdata) { 
    6971    struct userdata *u = userdata; 
    7072    char *name = NULL, *code = NULL; 
     
    125127 
    126128                    switch (volchange) { 
    127129                        case UP: 
    128                             pa_cvolume_inc(&cv, DELTA); 
     130                            pa_cvolume_inc_lim(&cv, u->volume_step, u->volume_limit); 
    129131                            pa_sink_set_volume(s, &cv, TRUE, TRUE); 
    130132                            break; 
    131133 
    132134                        case DOWN: 
    133                             pa_cvolume_dec(&cv, DELTA); 
     135                            pa_cvolume_dec(&cv, u->volume_step); 
    134136                            pa_sink_set_volume(s, &cv, TRUE, TRUE); 
    135137                            break; 
    136138 
     
    178180        goto fail; 
    179181    } 
    180182 
     183    pa_volume_t volume_limit = PA_VOLUME_NORM*3/2; 
     184    pa_volume_t volume_step = PA_VOLUME_NORM/20; 
     185    if (pa_modargs_get_value_u32(ma, "volume_limit", &volume_limit) < 0) { 
     186        pa_log("Failed to parse volume limit"); 
     187        goto fail; 
     188    } 
     189    if (pa_modargs_get_value_u32(ma, "volume_step", &volume_step) < 0) { 
     190        pa_log("Failed to parse volume step"); 
     191        goto fail; 
     192    } 
     193 
    181194    m->userdata = u = pa_xnew(struct userdata, 1); 
    182195    u->module = m; 
    183196    u->io = NULL; 
     
    185198    u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL)); 
    186199    u->lirc_fd = -1; 
    187200    u->mute_toggle_save = 0; 
     201    u->volume_limit = volume_limit; 
     202    u->volume_step = volume_step; 
    188203 
    189204    if ((u->lirc_fd = lirc_init((char*) pa_modargs_get_value(ma, "appname", "pulseaudio"), 1)) < 0) { 
    190205        pa_log("lirc_init() failed."); 
  • src/modules/module-mmkbd-evdev.c

    diff --git a/src/modules/module-mmkbd-evdev.c b/src/modules/module-mmkbd-evdev.c
    index 516bf41..6768b52 100644
    a b  
    4848PA_MODULE_DESCRIPTION("Multimedia keyboard support via Linux evdev"); 
    4949PA_MODULE_VERSION(PACKAGE_VERSION); 
    5050PA_MODULE_LOAD_ONCE(FALSE); 
    51 PA_MODULE_USAGE("device=<evdev device> sink=<sink name>"); 
     51PA_MODULE_USAGE("device=<evdev device> sink=<sink name> volume_limit=<volume limit> volume_step=<volume change step>"); 
    5252 
    5353#define DEFAULT_DEVICE "/dev/input/event0" 
    5454 
    5555static const char* const valid_modargs[] = { 
    5656    "device", 
    5757    "sink", 
     58    "volume_limit", 
     59    "volume_step", 
    5860    NULL, 
    5961}; 
    6062 
     
    6365    pa_io_event *io; 
    6466    char *sink_name; 
    6567    pa_module *module; 
     68    pa_volume_t volume_limit; 
     69    pa_volume_t volume_step; 
    6670}; 
    6771 
    68 #define DELTA (PA_VOLUME_NORM/20) 
    69  
    7072static void io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void*userdata) { 
    7173    struct userdata *u = userdata; 
    7274 
     
    120122 
    121123                    switch (volchange) { 
    122124                        case UP: 
    123                             pa_cvolume_inc(&cv, DELTA); 
     125                            pa_cvolume_inc_lim(&cv, u->volume_step, u->volume_limit); 
    124126                            pa_sink_set_volume(s, &cv, TRUE, TRUE); 
    125127                            break; 
    126128 
    127129                        case DOWN: 
    128                             pa_cvolume_dec(&cv, DELTA); 
     130                            pa_cvolume_dec(&cv, u->volume_step); 
    129131                            pa_sink_set_volume(s, &cv, TRUE, TRUE); 
    130132                            break; 
    131133 
     
    168170        goto fail; 
    169171    } 
    170172 
     173    pa_volume_t volume_limit = PA_VOLUME_NORM*3/2; 
     174    pa_volume_t volume_step = PA_VOLUME_NORM/20; 
     175    if (pa_modargs_get_value_u32(ma, "volume_limit", &volume_limit) < 0) { 
     176        pa_log("Failed to parse volume limit"); 
     177        goto fail; 
     178    } 
     179    if (pa_modargs_get_value_u32(ma, "volume_step", &volume_step) < 0) { 
     180        pa_log("Failed to parse volume step"); 
     181        goto fail; 
     182    } 
     183 
    171184    m->userdata = u = pa_xnew(struct userdata, 1); 
    172185    u->module = m; 
    173186    u->io = NULL; 
    174187    u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL)); 
    175188    u->fd = -1; 
    176189    u->fd_type = 0; 
     190    u->volume_limit = volume_limit; 
     191    u->volume_step = volume_step; 
    177192 
    178193    if ((u->fd = open(pa_modargs_get_value(ma, "device", DEFAULT_DEVICE), O_RDONLY|O_NOCTTY)) < 0) { 
    179194        pa_log("Failed to open evdev device: %s", pa_cstrerror(errno));