public WaveFileReader(
			WaveControl form,
			int frames,
			int fmt,
			int samp_rate,
			int chan,
			ref BinaryReader binread)
		{
			wave_form = form;
			frames_per_buffer = frames;
			format = fmt;
			sample_rate = samp_rate;
			channels = chan;
			
			//OUT_BLOCK = 2048;
			//IN_BLOCK = (int)Math.Floor(OUT_BLOCK*(double)sample_rate/Audio.SampleRate1);
			//OUT_BLOCK = (int)Math.Ceiling(IN_BLOCK*Audio.SampleRate1/(double)sample_rate);
			IN_BLOCK = 2048;
			OUT_BLOCK = (int)Math.Ceiling(IN_BLOCK*Audio.SampleRate1/(double)sample_rate);
			rb_l = new RingBufferFloat(16*OUT_BLOCK);
			rb_r = new RingBufferFloat(16*OUT_BLOCK);
			buf_l_in = new float[IN_BLOCK];
			buf_r_in = new float[IN_BLOCK];
			buf_l_out = new float[OUT_BLOCK];
			buf_r_out = new float[OUT_BLOCK];
			if(format == 1)
			{
				io_buf_size = IN_BLOCK*2*2;
			}
			else if(format == 3)
			{
				io_buf_size = IN_BLOCK*4*2;
				if(sample_rate != Audio.SampleRate1)
				{
					resamp_l = DttSP.NewResamplerF(sample_rate, Audio.SampleRate1);
					if(channels > 1) resamp_r = DttSP.NewResamplerF(sample_rate, Audio.SampleRate1);
				}
			}
			io_buf = new byte[io_buf_size];

			playback = true;
			reader = binread;

			Thread t = new Thread(new ThreadStart(ProcessBuffers));
			t.Name = "Wave File Read Thread";
			t.IsBackground = true;
			t.Priority = ThreadPriority.Normal;

			do
			{
				ReadBuffer(ref reader);
			} while(rb_l.WriteSpace() > OUT_BLOCK && !eof);

			t.Start();
		}
Beispiel #2
0
        private void menu_wave_Click(object sender, System.EventArgs e)
        {
            if (WaveForm.IsDisposed)
                WaveForm = new WaveControl(this);

            WaveForm.Show();
            WaveForm.Focus();
        }
Beispiel #3
0
        private void InitConsole()      // changes yt7pwr
        {
            this.Text = this.Text + GSDR_version + GSDR_revision;
            WinVer = WindowsVersion.WindowsXP;      // default
            OSInfo = System.Environment.OSVersion;
            Mixer.console = this;

            switch (OSInfo.Version.Major)
            {
                case 5:
                    {
                        switch (OSInfo.Version.Minor)
                        {
                            case 0:
                                WinVer = WindowsVersion.Windows2000;
                                break;
                            case 1:
                                WinVer = WindowsVersion.WindowsXP;
                                break;
                        }
                    }
                    break;
                case 6:
                    {
                        switch (OSInfo.Version.Minor)
                        {
                            case 0:
                                WinVer = WindowsVersion.WindowsVista;
                                break;
                            case 1:
                                WinVer = WindowsVersion.Windows7;
                                break;
                            case 2:
                                WinVer = WindowsVersion.Windows8;
                                break;
                            case 3:
                                WinVer = WindowsVersion.Windows8;
                                break;
                            default:
                                WinVer = WindowsVersion.WindowsVista;
                                break;
                        }
                    }
                    break;
                default:
                    WinVer = WindowsVersion.WindowsXP;
                    break;
            }

            booting = true;
            skin = new Skin(this);
            VoiceMsgForm = new VoiceMessages(this);
            g59 = new GenesisG59.G59(Handle);
            g59.booting = true;
            g11 = new GenesisG11.G11(Handle);
            g11.booting = true;
            g6 = new GenesisG6.G6(Handle);
            g6.booting = true;
            g6.SetCallback(GenesisG6CommandCallback);
            g6.SetIQCallback(Audio.G6AudioCallback);
            //g6.SetIQCallback(Audio.G6ADCaudioCallback);
            //g6.SetDACcallback(Audio.G6DACaudioCallback);
            net_device = new GenesisNetBox.NetBox(Handle);
            net_device.booting = true;
            qrp2000 = new QRP2000(this);
            AnalogSignalGauge = new AGauge(this);
            NewVFOSignalGauge = new AGauge(this);

            try
            {
                ServerSocket = new ServerSendData(this);    // error!
                ClientSocket = new ClientRecvData(this);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error1 in network configuration!\nCheck your network settings!\n" +
                    ex.ToString());
            }

            try
            {
                CAT_server_socket = new CAToverEthernetServer(this);
                CAT_client_socket = new CAToverEthernetClient(this);
            }
            catch (Exception ex)
            {
                Debug.Write("Error while creating network CAT!\n" +
                    ex.ToString());
            }

            try
            {
                MultiPSKServer = new MultiPSKEthernetServer(this);
            }
            catch (Exception ex)
            {
                Debug.Write("Error in MultiPSK network configuration!\nCheck your network settings!\n" +
                    ex.ToString());
            }

            UpdateBandStackRegisters();

            Audio.console = this;
            chkDSPNB2.Enabled = true;
            Display_GDI.console = this;     // for GDI+
#if(DirectX)
            try
            {
                Display_DirectX.console = this; // for DirectX
            }
            catch (Exception ex)
            {
                MessageBox.Show("DirectX general fault!\n" + ex.ToString());
            }
#endif

            if (CmdLineArgs != null)
            {
                for (int i = 0; i < CmdLineArgs.Length; i++)
                {
                    switch (CmdLineArgs[i])
                    {
                        case "--disable-swr-prot-at-my-risk":
                            DisableSWRProtection = true;
                            this.Text = this.Text + "  *** SWR Protection Disabled! ***";
                            break;
                        case "--high-pwr-am":
                            Audio.high_pwr_am = true;
                            MessageBox.Show("high power am");
                            break;
                        case "--debug-enable":
                            debug_enabled = true;
                            debug = new DebugForm(this, true);
                            debug.StartPosition = FormStartPosition.Manual;
                            debug.Show();
                            debug.Focus();
                            Win32.SetWindowPos(debug.Handle.ToInt32(),
                                -1, this.Left, this.Top, debug.Width, debug.Height, 0);
                            this.Text = this.Text + " Debug enabled!";
                            break;
                    }
                }
            }

            losc_hover_digit = -1;
            vfoA_hover_digit = -1;
            vfoB_hover_digit = -1;
            run_setup_wizard = true;

            // get culture specific decimal separator
            separator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;

            last_band = "";						// initialize bandstack

            wheel_tune_list = new double[15];		// initialize wheel tuning list array
            wheel_tune_list[0] = 0.000001;
            wheel_tune_list[1] = 0.000010;
            wheel_tune_list[2] = 0.000050;
            wheel_tune_list[3] = 0.000100;
            wheel_tune_list[4] = 0.000250;
            wheel_tune_list[5] = 0.000500;
            wheel_tune_list[6] = 0.001000;
            wheel_tune_list[7] = 0.005000;
            wheel_tune_list[8] = 0.009000;
            wheel_tune_list[9] = 0.010000;
            wheel_tune_list[10] = 0.100000;
            wheel_tune_list[11] = 0.250000;
            wheel_tune_list[12] = 0.500000;
            wheel_tune_list[13] = 1.000000;
            wheel_tune_list[14] = 10.000000;
            wheel_tune_index = 6;
            wheel_tune_index_subRX = 6;

            meter_text_history = new float[multimeter_text_peak_samples];
            current_meter_data = -200.0f;
            this.ActiveControl = chkPower;		// Power has focus initially

            Display_GDI.Target = picDisplay;
            Display_GDI.Init();					// Initialize Display variables
            InitDisplayModes();					// Initialize Display Modes
            InitAGCModes();						// Initialize AGC Modes
            InitMultiMeterModes();				// Initialize MultiMeter Modes

            ProcessSampleThreadController[] pstc = new ProcessSampleThreadController[1];
            audio_process_thread = new Thread[1];

            for (uint proc_thread = 0; proc_thread < 1; proc_thread++)
            {
                pstc[proc_thread] = new ProcessSampleThreadController(proc_thread);
                audio_process_thread[proc_thread] = new Thread(new ThreadStart(pstc[proc_thread].ProcessSampleThread));
                audio_process_thread[proc_thread].Name = "Audio Process Thread " + proc_thread.ToString();
                audio_process_thread[proc_thread].Priority = ThreadPriority.Highest;
                audio_process_thread[proc_thread].IsBackground = true;
                audio_process_thread[proc_thread].Start();
            }

            siolisten = new SIOListenerII(this);

            Keyer = new CWKeyer2(this);			// create new Keyer
            CWXForm = new CWX(this);            // create CWX form
            CWXForm.stopButton_Click(null, null);
            EQForm = new EQForm();
            XTRVForm = new XTRV(this);
            UpdateBandStackRegisters();

            InitFilterPresets(ref filter_presets, ref filter_presets_subRX);					// Initialize filter values

            SI570 = new ExtIO_si570_usb(this);
            RTL_SDR = new ExtIO_RTL(this);

            ir_remote = new WinLIRC(this);

            rx_image_real_table = new float[(int)Band.LAST + 1];
            rx_image_imag_table = new float[(int)Band.LAST + 1];
            tx_image_phase_table = new float[(int)Band.LAST + 1];
            tx_image_gain_table = new float[(int)Band.LAST + 1];
            rx_image_phase_table = new float[(int)Band.LAST + 1];
            rx_image_gain_table = new float[(int)Band.LAST + 1];

            SetupForm = new Setup(this);		// create Setup form
            SetupForm.StartPosition = FormStartPosition.Manual;

            SetupForm.GetTxProfiles();
            UpdateTXProfile();

            WaveForm = new WaveControl(this);	// create Wave form
            WaveForm.StartPosition = FormStartPosition.Manual;

            CurrentAGCMode = AGCMode.MED;				// Initialize front panel controls
            vfob_dsp_mode = DSPMode.LSB;
            vfob_filter = Filter.F3;
            comboDisplayMode.Text = "Panafall";
            comboMeterRXMode.SelectedIndex = 0;
            ptbPWR.Value = 10;

            CurrentDSPMode = DSPMode.CWU;
            CurrentDSPModeSubRX = DSPMode.CWU;
            old_dsp_mode = DSPMode.CWU;
            old_dsp_mode_subRX = DSPMode.CWU;
            Splash.SetStatus("Restore Console state...");
            GetState();							// recall saved state

            if (current_dsp_mode == DSPMode.FIRST || current_dsp_mode == DSPMode.LAST)
                radModeLSB.Checked = true;
            if (current_dsp_mode_subRX == DSPMode.FIRST || current_dsp_mode == DSPMode.LAST)
                radSUBRxModeLSB.Checked = true;
            if (current_filter == Filter.FIRST || current_filter == Filter.LAST ||
                (current_filter == Filter.NONE && current_dsp_mode != DSPMode.DRM && current_dsp_mode != DSPMode.SPEC))
                radFilter3.Checked = true;
            if (current_filter_subRX == Filter.FIRST || current_filter_subRX == Filter.LAST ||
                (current_filter_subRX == Filter.NONE && current_dsp_mode_subRX != DSPMode.DRM &&
                current_dsp_mode_subRX != DSPMode.SPEC))
                radSubRXFilter3.Checked = true;

            booting = false;
            EQForm.Init();                  // set EQU parameter
            SetupForm.DSPBufferSize = 0;    // force refresh
            VFOAFreq = vfoAFreq;
            VFOBFreq = vfoBFreq;
            LOSCFreq = loscFreq;
            PWR_ValueChanged();
            udMIC_ValueChanged(this, EventArgs.Empty);
            tbRX0Gain_Scroll(this, EventArgs.Empty);
            tbRX1Gain_Scroll(this, EventArgs.Empty);
            tbPanMainRX_Scroll(this, EventArgs.Empty);
            tbPanSubRX_Scroll(this, EventArgs.Empty);
            ptbPanMainRX.Value = pan_main_rx;
            ptbPanSubRX.Value = pan_sub_rx;
            ptbDisplayZoom.Value = 4;
            CalcDisplayFreq();

            wheel_tune_index--;					// Setup wheel tuning
            wheel_tune_index_subRX--;
            ChangeWheelTuneLeft();
            ChangeWheelTuneLeftSubRX();

            SetupForm.initCATandPTTprops();   // wjt added -- get console props setup for cat and ptt 

            if (comboMeterTXMode.Items.Count > 0 && comboMeterTXMode.SelectedIndex < 0)
                comboMeterTXMode.SelectedIndex = 0;
            chkMOX.Enabled = false;

            CheckSkins();

#if(DirectX)
            if (CurrentDisplayEngine == DisplayEngine.DIRECT_X)
            {
                CurrentDisplayEngine = current_display_engine;
            }
#endif

            // yt7pwr
            if (!skins_enabled)
            {
                radDisplayZoom1x.BackColor = button_selected_color;
                radDisplayZoom2x.BackColor = SystemColors.Control;
                radDisplayZoom4x.BackColor = SystemColors.Control;
                radDisplayZoom8x.BackColor = SystemColors.Control;
            }
            else
                radDisplayZoom1x.Checked = true;

            Splash.SetStatus("Initializing Genesis radio communication");	// Set progress point
            g59.booting = false;
            g11.booting = false;
            g6.booting = false;
            net_device.booting = false;
            g59.si570_i2c_address = (int)SetupForm.udSi570_address.Value;
            g59.si570_fxtal = (int)SetupForm.udSi570_xtal1.Value;
            g59.HSDiv = (int)SetupForm.udSi570_divisor.Value;
            g11.si570_i2c_address = (int)SetupForm.udSi570_address.Value;
            g11.si570_fxtal = (int)SetupForm.udSi570_xtal1.Value;
            g11.HSDiv = (int)SetupForm.udSi570_divisor.Value;
            g6.si570_i2c_address = (int)SetupForm.udSi570_address.Value;
            g6.si570_fxtal = (int)SetupForm.udSi570_xtal1.Value;
            g6.HSDiv = (int)SetupForm.udSi570_divisor.Value;
            net_device.si570_i2c_address = (int)SetupForm.udSi570_address.Value;
            net_device.si570_fxtal = (int)SetupForm.udSi570_xtal1.Value;
            net_device.si570_div = (int)SetupForm.udSi570_divisor.Value;

            if (CurrentModel == Model.GENESIS_G59USB)
            {
                bool conn = false;
                g59.USB_Serial = SetupForm.USB_serial_No;
                conn = g59.Connect();

                if (conn)
                {
                    G59Init();
                    btnUSB.BackColor = Color.Green;
                }
                else
                {
                    btnUSB.BackColor = Color.Red;
                }
            }
            else if (CurrentModel == Model.GENESIS_G11)
            {
                bool conn = false;
                g11.USB_Serial = SetupForm.USB_serial_No;
                conn = g11.Connect();

                if (conn)
                {
                    G11Init();
                    btnUSB.BackColor = Color.Green;
                }
                else
                {
                    btnUSB.BackColor = Color.Red;
                }
            }
            else if (CurrentModel == Model.GENESIS_G6)
            {
                bool conn = false;
                g6.USB_Serial = SetupForm.USB_serial_No;
                conn = g6.Connect();

                if (conn)
                {
                    G11Init();
                    btnUSB.BackColor = Color.Green;
                }
                else
                {
                    btnUSB.BackColor = Color.Red;
                }
            }
            else if (current_model == Model.QRP2000)
            {
                ReInit_USB();
            }
            else if (current_model == Model.RTL_SDR)
            {
                bool result = RTL_SDR.InitUSB();

                if (result)
                {
                    btnUSB.Visible = true;
                    btnUSB.BackColor = Color.Green;
                }
                else
                {
                    btnUSB.BackColor = Color.Red;
                }
            }
            else if (SetupForm.chkGeneralUSBPresent.Checked)
            {
                bool result = SI570.Init_USB();

                if (result)
                {
                    btnUSB.Visible = true;
                    btnUSB.BackColor = Color.Green;
                }
                else
                {
                    btnUSB.BackColor = Color.Red;
                }
            }

            txtMemory_fill();
            txtFMmemory_fill();

            SetTXOscFreqs(false, false);

            btnG3020_X1.Text = G3020Xtal1.ToString();
            btnG3020_X2.Text = G3020Xtal2.ToString();
            btnG3020_X3.Text = G3020Xtal3.ToString();
            btnG3020_X4.Text = G3020Xtal4.ToString();
            btnG160_X1.Text = G160Xtal1.ToString();
            btnG160_X2.Text = G160Xtal2.ToString();
            btnG80_X1.Text = G80Xtal1.ToString();
            btnG80_X2.Text = G80Xtal2.ToString();
            btnG80_X3.Text = G80Xtal3.ToString();
            btnG80_X4.Text = G80Xtal4.ToString();
            btnG40_X1.Text = G40Xtal1.ToString();
            btnG137_X1.Text = G137Xtal1.ToString();
            btnG500_X1.Text = G500Xtal1.ToString();

            txtVFOAMSD.Font = vfo_large_font;
            txtVFOBMSD.Font = vfo_large_font;
            txtLOSCMSD.Font = (vfo_large_font);
            txtVFOAFreq.Font = vfo_large_font;
            txtVFOBFreq.Font = vfo_large_font;
            txtLOSCFreq.Font = vfo_large_font;
            txtVFOALSD.Font = vfo_small_font;
            txtVFOBLSD.Font = vfo_small_font;
            txtLOSCLSD.Font = vfo_small_font;
            NewVFOLargeFont = new_vfo_large_font;     // refresh
            NewVFOSmallFont = new_vfo_small_font;
            VFOLargeFont = vfo_large_font;
            VFOSmallFont = vfo_small_font;
            network_event = new AutoResetEvent(false);
            sMeterDigital2.MeterForeColor = vfo_text_dark_color;
            sMeterDigital1.MeterForeColor = vfo_text_dark_color;

            try
            {
                eventWatcher = new ManagementEventWatcher("root\\wmi", "SELECT * FROM MSNdis_StatusMediaDisconnect");
                eventWatcher.EventArrived += new
                EventArrivedEventHandler(eventWatcher_EventArrived);
                eventWatcher.Start();
            }
            catch (Exception ex)
            {
                //MessageBox.Show("Error starting Network watcher!\nCheck you network settings!\n" +
                    //ex.ToString());
            }

            if (current_model == Model.GENESIS_G59NET)
                NetworkThreadRunning = true;

            SetupForm.StartEthernetCATServer();       // try ethernet CAT 
            SetupForm.StartEthernetCATClient();
            SetupForm.StartMultiPSKServer();

            InitSMeterModes();

            if (File.Exists(SetupForm.txtLoopDll.Text + "\\loop.dll") &&
                SetupForm.chkAudioEnableVAC.Checked &&
                SetupForm.comboAudioInputVAC.Text == "loop.dll" &&
                SetupForm.comboAudioOutputVAC.Text == "loop.dll")
            {
                loopDLL = new LoopDLL(this);
                Audio.loopDLL_enabled = true;
            }
            else
                Audio.loopDLL_enabled = false;

            chkVFOSplit.Enabled = false;

            switch (current_model)
            {
                case Model.GENESIS_G59NET:
                case Model.GENESIS_G59USB:
                    if (SetupForm.chkG59RX2.Checked)
                        lblRX2.BackColor = Color.Red;
                    else
                        lblRX2.BackColor = NewBackgroundVFOColor;
                    break;

                case Model.GENESIS_G11:
                    if (SetupForm.chkG11RX2.Checked)
                        lblRX2.BackColor = Color.Red;
                    else
                        lblRX2.BackColor = NewBackgroundVFOColor;
                    break;
            }

            EQForm.RestoreSettings();
            band_button_height = radMoreBands.Height;
            band_button_width = radMoreBands.Width;
            AF_ValueChanged();
            SetupForm.MultimeterCalOffset = multimeter_cal_offset;
            SetupForm.DisplayCalOffset = display_cal_offset;
            FilterUpdate();
            PWR_ValueChanged();

            if (radMoreBands.Checked)
            {
                radMoreBands_Click(this, EventArgs.Empty);
            }

            IR_Remote_enabled = ir_remote_enabled;      // try WinLIRC
            SetTXOscFreqs(true, true);
            SetTXOscFreqs(false, true);

            SetupForm.ForceAllEvents();
        }
Beispiel #4
0
        private void InitConsole()
        {
            #if(DEBUG)
            mnuUCB.Visible = true;
            button1.Visible = true;
            #endif
            Thread.Sleep(100);
            UpdateBandStackRegisters();

            Audio.console = this;
            FWCMidi.console = this;
            Display.console = this;

            chkDSPNB2.Enabled = true;

            vfoa_hover_digit = -1;
            vfob_hover_digit = -1;

            rx1_ant_by_band = new FWCAnt[(int)Band.LAST];
            for(int i=0; i<(int)Band.LAST; i++) rx1_ant_by_band[i] = FWCAnt.ANT1;
            rx2_ant_by_band = new FWCAnt[(int)Band.LAST];
            for(int i=0; i<(int)Band.LAST; i++) rx2_ant_by_band[i] = FWCAnt.RX2IN;
            tx_ant_by_band = new FWCAnt[(int)Band.LAST];
            for(int i=0; i<(int)Band.LAST; i++) tx_ant_by_band[i] = FWCAnt.ANT1;
            rx1_loop_by_band = new bool[(int)Band.LAST];
            rx1_preamp_by_band = new PreampMode[(int)Band.LAST];
            for(int i=0; i<(int)Band.LAST; i++) rx1_preamp_by_band[i] = PreampMode.HIGH;
            rx2_preamp_by_band = new PreampMode[(int)Band.LAST];
            for(int i=0; i<(int)Band.LAST; i++) rx2_preamp_by_band[i] = PreampMode.HIGH;
            power_by_band = new int[(int)Band.LAST];
            for(int i=0; i<(int)Band.LAST; i++) power_by_band[i] = 50;
            rx1_agct_by_band = new int[(int)Band.LAST];
            for(int i=0; i<(int)Band.LAST; i++) rx1_agct_by_band[i] = 90;
            rx2_agct_by_band = new int[(int)Band.LAST];
            for(int i=0; i<(int)Band.LAST; i++) rx2_agct_by_band[i] = 90;
            tx1_by_band = new bool[(int)Band.LAST];
            tx2_by_band = new bool[(int)Band.LAST];
            tx3_by_band = new bool[(int)Band.LAST];

            for(int i=0; i<(int)Band.LAST; i++)
                tx1_by_band[i] = tx2_by_band[i] = tx3_by_band[i] = true;

            vhf_text = new ButtonTS[15];
            vhf_text[0] = btnBandVHF0;
            vhf_text[1] = btnBandVHF1;
            vhf_text[2] = btnBandVHF2;
            vhf_text[3] = btnBandVHF3;
            vhf_text[4] = btnBandVHF4;
            vhf_text[5] = btnBandVHF5;
            vhf_text[6] = btnBandVHF6;
            vhf_text[7] = btnBandVHF7;
            vhf_text[8] = btnBandVHF8;
            vhf_text[9] = btnBandVHF9;
            vhf_text[10] = btnBandVHF10;
            vhf_text[11] = btnBandVHF11;
            vhf_text[12] = btnBandVHF12;
            vhf_text[13] = btnBandVHF13;

            power_table = new float[(int)Band.LAST][];
            for(int i=0; i<(int)Band.LAST; i++)
                power_table[i] = new float[13];

            rx1_image_gain_table = new float[(int)Band.LAST];
            rx1_image_phase_table = new float[(int)Band.LAST];
            rx2_image_gain_table = new float[(int)Band.LAST];
            rx2_image_phase_table = new float[(int)Band.LAST];
            tx_image_gain_table = new float[(int)Band.LAST];
            tx_image_phase_table = new float[(int)Band.LAST];

            tx_carrier_table = new int[(int)Band.LAST][];
            for(int i=0; i<(int)Band.LAST; i++)
            {
                tx_carrier_table[i] = new int[4];
                for(int j=0; j<4; j++)
                    tx_carrier_table[i][j] = 128;
            }

            pa_bias_table = new int[4][]; // 4 groups of 8 pot settings
            for(int i=0; i<4; i++)
            {
                pa_bias_table[i] = new int[8];
                for(int j=0; j<8; j++)
                    pa_bias_table[i][j] = 0;
            }

            rx1_level_table = new float[(int)Band.LAST][]; // 3 settings per band (display_offset, preamp, multimeter offset)
            for(int i=0; i<(int)Band.LAST; i++)
            {
                rx1_level_table[i] = new float[3];
                rx1_level_table[i][0] = -59.2f;	// setup defaults;
                rx1_level_table[i][1] = -13.5f;
                rx1_level_table[i][2] = -32.0f;
            }

            rx2_level_table = new float[(int)Band.LAST][]; // 3 settings per band (display_offset, preamp, multimeter offset)
            for(int i=0; i<(int)Band.LAST; i++)
            {
                rx2_level_table[i] = new float[3];
                rx2_level_table[i][0] = -59.2f;	// setup defaults;
                rx2_level_table[i][1] = -13.5f;
                rx2_level_table[i][2] = -32.0f;
            }

            pa_bridge_table = new float[(int)Band.LAST][];
            for(int i=0; i<(int)Band.LAST; i++)
            {
                pa_bridge_table[i] = new float[6]; // 1, 2, 5, 10, 20, 90
                for(int j=0; j<6; j++)
                    pa_bridge_table[i][j] = 0.0f;
            }

            swr_table = new float[(int)Band.LAST];
            for(int i=0; i<(int)Band.LAST; i++)
                swr_table[i] = 1.0f;

            atu_tuning = false;
            tune_power = 10;
            calibrating = false;
            run_setup_wizard = true;

            // get culture specific decimal separator
            separator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;

            last_band = "";						// initialize bandstack

            wheel_tune_list = new double[13];		// initialize wheel tuning list array
            wheel_tune_list[0]  =  0.000001;
            wheel_tune_list[1]  =  0.000010;
            wheel_tune_list[2]  =  0.000050;
            wheel_tune_list[3]  =  0.000100;
            wheel_tune_list[4]  =  0.000250;
            wheel_tune_list[5]  =  0.000500;
            wheel_tune_list[6]  =  0.001000;
            wheel_tune_list[7]  =  0.005000;
            wheel_tune_list[8]  =  0.009000;
            wheel_tune_list[9]  =  0.010000;
            wheel_tune_list[10] =  0.100000;
            wheel_tune_list[11] =  1.000000;
            wheel_tune_list[12] = 10.000000;
            wheel_tune_index = 6;

            meter_text_history = new float[multimeter_text_peak_samples];

            current_meter_data = -200.0f;

            rx1_preamp_offset = new float[4];
            rx1_preamp_offset[(int)PreampMode.OFF] = 10.0f;
            rx1_preamp_offset[(int)PreampMode.LOW] = 0.0f;
            rx1_preamp_offset[(int)PreampMode.MED] = -16.0f;
            rx1_preamp_offset[(int)PreampMode.HIGH] = -26.0f;

            rx2_preamp_offset = new float[4];
            rx2_preamp_offset[(int)PreampMode.OFF] = 0.0f;
            rx2_preamp_offset[(int)PreampMode.HIGH] = 14.0f;

            this.ActiveControl = chkPower;		// Power has focus initially

            Display.Target = picDisplay;
            Display.Init();						// Initialize Display variables
            InitDisplayModes();					// Initialize Display Modes
            InitAGCModes();						// Initialize AGC Modes
            InitMultiMeterModes();				// Initialize MultiMeter Modes
            ProcessSampleThreadController[] pstc = new ProcessSampleThreadController[3];
            audio_process_thread = new Thread[3];
            for (uint proc_thread=0;proc_thread<3;proc_thread++)
            {
                pstc[proc_thread] = new ProcessSampleThreadController(proc_thread);
                audio_process_thread[proc_thread] = new Thread( new ThreadStart(pstc[proc_thread].ProcessSampleThread));
                audio_process_thread[proc_thread].Name = "Audio Process Thread "+proc_thread.ToString();
                audio_process_thread[proc_thread].Priority = ThreadPriority.Highest;
                audio_process_thread[proc_thread].IsBackground = true;
                audio_process_thread[proc_thread].Start();

                /*				DttSP.SetThreadCom(proc_thread);

                                audio_process_thread = new Thread(	// create audio process thread
                                    new ThreadStart(DttSP.ProcessSamplesThread));
                                audio_process_thread.Name = "Audio Process Thread ";
                                audio_process_thread.Priority = ThreadPriority.Highest;
                                audio_process_thread.IsBackground = true;
                                audio_process_thread.Start();
                */
            }

            hw = new HW(0x378);					// create hardware object

            siolisten = new SIOListenerII(this);

            Keyer = new CWKeyer2(this);			// create new Keyer
            //			Keyer.sp.BaudRate = 4800;	//[patch_15]
            EQForm = new EQForm(this);

            InitFilterPresets();					// Initialize filter values

            SetupForm = new Setup(this);		// create Setup form
            SetupForm.StartPosition = FormStartPosition.Manual;

            switch(current_model)
            {
                case Model.SDR1000:
                    Hdw.Init();							// Power down hardware
                    Hdw.StandBy();						// initialize hardware device
                    break;
                    /*case Model.SDRX:
                        if(fwc_init)
                        {
                            byte mask;
                            FWC.GetRXPresentMask(out mask);
                            for(int i=0; i<8; i++)
                            {
                                if((mask>>i & 1) == 1)
                                {
                                    fwc_index = i;
                                    break;
                                }
                            }
                        }
                        break;*/
                case Model.FLEX5000:
                    if(fwc_init)
                        fwcMixForm = new FWCMixForm(this);
                    break;
            }

            //SetupForm.GetTxProfiles();
            UpdateTXProfile(SetupForm.TXProfile);

            Common.RestoreForm(EQForm, "EQForm", false);

            XVTRForm = new XVTRForm(this);

            MemForm = new Memory(this);			// create Memory form
            MemForm.StartPosition = FormStartPosition.Manual;

            WaveForm = new WaveControl(this);	// create Wave form
            WaveForm.StartPosition = FormStartPosition.Manual;

            //rx1_filter = Filter.F2600;

            //RX1AGCMode = AGCMode.MED;				// Initialize front panel controls
            comboPreamp.Text = "High";
            chkRX1Preamp.Checked = true;
            vfob_dsp_mode = DSPMode.LSB;
            vfob_filter = Filter.F3;
            comboDisplayMode.Text = "Panadapter";
            comboRX2DisplayMode.Text = "Panadapter";
            comboMeterRXMode.SelectedIndex = 0;
            comboRX2MeterMode.SelectedIndex = 0;
            comboTuneMode.SelectedIndex = 0;
            quick_save_filter = Filter.F3;
            quick_save_mode = DSPMode.LSB;
            udPWR.Value = 50;
            btnDisplayPanCenter_Click(this, EventArgs.Empty);
            comboTXProfile.Text = SetupForm.TXProfile;
            comboDigTXProfile.Text = SetupForm.TXProfile;

            GetState();							// recall saved state

            chkFullDuplex.Checked = false;
            if(rx1_dsp_mode == DSPMode.FIRST || rx1_dsp_mode == DSPMode.LAST)
                radModeLSB.Checked = true;
            if(rx2_dsp_mode == DSPMode.FIRST || rx2_dsp_mode == DSPMode.LAST)
                radRX2ModeLSB.Checked = true;
            if(rx1_filter == Filter.FIRST || rx1_filter == Filter.LAST ||
                (rx1_filter == Filter.NONE && rx1_dsp_mode != DSPMode.DRM && rx1_dsp_mode != DSPMode.SPEC))
                radFilter3.Checked = true;
            if(rx2_filter == Filter.FIRST || rx2_filter == Filter.LAST ||
                (rx2_filter == Filter.NONE && rx2_dsp_mode != DSPMode.DRM && rx2_dsp_mode != DSPMode.SPEC))
                radRX2Filter3.Checked = true;

            txtVFOAFreq_LostFocus(this, EventArgs.Empty);

            /*			if(fwc_init && current_model == Model.FLEX5000 && !run_setup_wizard)
            {
                CheckFLEX5000CalData();
                if(fwcAntForm != null && !fwcAntForm.IsDisposed)
                {
                    fwcAntForm.SetBand(rx1_band);
                    fwcAntForm.CurrentAntMode = current_ant_mode;
                    fwcAntForm.RX1Ant = rx1_ant;
                    fwcAntForm.RX1Loop = rx1_loop;
                    fwcAntForm.RX2Ant = rx2_ant;
                    fwcAntForm.TXAnt = tx_ant;
                }
                CheckRX2CalData();
                RX1Ant = rx1_ant;
                if(FWCEEPROM.RX2OK) RX2Ant = rx2_ant;
            }
            else PAPresent = pa_present;
            */
            PAPresent = pa_present;
            if(comboAGC.SelectedIndex < 0)
                RX1AGCMode = AGCMode.MED;
            if(comboRX2AGC.SelectedIndex < 0)
                comboRX2AGC.Text = "Med";
            txtVFOBFreq_LostFocus(this, EventArgs.Empty);
            txtVFOAFreq_LostFocus(this, EventArgs.Empty);
            udPWR_ValueChanged(this, EventArgs.Empty);
            udAF_ValueChanged(this, EventArgs.Empty);
            udMIC_ValueChanged(this, EventArgs.Empty);
            RX1PreampMode = rx1_preamp_mode;
            RX2PreampMode = rx2_preamp_mode;
            tbDisplayZoom_Scroll(this, EventArgs.Empty);
            tbRX0Gain_Scroll(this, EventArgs.Empty);
            tbRX1Gain_Scroll(this, EventArgs.Empty);
            tbPanMainRX_Scroll(this, EventArgs.Empty);
            tbPanSubRX_Scroll(this, EventArgs.Empty);
            CalcDisplayFreq();

            wheel_tune_index--;					// Setup wheel tuning
            ChangeWheelTuneLeft();
            UpdateDisplayOffsets();

            SetupForm.initCATandPTTprops();   // wjt added -- get console props setup for cat and ptt
            if ( CmdLineArgs != null )
            {
                for ( int i = 0; i < CmdLineArgs.Length; i++ )
                {
                    switch(CmdLineArgs[i])
                    {
                        case "--disable-swr-prot-at-my-risk":
                            DisableSWRProtection = true;
                            this.Text = this.Text + "  *** SWR Protection Disabled! ***";
                            break;
                        case "--high-pwr-am":
                            Audio.high_pwr_am = true;
                            MessageBox.Show("high power am");
                            break;

                        case "--ignore-pp-ptt":  // ignore parallel port ptt -- simple testing w/o hardware attached
                            Hdw.ignorePTT(true);
                            this.Text = this.Text + " *** PP PTT disabled ***";
                            break;

                            // the next 4 opts are for various experimental HPSDR xmit and receive options

                        case "--force-16bit-IQ":
                            Force16bitIQ = true;
                            this.Text = this.Text + " *** 16 bit IQ ***";
                            break;

                        case "--mercury-xmit-hack":
                            DttSP.SetMercuryXmit(true);
                            this.Text = this.Text + " *** MercXmit ***";
                            break;

                        case "--eer-xmit-hack":
                            DttSP.SetEerXmit(true);
                            this.Text = this.Text + " *** EerXmit ***";
                            break;

                        case "--no-send-to-Janus":
                            NoJanusSend = true;
                            this.Text = this.Text + "*** NoJanusSend ***";
                            break;
                    }
                }
            }

            if(comboMeterTXMode.Items.Count > 0 && comboMeterTXMode.SelectedIndex < 0)
                comboMeterTXMode.SelectedIndex = 0;
            chkMOX.Enabled = false;

            RadioDSP.SyncStatic();

            for(int i=0; i<2; i++)
            {
                for(int j=0; j<2; j++)
                {
                    RadioDSPRX dsp_rx = radio.GetDSPRX(i, j);
                    dsp_rx.Force = true;
                    dsp_rx.Update = true;
                    dsp_rx.Force = false;
                }
            }

            for(int i=0; i<1; i++)
            {
                RadioDSPTX dsp_tx = radio.GetDSPTX(i);
                dsp_tx.Force = true;
                dsp_tx.Update = true;
                dsp_tx.Force = false;
            }

            if(this.SetupForm.FlexProfilerInstalled)
                mnuProfiles.Visible = true;
        }