GdkFilterReturn filter(GdkXEvent *xevent, GdkEvent *event, gpointer data) { XEvent *e = (XEvent *)xevent; pa_context *c = (pa_context *)data; if (pa_context_get_state(c) != PA_CONTEXT_READY) return GDK_FILTER_CONTINUE; switch (e->type) { case KeyPress: if (e->xkey.keycode == keycodes[RAISE_VOLUME]) change_volume(c, +VOLUME_INCREMENT); else if (e->xkey.keycode == keycodes[LOWER_VOLUME]) change_volume(c, -VOLUME_INCREMENT); else if (e->xkey.keycode == keycodes[MUTE]) toggle_mute(c); else if (e->xkey.keycode == keycodes[MIC_MUTE]) toggle_mic_mute(c); break; default: break; } return GDK_FILTER_CONTINUE; }
void set_volume(void *data) { unsigned char lrvl[4]; MIX_CHANNEL *dev = (MIX_CHANNEL *) data; if (mute_status) { mute_status = 0; toggle_mute(&channels[0]); Epplet_gadget_data_changed(b_mute); } lrvl[0] = (20 - (unsigned char)dev->value) * 5; lrvl[1] = lrvl[0]; lrvl[2] = lrvl[3] = 0; ioctl(fd_mixer, MIXER_WRITE(dev->id), lrvl); }
static int snd_bcm2835_ctl_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct bcm2835_chip *chip = snd_kcontrol_chip(kcontrol); int changed = 0; if (kcontrol->private_value == PCM_PLAYBACK_VOLUME) { audio_info("Volume change attempted.. volume = %d new_volume = %d\n", chip->volume, (int)ucontrol->value.integer.value[0]); if (chip->mute == CTRL_VOL_MUTE) { /* changed = toggle_mute(chip, CTRL_VOL_UNMUTE); */ return 1; /* should return 0 to signify no change but the mixer takes this as the opposite sign (no idea why) */ } if (changed || (ucontrol->value.integer.value[0] != chip2alsa(chip->volume))) { chip->volume = alsa2chip(ucontrol->value.integer.value[0]); changed = 1; } } else if (kcontrol->private_value == PCM_PLAYBACK_MUTE) { /* Now implemented */ audio_info(" Mute attempted\n"); changed = toggle_mute(chip, ucontrol->value.integer.value[0]); } else if (kcontrol->private_value == PCM_PLAYBACK_DEVICE) { if (ucontrol->value.integer.value[0] != chip->dest) { chip->dest = ucontrol->value.integer.value[0]; changed = 1; } } if (changed) { if (bcm2835_audio_set_ctls(chip)) printk(KERN_ERR "Failed to set ALSA controls..\n"); } return changed; }
static void on_handle_key(int key) { switch (key) { case 27: case KEY_CANCEL: case KEY_F(10): mixer_widget.close(); break; case KEY_F(1): case KEY_HELP: case 'H': case 'h': case '?': show_help(); break; case KEY_F(2): case '/': create_proc_files_list(); break; case KEY_F(3): set_view_mode(VIEW_MODE_PLAYBACK); break; case KEY_F(4): set_view_mode(VIEW_MODE_CAPTURE); break; case KEY_F(5): set_view_mode(VIEW_MODE_ALL); break; case '\t': set_view_mode((enum view_mode)((view_mode + 1) % VIEW_MODE_COUNT)); break; case KEY_F(6): case 'S': case 's': create_card_select_list(); break; case KEY_REFRESH: case 12: case 'L': case 'l': clearok(mixer_widget.window, TRUE); display_controls(); break; case KEY_LEFT: case 'P': case 'p': if (focus_control_index > 0) { --focus_control_index; refocus_control(); } break; case KEY_RIGHT: case 'N': case 'n': if (focus_control_index < controls_count - 1) { ++focus_control_index; refocus_control(); } break; case KEY_PPAGE: change_control_relative(5, LEFT | RIGHT); break; case KEY_NPAGE: change_control_relative(-5, LEFT | RIGHT); break; #if 0 case KEY_BEG: case KEY_HOME: change_control_to_percent(100, LEFT | RIGHT); break; #endif case KEY_LL: case KEY_END: change_control_to_percent(0, LEFT | RIGHT); break; case KEY_UP: case '+': case 'K': case 'k': case 'W': case 'w': change_control_relative(1, LEFT | RIGHT); break; case KEY_DOWN: case '-': case 'J': case 'j': case 'X': case 'x': change_control_relative(-1, LEFT | RIGHT); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': change_control_to_percent((key - '0') * 10, LEFT | RIGHT); break; case 'Q': case 'q': change_control_relative(1, LEFT); break; case 'Y': case 'y': case 'Z': case 'z': change_control_relative(-1, LEFT); break; case 'E': case 'e': change_control_relative(1, RIGHT); break; case 'C': case 'c': change_control_relative(-1, RIGHT); break; case 'M': case 'm': toggle_mute(LEFT | RIGHT); break; case 'B': case 'b': case '=': balance_volumes(); break; case '<': case ',': toggle_mute(LEFT); break; case '>': case '.': toggle_mute(RIGHT); break; case ' ': toggle_capture(LEFT | RIGHT); break; case KEY_IC: case ';': toggle_capture(LEFT); break; case KEY_DC: case '\'': toggle_capture(RIGHT); break; } }