From e4e2eea9d542393556d0d1b157bd95b3d6a57ad0 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 11 Dec 2016 21:52:53 +0100 Subject: [PATCH] CW Keyer: retain only text, dashes and dots --- sdrbase/dsp/cwkeyer.cpp | 61 ++----- sdrbase/dsp/cwkeyer.h | 8 +- sdrbase/gui/cwkeyergui.cpp | 148 +++------------- sdrbase/gui/cwkeyergui.h | 14 +- sdrbase/gui/cwkeyergui.ui | 352 ++++++++++--------------------------- 5 files changed, 133 insertions(+), 450 deletions(-) diff --git a/sdrbase/dsp/cwkeyer.cpp b/sdrbase/dsp/cwkeyer.cpp index f5209d722..2e51183ed 100644 --- a/sdrbase/dsp/cwkeyer.cpp +++ b/sdrbase/dsp/cwkeyer.cpp @@ -169,7 +169,7 @@ CWKeyer::CWKeyer() : m_elementOn(false), m_loop(false), m_asciiChar('\0'), - m_mode(CWKey), + m_mode(CWNone), m_keyIambicState(KeySilent), m_textState(TextStart) { @@ -215,49 +215,20 @@ void CWKeyer::setMode(CWMode mode) { m_textState = TextStart; } - - m_mode = mode; - } -} - -void CWKeyer::setKey(bool key) -{ - if (m_mode == CWKey) - { - qDebug() << "CWKeyer::setKey: " << key; - m_key = key; - } -} - -void CWKeyer::setDot(bool dotOn) -{ - if (m_mode == CWIambic) - { - if (dotOn) + else if (mode == CWDots) { - m_dash = false; m_dot = true; + m_dash = false; + m_keyIambicState = KeySilent; } - else - { - m_dot = false; - } - } -} - -void CWKeyer::setDash(bool dashOn) -{ - if (m_mode == CWIambic) - { - if (dashOn) + else if (mode == CWDashes) { m_dot = false; m_dash = true; + m_keyIambicState = KeySilent; } - else - { - m_dash = false; - } + + m_mode = mode; } } @@ -265,20 +236,16 @@ int CWKeyer::getSample() { QMutexLocker mutexLocker(&m_mutex); - if (m_mode == CWKey) - { - return m_key ? 1 : 0; - } - else if (m_mode == CWIambic) - { - nextStateIambic(); - return m_key ? 1 : 0; - } - else if (m_mode == CWText) + if (m_mode == CWText) { nextStateText(); return m_key ? 1 : 0; } + else if ((m_mode == CWDots) || (m_mode == CWDashes)) + { + nextStateIambic(); + return m_key ? 1 : 0; + } else { return 0; diff --git a/sdrbase/dsp/cwkeyer.h b/sdrbase/dsp/cwkeyer.h index be32c6462..113b16f85 100644 --- a/sdrbase/dsp/cwkeyer.h +++ b/sdrbase/dsp/cwkeyer.h @@ -31,8 +31,8 @@ public: { CWNone, CWText, - CWKey, - CWIambic + CWDots, + CWDashes } CWMode; typedef enum @@ -67,10 +67,6 @@ public: void setMode(CWMode mode); void setLoop(bool loop) { m_loop = loop; } - void setKey(bool key); - void setDot(bool dotOn); - void setDash(bool dashOn); - int getSample(); bool eom(); void resetText() { m_textState = TextStart; } diff --git a/sdrbase/gui/cwkeyergui.cpp b/sdrbase/gui/cwkeyergui.cpp index e64bd2582..25a8ace36 100644 --- a/sdrbase/gui/cwkeyergui.cpp +++ b/sdrbase/gui/cwkeyergui.cpp @@ -27,10 +27,7 @@ CWKeyerGUI::CWKeyerGUI(QWidget* parent) : QWidget(parent), ui(new Ui::CWKeyerGUI), m_messageQueue(0), - m_cwKeyer(0), - m_key(0x30), - m_keyDot(0x31), - m_keyDash(0x32) + m_cwKeyer(0) { ui->setupUi(this); } @@ -50,9 +47,8 @@ void CWKeyerGUI::setBuddies(MessageQueue* messageQueue, CWKeyer* cwKeyer) void CWKeyerGUI::resetToDefaults() { - m_key = false; - m_keyDot = false; - m_keyDash = false; + ui->cwTextEdit->setText(""); + ui->cwSpeed->setValue(13); } QByteArray CWKeyerGUI::serialize() const @@ -61,9 +57,6 @@ QByteArray CWKeyerGUI::serialize() const s.writeString(1, ui->cwTextEdit->text()); s.writeS32(2, ui->cwSpeed->value()); - s.writeS32(3, ui->morseKeyAssign->currentIndex()); - s.writeS32(4, ui->iambicKeyDotAssign->currentIndex()); - s.writeS32(5, ui->iambicKeyDashAssign->currentIndex()); return s.final(); } @@ -87,12 +80,6 @@ bool CWKeyerGUI::deserialize(const QByteArray& data) ui->cwTextEdit->setText(aString); d.readS32(2, &aValue, 13); ui->cwSpeed->setValue(aValue); - d.readS32(3, &aValue, 0); - ui->morseKeyAssign->setCurrentIndex(aValue); - d.readS32(4, &aValue, 1); - ui->iambicKeyDotAssign->setCurrentIndex(aValue); - d.readS32(5, &aValue, 2); - ui->iambicKeyDashAssign->setCurrentIndex(aValue); applySettings(); return true; @@ -118,49 +105,37 @@ void CWKeyerGUI::on_cwSpeed_valueChanged(int value) m_cwKeyer->setWPM(value); } -void CWKeyerGUI::on_morseKey_toggled(bool checked) +void CWKeyerGUI::on_playDots_toggled(bool checked) { - //ui->morseKey->setEnabled(!checked); - ui->iambicKey->setEnabled(!checked); - ui->playStop->setEnabled(!checked); - m_cwKeyer->setMode(checked ? CWKeyer::CWKey : CWKeyer::CWNone); + //ui->playDots->setEnabled(!checked); // release other source inputs + ui->playDashes->setEnabled(!checked); + ui->playText->setEnabled(!checked); + + m_cwKeyer->setMode(checked ? CWKeyer::CWDots : CWKeyer::CWNone); } -void CWKeyerGUI::on_morseKeyAssign_currentIndexChanged(int index) +void CWKeyerGUI::on_playDashes_toggled(bool checked) { - if ((index >= 0) && (index < 9)) { - m_key = 0x30 + index; - } -} + ui->playDots->setEnabled(!checked); // release other source inputs + //ui->playDashes->setEnabled(!checked); + ui->playText->setEnabled(!checked); -void CWKeyerGUI::on_iambicKey_toggled(bool checked) -{ - ui->morseKey->setEnabled(!checked); - //ui->iambicKey->setEnabled(!checked); - ui->playStop->setEnabled(!checked); - m_cwKeyer->setMode(checked ? CWKeyer::CWIambic : CWKeyer::CWNone); -} - -void CWKeyerGUI::on_iambicKeyDotAssign_currentIndexChanged(int index) -{ - if ((index >= 0) && (index < 9)) { - m_keyDot = 0x30 + index; - } -} - -void CWKeyerGUI::on_iambicKeyDashAssign_currentIndexChanged(int index) -{ - if ((index >= 0) && (index < 9)) { - m_keyDash = 0x30 + index; - } + m_cwKeyer->setMode(checked ? CWKeyer::CWDashes : CWKeyer::CWNone); } void CWKeyerGUI::on_playText_toggled(bool checked) { - ui->morseKey->setEnabled(!checked); - ui->iambicKey->setEnabled(!checked); - //ui->playStop->setEnabled(!checked); + ui->playDots->setEnabled(!checked); // release other source inputs + ui->playDashes->setEnabled(!checked); + //ui->playText->setEnabled(!checked); + m_cwKeyer->setMode(checked ? CWKeyer::CWText : CWKeyer::CWNone); + + if (checked) { + ui->playStop->setChecked(true); + } else { + ui->playStop->setChecked(false); + } } void CWKeyerGUI::on_playLoop_toggled(bool checked) @@ -191,79 +166,4 @@ void CWKeyerGUI::applySettings() value = ui->cwSpeed->value(); ui->cwSpeedText->setText(QString("%1").arg(value)); m_cwKeyer->setWPM(value); - - value = ui->morseKeyAssign->currentIndex(); - if ((value >= 0) && (value < 9)) { - m_key = 0x30 + value; - } - - value = ui->iambicKeyDotAssign->currentIndex(); - if ((value >= 0) && (value < 9)) { - m_keyDot = 0x30 + value; - } - - value = ui->iambicKeyDashAssign->currentIndex(); - if ((value >= 0) && (value < 9)) { - m_keyDash = 0x30 + value; - } } - -void CWKeyerGUI::keyPressEvent(QKeyEvent* keyEvent) -{ - int key = keyEvent->key(); - - // Escape halts CW engine and releases keyboard immediately - // Thus keyboard cannot be left stuck - if (key == Qt::Key_Escape) - { - m_cwKeyer->setMode(CWKeyer::CWNone); - ui->morseKey->setChecked(false); - ui->iambicKey->setChecked(false); - ui->playStop->setChecked(false); - ui->morseKey->setEnabled(true); - ui->iambicKey->setEnabled(true); - ui->playStop->setEnabled(true); - this->releaseKeyboard(); - return; - } - - if (!keyEvent->isAutoRepeat()) - { - qDebug() << "CWKeyerGUI::keyPressEvent: key" - << ": " << key; - if (key == m_key) - { - m_cwKeyer->setKey(true); - } - else if (key == m_keyDot) - { - m_cwKeyer->setDot(true); - } - else if (key == m_keyDash) - { - m_cwKeyer->setDash(true); - } - } -} - -void CWKeyerGUI::keyReleaseEvent(QKeyEvent* keyEvent) -{ - if (!keyEvent->isAutoRepeat()) - { - qDebug() << "CWKeyerGUI::keyReleaseEvent: key" - << ": " << keyEvent->key(); - if (keyEvent->key() == m_key) - { - m_cwKeyer->setKey(false); - } - else if (keyEvent->key() == m_keyDot) - { - m_cwKeyer->setDot(false); - } - else if (keyEvent->key() == m_keyDash) - { - m_cwKeyer->setDash(false); - } - } -} - diff --git a/sdrbase/gui/cwkeyergui.h b/sdrbase/gui/cwkeyergui.h index 0afc1e8a8..c8efdfd1f 100644 --- a/sdrbase/gui/cwkeyergui.h +++ b/sdrbase/gui/cwkeyergui.h @@ -42,18 +42,11 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); -protected: - void keyPressEvent(QKeyEvent* keyEvent); - void keyReleaseEvent(QKeyEvent* keyEvent); - private: Ui::CWKeyerGUI* ui; MessageQueue* m_messageQueue; CWKeyer* m_cwKeyer; - int m_key; - int m_keyDot; - int m_keyDash; void applySettings(); @@ -61,11 +54,8 @@ private slots: void on_cwTextClear_clicked(bool checked); void on_cwTextEdit_editingFinished(); void on_cwSpeed_valueChanged(int value); - void on_morseKey_toggled(bool checked); - void on_morseKeyAssign_currentIndexChanged(int index); - void on_iambicKey_toggled(bool checked); - void on_iambicKeyDotAssign_currentIndexChanged(int index); - void on_iambicKeyDashAssign_currentIndexChanged(int index); + void on_playDots_toggled(bool checked); + void on_playDashes_toggled(bool checked); void on_playText_toggled(bool checked); void on_playLoop_toggled(bool checked); void on_playStop_toggled(bool checked); diff --git a/sdrbase/gui/cwkeyergui.ui b/sdrbase/gui/cwkeyergui.ui index e981c7383..8c1fb1ecd 100644 --- a/sdrbase/gui/cwkeyergui.ui +++ b/sdrbase/gui/cwkeyergui.ui @@ -72,9 +72,9 @@ - + - + 0 0 @@ -85,108 +85,62 @@ 24 - - Morse key - - - - :/morsekey.png:/morsekey.png - - - - 16 - 16 - - - - true - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 35 - 16777215 - + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 106 + 104 + 100 + + + + + - 9 + 12 + 75 + true - Morse key assignment + Send dots + + + . - - - 0 - - - - - 1 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 8 - - - - - 9 - - - + - + 0 0 @@ -197,176 +151,53 @@ 24 - - Iambic key - - - - :/iambickey.png:/iambickey.png - - - - 16 - 16 - - - - true - - - - - - - - 0 - 0 - - - - - 35 - 16777215 - + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 106 + 104 + 100 + + + + + - 9 + 12 + 75 + true - - Iambic key dot assignment + + - - - 1 - - - - 0 - - - - - 1 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 8 - - - - - 9 - - - - - - - - - 0 - 0 - - - - - 35 - 16777215 - - - - - 9 - - - - Iambic key dash assignment - - - 2 - - - - 0 - - - - - 1 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 8 - - - - - 9 - - @@ -379,7 +210,7 @@ - + 0 0 @@ -446,7 +277,7 @@ - + 0 0 @@ -478,7 +309,7 @@ - + 0 0 @@ -579,7 +410,6 @@ - morseKey playLoop