// DR: should this be on options dialog?
- wxStaticBoxSizer* staticBoxSizer28 = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("VOX PTT Settings")), wxVERTICAL);
+ wxStaticBoxSizer* staticBoxSizer28 = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("VOX PTT Settings")), wxHORIZONTAL);
m_ckHalfDuplex = new wxCheckBox(this, wxID_ANY, _("Half Duplex"), wxDefaultPosition, wxSize(-1,-1), 0);
- m_ckHalfDuplex->SetToolTip(_("Should be checked for VOX operated Tx/Rx switching"));
staticBoxSizer28->Add(m_ckHalfDuplex, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
+ m_ckLeftChannelVoxTone = new wxCheckBox(this, wxID_ANY, _("Left Channel Vox Tone"), wxDefaultPosition, wxSize(-1,-1), 0);
+ staticBoxSizer28->Add(m_ckLeftChannelVoxTone, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
+
mainSizer->Add(staticBoxSizer28, 0, wxEXPAND, 5);
//----------------------------------------------------------------------
if(inout == EXCHANGE_DATA_IN)
{
m_ckHalfDuplex->SetValue(wxGetApp().m_boolHalfDuplex);
+ m_ckLeftChannelVoxTone->SetValue(wxGetApp().m_leftChannelVoxTone);
m_ckUseHamlibPTT->SetValue(wxGetApp().m_boolHamlibUseForPTT);
m_cbRigName->SetSelection(wxGetApp().m_intHamlibRig);
{
wxGetApp().m_boolHalfDuplex = m_ckHalfDuplex->GetValue();
pConfig->Write(wxT("/Rig/HalfDuplex"), wxGetApp().m_boolHalfDuplex);
+ wxGetApp().m_leftChannelVoxTone = m_ckLeftChannelVoxTone->GetValue();
+ pConfig->Write(wxT("/Rig/leftChannelVoxTone"), wxGetApp().m_leftChannelVoxTone);
/* Hamlib settings. */
protected:
wxCheckBox* m_ckHalfDuplex;
+ wxCheckBox* m_ckLeftChannelVoxTone;
/* Hamlib settings.*/
#define MEM8 (FDMDV_OS_TAPS/FDMDV_OS)
#define N48 (N8*FDMDV_OS) // processing buffer size at 48 kHz
#define NUM_CHANNELS 2 // I think most sound cards prefer stereo we will convert to mono
+#define VOX_TONE_FREQ 1000.0 // optional left channel vox tone freq
+#define VOX_TONE_AMP 30000 // optional left channel vox tone amp
#define MAX_BITS_PER_CODEC_FRAME 64 // 1600 bit/s mode
#define MAX_BYTES_PER_CODEC_FRAME (MAX_BITS_PER_CODEC_FRAME/8)
// SNR
#define SNRSLOW_BETA 0.5 // time constant for slow SNR for display
-// Data
+// Text messaging Data
#define MAX_CALLSIGN 80
enum
// PTT -------------------------------------------------------------------
wxGetApp().m_boolHalfDuplex = pConfig->ReadBool(wxT("/Rig/HalfDuplex"), true);
-
+ wxGetApp().m_leftChannelVoxTone = pConfig->ReadBool("/Rig/leftChannelVoxTone", false);
+
wxGetApp().m_boolHamlibUseForPTT = pConfig->ReadBool("/Hamlib/UseForPTT", false);
wxGetApp().m_intHamlibRig = pConfig->ReadLong("/Hamlib/RigName", 0);
wxGetApp().m_strHamlibSerialPort = pConfig->Read("/Hamlib/SerialPort", "");
pConfig->Write(wxT("/Audio/soundCard2SampleRate"), g_soundCard2SampleRate );
pConfig->Write(wxT("/Rig/HalfDuplex"), wxGetApp().m_boolHalfDuplex);
+ pConfig->Write(wxT("/Rig/leftChannelVoxTone"), wxGetApp().m_leftChannelVoxTone);
pConfig->Write("/Hamlib/UseForPTT", wxGetApp().m_boolHamlibUseForPTT);
pConfig->Write("/Hamlib/RigName", wxGetApp().m_intHamlibRig);
pConfig->Write("/Hamlib/SerialPort", wxGetApp().m_strHamlibSerialPort);
g_rxUserdata->micInEQEnable = wxGetApp().m_MicInEQEnable;
g_rxUserdata->spkOutEQEnable = wxGetApp().m_SpkOutEQEnable;
+ // optional tone in left channel to reliably trigger vox
+
+ g_rxUserdata->leftChannelVoxTone = wxGetApp().m_leftChannelVoxTone;
+ g_rxUserdata->voxTonePhase = 0;
+
// Start sound card 1 ----------------------------------------------------------
m_rxInPa->setUserData(g_rxUserdata);
if (g_loopPlayFileFromRadio)
sf_seek(g_sfPlayFileFromRadio, 0, SEEK_SET);
else {
- printf("playFileFromRadio fnsihed, issuing event!\n");
+ printf("playFileFromRadio finished, issuing event!\n");
wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, g_playFileFromRadioEventId );
// call stop/start play menu item, should be thread safe
g_parent->GetEventHandler()->AddPendingEvent( event );
// write signal to both channels */
for(i = 0; i < framesPerBuffer; i++, wptr += 2)
{
- wptr[0] = outdata[i];
- wptr[1] = outdata[i];
+ if (cbData->leftChannelVoxTone) {
+ cbData->voxTonePhase += 2.0*M_PI*VOX_TONE_FREQ/g_soundCard1SampleRate;
+ cbData->voxTonePhase -= 2.0*M_PI*floor(cbData->voxTonePhase/(2.0*M_PI));
+ wptr[0] = VOX_TONE_AMP*cos(cbData->voxTonePhase);
+ //printf("%f %d\n", cbData->voxTonePhase, wptr[0]);
+ }
+ else
+ wptr[0] = outdata[i];
+
+ wptr[1] = outdata[i];
}
}
else
// write signal to both channels */
for(i = 0; i < framesPerBuffer; i++, wptr += 2)
{
- wptr[0] = outdata[i];
- wptr[1] = outdata[i];
+ wptr[0] = outdata[i];
+ wptr[1] = outdata[i];
}
}
else
int m_show_demod_in;
int m_show_test_frame_errors;
+ // optional vox trigger tone
+ bool m_leftChannelVoxTone;
+
// notebook display after tx->rxtransition
int m_rxNbookCtrl;
bool micInEQEnable;
bool spkOutEQEnable;
+ // optional loud tone on left channel to reliably trigger vox
+ bool leftChannelVoxTone;
+ float voxTonePhase;
+
} paCallBackData;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=