Exemplo n.º 1
0
        // Event handler invoked when switching between radios (in SO2R) or VFO (in SO1R and SO2V) in DXLog.net
        private void HandleFocusChange()
        {
            CATCommon radio1       = mainForm.COMMainProvider.RadioObject(1);
            int       focusedRadio = mainForm.ContestDataProvider.FocusedRadio;
            bool      modeIsSo2V   = (mainForm.ContestDataProvider.OPTechnique == ContestData.Technique.SO2V);

            if (radio1 == null)
            {
                mainForm.SetMainStatusText("IcomSpeedSynch: Radio 1 is not available.");
                return;
            }

            if (modeIsSo2V && (focusedRadio != lastFocus)) // Only active in SO2V and with ICOM. Ignores redundant events.
            {
                lastFocus = focusedRadio;

                // Update radio's keyer speed
                int ICOMspeed = (255 * (mainForm._cwKeyer.CWSpeed(focusedRadio) - 6)) / (48 - 6); // ICOM scales 6-48 WPM onto 0-255
                IcomSetSpeed[2] = (byte)((ICOMspeed / 100) % 10);
                IcomSetSpeed[3] = (byte)((((ICOMspeed / 10) % 10) << 4) + (ICOMspeed % 10));
                radio1.SendCustomCommand(IcomSetSpeed);

                if (Debug)
                {
                    mainForm.SetMainStatusText(
                        String.Format("IcomSpeedSynch: {0}. Command: [{1}]. Radio {2} CW speed changed to {3} wpm!",
                                      ICOMspeed, BitConverter.ToString(IcomSetSpeed), focusedRadio, mainForm._cwKeyer.CWSpeed(focusedRadio))
                        );
                }
            }
        }
Exemplo n.º 2
0
        // Event handler invoked when switching between VFO (SO2V) in DXLog.net
        void HandleFocusChange()
        {
            CATCommon radio1        = mainForm.COMMainProvider.RadioObject(1);
            int       focusedRadio  = mainForm.ContestDataProvider.FocusedRadio;
            bool      stereoAudio   = mainForm.ListenStatusMode == COMMain.ListenMode.R1R2;
            bool      radio1Present = radio1 != null;

            if (focusedRadio != lastFocus) // Only active in SO2V and with ICOM. Ignore false invokes.
            {
                // Set temporary stereo mode to DXLog's stereo mode to support temporary toggle
                tempStereoAudio = stereoAudio;
                lastFocus       = focusedRadio;

                if (radio1Present)
                {
                    radio1.SendCustomCommand(focusedRadio == 1 ? IcomSelectMain : IcomSelectSub);
                    radio1.SendCustomCommand(stereoAudio || (focusedRadio == 2) ? IcomDualWatchOn : IcomDualWatchOff);
                }

                if (Debug)
                {
                    mainForm.SetMainStatusText(string.Format("IcomSO2V: Listenmode {0}. Focus is Radio #{1}",
                                                             mainForm.ListenStatusMode, focusedRadio));
                }
                else
                {
                    mainForm.SetMainStatusText("Focus on " + ((focusedRadio == 1) ? "main" : "sub") + " VFO. " +
                                               (stereoAudio || (focusedRadio == 2) ? "Both receivers" : "Main receiver only"));
                }
            }
        }
Exemplo n.º 3
0
        // Executes at DXLog.net start
        public void Initialize(FrmMain main)
        {
            CATCommon radio1 = main.COMMainProvider.RadioObject(1);

            mainForm = main;
            bool modeIsSo2V = (mainForm.ContestDataProvider.OPTechnique == ContestData.Technique.SO2V);

            if (modeIsSo2V)
            {
                // Initialize temporary stereo mode to DXLog's stereo mode to support temporary toggle
                // At start up, radio 1 is always focused and stereo audio is disabled
                tempStereoAudio = false;
                lastFocus       = 1;

                main.ContestDataProvider.FocusedRadioChanged += new ContestData.FocusedRadioChange(HandleFocusChange);

                // Only initialize radio if present and ICOM
                if (radio1 != null)
                {
                    if (radio1.IsICOM())
                    {
                        // Initialize radio to DW off, Split off and Main VFO focused
                        radio1.SendCustomCommand(IcomDualWatchOff);
                        radio1.SendCustomCommand(IcomSelectMain);
                        radio1.SendCustomCommand(IcomSplitOff);
                    }
                }
            }
        }
Exemplo n.º 4
0
        // Event handler invoked when switching between VFO in SO2V in DXLog.net
        private void HandleFocusChange()
        {
            CATCommon radio1       = mainForm.COMMainProvider.RadioObject(1);
            int       focusedRadio = mainForm.ContestDataProvider.FocusedRadio;
            bool      stereoAudio  = mainForm.ListenStatusMode == COMMain.ListenMode.R1R2;

            tempStereoToggle = false;

            if (focusedRadio != lastFocusedRadio) // Only active in SO2V. Ignore redundant invokations.
            {
                lastFocusedRadio = focusedRadio;

                if (microHamPort != null)
                {
                    if (stereoAudio)
                    {
                        mainForm.SetListenStatusMode(COMMain.ListenMode.R1R2, true, false);
                    }
                    else
                    {
                        mainForm.SetListenStatusMode(focusedRadio == 1 ? COMMain.ListenMode.R1R1 : COMMain.ListenMode.R2R2, true, false);
                    }
                }

                if (radio1 != null)
                {
                    if (radio1.IsICOM())
                    {
                        radio1.SendCustomCommand(focusedRadio == 1 ? IcomSelectMain : IcomSelectSub);
                    }
                }

                mainForm.SetMainStatusText(string.Format(statusMessage, focusedRadio == 1 ? "Main" : "Sub", stereoAudio ? "Stereo" : "Single receiver"));
            }
        }
        public void Initialize(FrmMain main)
        {
            int       radioIndex, bandIndex, megaHertz;
            CATCommon radio1 = main.COMMainProvider.RadioObject(1);

            cdata    = main.ContestDataProvider;
            mainForm = main;

            if (radio1 != null)                 // Only test if radio is ICOM if radio exist
            {
                if (radio1.IsICOM())
                {
                    cdata.FocusedRadioChanged += new ContestData.FocusedRadioChange(HandleFocusChange);
                }
            }

            // Create look-up table based on actual frequency for simple look-up
            for (radioIndex = 0; radioIndex < 2; radioIndex++)
            {
                for (bandIndex = 0; bandIndex < 12; bandIndex++)
                {
                    megaHertz = (int)(_txpower[radioIndex, bandIndex, 0] / 1000.0);
                    TxPower[radioIndex, megaHertz] = _txpower[radioIndex, bandIndex, 1];
                }
            }

            cdata.ActiveRadioBandChanged += new ContestData.ActiveRadioBandChange(HandleBandChange);
        }
        public void Main(FrmMain main, ContestData cdata, COMMain comMain)
        {
            //byte[] msg1 = new byte[] { 0x17, (byte)'A', (byte)'B', (byte)' ', (byte)'A', (byte)' ', (byte)'B' };
            //byte[] msg2 = new byte[] { 0x17, (byte)'A', (byte)'B', (byte)' ', (byte)'A', (byte)' ', (byte)'B' };
            byte[] msg1 = new byte[] { 0x17, (byte)'A', (byte)'B' };
            byte[] msg2 = new byte[] { 0x17, (byte)'C', (byte)'D' };

            CATCommon radio1 = mainForm.COMMainProvider.RadioObject(1);

            radio1.SendCustomCommand(msg1);
            radio1.SendCustomCommand(msg2);

            //main.SetMainStatusText(String.Format("Experiment: Speed={0} toggleSplit={1}", ICOMspeed, !toggleSplit));
            //main.SetMainStatusText(String.Format("Experiment: Callsign = {0}", mainForm.CurrentEntryLine.ActualQSO.Callsign));
        }
Exemplo n.º 7
0
        // Toggle dual watch when radio 1 is focused in SO2V. Typically mapped to a key in upper left corner of keyboard.
        public void Main(FrmMain main, ContestData cdata, COMMain comMain)
        {
            int       focusedRadio  = cdata.FocusedRadio;
            CATCommon radio1        = comMain.RadioObject(focusedRadio);
            bool      radio1Present = radio1 != null;

            if ((focusedRadio == 1) && cdata.OPTechnique == ContestData.Technique.SO2V)
            { // If VFO A focused, SO2V and radio present
                tempStereoAudio = !tempStereoAudio;
                main.SetMainStatusText(tempStereoAudio ? "Both receivers." : "Main receiver only.");
                if (radio1Present)
                {
                    radio1.SendCustomCommand(tempStereoAudio ? IcomDualWatchOn : IcomDualWatchOff);
                }
            }
        }
Exemplo n.º 8
0
        // Executes at DXLog.net start
        public void Initialize(FrmMain main)
        {
            mainForm = main;
            CATCommon radio1 = main.COMMainProvider.RadioObject(1);

            if (main.ContestDataProvider.OPTechnique == ContestData.Technique.SO2V)
            {
                // Find Microham port
                foreach (COMPort _comport in main.COMMainProvider._com)
                {
                    if (_comport._mk2r != null)
                    {
                        microHamPort = _comport;
                    }
                }

                if (microHamPort != null)
                {
                    // Initialize temporary stereo mode to DXLog's stereo mode to support temporary toggle
                    // At start up, radio 1 is always focused and stereo audio is forced
                    main.SetListenStatusMode(COMMain.ListenMode.R1R2, true, false);
                    tempStereoToggle = false;
                    lastFocusedRadio = 1;

                    main.ContestDataProvider.FocusedRadioChanged += new ContestData.FocusedRadioChange(HandleFocusChange);

                    // Only initialize radio if present and ICOM
                    if (radio1 != null)
                    {
                        if (radio1.IsICOM())
                        {
                            // Initialize radio to DW off, Split off and Main VFO focused
                            radio1.SendCustomCommand(IcomDualWatchOn);
                            radio1.SendCustomCommand(IcomSelectMain);
                            radio1.SendCustomCommand(IcomSplitOff);
                        }
                    }
                }
                else
                {
                    main.COMMainProvider.SignalMessage("ICOM_SO2V: ERROR no Microham device");
                }
            }
        }
Exemplo n.º 9
0
        public void Initialize(FrmMain main)
        {
            CATCommon radio1 = main.COMMainProvider.RadioObject(1);

            cdata     = main.ContestDataProvider;
            mainForm  = main;
            lastFocus = 1;

            if ((radio1 != null) && (mainForm._cwKeyer != null))
            {
                if (radio1.IsICOM())
                {
                    // Subscribe to CW speed change event
                    mainForm._cwKeyer.CWSpeedChange += new CWKey.CWSpeedChangeDelegate(HandleCWSpeedChange);
                    // Subscribe to radio focus change event
                    cdata.FocusedRadioChanged += new ContestData.FocusedRadioChange(HandleFocusChange);
                }
            }
        }
Exemplo n.º 10
0
        // Toggle permanent dual watch, execution of Main is mapped to same key as built-in toggle Ctrl-Alt-S = AltGr-S.
        public void Main(FrmMain main, ContestData cdata, COMMain comMain)
        {
            CATCommon radio1        = comMain.RadioObject(1);
            int       focusedRadio  = cdata.FocusedRadio;
            bool      stereoAudio   = main.ListenStatusMode == COMMain.ListenMode.R1R2;
            bool      modeIsSo2V    = cdata.OPTechnique == ContestData.Technique.SO2V;
            bool      radio1Present = radio1 != null;

            main.SetMainStatusText("Sub receiver " + (stereoAudio ? "not " : "") + "permanently on.");

            if (focusedRadio == 1 && radio1Present && modeIsSo2V)
            {
                if (radio1.IsICOM())
                {
                    radio1.SendCustomCommand(stereoAudio ? IcomDualWatchOff : IcomDualWatchOn);
                }
            }

            // Also execute the normal operation of the key
            main.ScriptContinue = true;
        }
Exemplo n.º 11
0
        private void SetIcomFilter(int filter)
        {
            byte[] IcomSetModeFilter = { 0x26, 0x00, 0x00, 0x00, 0x00 };
            byte[] IcomDisableAPF    = { 0x16, 0x32, 0x00 };

            bool      modeIsSO2V = cdata.OPTechnique == ContestData.Technique.SO2V;
            int       focusedRadio = cdata.FocusedRadio;
            int       physicalRadio = modeIsSO2V ? 1 : focusedRadio;
            CATCommon radio = mainForm.COMMainProvider.RadioObject(physicalRadio);
            int       vfo, mode = 0;

            if ((radio == null) || (!radio.IsICOM()))
            {
                return;
            }

            vfo = ((focusedRadio == 2) && modeIsSO2V) ? 0x01 : 0x00;

            // Only works for modes listed below
            switch ((vfo == 0) ? radio.VFOAMode : radio.VFOBMode)
            {
            case "LSB":
                mode = 0x00;
                break;

            case "USB":
                mode = 0x01;
                break;

            case "AM":
                mode = 0x02;
                break;

            case "CW":
                mode = 0x03;
                break;

            case "RTTY":
                mode = 0x04;
                break;

            case "FM":
                mode = 0x05;
                break;
            }

            IcomSetModeFilter[1] = (byte)vfo;
            IcomSetModeFilter[2] = (byte)mode;
            IcomSetModeFilter[4] = (byte)filter;

            radio.SendCustomCommand(IcomDisableAPF);
            radio.SendCustomCommand(IcomSetModeFilter);

            if (Debug)
            {
                mainForm.SetMainStatusText(String.Format("IcomFilter: VFO {0} changed to FIL{1}. Command: [{2}]. ",
                                                         (vfo == 0) ? "A" : "B", filter, BitConverter.ToString(IcomSetModeFilter)));
            }
            else
            {
                mainForm.SetMainStatusText(String.Format("VFO {0} changed to FIL{1}.",
                                                         (vfo == 0) ? "A" : "B", filter));
            }
        }
Exemplo n.º 12
0
        private void SetIcomFilter(int filter, FrmMain main)
        {
            byte mode;
            bool modeIsSO2V   = main.ContestDataProvider.OPTechnique == ContestData.Technique.SO2V;
            int  focusedRadio = main.ContestDataProvider.FocusedRadio;

            // Physical radio is #1 in SO2V, otherwised the focused radio
            int       physicalRadio = modeIsSO2V ? 1 : focusedRadio;
            CATCommon radio         = main.COMMainProvider.RadioObject(physicalRadio);

            // Act on currently selected VFO. In SO2V, the selected "radio" defines which VFO
            byte vfo = (byte)(((focusedRadio == 2) && modeIsSO2V) ? 0x01 : 0x00);

            // If there is no radio or if it is not ICOM, do nothing
            if (radio == null || !radio.IsICOM())
            {
                return;
            }

            // The set filter CAT command requires mode information
            // Exits and does nothing if current mode is not supported
            switch ((vfo == 0) ? radio.VFOAMode : radio.VFOBMode)
            {
            case "LSB":
                mode = 0x00;
                break;

            case "USB":
                mode = 0x01;
                break;

            case "AM":
                mode = 0x02;
                break;

            case "CW":
                mode = 0x03;
                break;

            case "RTTY":
                mode = 0x04;
                break;

            case "FM":
                mode = 0x05;
                break;

            default:
                return;
            }

            // Always disable APF when switching filter
            byte[] IcomDisableAPF = { 0x16, 0x32, 0x00 };
            radio.SendCustomCommand(IcomDisableAPF);

            // Switch filter
            byte[] IcomSetModeFilter = { 0x26, vfo, mode, 0x00, (byte)filter };
            radio.SendCustomCommand(IcomSetModeFilter);

            if (Debug)
            {
                main.SetMainStatusText(String.Format("IcomFilter: VFO {0} changed to FIL{1}. CI-V command: [{2}]. ",
                                                     (vfo == 0) ? "A" : "B", filter, BitConverter.ToString(IcomSetModeFilter)));
            }
            else
            {
                main.SetMainStatusText(String.Format("VFO {0} changed to FIL{1}.",
                                                     (vfo == 0) ? "A" : "B", filter));
            }
        }