From ff9ce1ab0ebee3b6ed368b0fa800ca4f38614bca Mon Sep 17 00:00:00 2001 From: drowe67 Date: Sun, 13 Sep 2015 04:58:10 +0000 Subject: [PATCH] added GUI and persistant storage for voice keyer git-svn-id: https://svn.code.sf.net/p/freetel/code@2322 01035d8c-6547-0410-b346-abe4f91aad63 --- freedv-dev/src/dlg_ptt.cpp | 41 ++++++++++++++++++++++++++++++++++ freedv-dev/src/dlg_ptt.h | 6 +++++ freedv-dev/src/fdmdv2_main.cpp | 8 +++++++ freedv-dev/src/fdmdv2_main.h | 4 ++++ freedv-dev/src/topFrame.cpp | 13 ++++++++++- freedv-dev/src/topFrame.h | 2 ++ 6 files changed, 73 insertions(+), 1 deletion(-) diff --git a/freedv-dev/src/dlg_ptt.cpp b/freedv-dev/src/dlg_ptt.cpp index 7c9d5d47..f3bdb4d8 100644 --- a/freedv-dev/src/dlg_ptt.cpp +++ b/freedv-dev/src/dlg_ptt.cpp @@ -54,6 +54,32 @@ ComPortsDlg::ComPortsDlg(wxWindow* parent, wxWindowID id, const wxString& title, mainSizer->Add(staticBoxSizer28, 0, wxEXPAND, 5); + //---------------------------------------------------------------------- + // Voice Keyer + //---------------------------------------------------------------------- + + wxStaticBoxSizer* staticBoxSizer28a = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Voice Keyer")), wxHORIZONTAL); + + wxStaticText *m_staticText28b = new wxStaticText(this, wxID_ANY, _("Wave File: "), wxDefaultPosition, wxDefaultSize, 0); + staticBoxSizer28a->Add(m_staticText28b, 0, wxALIGN_CENTER_VERTICAL, 5); + m_txtCtrlVoiceKeyerWaveFile = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(200,-1), 0); + m_txtCtrlVoiceKeyerWaveFile->SetToolTip(_("Wave file to play for Voice Keyer")); + staticBoxSizer28a->Add(m_txtCtrlVoiceKeyerWaveFile, 0, 0, 5); + + wxStaticText *m_staticText28c = new wxStaticText(this, wxID_ANY, _(" Rx Pause: "), wxDefaultPosition, wxDefaultSize, 0); + staticBoxSizer28a->Add(m_staticText28c, 0, wxALIGN_CENTER_VERTICAL , 5); + m_txtCtrlVoiceKeyerRxPause = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + m_txtCtrlVoiceKeyerRxPause->SetToolTip(_("How long to wait in Rx mode before repeat")); + staticBoxSizer28a->Add(m_txtCtrlVoiceKeyerRxPause, 0, 0, 5); + + wxStaticText *m_staticText28d = new wxStaticText(this, wxID_ANY, _(" Repeats: "), wxDefaultPosition, wxDefaultSize, 0); + staticBoxSizer28a->Add(m_staticText28d, 0, wxALIGN_CENTER_VERTICAL, 5); + m_txtCtrlVoiceKeyerRepeats = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + m_txtCtrlVoiceKeyerRepeats->SetToolTip(_("How long to wait in Rx mode before repeat")); + staticBoxSizer28a->Add(m_txtCtrlVoiceKeyerRepeats, 0, 0, 5); + + mainSizer->Add(staticBoxSizer28a, 0, wxEXPAND, 5); + //---------------------------------------------------------------------- // Hamlib for CAT PTT //---------------------------------------------------------------------- @@ -320,6 +346,12 @@ void ComPortsDlg::ExchangeData(int inout) m_ckHalfDuplex->SetValue(wxGetApp().m_boolHalfDuplex); m_ckLeftChannelVoxTone->SetValue(wxGetApp().m_leftChannelVoxTone); + /* Voice Keyer */ + + m_txtCtrlVoiceKeyerWaveFile->SetValue(wxGetApp().m_txtVoiceKeyerWaveFile); + m_txtCtrlVoiceKeyerRxPause->SetValue(wxGetApp().m_txtVoiceKeyerRxPause); + m_txtCtrlVoiceKeyerRepeats->SetValue(wxGetApp().m_txtVoiceKeyerRepeats); + m_ckUseHamlibPTT->SetValue(wxGetApp().m_boolHamlibUseForPTT); m_cbRigName->SetSelection(wxGetApp().m_intHamlibRig); m_cbSerialPort->SetValue(wxGetApp().m_strHamlibSerialPort); @@ -344,6 +376,15 @@ void ComPortsDlg::ExchangeData(int inout) wxGetApp().m_leftChannelVoxTone = m_ckLeftChannelVoxTone->GetValue(); pConfig->Write(wxT("/Rig/leftChannelVoxTone"), wxGetApp().m_leftChannelVoxTone); + /* Voice Keyer */ + + wxGetApp().m_txtVoiceKeyerWaveFile = m_txtCtrlVoiceKeyerWaveFile->GetValue(); + pConfig->Write(wxT("/VoiceKeyer/WaveFile"), wxGetApp().m_txtVoiceKeyerWaveFile); + wxGetApp().m_txtVoiceKeyerRxPause = m_txtCtrlVoiceKeyerRxPause->GetValue(); + pConfig->Write(wxT("/VoiceKeyer/RxPause"), wxGetApp().m_txtVoiceKeyerRxPause); + wxGetApp().m_txtVoiceKeyerRepeats = m_txtCtrlVoiceKeyerRepeats->GetValue(); + pConfig->Write(wxT("/VoiceKeyer/Repeats"), wxGetApp().m_txtVoiceKeyerRepeats); + /* Hamlib settings. */ wxGetApp().m_boolHamlibUseForPTT = m_ckUseHamlibPTT->GetValue(); diff --git a/freedv-dev/src/dlg_ptt.h b/freedv-dev/src/dlg_ptt.h index 8fa9b9d2..c0bcfcbe 100644 --- a/freedv-dev/src/dlg_ptt.h +++ b/freedv-dev/src/dlg_ptt.h @@ -50,6 +50,12 @@ class ComPortsDlg : public wxDialog wxCheckBox* m_ckHalfDuplex; wxCheckBox* m_ckLeftChannelVoxTone; + /* Voice Keyer */ + + wxTextCtrl *m_txtCtrlVoiceKeyerWaveFile; + wxTextCtrl *m_txtCtrlVoiceKeyerRxPause; + wxTextCtrl *m_txtCtrlVoiceKeyerRepeats; + /* Hamlib settings.*/ wxCheckBox *m_ckUseHamlibPTT; diff --git a/freedv-dev/src/fdmdv2_main.cpp b/freedv-dev/src/fdmdv2_main.cpp index eeae8ada..5970246c 100644 --- a/freedv-dev/src/fdmdv2_main.cpp +++ b/freedv-dev/src/fdmdv2_main.cpp @@ -350,6 +350,10 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) wxGetApp().m_boolHalfDuplex = pConfig->ReadBool(wxT("/Rig/HalfDuplex"), true); wxGetApp().m_leftChannelVoxTone = pConfig->ReadBool("/Rig/leftChannelVoxTone", false); + wxGetApp().m_txtVoiceKeyerWaveFile = pConfig->Read(wxT("/VoiceKeyer/WaveFile"), wxT("voicekeyer.wav")); + wxGetApp().m_txtVoiceKeyerRxPause = pConfig->Read(wxT("/VoiceKeyer/RxPause"), wxT("10")); + wxGetApp().m_txtVoiceKeyerRepeats = pConfig->Read(wxT("/VoiceKeyer/Repeats"), wxT("5")); + wxGetApp().m_boolHamlibUseForPTT = pConfig->ReadBool("/Hamlib/UseForPTT", false); wxGetApp().m_intHamlibRig = pConfig->ReadLong("/Hamlib/RigName", 0); wxGetApp().m_strHamlibSerialPort = pConfig->Read("/Hamlib/SerialPort", ""); @@ -591,6 +595,10 @@ MainFrame::~MainFrame() pConfig->Write(wxT("/Audio/soundCard2OutDeviceNum"), g_soundCard2OutDeviceNum); pConfig->Write(wxT("/Audio/soundCard2SampleRate"), g_soundCard2SampleRate ); + pConfig->Write(wxT("/VoiceKeyer/WaveFile"), wxGetApp().m_txtVoiceKeyerWaveFile); + pConfig->Write(wxT("/VoiceKeyer/RxPause"), wxGetApp().m_txtVoiceKeyerRxPause); + pConfig->Write(wxT("/VoiceKeyer/Repeats"), wxGetApp().m_txtVoiceKeyerRepeats); + pConfig->Write(wxT("/Rig/HalfDuplex"), wxGetApp().m_boolHalfDuplex); pConfig->Write(wxT("/Rig/leftChannelVoxTone"), wxGetApp().m_leftChannelVoxTone); pConfig->Write("/Hamlib/UseForPTT", wxGetApp().m_boolHamlibUseForPTT); diff --git a/freedv-dev/src/fdmdv2_main.h b/freedv-dev/src/fdmdv2_main.h index 8255731f..d963ccb3 100644 --- a/freedv-dev/src/fdmdv2_main.h +++ b/freedv-dev/src/fdmdv2_main.h @@ -155,6 +155,10 @@ class MainApp : public wxApp bool m_boolHalfDuplex; + wxString m_txtVoiceKeyerWaveFile; + wxString m_txtVoiceKeyerRxPause; + wxString m_txtVoiceKeyerRepeats; + bool m_boolHamlibUseForPTT; unsigned int m_intHamlibRig; wxString m_strHamlibSerialPort; diff --git a/freedv-dev/src/topFrame.cpp b/freedv-dev/src/topFrame.cpp index e9ca34fd..359b1064 100644 --- a/freedv-dev/src/topFrame.cpp +++ b/freedv-dev/src/topFrame.cpp @@ -409,6 +409,15 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const bSizer13->Add(m_togBtnAnalog, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); sbSizer5->Add(bSizer13, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); + //------------------------------ + // Voice Keyer Toggle + //------------------------------ + m_togBtnVoiceKeyer = new wxToggleButton(this, wxID_ANY, _("Voice Keyer"), wxDefaultPosition, wxDefaultSize, 0); + m_togBtnVoiceKeyer->SetToolTip(_("Toggle Voice Keyer")); + wxBoxSizer* bSizer13a = new wxBoxSizer(wxVERTICAL); + bSizer13a->Add(m_togBtnVoiceKeyer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); + sbSizer5->Add(bSizer13a, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); + // not implemented on fdmdv2 #ifdef ALC //------------------------------ @@ -424,7 +433,7 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const #endif //------------------------------ - // Toggle Transmit/Receive relays + // PTT button: Toggle Transmit/Receive mode //------------------------------ wxBoxSizer* bSizer11; bSizer11 = new wxBoxSizer(wxVERTICAL); @@ -490,6 +499,7 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const m_togBtnOnOff->Connect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnOnOff), NULL, this); m_togBtnSplit->Connect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnSplitClick), NULL, this); m_togBtnAnalog->Connect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnAnalogClick), NULL, this); + m_togBtnAnalog->Connect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnVoiceKeyerClick), NULL, this); #ifdef ALC m_togBtnALC->Connect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnALCClick), NULL, this); #endif @@ -544,6 +554,7 @@ TopFrame::~TopFrame() m_togBtnOnOff->Disconnect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnOnOff), NULL, this); m_togBtnSplit->Disconnect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnSplitClick), NULL, this); m_togBtnAnalog->Disconnect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnAnalogClick), NULL, this); + m_togBtnAnalog->Disconnect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnVoiceKeyerClick), NULL, this); #ifdef ALC m_togBtnALC->Disconnect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnTogBtnALCClick), NULL, this); #endif diff --git a/freedv-dev/src/topFrame.h b/freedv-dev/src/topFrame.h index 54ec4080..9d29053c 100644 --- a/freedv-dev/src/topFrame.h +++ b/freedv-dev/src/topFrame.h @@ -150,6 +150,7 @@ class TopFrame : public wxFrame virtual void OnTogBtnOnOff( wxCommandEvent& event ) { event.Skip(); } virtual void OnTogBtnSplitClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnTogBtnAnalogClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTogBtnVoiceKeyerClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnTogBtnALCClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnTogBtnPTT( wxCommandEvent& event ) { event.Skip(); } @@ -170,6 +171,7 @@ class TopFrame : public wxFrame wxToggleButton* m_togBtnOnOff; wxToggleButton* m_togBtnSplit; wxToggleButton* m_togBtnAnalog; + wxToggleButton* m_togBtnVoiceKeyer; wxToggleButton* m_togBtnALC; wxToggleButton* m_btnTogPTT; wxToggleButton* m_togBtnLoopRx; -- 2.25.1