|
Packit |
427e91 |
/*****************************************************************************
|
|
Packit |
427e91 |
envy24control.c - Env24 chipset (ICE1712) control utility
|
|
Packit |
427e91 |
Copyright (C) 2000 by Jaroslav Kysela <perex@perex.cz>
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
(2003/03/22) Changed to hbox/vbox layout.
|
|
Packit |
427e91 |
Copyright (C) 2003 by Søren Wedel Nielsen
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
(16.12.2005) Re-worked user interface -digital mixer display permanently
|
|
Packit |
427e91 |
visible; pcms split to another page; controls re-arranged and all pages
|
|
Packit |
427e91 |
scrollable for min window size and greater flexibility; pop-up menu enabled.
|
|
Packit |
427e91 |
Changes to levelmeters.c to prevent invalid redraws.
|
|
Packit |
427e91 |
New options added: 'w' to set initial window pixel width and 't' for tall equal mixer height style.
|
|
Packit |
427e91 |
Copyright (C) 2005 by Alan Horstmann
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
This program is free software; you can redistribute it and/or
|
|
Packit |
427e91 |
modify it under the terms of the GNU General Public License
|
|
Packit |
427e91 |
as published by the Free Software Foundation; either version 2
|
|
Packit |
427e91 |
of the License, or (at your option) any later version.
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
This program is distributed in the hope that it will be useful,
|
|
Packit |
427e91 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
427e91 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
427e91 |
GNU General Public License for more details.
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
You should have received a copy of the GNU General Public License
|
|
Packit |
427e91 |
along with this program; if not, write to the Free Software
|
|
Packit |
427e91 |
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit |
427e91 |
******************************************************************************/
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
#include "envy24control.h"
|
|
Packit |
427e91 |
#include "midi.h"
|
|
Packit |
427e91 |
#include "config.h"
|
|
Packit |
427e91 |
#define _GNU_SOURCE
|
|
Packit |
427e91 |
#include <getopt.h>
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
int input_channels, output_channels, pcm_output_channels, spdif_channels, view_spdif_playback, card_number;
|
|
Packit |
427e91 |
int card_is_dmx6fire = FALSE, tall_equal_mixer_ht = 0;
|
|
Packit |
427e91 |
char *profiles_file_name, *default_profile;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
ice1712_eeprom_t card_eeprom;
|
|
Packit |
427e91 |
snd_ctl_t *ctl;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *window;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *mixer_mix_drawing;
|
|
Packit |
427e91 |
GtkWidget *mixer_clear_peaks_button;
|
|
Packit |
427e91 |
GtkWidget *mixer_drawing[20];
|
|
Packit |
427e91 |
GtkObject *mixer_adj[20][2];
|
|
Packit |
427e91 |
GtkWidget *mixer_vscale[20][2];
|
|
Packit |
427e91 |
GtkWidget *mixer_mute_toggle[20][2];
|
|
Packit |
427e91 |
GtkWidget *mixer_stereo_toggle[20];
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *router_radio[10][12];
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
//GtkWidget *hw_master_clock_xtal_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_master_clock_xtal_22050;
|
|
Packit |
427e91 |
GtkWidget *hw_master_clock_xtal_32000;
|
|
Packit |
427e91 |
GtkWidget *hw_master_clock_xtal_44100;
|
|
Packit |
427e91 |
GtkWidget *hw_master_clock_xtal_48000;
|
|
Packit |
427e91 |
GtkWidget *hw_master_clock_xtal_88200;
|
|
Packit |
427e91 |
GtkWidget *hw_master_clock_xtal_96000;
|
|
Packit |
427e91 |
GtkWidget *hw_master_clock_spdif_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_master_clock_word_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_master_clock_status_label;
|
|
Packit |
427e91 |
GtkWidget *hw_master_clock_actual_rate_label;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_clock_state_label;
|
|
Packit |
427e91 |
GtkWidget *hw_clock_state_locked;
|
|
Packit |
427e91 |
GtkWidget *hw_clock_state_reset;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_rate_locking_check;
|
|
Packit |
427e91 |
GtkWidget *hw_rate_reset_check;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkObject *hw_volume_change_adj;
|
|
Packit |
427e91 |
GtkWidget *hw_volume_change_spin;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_spdif_profi_nonaudio_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_spdif_profi_audio_radio;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_profi_stream_stereo_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_profi_stream_notid_radio;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_profi_emphasis_none_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_profi_emphasis_5015_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_profi_emphasis_ccitt_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_profi_emphasis_notid_radio;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_consumer_copyright_on_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_consumer_copyright_off_radio;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_consumer_copy_1st_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_consumer_copy_original_radio;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_consumer_emphasis_none_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_consumer_emphasis_5015_radio;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_consumer_category_dat_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_consumer_category_pcm_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_consumer_category_cd_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_consumer_category_general_radio;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_spdif_professional_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_spdif_consumer_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_spdif_output_notebook;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_spdif_input_coaxial_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_spdif_input_optical_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_spdif_switch_off_radio;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *input_interface_internal;
|
|
Packit |
427e91 |
GtkWidget *input_interface_front_input;
|
|
Packit |
427e91 |
GtkWidget *input_interface_rear_input;
|
|
Packit |
427e91 |
GtkWidget *input_interface_wavetable;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *hw_phono_input_on_radio;
|
|
Packit |
427e91 |
GtkWidget *hw_phono_input_off_radio;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkObject *av_dac_volume_adj[10];
|
|
Packit |
427e91 |
GtkObject *av_adc_volume_adj[10];
|
|
Packit |
427e91 |
GtkObject *av_ipga_volume_adj[10];
|
|
Packit |
427e91 |
GtkLabel *av_dac_volume_label[10];
|
|
Packit |
427e91 |
GtkLabel *av_adc_volume_label[10];
|
|
Packit |
427e91 |
GtkLabel *av_ipga_volume_label[10];
|
|
Packit |
427e91 |
GtkWidget *av_dac_sense_radio[10][4];
|
|
Packit |
427e91 |
GtkWidget *av_adc_sense_radio[10][4];
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
struct profile_button {
|
|
Packit |
427e91 |
GtkWidget *toggle_button;
|
|
Packit |
427e91 |
GtkWidget *entry;
|
|
Packit |
427e91 |
} profiles_toggle_buttons[MAX_PROFILES];
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *active_button = NULL;
|
|
Packit |
427e91 |
GtkObject *card_number_adj;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_mixer_frame(GtkWidget *box, int stream)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *vbox1;
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkObject *adj;
|
|
Packit |
427e91 |
GtkWidget *vscale;
|
|
Packit |
427e91 |
GtkWidget *drawing;
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *toggle;
|
|
Packit |
427e91 |
char str[64], drawname[32];
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (stream <= MAX_PCM_OUTPUT_CHANNELS) {
|
|
Packit |
427e91 |
sprintf(str, "PCM Out %i", stream);
|
|
Packit |
427e91 |
} else if (stream <= (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS)) {
|
|
Packit |
427e91 |
sprintf(str, "SPDIF Out %s", stream & 1 ? "L": "R");
|
|
Packit |
427e91 |
} else if (card_is_dmx6fire) {
|
|
Packit |
427e91 |
switch (stream) {
|
|
Packit |
427e91 |
case 11: sprintf(str, "CD In L");break;
|
|
Packit |
427e91 |
case 12: sprintf(str, "CD In R");break;
|
|
Packit |
427e91 |
case 13: sprintf(str, "Line In L");break;
|
|
Packit |
427e91 |
case 14: sprintf(str, "Line In R");break;
|
|
Packit |
427e91 |
case 15: sprintf(str, "Phono/Mic L");break;
|
|
Packit |
427e91 |
case 16: sprintf(str, "Phono/Mic R");break;
|
|
Packit |
427e91 |
case 19: sprintf(str, "Digital In L");break;
|
|
Packit |
427e91 |
case 20: sprintf(str, "Digital In R");break;
|
|
Packit |
427e91 |
default : sprintf(str, "????");break;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
} else if (stream <= (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS)) {
|
|
Packit |
427e91 |
sprintf(str, "H/W In %i", stream - (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS));
|
|
Packit |
427e91 |
} else if (stream <= (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS + MAX_SPDIF_CHANNELS)) {
|
|
Packit |
427e91 |
sprintf(str, "SPDIF In %s", stream & 1 ? "L": "R");
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
strcpy(str, "???");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new(str);
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(frame), 2);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 6);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 2);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 2);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
adj = gtk_adjustment_new(96, 0, 96, 1, 16, 0);
|
|
Packit |
427e91 |
mixer_adj[stream-1][0] = adj;
|
|
Packit |
427e91 |
vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj));
|
|
Packit |
427e91 |
mixer_vscale[stream-1][0] = vscale;
|
|
Packit |
427e91 |
gtk_widget_show(vscale);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), vscale, TRUE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM);
|
|
Packit |
427e91 |
gtk_scale_set_digits(GTK_SCALE(vscale), 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(mixer_adjust),
|
|
Packit |
427e91 |
(gpointer)(long)((stream << 16) + 0));
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox1 = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox1);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), vbox1, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
drawing = gtk_drawing_area_new();
|
|
Packit |
427e91 |
mixer_drawing[stream-1] = drawing;
|
|
Packit |
427e91 |
sprintf(drawname, "Mixer%i", stream);
|
|
Packit |
427e91 |
gtk_widget_set_name(drawing, drawname);
|
|
Packit |
427e91 |
gtk_widget_show(drawing);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(drawing), "expose_event",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(level_meters_expose_event), NULL);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(drawing), "configure_event",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(level_meters_configure_event), NULL);
|
|
Packit |
427e91 |
gtk_widget_set_events(drawing, GDK_EXPOSURE_MASK);
|
|
Packit |
427e91 |
gtk_widget_set_usize(drawing, 36, (60 * tall_equal_mixer_ht + 204));
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox1), drawing, FALSE, FALSE, 1);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox1), label, TRUE, TRUE, 2);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
adj = gtk_adjustment_new(96, 0, 96, 1, 16, 0);
|
|
Packit |
427e91 |
mixer_adj[stream-1][1] = adj;
|
|
Packit |
427e91 |
vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj));
|
|
Packit |
427e91 |
mixer_vscale[stream-1][1] = vscale;
|
|
Packit |
427e91 |
gtk_widget_show(vscale);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), vscale, TRUE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM);
|
|
Packit |
427e91 |
gtk_scale_set_digits(GTK_SCALE(vscale), 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(mixer_adjust),
|
|
Packit |
427e91 |
(gpointer)(long)((stream << 16) + 1));
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(TRUE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, FALSE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Left");
|
|
Packit |
427e91 |
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Right");
|
|
Packit |
427e91 |
gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
toggle = gtk_toggle_button_new_with_label("L/R Gang");
|
|
Packit |
427e91 |
mixer_stereo_toggle[stream-1] = toggle;
|
|
Packit |
427e91 |
gtk_widget_show(toggle);
|
|
Packit |
427e91 |
gtk_box_pack_end(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
/* gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); */
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(config_set_stereo), (gpointer)stream-1);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(TRUE, 6);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
toggle = gtk_toggle_button_new_with_label("Mute");
|
|
Packit |
427e91 |
mixer_mute_toggle[stream-1][0] = toggle;
|
|
Packit |
427e91 |
gtk_widget_show(toggle);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(mixer_toggled_mute),
|
|
Packit |
427e91 |
(gpointer)(long)((stream << 16) + 0));
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
toggle = gtk_toggle_button_new_with_label("Mute");
|
|
Packit |
427e91 |
mixer_mute_toggle[stream-1][1] = toggle;
|
|
Packit |
427e91 |
gtk_widget_show(toggle);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(toggle), "toggled",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(mixer_toggled_mute),
|
|
Packit |
427e91 |
(gpointer)(long)((stream << 16) + 1));
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_inputs_mixer(GtkWidget *main, GtkWidget *notebook, int page)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *scrolledwindow;
|
|
Packit |
427e91 |
GtkWidget *viewport;
|
|
Packit |
427e91 |
int stream;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 3);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(notebook), hbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Monitor Inputs");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
|
|
Packit |
427e91 |
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),page),
|
|
Packit |
427e91 |
label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* build scrolling area */
|
|
Packit |
427e91 |
scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(scrolledwindow);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
|
|
Packit |
427e91 |
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
viewport = gtk_viewport_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(viewport);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(viewport), vbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
for(stream = (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + 1); \
|
|
Packit |
427e91 |
stream <= input_channels + (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS); stream ++) {
|
|
Packit |
427e91 |
if (mixer_stream_is_active(stream))
|
|
Packit |
427e91 |
create_mixer_frame(hbox, stream);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
for(stream = (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS + 1); \
|
|
Packit |
427e91 |
stream <= spdif_channels + (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS); stream ++) {
|
|
Packit |
427e91 |
if (mixer_stream_is_active(stream))
|
|
Packit |
427e91 |
create_mixer_frame(hbox, stream);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_pcms_mixer(GtkWidget *main, GtkWidget *notebook, int page)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *scrolledwindow;
|
|
Packit |
427e91 |
GtkWidget *viewport;
|
|
Packit |
427e91 |
int stream;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 3);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(notebook), hbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Monitor PCMs");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
|
|
Packit |
427e91 |
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),page),
|
|
Packit |
427e91 |
label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* build scrolling area */
|
|
Packit |
427e91 |
scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(scrolledwindow);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
|
|
Packit |
427e91 |
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
viewport = gtk_viewport_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(viewport);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(viewport), vbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
for(stream = 1; stream <= pcm_output_channels; stream ++) {
|
|
Packit |
427e91 |
if (mixer_stream_is_active(stream))
|
|
Packit |
427e91 |
create_mixer_frame(hbox, stream);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
for(stream = (MAX_PCM_OUTPUT_CHANNELS + 1); \
|
|
Packit |
427e91 |
stream <= spdif_channels + MAX_PCM_OUTPUT_CHANNELS; stream ++) {
|
|
Packit |
427e91 |
if (mixer_stream_is_active(stream) && view_spdif_playback)
|
|
Packit |
427e91 |
create_mixer_frame(hbox, stream);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_router_frame(GtkWidget *box, int stream, int pos)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *hseparator;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
char str[64], str1[64];
|
|
Packit |
427e91 |
int idx;
|
|
Packit |
427e91 |
static char *table[10] = {
|
|
Packit |
427e91 |
"S/PDIF In L",
|
|
Packit |
427e91 |
"S/PDIF In R",
|
|
Packit |
427e91 |
"H/W In 1",
|
|
Packit |
427e91 |
"H/W In 2",
|
|
Packit |
427e91 |
"H/W In 3",
|
|
Packit |
427e91 |
"H/W In 4",
|
|
Packit |
427e91 |
"H/W In 5",
|
|
Packit |
427e91 |
"H/W In 6",
|
|
Packit |
427e91 |
"H/W In 7",
|
|
Packit |
427e91 |
"H/W In 8"
|
|
Packit |
427e91 |
};
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (card_is_dmx6fire)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
table[0] = "Digital In L";
|
|
Packit |
427e91 |
table[1] = "Digital In R";
|
|
Packit |
427e91 |
table[2] = "CD In L";
|
|
Packit |
427e91 |
table[3] = "CD In R";
|
|
Packit |
427e91 |
table[4] = "Line In L";
|
|
Packit |
427e91 |
table[5] = "Line In R";
|
|
Packit |
427e91 |
table[6] = "Phono/Mic L";
|
|
Packit |
427e91 |
table[7] = "Phono/Mic R";
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (stream <= MAX_OUTPUT_CHANNELS) {
|
|
Packit |
427e91 |
sprintf(str, "H/W Out %i (%s)", stream, stream & 1 ? "L" : "R");
|
|
Packit |
427e91 |
} else if (stream == (MAX_OUTPUT_CHANNELS + 1)) {
|
|
Packit |
427e91 |
if (card_is_dmx6fire) {
|
|
Packit |
427e91 |
strcpy(str, "Digital Out (L)");
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
strcpy(str, "S/PDIF Out (L)");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
} else if (stream == (MAX_OUTPUT_CHANNELS + 2)) {
|
|
Packit |
427e91 |
if (card_is_dmx6fire) {
|
|
Packit |
427e91 |
strcpy(str, "Digital Out (R)");
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
strcpy(str, "S/PDIF Out (R)");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
strcpy(str, "???");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
if ((stream == MAX_PCM_OUTPUT_CHANNELS + 1) || (stream == MAX_PCM_OUTPUT_CHANNELS + 2)) {
|
|
Packit |
427e91 |
sprintf(str1, "S/PDIF Out (%s)", stream & 1 ? "L" : "R");
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
sprintf(str1, "PCM Out %i", stream);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new(str);
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start (GTK_BOX(box), frame, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(TRUE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, str1);
|
|
Packit |
427e91 |
router_radio[stream-1][0] = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)patchbay_toggled,
|
|
Packit |
427e91 |
(gpointer)(long)((stream << 16) + 0));
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hseparator = gtk_hseparator_new();
|
|
Packit |
427e91 |
gtk_widget_show(hseparator);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* the digital mixer can only be routed to HW1/2 or SPDIF1/2 */
|
|
Packit |
427e91 |
if( (stream <= 2) /* hw1/2 */ ||
|
|
Packit |
427e91 |
((stream > MAX_OUTPUT_CHANNELS) && (stream <= MAX_OUTPUT_CHANNELS + 2)) /* spdif1/2 */
|
|
Packit |
427e91 |
) {
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, stream & 1 ? "Digital Mix L" : "Digital Mix R");
|
|
Packit |
427e91 |
router_radio[stream-1][1] = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox),
|
|
Packit |
427e91 |
radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)patchbay_toggled,
|
|
Packit |
427e91 |
(gpointer)(long)((stream << 16) + 1));
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
else {
|
|
Packit |
427e91 |
label = gtk_label_new("");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hseparator = gtk_hseparator_new();
|
|
Packit |
427e91 |
gtk_widget_show(hseparator);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
for(idx = 2 - spdif_channels; idx < input_channels + 2; idx++) {
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, table[idx]);
|
|
Packit |
427e91 |
router_radio[stream-1][2+idx] = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox),
|
|
Packit |
427e91 |
radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)patchbay_toggled,
|
|
Packit |
427e91 |
(gpointer)(long)((stream << 16) + 2 + idx));
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_router(GtkWidget *main, GtkWidget *notebook, int page)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *scrolledwindow;
|
|
Packit |
427e91 |
GtkWidget *viewport;
|
|
Packit |
427e91 |
int stream, pos;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(scrolledwindow);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(notebook), scrolledwindow);
|
|
Packit |
427e91 |
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
|
|
Packit |
427e91 |
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Patchbay / Router");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
|
|
Packit |
427e91 |
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page),
|
|
Packit |
427e91 |
label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
viewport = gtk_viewport_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(viewport);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(viewport), hbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
pos = 0;
|
|
Packit |
427e91 |
for (stream = 1; stream <= output_channels; stream++) {
|
|
Packit |
427e91 |
if (patchbay_stream_is_active(stream))
|
|
Packit |
427e91 |
create_router_frame(hbox, stream, pos++);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
for (stream = MAX_OUTPUT_CHANNELS + 1; stream <= MAX_OUTPUT_CHANNELS + spdif_channels; stream++) {
|
|
Packit |
427e91 |
if (patchbay_stream_is_active(stream))
|
|
Packit |
427e91 |
create_router_frame(hbox, stream, pos++);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_master_clock(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Master Clock");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 4);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Int 22050");
|
|
Packit |
427e91 |
hw_master_clock_xtal_22050 = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)internal_clock_toggled,
|
|
Packit |
427e91 |
(gpointer)"22050");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Int 32000");
|
|
Packit |
427e91 |
hw_master_clock_xtal_32000 = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)internal_clock_toggled,
|
|
Packit |
427e91 |
(gpointer)"32000");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Int 44100");
|
|
Packit |
427e91 |
hw_master_clock_xtal_44100 = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)internal_clock_toggled,
|
|
Packit |
427e91 |
(gpointer)"44100");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Int 48000");
|
|
Packit |
427e91 |
hw_master_clock_xtal_48000 = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)internal_clock_toggled,
|
|
Packit |
427e91 |
(gpointer)"48000");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Int 88200");
|
|
Packit |
427e91 |
hw_master_clock_xtal_88200 = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)internal_clock_toggled,
|
|
Packit |
427e91 |
(gpointer)"88200");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Int 96000");
|
|
Packit |
427e91 |
hw_master_clock_xtal_96000 = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)internal_clock_toggled,
|
|
Packit |
427e91 |
(gpointer)"96000");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "S/PDIF In");
|
|
Packit |
427e91 |
hw_master_clock_spdif_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)internal_clock_toggled,
|
|
Packit |
427e91 |
(gpointer)"SPDIF");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (card_eeprom.subvendor != ICE1712_SUBDEVICE_DELTA1010 &&
|
|
Packit |
427e91 |
card_eeprom.subvendor != ICE1712_SUBDEVICE_DELTA1010LT)
|
|
Packit |
427e91 |
return;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Word Clock");
|
|
Packit |
427e91 |
hw_master_clock_word_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)internal_clock_toggled,
|
|
Packit |
427e91 |
(gpointer)"WordClock");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Locked");
|
|
Packit |
427e91 |
hw_master_clock_status_label = label;
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_rate_state(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *check;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Rate State");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(TRUE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), hbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
check = gtk_check_button_new_with_label("Locked");
|
|
Packit |
427e91 |
hw_rate_locking_check = check;
|
|
Packit |
427e91 |
gtk_widget_show(check);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(check), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)rate_locking_toggled,
|
|
Packit |
427e91 |
(gpointer)"locked");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
check = gtk_check_button_new_with_label("Reset");
|
|
Packit |
427e91 |
hw_rate_reset_check = check;
|
|
Packit |
427e91 |
gtk_widget_show(check);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(check), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)rate_reset_toggled,
|
|
Packit |
427e91 |
(gpointer)"reset");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_actual_rate(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Actual Rate");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("");
|
|
Packit |
427e91 |
hw_master_clock_actual_rate_label = label;
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), label);
|
|
Packit |
427e91 |
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
|
|
Packit |
427e91 |
gtk_misc_set_padding(GTK_MISC(label), 6, 6);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_volume_change(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkObject *spinbutton_adj;
|
|
Packit |
427e91 |
GtkWidget *spinbutton;
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Volume Change");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), hbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Rate");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
spinbutton_adj = gtk_adjustment_new(16, 0, 255, 1, 10, 10);
|
|
Packit |
427e91 |
hw_volume_change_adj = spinbutton_adj;
|
|
Packit |
427e91 |
spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(spinbutton_adj), 1, 0);
|
|
Packit |
427e91 |
gtk_widget_show(spinbutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), spinbutton, TRUE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spinbutton), TRUE);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(spinbutton_adj), "value_changed",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(volume_change_rate_adj), NULL);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_output_settings_profi_data(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Data Mode");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Non-audio");
|
|
Packit |
427e91 |
hw_spdif_profi_nonaudio_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)profi_data_toggled,
|
|
Packit |
427e91 |
(gpointer)"Non-audio");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Audio");
|
|
Packit |
427e91 |
hw_spdif_profi_audio_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)profi_data_toggled,
|
|
Packit |
427e91 |
(gpointer)"Audio");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_output_settings_profi_stream(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Stream");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Stereophonic");
|
|
Packit |
427e91 |
hw_profi_stream_stereo_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)profi_stream_toggled,
|
|
Packit |
427e91 |
(gpointer)"Stereo");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Not indicated");
|
|
Packit |
427e91 |
hw_profi_stream_notid_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)profi_stream_toggled,
|
|
Packit |
427e91 |
(gpointer)"NOTID");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_output_settings_profi_emphasis(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Emphasis");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "No emphasis");
|
|
Packit |
427e91 |
hw_profi_emphasis_none_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)profi_emphasis_toggled,
|
|
Packit |
427e91 |
(gpointer)"No");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "50/15us");
|
|
Packit |
427e91 |
hw_profi_emphasis_5015_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)profi_emphasis_toggled,
|
|
Packit |
427e91 |
(gpointer)"5015");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "CCITT J.17");
|
|
Packit |
427e91 |
hw_profi_emphasis_ccitt_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)profi_emphasis_toggled,
|
|
Packit |
427e91 |
(gpointer)"CCITT");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Not indicated");
|
|
Packit |
427e91 |
hw_profi_emphasis_notid_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)profi_emphasis_toggled,
|
|
Packit |
427e91 |
(gpointer)"NOTID");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_output_settings_profi(GtkWidget *notebook, int page)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(notebook), hbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Professional");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
|
|
Packit |
427e91 |
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page),
|
|
Packit |
427e91 |
label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
create_spdif_output_settings_profi_data(vbox);
|
|
Packit |
427e91 |
create_spdif_output_settings_profi_stream(vbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
create_spdif_output_settings_profi_emphasis(vbox);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_output_settings_consumer_copyright(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Copyright");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Copyrighted");
|
|
Packit |
427e91 |
hw_consumer_copyright_on_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)consumer_copyright_toggled,
|
|
Packit |
427e91 |
(gpointer)"Copyright");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Copy permitted");
|
|
Packit |
427e91 |
hw_consumer_copyright_off_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)consumer_copyright_toggled,
|
|
Packit |
427e91 |
(gpointer)"Permitted");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_output_settings_consumer_copy(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Copy");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group,
|
|
Packit |
427e91 |
"1-st generation");
|
|
Packit |
427e91 |
hw_consumer_copy_1st_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)consumer_copy_toggled,
|
|
Packit |
427e91 |
(gpointer)"1st");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Original");
|
|
Packit |
427e91 |
hw_consumer_copy_original_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)consumer_copy_toggled,
|
|
Packit |
427e91 |
(gpointer)"Original");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_output_settings_consumer_emphasis(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Emphasis");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "No emphasis");
|
|
Packit |
427e91 |
hw_consumer_emphasis_none_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)consumer_emphasis_toggled,
|
|
Packit |
427e91 |
(gpointer)"No");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "50/15us");
|
|
Packit |
427e91 |
hw_consumer_emphasis_5015_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)consumer_emphasis_toggled,
|
|
Packit |
427e91 |
(gpointer)"5015");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_output_settings_consumer_category(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Category");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "DAT");
|
|
Packit |
427e91 |
hw_consumer_category_dat_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)consumer_category_toggled,
|
|
Packit |
427e91 |
(gpointer)"DAT");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "PCM encoder");
|
|
Packit |
427e91 |
hw_consumer_category_pcm_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)consumer_category_toggled,
|
|
Packit |
427e91 |
(gpointer)"PCM");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "CD (ICE-908)");
|
|
Packit |
427e91 |
hw_consumer_category_cd_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)consumer_category_toggled,
|
|
Packit |
427e91 |
(gpointer)"CD");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "General");
|
|
Packit |
427e91 |
hw_consumer_category_general_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)consumer_category_toggled,
|
|
Packit |
427e91 |
(gpointer)"General");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_output_settings_consumer(GtkWidget *notebook, int page)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(notebook), hbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Consumer");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
|
|
Packit |
427e91 |
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page),
|
|
Packit |
427e91 |
label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
create_spdif_output_settings_consumer_copyright(vbox);
|
|
Packit |
427e91 |
create_spdif_output_settings_consumer_copy(vbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
create_spdif_output_settings_consumer_emphasis(vbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
create_spdif_output_settings_consumer_category(vbox);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_output_settings(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GtkWidget *notebook;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("S/PDIF Output Settings");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(NULL, "Professional");
|
|
Packit |
427e91 |
hw_spdif_professional_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(radiobutton), 6);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)spdif_output_toggled,
|
|
Packit |
427e91 |
(gpointer)"Professional");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Consumer");
|
|
Packit |
427e91 |
hw_spdif_consumer_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(radiobutton), 6);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)spdif_output_toggled,
|
|
Packit |
427e91 |
(gpointer)"Consumer");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
notebook = gtk_notebook_new();
|
|
Packit |
427e91 |
hw_spdif_output_notebook = notebook;
|
|
Packit |
427e91 |
gtk_widget_show(notebook);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
create_spdif_output_settings_profi(notebook, 0);
|
|
Packit |
427e91 |
create_spdif_output_settings_consumer(notebook, 1);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_spdif_input_select(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
int hide = 1;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if((card_eeprom.subvendor == ICE1712_SUBDEVICE_DELTADIO2496) || (card_is_dmx6fire))
|
|
Packit |
427e91 |
hide = 0;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Digital Input");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Coaxial");
|
|
Packit |
427e91 |
hw_spdif_input_coaxial_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)spdif_input_toggled,
|
|
Packit |
427e91 |
(gpointer)"Coaxial");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Optical");
|
|
Packit |
427e91 |
hw_spdif_input_optical_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)spdif_input_toggled,
|
|
Packit |
427e91 |
(gpointer)"Optical");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Internal CD");
|
|
Packit |
427e91 |
hw_spdif_switch_off_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
if(card_is_dmx6fire)
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)spdif_input_toggled,
|
|
Packit |
427e91 |
(gpointer)"Off");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if(hide)
|
|
Packit |
427e91 |
gtk_widget_hide_all(frame);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_phono_input(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
int hide = 1;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if(card_is_dmx6fire)
|
|
Packit |
427e91 |
hide = 0;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Phono Input Switch");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 7);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Phono");
|
|
Packit |
427e91 |
hw_phono_input_on_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)phono_input_toggled,
|
|
Packit |
427e91 |
(gpointer)"Phono");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Mic");
|
|
Packit |
427e91 |
hw_phono_input_off_radio = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)phono_input_toggled,
|
|
Packit |
427e91 |
(gpointer)"Mic");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if(hide)
|
|
Packit |
427e91 |
gtk_widget_hide_all(frame);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_input_interface(GtkWidget *box)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group = NULL;
|
|
Packit |
427e91 |
int hide = 1;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (card_is_dmx6fire)
|
|
Packit |
427e91 |
hide = 0;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
frame = gtk_frame_new("Line In Selector");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 4);
|
|
Packit |
427e91 |
//gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Internal");
|
|
Packit |
427e91 |
input_interface_internal = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)analog_input_select_toggled,
|
|
Packit |
427e91 |
(gpointer)"Internal");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Front Input");
|
|
Packit |
427e91 |
input_interface_front_input = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)analog_input_select_toggled,
|
|
Packit |
427e91 |
(gpointer)"Front Input");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Rear Input");
|
|
Packit |
427e91 |
input_interface_rear_input = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)analog_input_select_toggled,
|
|
Packit |
427e91 |
(gpointer)"Rear Input");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group, "Wavetable");
|
|
Packit |
427e91 |
input_interface_wavetable = radiobutton;
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)analog_input_select_toggled,
|
|
Packit |
427e91 |
(gpointer)"Wave Table");
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if(hide)
|
|
Packit |
427e91 |
gtk_widget_hide_all(frame);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_hardware(GtkWidget *main, GtkWidget *notebook, int page)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *hbox1;
|
|
Packit |
427e91 |
GtkWidget *hbox2;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *vbox1;
|
|
Packit |
427e91 |
GtkWidget *scrolledwindow;
|
|
Packit |
427e91 |
GtkWidget *viewport;
|
|
Packit |
427e91 |
GtkWidget *hseparator;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(notebook), hbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Hardware Settings");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
|
|
Packit |
427e91 |
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page),
|
|
Packit |
427e91 |
label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Build scrolling area */
|
|
Packit |
427e91 |
scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(scrolledwindow);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
|
|
Packit |
427e91 |
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
viewport = gtk_viewport_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(viewport);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Outer box */
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(viewport), hbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Create boxes for controls */
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox1 = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox1);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hseparator = gtk_hseparator_new();
|
|
Packit |
427e91 |
gtk_widget_show(hseparator);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 2);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox2 = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox2);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
create_master_clock(hbox1);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox1 = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox1);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox1), vbox1, FALSE, FALSE, 20);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
create_rate_state(vbox1);
|
|
Packit |
427e91 |
create_actual_rate(vbox1);
|
|
Packit |
427e91 |
create_volume_change(vbox1);
|
|
Packit |
427e91 |
create_input_interface(hbox2);
|
|
Packit |
427e91 |
create_phono_input(hbox2);
|
|
Packit |
427e91 |
create_spdif_input_select(hbox2);
|
|
Packit |
427e91 |
create_spdif_output_settings(hbox);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_about(GtkWidget *main, GtkWidget *notebook, int page)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *scrolledwindow;
|
|
Packit |
427e91 |
GtkWidget *viewport;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(notebook), hbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("About");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
|
|
Packit |
427e91 |
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page),
|
|
Packit |
427e91 |
label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* build scrolling area */
|
|
Packit |
427e91 |
scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(scrolledwindow);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
|
|
Packit |
427e91 |
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
viewport = gtk_viewport_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(viewport);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(viewport), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Create text as labels */
|
|
Packit |
427e91 |
label = gtk_label_new("");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* create first line */
|
|
Packit |
427e91 |
label = gtk_label_new("Envy24 Control Utility " VERSION);
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* create second line */
|
|
Packit |
427e91 |
label = gtk_label_new("A GTK Tool for Envy24 PCI Audio Chip");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* create third line */
|
|
Packit |
427e91 |
label = gtk_label_new("Copyright(c) 2000 by Jaroslav Kysela <perex@perex.cz>");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 6);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkObject *adj;
|
|
Packit |
427e91 |
GtkWidget *vscale;
|
|
Packit |
427e91 |
GtkWidget *radiobutton;
|
|
Packit |
427e91 |
GSList *group;
|
|
Packit |
427e91 |
GtkWidget *scrolledwindow;
|
|
Packit |
427e91 |
GtkWidget *viewport;
|
|
Packit |
427e91 |
int i, j;
|
|
Packit |
427e91 |
static char* dmx6fire_inputs[6] = {
|
|
Packit |
427e91 |
"CD In (L)",
|
|
Packit |
427e91 |
"CD In (R)",
|
|
Packit |
427e91 |
"Line (L)",
|
|
Packit |
427e91 |
"Line (R)",
|
|
Packit |
427e91 |
"Phono (L)",
|
|
Packit |
427e91 |
"Phono (R)"
|
|
Packit |
427e91 |
};
|
|
Packit |
427e91 |
static char* dmx6fire_outputs[6] = {
|
|
Packit |
427e91 |
"Front (L)",
|
|
Packit |
427e91 |
"Front (R)",
|
|
Packit |
427e91 |
"Rear (L)",
|
|
Packit |
427e91 |
"Rear (R)",
|
|
Packit |
427e91 |
"Centre",
|
|
Packit |
427e91 |
"LFE"
|
|
Packit |
427e91 |
};
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(scrolledwindow);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(notebook), scrolledwindow);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Analog Volume");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
|
|
Packit |
427e91 |
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page),
|
|
Packit |
427e91 |
label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
|
|
Packit |
427e91 |
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
|
Packit |
427e91 |
viewport = gtk_viewport_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(viewport);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(viewport), hbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* create DAC */
|
|
Packit |
427e91 |
for(i = 0; i < envy_dac_volumes(); i++) {
|
|
Packit |
427e91 |
char name[32];
|
|
Packit |
427e91 |
sprintf(name, "DAC %d", i);
|
|
Packit |
427e91 |
frame = gtk_frame_new(name);
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
//gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Add friendly labels for DMX 6Fires */
|
|
Packit |
427e91 |
if(card_is_dmx6fire && (i < 6)){
|
|
Packit |
427e91 |
label = gtk_label_new(dmx6fire_outputs[i]);
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
adj = gtk_adjustment_new(0, -(envy_dac_max()), 0, 1, 16, 0);
|
|
Packit |
427e91 |
av_dac_volume_adj[i] = adj;
|
|
Packit |
427e91 |
vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj));
|
|
Packit |
427e91 |
gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE);
|
|
Packit |
427e91 |
gtk_widget_show(vscale);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6);
|
|
Packit |
427e91 |
gtk_scale_set_digits(GTK_SCALE(vscale), 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(dac_volume_adjust),
|
|
Packit |
427e91 |
(gpointer)(long)(i));
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("000");
|
|
Packit |
427e91 |
av_dac_volume_label[i] =(GtkLabel *)label;
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (i >= envy_dac_senses())
|
|
Packit |
427e91 |
continue;
|
|
Packit |
427e91 |
group = NULL;
|
|
Packit |
427e91 |
for (j = 0; j < envy_dac_sense_items(); j++) {
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group,
|
|
Packit |
427e91 |
envy_dac_sense_enum_name(j));
|
|
Packit |
427e91 |
av_dac_sense_radio[i][j] = radiobutton;
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)dac_sense_toggled,
|
|
Packit |
427e91 |
(gpointer)(long)((i << 8) + j));
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox),
|
|
Packit |
427e91 |
radiobutton, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* create ADC */
|
|
Packit |
427e91 |
for (i = 0; i < envy_adc_volumes(); i++) {
|
|
Packit |
427e91 |
char name[32];
|
|
Packit |
427e91 |
sprintf(name, "ADC %d", i);
|
|
Packit |
427e91 |
frame = gtk_frame_new(name);
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
//gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Add friendly labels for DMX 6Fires */
|
|
Packit |
427e91 |
if(card_is_dmx6fire && (i < 6)){
|
|
Packit |
427e91 |
label = gtk_label_new(dmx6fire_inputs[i]);
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
adj = gtk_adjustment_new(0, -(envy_adc_max()), 0, 1, 16, 0);
|
|
Packit |
427e91 |
av_adc_volume_adj[i] = adj;
|
|
Packit |
427e91 |
vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj));
|
|
Packit |
427e91 |
gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE);
|
|
Packit |
427e91 |
gtk_widget_show(vscale);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6);
|
|
Packit |
427e91 |
gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM);
|
|
Packit |
427e91 |
gtk_scale_set_digits(GTK_SCALE(vscale), 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(adc_volume_adjust),
|
|
Packit |
427e91 |
(gpointer)(long)(i));
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("000");
|
|
Packit |
427e91 |
av_adc_volume_label[i] =(GtkLabel *)label;
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (i >= envy_adc_senses())
|
|
Packit |
427e91 |
continue;
|
|
Packit |
427e91 |
group = NULL;
|
|
Packit |
427e91 |
for (j = 0; j < envy_adc_sense_items(); j++) {
|
|
Packit |
427e91 |
radiobutton = gtk_radio_button_new_with_label(group,
|
|
Packit |
427e91 |
envy_adc_sense_enum_name(j));
|
|
Packit |
427e91 |
av_adc_sense_radio[i][j] = radiobutton;
|
|
Packit |
427e91 |
gtk_widget_show(radiobutton);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled",
|
|
Packit |
427e91 |
(GtkSignalFunc)adc_sense_toggled,
|
|
Packit |
427e91 |
(gpointer)(long)((i << 8) + j));
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox),
|
|
Packit |
427e91 |
radiobutton, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton));
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* create IPGA */
|
|
Packit |
427e91 |
for (i = 0; i < envy_ipga_volumes(); i++) {
|
|
Packit |
427e91 |
char name[32];
|
|
Packit |
427e91 |
sprintf(name, "IPGA %d", i);
|
|
Packit |
427e91 |
frame = gtk_frame_new(name);
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
//gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Add friendly labels for DMX 6Fires */
|
|
Packit |
427e91 |
if(card_is_dmx6fire && (i < 6)){
|
|
Packit |
427e91 |
label = gtk_label_new(dmx6fire_inputs[i]);
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
adj = gtk_adjustment_new(0, -36, 0, 1, 16, 0);
|
|
Packit |
427e91 |
av_ipga_volume_adj[i] = adj;
|
|
Packit |
427e91 |
vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj));
|
|
Packit |
427e91 |
gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE);
|
|
Packit |
427e91 |
gtk_widget_show(vscale);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6);
|
|
Packit |
427e91 |
gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM);
|
|
Packit |
427e91 |
gtk_scale_set_digits(GTK_SCALE(vscale), 0);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(ipga_volume_adjust),
|
|
Packit |
427e91 |
(gpointer)(long)(i));
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("000");
|
|
Packit |
427e91 |
av_ipga_volume_label[i] = (GtkLabel *)label;
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
int index_active_profile()
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
gint index;
|
|
Packit |
427e91 |
gboolean found;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
found = FALSE;
|
|
Packit |
427e91 |
for (index = 0; index < MAX_PROFILES; index++)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
if (active_button == profiles_toggle_buttons[index].toggle_button) {
|
|
Packit |
427e91 |
found = TRUE;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (found)
|
|
Packit |
427e91 |
return index;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
return NOTFOUND;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
int delete_card_number(GtkWidget *delete_button)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
gint res;
|
|
Packit |
427e91 |
gint card_nr;
|
|
Packit |
427e91 |
gint index;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (!(GTK_TOGGLE_BUTTON (delete_button)->active))
|
|
Packit |
427e91 |
return EXIT_SUCCESS;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
card_nr = GTK_ADJUSTMENT (card_number_adj)->value;
|
|
Packit |
427e91 |
if ((card_nr < 0) || (card_nr >= MAX_CARD_NUMBERS)) {
|
|
Packit |
427e91 |
fprintf(stderr, "card number not in [0 ... %d]\n", MAX_CARD_NUMBERS - 1);
|
|
Packit |
427e91 |
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE);
|
|
Packit |
427e91 |
return -EINVAL;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
res = delete_card(card_number, profiles_file_name);
|
|
Packit |
427e91 |
if (res < 0) {
|
|
Packit |
427e91 |
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE);
|
|
Packit |
427e91 |
return res;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
if (card_nr == card_number) {
|
|
Packit |
427e91 |
for (index = 0; index < MAX_PROFILES; index++)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
gtk_entry_set_text(GTK_ENTRY (profiles_toggle_buttons[index].entry), get_profile_name(index + 1, card_number, profiles_file_name));
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
return EXIT_SUCCESS;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
int restore_active_profile(const gint profile_number)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
gint res;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
res = save_restore(ALSACTL_OP_RESTORE, profile_number, card_number, profiles_file_name, NULL);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
return res;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
int save_active_profile(GtkWidget *save_button)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
gint res;
|
|
Packit |
427e91 |
gint index;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (!(GTK_TOGGLE_BUTTON (save_button)->active))
|
|
Packit |
427e91 |
return EXIT_SUCCESS;
|
|
Packit |
427e91 |
if ((index = index_active_profile()) >= 0) {
|
|
Packit |
427e91 |
res = save_restore(ALSACTL_OP_STORE, index + 1, card_number, profiles_file_name, \
|
|
Packit |
427e91 |
gtk_entry_get_text(GTK_ENTRY (profiles_toggle_buttons[index].entry)));
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
fprintf(stderr, "No active profile found.\n");
|
|
Packit |
427e91 |
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (save_button), FALSE);
|
|
Packit |
427e91 |
return -EXIT_FAILURE;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (save_button), FALSE);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
return res;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
void entry_toggle_editable(GtkWidget *toggle_button, GtkWidget *entry)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
gint index;
|
|
Packit |
427e91 |
gint profile_number;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (active_button == toggle_button) {
|
|
Packit |
427e91 |
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (toggle_button), TRUE);
|
|
Packit |
427e91 |
gtk_editable_set_editable(GTK_EDITABLE (entry), TRUE);
|
|
Packit |
427e91 |
gtk_widget_grab_focus(entry);
|
|
Packit |
427e91 |
return;
|
|
Packit |
427e91 |
} else if (GTK_TOGGLE_BUTTON (toggle_button)->active) {
|
|
Packit |
427e91 |
active_button = toggle_button;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
gtk_editable_set_editable(GTK_EDITABLE (entry), GTK_TOGGLE_BUTTON (toggle_button)->active);
|
|
Packit |
427e91 |
if (GTK_TOGGLE_BUTTON (toggle_button)->active) {
|
|
Packit |
427e91 |
gtk_widget_grab_focus(entry);
|
|
Packit |
427e91 |
profile_number = NOTFOUND;
|
|
Packit |
427e91 |
for (index = 0; index < MAX_PROFILES; index++)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
if (profiles_toggle_buttons[index].toggle_button != toggle_button) {
|
|
Packit |
427e91 |
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[index].toggle_button), FALSE);
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
profile_number = index + 1;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
if (profile_number >= 0)
|
|
Packit |
427e91 |
restore_active_profile(profile_number);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
void enter_callback( const GtkWidget *widget, const GtkWidget *entry )
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
const gchar *entry_text;
|
|
Packit |
427e91 |
entry_text = gtk_entry_get_text (GTK_ENTRY (entry));
|
|
Packit |
427e91 |
printf("Inhalt : %s\n", entry_text);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static GtkWidget *toggle_button_entry(const GtkWidget *parent, const gchar *profile_name, const gint index)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *box;
|
|
Packit |
427e91 |
GtkWidget *entry_label;
|
|
Packit |
427e91 |
GtkWidget *toggle_button;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
box = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
toggle_button = gtk_toggle_button_new();
|
|
Packit |
427e91 |
gtk_container_border_width(GTK_CONTAINER(toggle_button), 3);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
profiles_toggle_buttons[index].entry = entry_label = gtk_entry_new();
|
|
Packit |
427e91 |
gtk_entry_set_max_length(GTK_ENTRY (entry_label), MAX_PROFILE_NAME_LENGTH);
|
|
Packit |
427e91 |
gtk_entry_set_text(GTK_ENTRY (entry_label), profile_name);
|
|
Packit |
427e91 |
/* only the active profile can be modified */
|
|
Packit |
427e91 |
gtk_editable_set_editable(GTK_EDITABLE (entry_label), FALSE);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT (entry_label), "activate",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC (enter_callback),
|
|
Packit |
427e91 |
(gpointer) entry_label);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT (toggle_button), "toggled",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC (entry_toggle_editable),
|
|
Packit |
427e91 |
(gpointer) entry_label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX (box), entry_label, FALSE, FALSE, 20);
|
|
Packit |
427e91 |
gtk_widget_show(entry_label);
|
|
Packit |
427e91 |
gtk_widget_show(box);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER (toggle_button), box);
|
|
Packit |
427e91 |
gtk_widget_show(toggle_button);
|
|
Packit |
427e91 |
return (toggle_button);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *label_card_nr;
|
|
Packit |
427e91 |
GtkWidget *vbox1;
|
|
Packit |
427e91 |
GtkWidget *vbox2;
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
GtkWidget *hbox1;
|
|
Packit |
427e91 |
GtkWidget *save_button;
|
|
Packit |
427e91 |
GtkWidget *delete_button;
|
|
Packit |
427e91 |
GtkObject *card_button_adj;
|
|
Packit |
427e91 |
GtkWidget *card_button;
|
|
Packit |
427e91 |
GtkWidget *scrolledwindow;
|
|
Packit |
427e91 |
GtkWidget *viewport;
|
|
Packit |
427e91 |
gint index;
|
|
Packit |
427e91 |
gint profile_number;
|
|
Packit |
427e91 |
gchar *profile_name;
|
|
Packit |
427e91 |
gint max_profiles;
|
|
Packit |
427e91 |
gint max_digits;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(notebook), hbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Profiles");
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
|
|
Packit |
427e91 |
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page),
|
|
Packit |
427e91 |
label);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* build scrolling area */
|
|
Packit |
427e91 |
scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(scrolledwindow);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
|
|
Packit |
427e91 |
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
viewport = gtk_viewport_new(NULL, NULL);
|
|
Packit |
427e91 |
gtk_widget_show(viewport);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(viewport), hbox);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(hbox), 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Create button boxes */
|
|
Packit |
427e91 |
vbox1 = gtk_vbutton_box_new();
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
gtk_vbutton_box_set_spacing_default(0);
|
|
Packit |
427e91 |
for (index = 0; index < MAX_PROFILES; index++) {
|
|
Packit |
427e91 |
profile_name = get_profile_name(index + 1, card_number, profiles_file_name);
|
|
Packit |
427e91 |
profiles_toggle_buttons[index].toggle_button = toggle_button_entry(window, profile_name, index);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX (vbox1), profiles_toggle_buttons[index].toggle_button, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
gtk_widget_show(vbox1);
|
|
Packit |
427e91 |
gtk_container_border_width(GTK_CONTAINER(vbox1), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox2 = gtk_vbutton_box_new();
|
|
Packit |
427e91 |
gtk_widget_show(vbox2);
|
|
Packit |
427e91 |
gtk_container_border_width(GTK_CONTAINER(vbox2), 50);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox1 = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox1);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox2), hbox1, FALSE, FALSE, 20);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label_card_nr = gtk_label_new("Card Number:");
|
|
Packit |
427e91 |
gtk_widget_show(label_card_nr);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox1), label_card_nr, FALSE, FALSE, 20);
|
|
Packit |
427e91 |
gtk_label_set_justify(GTK_LABEL(label_card_nr), GTK_JUSTIFY_LEFT);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
card_button_adj = gtk_adjustment_new(16, 0, MAX_CARD_NUMBERS - 1, 1, 10, 10);
|
|
Packit |
427e91 |
card_number_adj = card_button_adj;
|
|
Packit |
427e91 |
card_button = gtk_spin_button_new(GTK_ADJUSTMENT (card_button_adj), 1, 0);
|
|
Packit |
427e91 |
gtk_widget_show(card_button);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX (hbox1), card_button, TRUE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_spin_button_set_numeric(GTK_SPIN_BUTTON (card_button), TRUE);
|
|
Packit |
427e91 |
gtk_adjustment_set_value(GTK_ADJUSTMENT (card_button_adj), card_number);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
delete_button = gtk_toggle_button_new_with_label("Delete card from profiles");
|
|
Packit |
427e91 |
gtk_widget_show(delete_button);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX (vbox2), delete_button, FALSE, FALSE, 20);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT (delete_button), "toggled",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC (delete_card_number),
|
|
Packit |
427e91 |
NULL);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
save_button = gtk_toggle_button_new_with_label("Save active profile");
|
|
Packit |
427e91 |
gtk_widget_show(save_button);
|
|
Packit |
427e91 |
gtk_box_pack_end(GTK_BOX (vbox2), save_button, FALSE, FALSE, 20);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT (save_button), "toggled",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC (save_active_profile),
|
|
Packit |
427e91 |
NULL);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(hbox), vbox1);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(hbox), vbox2);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (default_profile != NULL)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
/*
|
|
Packit |
427e91 |
* only if default_profile is numerical and lower or equal than MAX_PROFILES it will be a profile_number
|
|
Packit |
427e91 |
* otherwise it will be a profile name
|
|
Packit |
427e91 |
*/
|
|
Packit |
427e91 |
if (strcspn(default_profile, "0123456789") == 0) {
|
|
Packit |
427e91 |
for (max_profiles = MAX_PROFILES, max_digits = 0; max_profiles > 9; max_digits++, max_profiles /= 10)
|
|
Packit |
427e91 |
;
|
|
Packit |
427e91 |
max_digits++;
|
|
Packit |
427e91 |
if (strlen(default_profile) <= max_digits) {
|
|
Packit |
427e91 |
profile_number = atoi(default_profile);
|
|
Packit |
427e91 |
if (profile_number < 1 || profile_number > MAX_PROFILES)
|
|
Packit |
427e91 |
profile_number = get_profile_number(default_profile, card_number, profiles_file_name);
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
profile_number = get_profile_number(default_profile, card_number, profiles_file_name);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
profile_number = get_profile_number(default_profile, card_number, profiles_file_name);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
if ((profile_number > 0) && (profile_number <= MAX_PROFILES)) {
|
|
Packit |
427e91 |
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[profile_number - 1].toggle_button), TRUE);
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
fprintf(stderr, "Cannot find profile '%s' for card '%d'.\n", default_profile, card_number);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_outer(GtkWidget *main)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *hbox1;
|
|
Packit |
427e91 |
GtkWidget *vbox;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *frame;
|
|
Packit |
427e91 |
GtkWidget *drawing;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Create digital mixer frame */
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 1);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(main), vbox, FALSE, FALSE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new(" Rt-clk Menu >>");
|
|
Packit |
427e91 |
//gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 3);
|
|
Packit |
427e91 |
frame = gtk_frame_new("Digital Mixer");
|
|
Packit |
427e91 |
gtk_widget_show(frame);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Create controls in the digital mixer frame */
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
vbox = gtk_vbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(vbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox1 = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox1);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
drawing = gtk_drawing_area_new();
|
|
Packit |
427e91 |
mixer_mix_drawing = drawing;
|
|
Packit |
427e91 |
gtk_widget_set_name(drawing, "DigitalMixer");
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox1), drawing, TRUE, FALSE, 6);
|
|
Packit |
427e91 |
if (tall_equal_mixer_ht > 1 ) {
|
|
Packit |
427e91 |
gtk_widget_set_usize(drawing, 60, 264 + 60 * (tall_equal_mixer_ht - 1));
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
gtk_widget_set_usize(drawing, 60, 264);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(drawing), "expose_event",
|
|
Packit |
427e91 |
(GtkSignalFunc)level_meters_expose_event, NULL);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(drawing), "configure_event",
|
|
Packit |
427e91 |
(GtkSignalFunc)level_meters_configure_event, NULL);
|
|
Packit |
427e91 |
gtk_widget_set_events(drawing, GDK_EXPOSURE_MASK);
|
|
Packit |
427e91 |
gtk_widget_show(drawing);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox1 = gtk_hbox_new(TRUE, 0);
|
|
Packit |
427e91 |
gtk_widget_show(hbox1);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(hbox1), 6);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Left");
|
|
Packit |
427e91 |
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Right");
|
|
Packit |
427e91 |
gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
|
|
Packit |
427e91 |
gtk_widget_show(label);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 0);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
mixer_clear_peaks_button = gtk_button_new_with_label("Reset Peaks");
|
|
Packit |
427e91 |
gtk_widget_show(mixer_clear_peaks_button);
|
|
Packit |
427e91 |
gtk_box_pack_start(GTK_BOX(vbox), mixer_clear_peaks_button, TRUE, FALSE, 0);
|
|
Packit |
427e91 |
gtk_container_set_border_width(GTK_CONTAINER(mixer_clear_peaks_button), 4);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT(mixer_clear_peaks_button), "clicked",
|
|
Packit |
427e91 |
GTK_SIGNAL_FUNC(level_meters_reset_peaks), NULL);
|
|
Packit |
427e91 |
}/* End create_outer */
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void create_blank(GtkWidget *main, GtkWidget *notebook, int page)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
/* This is a little workaround for a problem with the pop-up menu.
|
|
Packit |
427e91 |
For some reason the label of the last page is not accessed by the menu
|
|
Packit |
427e91 |
so all it shows is 'page 7'. Here a blank extra page is created, unseen,
|
|
Packit |
427e91 |
which seems to satisfy gtk, and we see the menu last page label correct. AH 12.7.2005 */
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
GtkWidget *label;
|
|
Packit |
427e91 |
GtkWidget *hbox;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
hbox = gtk_hbox_new(FALSE, 0);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(notebook), hbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
label = gtk_label_new("Blank");
|
|
Packit |
427e91 |
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook),
|
|
Packit |
427e91 |
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page),
|
|
Packit |
427e91 |
label);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static void usage(void)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
fprintf(stderr, "usage: envy24control [-c card#] [-D control-name] [-o num-outputs] [-i num-inputs] [-p num-pcm-outputs] [-s num-spdif-in/outs] [-v] [-f profiles-file] [profile name|profile id] [-m channel-num] [-w initial-window-width] [-t height-num]\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-c, --card\tAlsa card number to control\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-D, --device\tcontrol-name\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-o, --outputs\tLimit number of analog line outputs to display\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-i, --input\tLimit number of analog line inputs to display\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-p, --pcm_output\tLimit number of PCM outputs to display\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-s, --spdif\tLimit number of spdif inputs/outputs to display\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-v, --view_spdif_playback\tshows the spdif playback channels in the mixer\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-f, --profiles_file\tuse file as profiles file\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-m, --midichannel\tmidi channel number for controller control\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-M, --midienhanced\tUse an enhanced mapping from midi controller to db slider\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-w, --window_width\tSet initial window width (try 2,6 or 8; 280,626, or 968)\n");
|
|
Packit |
427e91 |
fprintf(stderr, "\t-t, --tall_eq_mixer_heights\tSet taller height mixer displays (1-9)\n");
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
int main(int argc, char **argv)
|
|
Packit |
427e91 |
{
|
|
Packit |
427e91 |
GtkWidget *notebook;
|
|
Packit |
427e91 |
GtkWidget *outerbox;
|
|
Packit |
427e91 |
char *name, tmpname[8], title[128];
|
|
Packit |
427e91 |
int i, c, err;
|
|
Packit |
427e91 |
snd_ctl_card_info_t *hw_info;
|
|
Packit |
427e91 |
snd_ctl_elem_value_t *val;
|
|
Packit |
427e91 |
int npfds;
|
|
Packit |
427e91 |
struct pollfd *pfds;
|
|
Packit |
427e91 |
int midi_fd = -1, midi_channel = -1, midi_enhanced = 0;
|
|
Packit |
427e91 |
int page;
|
|
Packit |
427e91 |
int input_channels_set = 0;
|
|
Packit |
427e91 |
int output_channels_set = 0;
|
|
Packit |
427e91 |
int pcm_output_channels_set = 0;
|
|
Packit |
427e91 |
int width_val;
|
|
Packit |
427e91 |
int wwidth_set =FALSE;
|
|
Packit |
427e91 |
int wwidth = 796;
|
|
Packit |
427e91 |
const int chanwidth = 86;
|
|
Packit |
427e91 |
const int fixwidth = 108;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
static struct option long_options[] = {
|
|
Packit |
427e91 |
{"device", 1, 0, 'D'},
|
|
Packit |
427e91 |
{"card", 1, 0, 'c'},
|
|
Packit |
427e91 |
{"profiles_file", 1, 0, 'f'},
|
|
Packit |
427e91 |
{"inputs", 1, 0, 'i'},
|
|
Packit |
427e91 |
{"midichannel", 1, 0, 'm'},
|
|
Packit |
427e91 |
{"midienhanced", 0, 0, 'M'},
|
|
Packit |
427e91 |
{"outputs", 1, 0, 'o'},
|
|
Packit |
427e91 |
{"pcm_outputs", 1, 0, 'p'},
|
|
Packit |
427e91 |
{"spdif", 1, 0, 's'},
|
|
Packit |
427e91 |
{"window_width", 1, 0, 'w'},
|
|
Packit |
427e91 |
{"view_spdif_playback", 0, 0, 'v'},
|
|
Packit |
427e91 |
{"tall_eq_mixer_heights", 1, 0, 't'},
|
|
Packit |
427e91 |
{ NULL }
|
|
Packit |
427e91 |
};
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
snd_ctl_card_info_alloca(&hw_info);
|
|
Packit |
427e91 |
snd_ctl_elem_value_alloca(&val;;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Go through gtk initialization */
|
|
Packit |
427e91 |
gtk_init(&argc, &argv);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
name = NULL; /* probe */
|
|
Packit |
427e91 |
card_number = 0;
|
|
Packit |
427e91 |
input_channels = MAX_INPUT_CHANNELS;
|
|
Packit |
427e91 |
output_channels = MAX_OUTPUT_CHANNELS;
|
|
Packit |
427e91 |
pcm_output_channels = MAX_PCM_OUTPUT_CHANNELS;
|
|
Packit |
427e91 |
spdif_channels = MAX_SPDIF_CHANNELS;
|
|
Packit |
427e91 |
view_spdif_playback = 0;
|
|
Packit |
427e91 |
profiles_file_name = DEFAULT_PROFILERC;
|
|
Packit |
427e91 |
default_profile = NULL;
|
|
Packit |
427e91 |
while ((c = getopt_long(argc, argv, "D:c:f:i:m:Mo:p:s:w:vt:", long_options, NULL)) != -1) {
|
|
Packit |
427e91 |
switch (c) {
|
|
Packit |
427e91 |
case 'D':
|
|
Packit |
427e91 |
name = optarg;
|
|
Packit |
427e91 |
card_number = atoi(strchr(name, ':') + sizeof(char));
|
|
Packit |
427e91 |
if (card_number < 0 || card_number >= MAX_CARD_NUMBERS) {
|
|
Packit |
427e91 |
fprintf(stderr, "envy24control: invalid card number %d\n", card_number);
|
|
Packit |
427e91 |
exit(1);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
case 'c':
|
|
Packit |
427e91 |
i = atoi(optarg);
|
|
Packit |
427e91 |
if (i < 0 || i >= MAX_CARD_NUMBERS) {
|
|
Packit |
427e91 |
fprintf(stderr, "envy24control: invalid card number %d\n", i);
|
|
Packit |
427e91 |
exit(1);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
card_number = i;
|
|
Packit |
427e91 |
sprintf(tmpname, "hw:%d", i);
|
|
Packit |
427e91 |
name = tmpname;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
case 'f':
|
|
Packit |
427e91 |
profiles_file_name = optarg;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
case 'i':
|
|
Packit |
427e91 |
input_channels = atoi(optarg);
|
|
Packit |
427e91 |
if (input_channels < 0 || input_channels > MAX_INPUT_CHANNELS) {
|
|
Packit |
427e91 |
fprintf(stderr, "envy24control: must have 0-%i inputs\n", MAX_INPUT_CHANNELS);
|
|
Packit |
427e91 |
exit(1);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
input_channels_set = 1;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
case 'm':
|
|
Packit |
427e91 |
midi_channel = atoi(optarg);
|
|
Packit |
427e91 |
if (midi_channel < 1 || midi_channel > 16) {
|
|
Packit |
427e91 |
fprintf(stderr, "envy24control: invalid midi channel number %i\n", midi_channel);
|
|
Packit |
427e91 |
exit(1);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
--midi_channel;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
case 'M': midi_enhanced = 1; break;
|
|
Packit |
427e91 |
case 'o':
|
|
Packit |
427e91 |
output_channels = atoi(optarg);
|
|
Packit |
427e91 |
if (output_channels < 0 || output_channels > MAX_OUTPUT_CHANNELS) {
|
|
Packit |
427e91 |
fprintf(stderr, "envy24control: must have 0-%i outputs\n", MAX_OUTPUT_CHANNELS);
|
|
Packit |
427e91 |
exit(1);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
output_channels_set = 1;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
case 'p':
|
|
Packit |
427e91 |
pcm_output_channels = atoi(optarg);
|
|
Packit |
427e91 |
if (pcm_output_channels < 0 || pcm_output_channels > MAX_PCM_OUTPUT_CHANNELS) {
|
|
Packit |
427e91 |
fprintf(stderr, "envy24control: must have 0-%i pcm outputs\n", MAX_PCM_OUTPUT_CHANNELS);
|
|
Packit |
427e91 |
exit(1);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
pcm_output_channels_set = 1;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
case 's':
|
|
Packit |
427e91 |
spdif_channels = atoi(optarg);
|
|
Packit |
427e91 |
if (spdif_channels < 0 || spdif_channels > MAX_SPDIF_CHANNELS) {
|
|
Packit |
427e91 |
fprintf(stderr, "envy24control: must have 0-%i spdifs\n", MAX_SPDIF_CHANNELS);
|
|
Packit |
427e91 |
exit(1);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
case 'w':
|
|
Packit |
427e91 |
width_val = atoi(optarg);
|
|
Packit |
427e91 |
if ((width_val >= 1) && (width_val <= 20)) {
|
|
Packit |
427e91 |
wwidth = (width_val * chanwidth + fixwidth);
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
wwidth = width_val;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
wwidth_set = TRUE;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
case 'v':
|
|
Packit |
427e91 |
view_spdif_playback = 1;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
case 't':
|
|
Packit |
427e91 |
tall_equal_mixer_ht = atoi(optarg);
|
|
Packit |
427e91 |
if ((tall_equal_mixer_ht < 0) || (tall_equal_mixer_ht >= 10))
|
|
Packit |
427e91 |
tall_equal_mixer_ht = 0;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
default:
|
|
Packit |
427e91 |
usage();
|
|
Packit |
427e91 |
exit(1);
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
if (optind < argc) {
|
|
Packit |
427e91 |
default_profile = argv[optind];
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (! name) {
|
|
Packit |
427e91 |
/* probe cards */
|
|
Packit |
427e91 |
static char cardname[8];
|
|
Packit |
427e91 |
/* FIXME: hardcoded max number of cards */
|
|
Packit |
427e91 |
for (card_number = 0; card_number < 8; card_number++) {
|
|
Packit |
427e91 |
sprintf(cardname, "hw:%d", card_number);
|
|
Packit |
427e91 |
if (snd_ctl_open(&ctl, cardname, 0) < 0)
|
|
Packit |
427e91 |
continue;
|
|
Packit |
427e91 |
if (snd_ctl_card_info(ctl, hw_info) < 0 ||
|
|
Packit |
427e91 |
strcmp(snd_ctl_card_info_get_driver(hw_info), "ICE1712")) {
|
|
Packit |
427e91 |
snd_ctl_close(ctl);
|
|
Packit |
427e91 |
continue;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
/* found */
|
|
Packit |
427e91 |
name = cardname;
|
|
Packit |
427e91 |
break;
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
if (! name) {
|
|
Packit |
427e91 |
fprintf(stderr, "No ICE1712 cards found\n");
|
|
Packit |
427e91 |
exit(EXIT_FAILURE);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
} else {
|
|
Packit |
427e91 |
if ((err = snd_ctl_open(&ctl, name, 0)) < 0) {
|
|
Packit |
427e91 |
fprintf(stderr, "snd_ctl_open: %s\n", snd_strerror(err));
|
|
Packit |
427e91 |
exit(EXIT_FAILURE);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
if ((err = snd_ctl_card_info(ctl, hw_info)) < 0) {
|
|
Packit |
427e91 |
fprintf(stderr, "snd_ctl_card_info: %s\n", snd_strerror(err));
|
|
Packit |
427e91 |
exit(EXIT_FAILURE);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
if (strcmp(snd_ctl_card_info_get_driver(hw_info), "ICE1712")) {
|
|
Packit |
427e91 |
fprintf(stderr, "invalid card type (driver is %s)\n", snd_ctl_card_info_get_driver(hw_info));
|
|
Packit |
427e91 |
exit(EXIT_FAILURE);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
snd_ctl_elem_value_set_interface(val, SND_CTL_ELEM_IFACE_CARD);
|
|
Packit |
427e91 |
snd_ctl_elem_value_set_name(val, "ICE1712 EEPROM");
|
|
Packit |
427e91 |
if ((err = snd_ctl_elem_read(ctl, val)) < 0) {
|
|
Packit |
427e91 |
fprintf(stderr, "Unable to read EEPROM contents: %s\n", snd_strerror(err));
|
|
Packit |
427e91 |
exit(EXIT_FAILURE);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
memcpy(&card_eeprom, snd_ctl_elem_value_get_bytes(val), 32);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if(card_eeprom.subvendor == ICE1712_SUBDEVICE_DMX6FIRE)
|
|
Packit |
427e91 |
card_is_dmx6fire = TRUE;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Set a better default for input_channels and output_channels */
|
|
Packit |
427e91 |
if(!input_channels_set)
|
|
Packit |
427e91 |
if(card_is_dmx6fire)
|
|
Packit |
427e91 |
input_channels = 6;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if(!output_channels_set)
|
|
Packit |
427e91 |
if(card_is_dmx6fire)
|
|
Packit |
427e91 |
output_channels = 6;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if(!pcm_output_channels_set)
|
|
Packit |
427e91 |
if(card_is_dmx6fire)
|
|
Packit |
427e91 |
pcm_output_channels = 6; /* PCMs 7&8 can be used -set using option -p8 */
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
if (!wwidth_set)
|
|
Packit |
427e91 |
if (card_is_dmx6fire)
|
|
Packit |
427e91 |
wwidth = 626;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Initialize code */
|
|
Packit |
427e91 |
config_open();
|
|
Packit |
427e91 |
level_meters_init();
|
|
Packit |
427e91 |
mixer_init();
|
|
Packit |
427e91 |
patchbay_init();
|
|
Packit |
427e91 |
hardware_init();
|
|
Packit |
427e91 |
analog_volume_init();
|
|
Packit |
427e91 |
if (midi_channel >= 0)
|
|
Packit |
427e91 |
midi_fd = midi_init(argv[0], midi_channel, midi_enhanced);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
fprintf(stderr, "using\t --- input_channels: %i\n\t --- output_channels: %i\n\t --- pcm_output_channels: %i\n\t --- spdif in/out channels: %i\n", \
|
|
Packit |
427e91 |
input_channels, output_channels, pcm_output_channels, spdif_channels);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Make the title */
|
|
Packit |
427e91 |
sprintf(title, "Envy24 Control Utility %s (%s)", VERSION, snd_ctl_card_info_get_longname(hw_info));
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Create the main window */
|
|
Packit |
427e91 |
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
|
Packit |
427e91 |
gtk_window_set_title(GTK_WINDOW(window), title);
|
|
Packit |
427e91 |
gtk_signal_connect(GTK_OBJECT (window), "delete_event",
|
|
Packit |
427e91 |
(GtkSignalFunc) gtk_main_quit, NULL);
|
|
Packit |
427e91 |
signal(SIGINT, (void *)gtk_main_quit);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
gtk_window_set_default_size(GTK_WINDOW(window), wwidth, 300);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
outerbox = gtk_hbox_new(FALSE, 3);
|
|
Packit |
427e91 |
gtk_widget_show(outerbox);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(window), outerbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
create_outer(outerbox);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
/* Create the notebook */
|
|
Packit |
427e91 |
notebook = gtk_notebook_new();
|
|
Packit |
427e91 |
gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE);
|
|
Packit |
427e91 |
gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook));
|
|
Packit |
427e91 |
gtk_widget_show(notebook);
|
|
Packit |
427e91 |
gtk_container_add(GTK_CONTAINER(outerbox), notebook);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
page = 0;
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
create_inputs_mixer(outerbox, notebook, page++);
|
|
Packit |
427e91 |
create_pcms_mixer(outerbox, notebook, page++);
|
|
Packit |
427e91 |
create_router(outerbox, notebook, page++);
|
|
Packit |
427e91 |
create_hardware(outerbox, notebook, page++);
|
|
Packit |
427e91 |
if (envy_analog_volume_available())
|
|
Packit |
427e91 |
create_analog_volume(outerbox, notebook, page++);
|
|
Packit |
427e91 |
create_profiles(outerbox, notebook, page++);
|
|
Packit |
427e91 |
create_about(outerbox, notebook, page++);
|
|
Packit |
427e91 |
create_blank(outerbox, notebook, page++);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
npfds = snd_ctl_poll_descriptors_count(ctl);
|
|
Packit |
427e91 |
if (npfds > 0) {
|
|
Packit |
427e91 |
pfds = alloca(sizeof(*pfds) * npfds);
|
|
Packit |
427e91 |
npfds = snd_ctl_poll_descriptors(ctl, pfds, npfds);
|
|
Packit |
427e91 |
for (i = 0; i < npfds; i++)
|
|
Packit |
427e91 |
gdk_input_add(pfds[i].fd,
|
|
Packit |
427e91 |
GDK_INPUT_READ,
|
|
Packit |
427e91 |
control_input_callback,
|
|
Packit |
427e91 |
ctl);
|
|
Packit |
427e91 |
snd_ctl_subscribe_events(ctl, 1);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
if (midi_fd >= 0) {
|
|
Packit |
427e91 |
gdk_input_add(midi_fd, GDK_INPUT_READ, midi_process, NULL);
|
|
Packit |
427e91 |
}
|
|
Packit |
427e91 |
gtk_timeout_add(40, level_meters_timeout_callback, NULL);
|
|
Packit |
427e91 |
gtk_timeout_add(100, master_clock_status_timeout_callback, NULL);
|
|
Packit |
427e91 |
gtk_timeout_add(100, internal_clock_status_timeout_callback, NULL);
|
|
Packit |
427e91 |
gtk_timeout_add(100, rate_locking_status_timeout_callback, NULL);
|
|
Packit |
427e91 |
gtk_timeout_add(100, rate_reset_status_timeout_callback, NULL);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
gtk_widget_show(window);
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
level_meters_postinit();
|
|
Packit |
427e91 |
mixer_postinit();
|
|
Packit |
427e91 |
patchbay_postinit();
|
|
Packit |
427e91 |
hardware_postinit();
|
|
Packit |
427e91 |
analog_volume_postinit();
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
gtk_main();
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
snd_ctl_close(ctl);
|
|
Packit |
427e91 |
midi_close();
|
|
Packit |
427e91 |
config_close();
|
|
Packit |
427e91 |
|
|
Packit |
427e91 |
return EXIT_SUCCESS;
|
|
Packit |
427e91 |
}
|