fixed a few issues in VK state machine
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 14 Sep 2015 09:41:06 +0000 (09:41 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 14 Sep 2015 09:41:06 +0000 (09:41 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@2327 01035d8c-6547-0410-b346-abe4f91aad63

freedv-dev/src/fdmdv2_main.cpp
freedv-dev/src/fdmdv2_main.h

index 515f6127adea4004950f2037d09f17d993859c4f..d0b132f5950d6e4555c2767be61b5b8f2670164f 100644 (file)
@@ -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();
 
index d5910b270a3eb9d2442a9e7629ddb08745073a5b..72908f557c36617852822280d517e1fde778be66 100644 (file)
@@ -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;