Blame envy24control/envy24control.c

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