Example #1
0
        unsafe private void KeyThread() // changes yt7pwr
        {
            try
            {
                int[] tmp     = new int[1];
                bool  tune_CW = false;

                //do
                {
                    DttSP.KeyerStartedWait();

                    while (runKeyer)
                    {
                        timer.Start();
                        DttSP.PollTimerWait();
                        CWMonitorState = DttSP.KeyerPlaying();

                        if (tuneCW && !tune_CW)
                        {
                            tune_CW = true;
                            secondary_keyer_dash = false;
                            secondary_keyer_dot  = true;
                        }
                        else if (!tuneCW && tune_CW)
                        {
                            tune_CW = false;
                            secondary_keyer_dash = false;
                            secondary_keyer_dot  = false;
                        }
                        else if (memoryptt)
                        {
                            //console ptt on
                            keyprog             = true;
                            secondary_keyer_dot = secondary_keyer_dash = memorykey;

                            if (console.CWMonitorEnabled)
                            {
                                if (console.CurrentModel == Model.GENESIS_G6)
                                {
                                    if (memorykey)
                                    {
                                        if (!CW_monitor_on && cw_monitor_enabled)
                                        {
                                            console.g6.WriteToDevice(24, 1); // CW monitor on
                                            CW_monitor_off = false;
                                            CW_monitor_on  = true;
                                        }
                                    }
                                    else
                                    {
                                        if (!CW_monitor_off && cw_monitor_enabled)
                                        {
                                            console.g6.WriteToDevice(24, 0);  // CW monitor off
                                            CW_monitor_on  = false;
                                            CW_monitor_off = true;
                                        }
                                    }
                                }
                                else if (console.CurrentModel == Model.GENESIS_G59USB)
                                {
                                    if (memorykey)
                                    {
                                        if (!CW_monitor_on && cw_monitor_enabled)
                                        {
                                            console.g59.WriteToDevice(24, 1); // CW monitor on
                                            CW_monitor_off = false;
                                            CW_monitor_on  = true;
                                        }
                                    }
                                    else
                                    {
                                        if (!CW_monitor_off && cw_monitor_enabled)
                                        {
                                            console.g59.WriteToDevice(24, 0);  // CW monitor off
                                            CW_monitor_on  = false;
                                            CW_monitor_off = true;
                                        }
                                    }
                                }
                                else if (console.CurrentModel == Model.GENESIS_G59NET)
                                {
                                    if (memorykey)
                                    {
                                        if (!CW_monitor_on && cw_monitor_enabled)
                                        {
                                            console.net_device.WriteToDevice(24, 1); // CW monitor on
                                            CW_monitor_off = false;
                                            CW_monitor_on  = true;
                                        }
                                    }
                                    else
                                    {
                                        if (!CW_monitor_off && cw_monitor_enabled)
                                        {
                                            console.net_device.WriteToDevice(24, 0);  // CW monitor off
                                            CW_monitor_on  = false;
                                            CW_monitor_off = true;
                                        }
                                    }
                                }
                                else if (console.CurrentModel == Model.GENESIS_G11)
                                {
                                    if (memorykey)
                                    {
                                        if (!CW_monitor_on && cw_monitor_enabled)
                                        {
                                            console.g11.WriteToDevice(24, 1); // CW monitor on
                                            CW_monitor_off = false;
                                            CW_monitor_on  = true;
                                        }
                                    }
                                    else
                                    {
                                        if (!CW_monitor_off && cw_monitor_enabled)
                                        {
                                            console.g11.WriteToDevice(24, 0);  // CW monitor off
                                            CW_monitor_on  = false;
                                            CW_monitor_off = true;
                                        }
                                    }
                                }
                                else if (console.CurrentModel == Model.GENESIS_G160 ||
                                         console.CurrentModel == Model.GENESIS_G3020 ||
                                         console.CurrentModel == Model.GENESIS_G40 ||
                                         console.CurrentModel == Model.GENESIS_G80)
                                {
                                    if (memorykey)
                                    {
                                        if (!CW_monitor_on && cw_monitor_enabled)
                                        {
                                            CW_monitor(true);
                                            CW_monitor_off = false;
                                            CW_monitor_on  = true;
                                        }
                                    }
                                    else
                                    {
                                        if (!CW_monitor_off && cw_monitor_enabled)
                                        {
                                            CW_monitor(false);
                                            CW_monitor_on  = false;
                                            CW_monitor_off = true;
                                        }
                                    }
                                }
                            }
                        }
                        else if (!tune_CW)
                        {
                            secondary_keyer_dash = false;
                            secondary_keyer_dot  = false;
                            keyprog = false;
                        }

                        if (enabled_secondary_keyer && (secondary_keyer_mox || ptt_bit_bang_enabled))
                        {
                            keyprog = false;

                            switch (secondary_conn_port)
                            {
                            case "None":
                                break;

                            default:     // comm port
                                if (sp2.IsOpen)
                                {
                                    switch (secondary_dot_line)
                                    {
                                    case KeyerLine.DSR:
                                        secondary_keyer_dot = sp2.DsrHolding;
                                        break;

                                    case KeyerLine.CTS:
                                        secondary_keyer_dot = sp2.CtsHolding;
                                        break;

                                    case KeyerLine.DCD:
                                        secondary_keyer_dot = sp2.CDHolding;
                                        break;

                                    case KeyerLine.NONE:
                                        secondary_keyer_dot = false;
                                        break;
                                    }
                                    switch (secondary_dash_line)
                                    {
                                    case KeyerLine.DSR:
                                        secondary_keyer_dash = sp2.DsrHolding;
                                        break;

                                    case KeyerLine.CTS:
                                        secondary_keyer_dash = sp2.CtsHolding;
                                        break;

                                    case KeyerLine.DCD:
                                        secondary_keyer_dash = sp2.CDHolding;
                                        break;

                                    case KeyerLine.NONE:
                                        secondary_keyer_dash = false;
                                        break;
                                    }

                                    if (console.CWMonitorEnabled)
                                    {
                                        if (console.CurrentModel == Model.GENESIS_G59USB)
                                        {
                                            if (CWMonitorState)
                                            {
                                                if (!CW_monitor_on && cw_monitor_enabled)
                                                {
                                                    console.g59.WriteToDevice(24, 1);     // CW monitor on
                                                    CW_monitor_off = false;
                                                    CW_monitor_on  = true;
                                                }
                                            }
                                            else
                                            {
                                                if (!CW_monitor_off && cw_monitor_enabled)
                                                {
                                                    console.g59.WriteToDevice(24, 0);      // CW monitor off
                                                    CW_monitor_on  = false;
                                                    CW_monitor_off = true;
                                                }
                                            }
                                        }
                                        else if (console.CurrentModel == Model.GENESIS_G59NET)
                                        {
                                            if (CWMonitorState)
                                            {
                                                if (!CW_monitor_on && cw_monitor_enabled)
                                                {
                                                    console.net_device.WriteToDevice(24, 1);     // CW monitor on
                                                    CW_monitor_off = false;
                                                    CW_monitor_on  = true;
                                                }
                                            }
                                            else
                                            {
                                                if (!CW_monitor_off && cw_monitor_enabled)
                                                {
                                                    console.net_device.WriteToDevice(24, 0);      // CW monitor off
                                                    CW_monitor_on  = false;
                                                    CW_monitor_off = true;
                                                }
                                            }
                                        }
                                        else if (console.CurrentModel == Model.GENESIS_G11)
                                        {
                                            if (CWMonitorState)
                                            {
                                                if (!CW_monitor_on && cw_monitor_enabled)
                                                {
                                                    console.g11.WriteToDevice(24, 1);     // CW monitor on
                                                    CW_monitor_off = false;
                                                    CW_monitor_on  = true;
                                                }
                                            }
                                            else
                                            {
                                                if (!CW_monitor_off && cw_monitor_enabled)
                                                {
                                                    console.g11.WriteToDevice(24, 0);      // CW monitor off
                                                    CW_monitor_on  = false;
                                                    CW_monitor_off = true;
                                                }
                                            }
                                        }
                                        else if (console.CurrentModel == Model.GENESIS_G160 ||
                                                 console.CurrentModel == Model.GENESIS_G3020 ||
                                                 console.CurrentModel == Model.GENESIS_G40 ||
                                                 console.CurrentModel == Model.GENESIS_G80)
                                        {
                                            if (dtr_cw_monitor && cw_monitor_enabled)
                                            {
                                                if (CWMonitorState)
                                                {
                                                    CW_monitor(true);
                                                }
                                                else
                                                {
                                                    CW_monitor(false);
                                                }
                                            }
                                        }
                                    }
                                }
                                break;
                            }
                        }

                        if (enabled_primary_keyer && !secondary_keyer_mox && !memoryptt)
                        {
                            switch (primary_conn_port)
                            {
                            case "USB":
                            {
                                switch (console.CurrentModel)
                                {
                                case Model.GENESIS_G6:
                                {
                                    if (console.g6.Connected && console.g6.KeyerNewData)
                                    {
                                        keyprog           = false;
                                        primary_keyer_mox = true;

                                        switch (console.g6.KEYER)
                                        {
                                        case 0:                                                                // DASH ON command from USB
                                            primary_keyer_dash = true;
                                            break;

                                        case 1:                                                                // DOT ON command from USB
                                            primary_keyer_dot = true;
                                            break;

                                        case 2:                                                                // DASH OFF command from USB
                                            primary_keyer_dash = false;
                                            break;

                                        case 3:                                                                // DOT OFF command from USB
                                            primary_keyer_dot = false;
                                            break;

                                        case 0xaa:
                                            console.g6.KEYER   = 0xff;
                                            primary_keyer_dot  = false;
                                            primary_keyer_dash = false;
                                            break;

                                        case 0xcc:                                                              // TUN off
                                            console.g11.KEYER  = 0xff;
                                            primary_keyer_dot  = false;
                                            primary_keyer_dash = false;
                                            tuneCW             = false;
                                            break;

                                        default:
                                            primary_keyer_dash = false;
                                            primary_keyer_dot  = false;
                                            break;
                                        }
                                    }
                                }
                                break;

                                case Model.GENESIS_G59USB:
                                {
                                    if (console.g59.Connected && console.g59.KeyerNewData)
                                    {
                                        keyprog           = false;
                                        primary_keyer_mox = true;

                                        switch (console.g59.KEYER)
                                        {
                                        case 0:                                                                // DASH ON command from USB
                                            primary_keyer_dash = true;
                                            break;

                                        case 1:                                                                // DOT ON command from USB
                                            primary_keyer_dot = true;
                                            break;

                                        case 2:                                                                // DASH OFF command from USB
                                            primary_keyer_dash = false;
                                            break;

                                        case 3:                                                                // DOT OFF command from USB
                                            primary_keyer_dot = false;
                                            break;

                                        case 0xaa:
                                            console.g59.KEYER  = 0xff;
                                            primary_keyer_dot  = false;
                                            primary_keyer_dash = false;
                                            break;

                                        case 0xcc:                                                              // TUN off
                                            console.g11.KEYER  = 0xff;
                                            primary_keyer_dot  = false;
                                            primary_keyer_dash = false;
                                            tuneCW             = false;
                                            break;

                                        default:
                                            primary_keyer_dash = false;
                                            primary_keyer_dot  = false;
                                            break;
                                        }
                                    }
                                }
                                break;

                                case Model.GENESIS_G11:
                                {
                                    if (console.g11.Connected && console.g11.KeyerNewData)
                                    {
                                        keyprog           = false;
                                        primary_keyer_mox = true;

                                        switch (console.g11.KEYER)
                                        {
                                        case 0:                                                                // DASH ON command from USB
                                            primary_keyer_dash = true;
                                            break;

                                        case 1:                                                                // DOT ON command from USB
                                            primary_keyer_dot = true;
                                            break;

                                        case 2:                                                                // DASH OFF command from USB
                                            primary_keyer_dash = false;
                                            break;

                                        case 3:                                                                // DOT OFF command from USB
                                            primary_keyer_dot = false;
                                            break;

                                        case 0xaa:
                                            console.g11.KEYER  = 0xff;
                                            primary_keyer_dot  = false;
                                            primary_keyer_dash = false;
                                            break;

                                        case 0xcc:                                                              // TUN off
                                            console.g11.KEYER  = 0xff;
                                            primary_keyer_dot  = false;
                                            primary_keyer_dash = false;
                                            tuneCW             = false;
                                            break;

                                        default:
                                            primary_keyer_dash = false;
                                            primary_keyer_dot  = false;
                                            break;
                                        }
                                    }
                                }
                                break;
                                }
                            }
                            break;

                            case "NET":
                            {
                                if (console.net_device.Connected && console.net_device.KeyerNewData)
                                {
                                    keyprog           = false;
                                    primary_keyer_mox = true;

                                    switch (console.net_device.KEYER)
                                    {
                                    case 0:                                                        // DASH ON command from Network
                                        primary_keyer_dash = true;
                                        primary_keyer_dot  = false;
                                        break;

                                    case 1:                                                        // DOT ON command from Network
                                        primary_keyer_dot  = true;
                                        primary_keyer_dash = false;
                                        break;

                                    case 2:                                                        // DASH OFF command from Network
                                        primary_keyer_dash = false;
                                        break;

                                    case 3:                                                        // DOT OFF command from Network
                                        primary_keyer_dot = false;
                                        break;

                                    case 0xaa:
                                        console.net_device.KEYER = 0xff;
                                        primary_keyer_dot        = false;
                                        primary_keyer_dash       = false;
                                        break;

                                    default:
                                        primary_keyer_dash = false;
                                        primary_keyer_dot  = false;
                                        break;
                                    }
                                }
                            }
                            break;

                            case "QRP2000":
                            {
                                if (console.qrp2000.QRP2000Status())
                                {
                                    keyprog = false;

                                    if (console.MOX)
                                    {
                                        console.qrp2000.SetPTTGetCWInput(1, tmp);
                                    }
                                    else
                                    {
                                        console.qrp2000.SetPTTGetCWInput(0, tmp);
                                    }

                                    if (QRP2000CW1)
                                    {
                                        tmp[0] &= 0x20;
                                    }
                                    else if (QRP2000CW2)
                                    {
                                        tmp[0] &= 0x02;
                                    }

                                    if (tmp[0] == 0x00)
                                    {
                                        primary_keyer_dash = primary_keyer_dot = true;
                                    }
                                    else
                                    {
                                        primary_keyer_dash = primary_keyer_dot = false;
                                    }
                                }
                            }
                            break;

                            default:
                                if (sp.IsOpen)
                                {
                                    keyprog = false;

                                    keyprog            = false;
                                    primary_keyer_dash = sp.CtsHolding;
                                    primary_keyer_dot  = sp.DsrHolding;

                                    if (dtr_cw_monitor && console.CWMonitorEnabled)
                                    {
                                        if (CWMonitorState)
                                        {
                                            CW_monitor(true);
                                        }
                                        else
                                        {
                                            CW_monitor(false);
                                        }
                                    }
                                }
                                break;
                            }
                        }

                        timer.Stop();
                        msdel = (float)timer.DurationMsec;
                        //msdel = (float)DttSP.TimerRead();
                        //Debug.Write(msdel.ToString() + "\n");

                        if (keyprog || secondary_keyer_mox || tune_CW || ptt_bit_bang_enabled)
                        {
                            //keyprog = false;
                            DttSP.KeyValue(msdel, secondary_keyer_dash, secondary_keyer_dot, keyprog);
                            keyprog = false;
                        }
                        else if (primary_keyer_mox)
                        {
                            DttSP.KeyValue(msdel, primary_keyer_dash, primary_keyer_dot, keyprog);
                        }
                        else if (enabled_primary_keyer && !secondary_keyer_mox && !memoryptt)
                        {
                            DttSP.KeyValue(msdel, primary_keyer_dash, primary_keyer_dot, keyprog);
                        }
                        else
                        {
                            DttSP.KeyValue(msdel, false, false, false);
                            primary_keyer_mox   = false;
                            secondary_keyer_mox = false;
                            keyprog             = false;
                        }
                    }
                }// while (true);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error in KeyThread!\n" + ex.ToString());
            }
        }
Example #2
0
        public void KeyThread()
        {
            //SetThreadAffinity(1);
            bool extkey_dash, extkey_dot, keyprog;

            do
            {
                DttSP.KeyerStartedWait();
                for (; DttSP.KeyerRunning();)
                {
                    keyprog = false;
                    timer.Start();
                    DttSP.PollTimerWait();
                    switch (primary_conn_port)
                    {
                    case "SDR":
                        byte b = hw.StatusPort();
                        extkey_dash = ((b & (byte)StatusPin.Dash) != 0);
                        extkey_dot  = ((b & (byte)StatusPin.Dot) != 0);
                        break;

                    case "Radio":
                        extkey_dot  = fwc_dot;
                        extkey_dash = fwc_dash;
                        break;

                    default:                             // COM port
                        extkey_dash = sp.CtsHolding;
                        extkey_dot  = sp.DsrHolding;
                        break;
                    }

                    // handle CWX
                    if (!extkey_dash && !extkey_dot)
                    {
                        if (memoryptt)
                        {
                            //console ptt on
                            keyprog    = true;
                            extkey_dot = extkey_dash = memorykey;
                        }
                        else
                        {
                            //console ptt off
                            keyprog = false;
                        }
                    }

                    if (!extkey_dash && !extkey_dot)                     // don't override primary
                    {
                        switch (secondary_conn_port)
                        {
                        case "None":
                            break;

                        case "CAT":
                            switch (secondary_ptt_line)
                            {
                            case KeyerLine.NONE:
                                if (sp2dotkey)
                                {
                                    extkey_dash = siolisten.SIO.isDSR();
                                }
                                else
                                {
                                    extkey_dot = siolisten.SIO.isCTS();
                                }
                                break;

                            case KeyerLine.DTR:                                     // look at DSR since we are on the other side of the null modem cable
                                keyerptt = siolisten.SIO.isDSR();
                                //										extkey_dot = System.Convert.ToByte(sp2.CtsHolding);
                                break;

                            case KeyerLine.RTS:                                     // look at CTS since we are on the other side of the null modem cable
                                keyerptt = siolisten.SIO.isCTS();
                                //										extkey_dash  = System.Convert.ToByte(sp2.DsrHolding);
                                break;
                            }

                            switch (secondary_key_line)
                            {
                            case KeyerLine.NONE:
                                if (sp2dotkey)
                                {
                                    extkey_dash = siolisten.SIO.isDSR();
                                }
                                else
                                {
                                    extkey_dot = siolisten.SIO.isCTS();
                                }
                                break;

                            case KeyerLine.DTR:                                     // look at DSR since we are on the other side of the null modem cable
                                extkey_dot = siolisten.SIO.isDSR();
                                //										Debug.WriteLine("extkey_dot: "+extkey_dot);
                                break;

                            case KeyerLine.RTS:                                     // look at CTS since we are on the other side of the null modem cable
                                extkey_dash = siolisten.SIO.isCTS();
                                break;
                            }

                            //								if (extkey_dash || extkey_dot)
                            //									keyprog = true;
                            //								else keyprog = false;
                            //								//Debug.WriteLine("keyprog: "+keyprog);
                            break;

#if false
                        // wjtFIXME!! - merged from KD5TFD's HPSDR 1.6.3 tree - sr xmit
                        case "BB-PTT":
                            Console c = Console.getConsole();


                            if ((extkey_dash == 0) && (extkey_dot == 0))                           // don't override primary
                            {
                                switch (secondary_ptt_line)
                                {
                                case KeyerLine.NONE:
                                    if (sp2dotkey)
                                    {
                                        extkey_dash = System.Convert.ToByte(c.serialPTT.isDSR());
                                    }
                                    else
                                    {
                                        extkey_dot = System.Convert.ToByte(c.serialPTT.isCTS());
                                    }
                                    break;

                                case KeyerLine.DTR:                                         // look at DSR since we are on the other side of the null modem cable
                                    keyerptt = c.serialPTT.isDSR();
                                    //										extkey_dot = System.Convert.ToByte(sp2.CtsHolding);
                                    break;

                                case KeyerLine.RTS:                                         // look at CTS since we are on the other side of the null modem cable
                                    keyerptt = c.serialPTT.isCTS();
                                    //										extkey_dash  = System.Convert.ToByte(sp2.DsrHolding);
                                    break;
                                }

                                switch (secondary_key_line)
                                {
                                case KeyerLine.NONE:
                                    if (sp2dotkey)
                                    {
                                        extkey_dash = System.Convert.ToByte(c.serialPTT.isDSR());
                                    }
                                    else
                                    {
                                        extkey_dot = System.Convert.ToByte(c.serialPTT.isCTS());
                                    }
                                    break;

                                case KeyerLine.DTR:                                         // look at DSR since we are on the other side of the null modem cable
                                    extkey_dot = System.Convert.ToByte(c.serialPTT.isDSR());
                                    //										Debug.WriteLine("extkey_dot: "+extkey_dot);
                                    break;

                                case KeyerLine.RTS:                                         // look at CTS since we are on the other side of the null modem cable
                                    extkey_dash = System.Convert.ToByte(c.serialPTT.isCTS());
                                    break;
                                }

                                if ((extkey_dash + extkey_dot) != 0)
                                {
                                    keyprog = 1;
                                }
                                else
                                {
                                    keyprog = 0;
                                }
                                //								Debug.WriteLine("keyprog: "+keyprog);
                            }
                            else
                            {
                                keyprog = 0;
                            }
                            break;
#endif

                        default:                                 // comm port
                            switch (secondary_ptt_line)
                            {
                            case KeyerLine.NONE:
                                if (sp2dotkey)
                                {
                                    extkey_dash = sp2.DsrHolding;
                                }
                                else
                                {
                                    extkey_dot = sp2.CtsHolding;
                                }
                                break;

                            case KeyerLine.DTR:                                     // look at DSR since we are on the other side of the null modem cable
                                keyerptt = sp2.DsrHolding;
                                break;

                            case KeyerLine.RTS:                                     // look at CTS since we are on the other side of the null modem cable
                                keyerptt = sp2.CtsHolding;
                                break;
                            }

                            switch (secondary_key_line)
                            {
                            case KeyerLine.NONE:
                                if (sp2dotkey)
                                {
                                    extkey_dash = sp2.DsrHolding;
                                }
                                else
                                {
                                    extkey_dot = sp2.CtsHolding;
                                }
                                break;

                            case KeyerLine.DTR:                                     // look at DSR since we are on the other side of the null modem cable
                                extkey_dot = sp2.DsrHolding;
                                //										Debug.WriteLine("extkey_dot: "+extkey_dot);
                                break;

                            case KeyerLine.RTS:                                     // look at CTS since we are on the other side of the null modem cable
                                extkey_dash = sp2.CtsHolding;
                                break;
                            }

                            break;
                        }
                        if (extkey_dash || extkey_dot)
                        {
                            keyprog = true;
                        }
                        else
                        {
                            keyprog = false;
                        }
                        //Debug.WriteLine("keyprog: "+keyprog);
                    }
                    timer.Stop();
                    msdel = (float)timer.DurationMsec;
                    //Debug.WriteLine("Dash: "+extkey_dash+" Dot: "+extkey_dot);
                    DttSP.KeyValue(msdel, extkey_dash, extkey_dot, keyprog);
                }
            } while(threads_running);
        }
Example #3
0
        unsafe private void KeyThread() // changes yt7pwr
        {
            try
            {
                int[] tmp     = new int[1];
                bool  tune_CW = false;

                //do
                {
                    DttSP.KeyerStartedWait();

                    while (runKeyer)
                    {
                        timer.Start();
                        DttSP.PollTimerWait();
                        CWMonitorState = DttSP.KeyerPlaying();

                        if (tuneCW && !tune_CW)
                        {
                            tune_CW = true;
                            secondary_keyer_dash = false;
                            secondary_keyer_dot  = true;
                        }
                        else if (!tuneCW && tune_CW)
                        {
                            tune_CW = false;
                            secondary_keyer_dash = false;
                            secondary_keyer_dot  = false;
                        }
                        else if (memoryptt)
                        {
                            //console ptt on
                            keyprog             = true;
                            secondary_keyer_dot = secondary_keyer_dash = memorykey;

                            if (console.CWMonitorEnabled)
                            {
                                if (console.CurrentModel == Model.LimeSDR)
                                {
                                }
                            }
                        }
                        else if (!tune_CW)
                        {
                            secondary_keyer_dash = false;
                            secondary_keyer_dot  = false;
                            keyprog = false;
                        }

                        if (enabled_secondary_keyer && (secondary_keyer_mox || ptt_bit_bang_enabled))
                        {
                            keyprog = false;

                            switch (secondary_conn_port)
                            {
                            case "None":
                                break;

                            default:     // comm port
                                if (sp2.IsOpen)
                                {
                                    switch (secondary_dot_line)
                                    {
                                    case KeyerLine.DSR:
                                        secondary_keyer_dot = sp2.DsrHolding;
                                        break;

                                    case KeyerLine.CTS:
                                        secondary_keyer_dot = sp2.CtsHolding;
                                        break;

                                    case KeyerLine.DCD:
                                        secondary_keyer_dot = sp2.CDHolding;
                                        break;

                                    case KeyerLine.NONE:
                                        secondary_keyer_dot = false;
                                        break;
                                    }
                                    switch (secondary_dash_line)
                                    {
                                    case KeyerLine.DSR:
                                        secondary_keyer_dash = sp2.DsrHolding;
                                        break;

                                    case KeyerLine.CTS:
                                        secondary_keyer_dash = sp2.CtsHolding;
                                        break;

                                    case KeyerLine.DCD:
                                        secondary_keyer_dash = sp2.CDHolding;
                                        break;

                                    case KeyerLine.NONE:
                                        secondary_keyer_dash = false;
                                        break;
                                    }
                                }
                                break;
                            }
                        }

                        if (enabled_primary_keyer && !secondary_keyer_mox && !memoryptt)
                        {
                            switch (primary_conn_port)
                            {
                            case "USB":
                            {
                                switch (console.CurrentModel)
                                {
                                case Model.LimeSDR:
                                {
                                    if (console.limeSDR.device != null && console.limeSDR.connected)
                                    {
                                        uint key = console.limeSDR.device.ReadKeyer();
                                        key = key & 0xc0;
                                        //Debug.Write("Keyer: " + key.ToString() + " \n");

                                        if (key == 0x40)
                                        {
                                            primary_keyer_dash = true;
                                            primary_keyer_dot  = false;
                                        }
                                        else if (key == 0x80)
                                        {
                                            primary_keyer_dot  = true;
                                            primary_keyer_dash = false;
                                        }
                                        else
                                        {
                                            primary_keyer_dot  = false;
                                            primary_keyer_dash = false;
                                        }
                                    }
                                    else
                                    {
                                        primary_keyer_dot  = false;
                                        primary_keyer_dash = false;
                                    }
                                }
                                break;
                                }
                            }
                            break;

                            default:
                                if (sp.IsOpen)
                                {
                                    keyprog = false;

                                    keyprog            = false;
                                    primary_keyer_dash = sp.CtsHolding;
                                    primary_keyer_dot  = sp.DsrHolding;

                                    if (dtr_cw_monitor && console.CWMonitorEnabled)
                                    {
                                        if (CWMonitorState)
                                        {
                                            CW_monitor(true);
                                        }
                                        else
                                        {
                                            CW_monitor(false);
                                        }
                                    }
                                }
                                break;
                            }
                        }

                        timer.Stop();
                        msdel = (float)timer.DurationMsec;
                        //msdel = (float)DttSP.TimerRead();
                        //Debug.Write(msdel.ToString() + "\n");

                        if (keyprog || secondary_keyer_mox || tune_CW || ptt_bit_bang_enabled)
                        {
                            //keyprog = false;
                            DttSP.KeyValue(msdel, secondary_keyer_dash, secondary_keyer_dot, keyprog);
                            keyprog = false;
                        }
                        else if (primary_keyer_mox)
                        {
                            DttSP.KeyValue(msdel, primary_keyer_dash, primary_keyer_dot, keyprog);
                        }
                        else if (enabled_primary_keyer && !secondary_keyer_mox && !memoryptt)
                        {
                            DttSP.KeyValue(msdel, primary_keyer_dash, primary_keyer_dot, keyprog);
                        }
                        else
                        {
                            DttSP.KeyValue(msdel, false, false, false);
                            primary_keyer_mox   = false;
                            secondary_keyer_mox = false;
                            keyprog             = false;
                        }
                    }
                }// while (true);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error in KeyThread!\n" + ex.ToString());
            }
        }
Example #4
0
        public void KeyThread()
        {
            byte extkey_dash, extkey_dot;

            do
            {
                DttSP.KeyerStartedWait();
                for (; DttSP.KeyerRunning() != 0;)
                {
                    byte keyprog = 0;
                    timer.Start();
                    DttSP.PollTimerWait();
                    switch (primary_conn_port)
                    {
                    case "SDR":
                        byte b = hw.StatusPort();
                        extkey_dash = (byte)(((b & (byte)StatusPin.Dash) != 0) ? 1:0);
                        extkey_dot  = (byte)(((b & (byte)StatusPin.Dot) != 0) ? 1:0);
                        break;

                    default:                             // COM port
                        extkey_dash = System.Convert.ToByte(sp.CtsHolding);
                        extkey_dot  = System.Convert.ToByte(sp.DsrHolding);
                        break;
                    }

                    // [patch_16
                    // M0PUB : also allow keying via USB-connected AVR processor, running DG8SAQ firmware
                    if ((extkey_dash == 0) && (extkey_dot == 0))                     // don't override primary
                    {
                        extkey_dot = extkey_dash = Console.GetDG8SAQkeyStatus();
                    }
                    // patch_16]

                    if (memoryptt)
                    {
                        //console ptt on
                        keyprog    = 1;
                        extkey_dot = extkey_dash = System.Convert.ToByte(memorykey);
                    }
                    else
                    {
                        keyprog = 0;
                        //console ptt off
                    }
                    switch (secondary_conn_port)
                    {
                    case "None":
                        break;

                    case "CAT":
                        if ((extkey_dash == 0) && (extkey_dot == 0))                               // don't override primary
                        {
                            switch (secondary_ptt_line)
                            {
                            case KeyerLine.NONE:
                                if (sp2dotkey)
                                {
                                    extkey_dash = System.Convert.ToByte(siolisten.SIO.isDSR());
                                }
                                else
                                {
                                    extkey_dot = System.Convert.ToByte(siolisten.SIO.isCTS());
                                }
                                break;

                            case KeyerLine.DTR:                                             // look at DSR since we are on the other side of the null modem cable
                                keyerptt = siolisten.SIO.isDSR();
                                //										extkey_dot = System.Convert.ToByte(sp2.CtsHolding);
                                break;

                            case KeyerLine.RTS:                                             // look at CTS since we are on the other side of the null modem cable
                                keyerptt = siolisten.SIO.isCTS();
                                //										extkey_dash  = System.Convert.ToByte(sp2.DsrHolding);
                                break;
                            }

                            switch (secondary_key_line)
                            {
                            case KeyerLine.NONE:
                                if (sp2dotkey)
                                {
                                    extkey_dash = System.Convert.ToByte(siolisten.SIO.isDSR());
                                }
                                else
                                {
                                    extkey_dot = System.Convert.ToByte(siolisten.SIO.isCTS());
                                }
                                break;

                            case KeyerLine.DTR:                                             // look at DSR since we are on the other side of the null modem cable
                                extkey_dot = System.Convert.ToByte(siolisten.SIO.isDSR());
                                //										Debug.WriteLine("extkey_dot: "+extkey_dot);
                                break;

                            case KeyerLine.RTS:                                             // look at CTS since we are on the other side of the null modem cable
                                extkey_dash = System.Convert.ToByte(siolisten.SIO.isCTS());
                                break;
                            }

                            if ((extkey_dash + extkey_dot) != 0)
                            {
                                keyprog = 1;
                            }
                            else
                            {
                                keyprog = 0;
                            }
                            //								Debug.WriteLine("keyprog: "+keyprog);
                        }
                        else
                        {
                            keyprog = 0;
                        }

                        break;

                    default:                                         // comm port
                        if ((extkey_dash == 0) && (extkey_dot == 0)) // don't override primary
                        {
                            switch (secondary_ptt_line)
                            {
                            case KeyerLine.NONE:
                                if (sp2dotkey)
                                {
                                    extkey_dash = System.Convert.ToByte(sp2.DsrHolding);
                                }
                                else
                                {
                                    extkey_dot = System.Convert.ToByte(sp2.CtsHolding);
                                }
                                break;

                            case KeyerLine.DTR:                                             // look at DSR since we are on the other side of the null modem cable
                                keyerptt = sp2.DsrHolding;
//										extkey_dot = System.Convert.ToByte(sp2.CtsHolding);
                                break;

                            case KeyerLine.RTS:                                             // look at CTS since we are on the other side of the null modem cable
                                keyerptt = sp2.CtsHolding;
//										extkey_dash  = System.Convert.ToByte(sp2.DsrHolding);
                                break;
                            }

                            switch (secondary_key_line)
                            {
                            case KeyerLine.NONE:
                                if (sp2dotkey)
                                {
                                    extkey_dash = System.Convert.ToByte(sp2.DsrHolding);
                                }
                                else
                                {
                                    extkey_dot = System.Convert.ToByte(sp2.CtsHolding);
                                }
                                break;

                            case KeyerLine.DTR:                                             // look at DSR since we are on the other side of the null modem cable
                                extkey_dot = System.Convert.ToByte(sp2.DsrHolding);
//										Debug.WriteLine("extkey_dot: "+extkey_dot);
                                break;

                            case KeyerLine.RTS:                                             // look at CTS since we are on the other side of the null modem cable
                                extkey_dash = System.Convert.ToByte(sp2.CtsHolding);
                                break;
                            }

                            if ((extkey_dash + extkey_dot) != 0)
                            {
                                keyprog = 1;
                            }
                            else
                            {
                                keyprog = 0;
                            }
//								Debug.WriteLine("keyprog: "+keyprog);
                        }
                        else
                        {
                            keyprog = 0;
                        }

                        break;
                    }
                    timer.Stop();
                    msdel = (float)timer.DurationMsec;
                    DttSP.KeyValue(msdel, extkey_dash, extkey_dot, keyprog);
                }
            } while(true);
        }