| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							|  |  |  | #include <signal.h>
 | 
					
						
							|  |  |  | #include <errno.h>
 | 
					
						
							|  |  |  | #include <gtk/gtk.h>
 | 
					
						
							| 
									
										
										
										
											2001-09-11 09:34:13 +00:00
										 |  |  | #include <alsa/asoundlib.h>
 | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-09 13:12:54 +00:00
										 |  |  | /* MidiMan */ | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | #define ICE1712_SUBDEVICE_DELTA1010	0x121430d6
 | 
					
						
							|  |  |  | #define ICE1712_SUBDEVICE_DELTADIO2496	0x121431d6
 | 
					
						
							|  |  |  | #define ICE1712_SUBDEVICE_DELTA66	0x121432d6
 | 
					
						
							|  |  |  | #define ICE1712_SUBDEVICE_DELTA44	0x121433d6
 | 
					
						
							| 
									
										
										
										
											2002-11-09 13:12:54 +00:00
										 |  |  | #define ICE1712_SUBDEVICE_AUDIOPHILE    0x121434d6
 | 
					
						
							|  |  |  | #define ICE1712_SUBDEVICE_DELTA410      0x121438d6
 | 
					
						
							|  |  |  | #define ICE1712_SUBDEVICE_DELTA1010LT   0x12143bd6
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Terratec */ | 
					
						
							|  |  |  | #define ICE1712_SUBDEVICE_EWX2496       0x3b153011
 | 
					
						
							|  |  |  | #define ICE1712_SUBDEVICE_EWS88MT       0x3b151511
 | 
					
						
							|  |  |  | #define ICE1712_SUBDEVICE_EWS88D        0x3b152b11
 | 
					
						
							|  |  |  | #define ICE1712_SUBDEVICE_DMX6FIRE      0x3b153811
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Hoontech */ | 
					
						
							|  |  |  | #define ICE1712_SUBDEVICE_STDSP24       0x12141217      /* Hoontech SoundTrack Audio DSP 24 */
 | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  | 	unsigned int subvendor;	/* PCI[2c-2f] */ | 
					
						
							|  |  |  | 	unsigned char size;	/* size of EEPROM image in bytes */ | 
					
						
							|  |  |  | 	unsigned char version;	/* must be 1 */ | 
					
						
							|  |  |  | 	unsigned char codec;	/* codec configuration PCI[60] */ | 
					
						
							|  |  |  | 	unsigned char aclink;	/* ACLink configuration PCI[61] */ | 
					
						
							|  |  |  | 	unsigned char i2sID;	/* PCI[62] */ | 
					
						
							|  |  |  | 	unsigned char spdif;	/* S/PDIF configuration PCI[63] */ | 
					
						
							|  |  |  | 	unsigned char gpiomask;	/* GPIO initial mask, 0 = write, 1 = don't */ | 
					
						
							|  |  |  | 	unsigned char gpiostate; /* GPIO initial state */ | 
					
						
							|  |  |  | 	unsigned char gpiodir;	/* GPIO direction state */ | 
					
						
							|  |  |  | 	unsigned short ac97main; | 
					
						
							|  |  |  | 	unsigned short ac97pcm; | 
					
						
							|  |  |  | 	unsigned short ac97rec; | 
					
						
							|  |  |  | 	unsigned char ac97recsrc; | 
					
						
							|  |  |  | 	unsigned char dacID[4];	/* I2S IDs for DACs */ | 
					
						
							|  |  |  | 	unsigned char adcID[4];	/* I2S IDs for ADCs */ | 
					
						
							|  |  |  | 	unsigned char extra[4]; | 
					
						
							|  |  |  | } ice1712_eeprom_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-06-06 13:58:01 +00:00
										 |  |  | extern snd_ctl_t *ctl; | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | extern ice1712_eeprom_t card_eeprom; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *mixer_mix_drawing; | 
					
						
							|  |  |  | extern GtkWidget *mixer_clear_peaks_button; | 
					
						
							|  |  |  | extern GtkWidget *mixer_drawing[20]; | 
					
						
							|  |  |  | extern GtkObject *mixer_adj[20][2]; | 
					
						
							|  |  |  | extern GtkWidget *mixer_vscale[20][2]; | 
					
						
							|  |  |  | extern GtkWidget *mixer_solo_toggle[20][2]; | 
					
						
							|  |  |  | extern GtkWidget *mixer_mute_toggle[20][2]; | 
					
						
							|  |  |  | extern GtkWidget *mixer_stereo_toggle[20]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *router_radio[10][12]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-14 11:22:19 +00:00
										 |  |  | //extern GtkWidget *hw_master_clock_xtal_radio;
 | 
					
						
							|  |  |  | extern GtkWidget *hw_master_clock_xtal_22050; | 
					
						
							|  |  |  | extern GtkWidget *hw_master_clock_xtal_32000; | 
					
						
							|  |  |  | extern GtkWidget *hw_master_clock_xtal_44100; | 
					
						
							|  |  |  | extern GtkWidget *hw_master_clock_xtal_48000; | 
					
						
							|  |  |  | extern GtkWidget *hw_master_clock_xtal_88200; | 
					
						
							|  |  |  | extern GtkWidget *hw_master_clock_xtal_96000; | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | extern GtkWidget *hw_master_clock_spdif_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_master_clock_word_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_master_clock_status_label; | 
					
						
							| 
									
										
										
										
											2002-12-03 17:10:35 +00:00
										 |  |  | extern GtkWidget *hw_master_clock_actual_rate_label; | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-14 11:22:19 +00:00
										 |  |  | extern GtkWidget *hw_rate_locking_check; | 
					
						
							|  |  |  | extern GtkWidget *hw_rate_reset_check; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | extern GtkObject *hw_volume_change_adj; | 
					
						
							|  |  |  | extern GtkWidget *hw_volume_change_spin; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *hw_spdif_profi_nonaudio_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_spdif_profi_audio_radio; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *hw_profi_stream_stereo_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_profi_stream_notid_radio; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *hw_profi_emphasis_none_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_profi_emphasis_5015_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_profi_emphasis_ccitt_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_profi_emphasis_notid_radio; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *hw_consumer_copyright_on_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_consumer_copyright_off_radio; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *hw_consumer_copy_1st_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_consumer_copy_original_radio; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *hw_consumer_emphasis_none_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_consumer_emphasis_5015_radio; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *hw_consumer_category_dat_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_consumer_category_pcm_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_consumer_category_cd_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_consumer_category_general_radio; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *hw_spdif_professional_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_spdif_consumer_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_spdif_output_notebook; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern GtkWidget *hw_spdif_input_coaxial_radio; | 
					
						
							|  |  |  | extern GtkWidget *hw_spdif_input_optical_radio; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-09 08:36:08 +00:00
										 |  |  | extern GtkObject *av_dac_volume_adj[]; | 
					
						
							|  |  |  | extern GtkObject *av_adc_volume_adj[]; | 
					
						
							| 
									
										
										
										
											2002-11-14 11:22:19 +00:00
										 |  |  | extern GtkObject *av_ipga_volume_adj[]; | 
					
						
							| 
									
										
										
										
											2001-09-04 10:39:34 +00:00
										 |  |  | extern GtkLabel *av_dac_volume_label[]; | 
					
						
							|  |  |  | extern GtkLabel *av_adc_volume_label[]; | 
					
						
							| 
									
										
										
										
											2002-11-14 11:22:19 +00:00
										 |  |  | extern GtkLabel *av_ipga_volume_label[]; | 
					
						
							| 
									
										
										
										
											2001-07-09 08:36:08 +00:00
										 |  |  | extern GtkWidget *av_dac_sense_radio[][4]; | 
					
						
							|  |  |  | extern GtkWidget *av_adc_sense_radio[][4]; | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | gint level_meters_configure_event(GtkWidget *widget, GdkEventConfigure *event); | 
					
						
							|  |  |  | gint level_meters_expose_event(GtkWidget *widget, GdkEventExpose *event); | 
					
						
							|  |  |  | gint level_meters_timeout_callback(gpointer data); | 
					
						
							|  |  |  | void level_meters_reset_peaks(GtkButton *button, gpointer data); | 
					
						
							|  |  |  | void level_meters_init(void); | 
					
						
							|  |  |  | void level_meters_postinit(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void mixer_update_stream(int stream, int vol_flag, int sw_flag); | 
					
						
							|  |  |  | void mixer_toggled_solo(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void mixer_toggled_mute(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void mixer_adjust(GtkAdjustment *adj, gpointer data); | 
					
						
							|  |  |  | void mixer_postinit(void); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-06-13 18:41:38 +00:00
										 |  |  | int patchbay_stream_is_active(int stream); | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | void patchbay_update(void); | 
					
						
							|  |  |  | void patchbay_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void patchbay_init(void); | 
					
						
							|  |  |  | void patchbay_postinit(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void master_clock_update(void); | 
					
						
							|  |  |  | gint master_clock_status_timeout_callback(gpointer data); | 
					
						
							| 
									
										
										
										
											2002-12-03 17:10:35 +00:00
										 |  |  | gint internal_clock_status_timeout_callback(gpointer data); | 
					
						
							| 
									
										
										
										
											2002-11-14 11:22:19 +00:00
										 |  |  | void internal_clock_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void rate_locking_update(void); | 
					
						
							|  |  |  | void rate_locking_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void rate_reset_update(void); | 
					
						
							|  |  |  | void rate_reset_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | void volume_change_rate_update(void); | 
					
						
							|  |  |  | void volume_change_rate_adj(GtkAdjustment *adj, gpointer data); | 
					
						
							|  |  |  | void profi_data_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void profi_stream_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void profi_emphasis_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void consumer_copyright_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void consumer_copy_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void consumer_emphasis_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void consumer_category_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void spdif_output_update(void); | 
					
						
							|  |  |  | void spdif_output_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void spdif_input_update(void); | 
					
						
							|  |  |  | void spdif_input_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void hardware_init(void); | 
					
						
							|  |  |  | void hardware_postinit(void); | 
					
						
							| 
									
										
										
										
											2001-07-09 08:36:08 +00:00
										 |  |  | void analog_volume_init(void); | 
					
						
							|  |  |  | void analog_volume_postinit(void); | 
					
						
							|  |  |  | int envy_dac_volumes(void); | 
					
						
							| 
									
										
										
										
											2002-12-03 17:10:35 +00:00
										 |  |  | int envy_dac_max(void); | 
					
						
							| 
									
										
										
										
											2001-07-09 08:36:08 +00:00
										 |  |  | int envy_adc_volumes(void); | 
					
						
							| 
									
										
										
										
											2002-11-14 11:22:19 +00:00
										 |  |  | int envy_ipga_volumes(void); | 
					
						
							| 
									
										
										
										
											2001-07-09 08:36:08 +00:00
										 |  |  | int envy_dac_senses(void); | 
					
						
							|  |  |  | int envy_adc_senses(void); | 
					
						
							|  |  |  | int envy_dac_sense_items(void); | 
					
						
							|  |  |  | int envy_adc_sense_items(void); | 
					
						
							|  |  |  | const char *envy_dac_sense_enum_name(int i); | 
					
						
							|  |  |  | const char *envy_adc_sense_enum_name(int i); | 
					
						
							|  |  |  | int envy_analog_volume_available(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void dac_volume_update(int idx); | 
					
						
							|  |  |  | void adc_volume_update(int idx); | 
					
						
							| 
									
										
										
										
											2002-11-14 11:22:19 +00:00
										 |  |  | void ipga_volume_update(int idx); | 
					
						
							| 
									
										
										
										
											2001-07-09 08:36:08 +00:00
										 |  |  | void dac_sense_update(int idx); | 
					
						
							|  |  |  | void adc_sense_update(int idx); | 
					
						
							|  |  |  | void dac_volume_adjust(GtkAdjustment *adj, gpointer data); | 
					
						
							|  |  |  | void adc_volume_adjust(GtkAdjustment *adj, gpointer data); | 
					
						
							| 
									
										
										
										
											2002-11-14 11:22:19 +00:00
										 |  |  | void ipga_volume_adjust(GtkAdjustment *adj, gpointer data); | 
					
						
							| 
									
										
										
										
											2001-07-09 08:36:08 +00:00
										 |  |  | void dac_sense_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							|  |  |  | void adc_sense_toggled(GtkWidget *togglebutton, gpointer data); | 
					
						
							| 
									
										
										
										
											2000-10-29 21:51:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | void control_input_callback(gpointer data, gint source, GdkInputCondition condition); | 
					
						
							|  |  |  | void mixer_input_callback(gpointer data, gint source, GdkInputCondition condition); |