From af49036d41951e5918fa15ba6b887d1c5ec66f1c Mon Sep 17 00:00:00 2001 From: drowe67 Date: Mon, 14 Sep 2015 09:41:06 +0000 Subject: [PATCH] fixed a few issues in VK state machine git-svn-id: https://svn.code.sf.net/p/freetel/code@2327 01035d8c-6547-0410-b346-abe4f91aad63 --- freedv-dev/src/fdmdv2_main.cpp | 25 ++++++++++++++++++------- freedv-dev/src/fdmdv2_main.h | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/freedv-dev/src/fdmdv2_main.cpp b/freedv-dev/src/fdmdv2_main.cpp index 515f6127..d0b132f5 100644 --- a/freedv-dev/src/fdmdv2_main.cpp +++ b/freedv-dev/src/fdmdv2_main.cpp @@ -1381,14 +1381,19 @@ int MainApp::FilterEvent(wxEvent& event) //fprintf(stderr,"frame->m_RxRunning: %d g_modal: %d\n", // frame->m_RxRunning, g_modal); if (frame->m_RxRunning && !g_modal) { - if (frame->m_btnTogPTT->GetValue()) - frame->m_btnTogPTT->SetValue(false); - else - frame->m_btnTogPTT->SetValue(true); - frame->togglePTT(); - frame->VoiceKeyerProcessEvent(VK_SPACE_BAR); + // space bar controls rx/rx if keyer not running + if (frame->vk_state == VK_IDLE) { + if (frame->m_btnTogPTT->GetValue()) + frame->m_btnTogPTT->SetValue(false); + else + frame->m_btnTogPTT->SetValue(true); + frame->togglePTT(); + } + else // spavce bar stops keyer + frame->VoiceKeyerProcessEvent(VK_SPACE_BAR); + return true; // absorb space so we don't toggle control with focus (e.g. Start) } @@ -1487,7 +1492,11 @@ void MainFrame::togglePTT(void) { void MainFrame::OnTogBtnVoiceKeyerClick (wxCommandEvent& event) { - VoiceKeyerProcessEvent(VK_START); + if (vk_state == VK_IDLE) + VoiceKeyerProcessEvent(VK_START); + else + VoiceKeyerProcessEvent(VK_SPACE_BAR); + event.Skip(); } @@ -2278,6 +2287,7 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) m_togBtnOnOff->SetLabel(wxT("Stop")); m_btnTogPTT->Enable(); m_togBtnVoiceKeyer->Enable(); + vk_state = VK_IDLE; m_rb1600->Disable(); m_rb700b->Disable(); @@ -2402,6 +2412,7 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) CloseSerialPort(); m_btnTogPTT->SetValue(false); + VoiceKeyerProcessEvent(VK_SPACE_BAR); stopRxStream(); diff --git a/freedv-dev/src/fdmdv2_main.h b/freedv-dev/src/fdmdv2_main.h index d5910b27..72908f55 100644 --- a/freedv-dev/src/fdmdv2_main.h +++ b/freedv-dev/src/fdmdv2_main.h @@ -451,6 +451,7 @@ class MainFrame : public TopFrame int PollUDP(); bool m_schedule_restore; + int vk_state; void VoiceKeyerProcessEvent(int vk_event); protected: @@ -565,7 +566,6 @@ class MainFrame : public TopFrame // Voice Keyer States - int vk_state; int vk_rx_pause; int vk_repeats, vk_repeat_counter; float vk_rx_time; -- 2.25.1