From: drowe67 Date: Thu, 6 Jul 2017 21:18:51 +0000 (+0000) Subject: adding serial rate field to hamlib PTT dialog, builds OK, yet to test X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=31382f9bf2b067db983972bc1b36eea2b055c0be;p=freetel-svn-tracking.git adding serial rate field to hamlib PTT dialog, builds OK, yet to test git-svn-id: https://svn.code.sf.net/p/freetel/code@3280 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/freedv-dev/CMakeLists.txt b/freedv-dev/CMakeLists.txt index 6c81304f..24242a81 100644 --- a/freedv-dev/CMakeLists.txt +++ b/freedv-dev/CMakeLists.txt @@ -30,7 +30,7 @@ project(FreeDV) # Set FreeDV version and generate src/version.h # set(FREEDV_VERSION_MAJOR 1) -set(FREEDV_VERSION_MINOR 2) +set(FREEDV_VERSION_MINOR 3) set(FREEDV_VERSION_PATCH FALSE) set(FREEDV_VERSION ${FREEDV_VERSION_MAJOR}.${FREEDV_VERSION_MINOR}) if(FREEDV_VERSION_PATCH) diff --git a/freedv-dev/src/dlg_ptt.cpp b/freedv-dev/src/dlg_ptt.cpp index 138f63f2..0bfe0dc2 100644 --- a/freedv-dev/src/dlg_ptt.cpp +++ b/freedv-dev/src/dlg_ptt.cpp @@ -87,6 +87,7 @@ ComPortsDlg::ComPortsDlg(wxWindow* parent, wxWindowID id, const wxString& title, // Hamlib for CAT PTT //---------------------------------------------------------------------- +#ifdef TTT wxStaticBoxSizer* staticBoxSizer18 = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Hamlib Settings")), wxVERTICAL); wxBoxSizer* gridSizer100 = new wxBoxSizer(wxHORIZONTAL); @@ -114,6 +115,43 @@ ComPortsDlg::ComPortsDlg(wxWindow* parent, wxWindowID id, const wxString& title, staticBoxSizer18->Add(gridSizer100, 1); mainSizer->Add(staticBoxSizer18, 1); +#endif + + wxStaticBoxSizer* staticBoxSizer18 = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Hamlib Settings")), wxHORIZONTAL); + + /* Use Hamlib for PTT checkbox. */ + + m_ckUseHamlibPTT = new wxCheckBox(this, wxID_ANY, _("Use Hamlib PTT"), wxDefaultPosition, wxSize(-1, -1), 0); + m_ckUseHamlibPTT->SetValue(false); + staticBoxSizer18->Add(m_ckUseHamlibPTT, 0, wxALIGN_CENTER_VERTICAL, 0); + + /* Hamlib Rig Type combobox. */ + + staticBoxSizer18->Add(new wxStaticText(this, wxID_ANY, _("Rig Model:"), wxDefaultPosition, wxDefaultSize, 0), + 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 20); + m_cbRigName = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(250, -1), 0, NULL, wxCB_DROPDOWN); + /* TODO(Joel): this is a hack. At the least, need to gurantee that m_hamLib + * exists. */ + wxGetApp().m_hamlib->populateComboBox(m_cbRigName); + m_cbRigName->SetSelection(wxGetApp().m_intHamlibRig); + staticBoxSizer18->Add(m_cbRigName, 0, wxALIGN_CENTER_VERTICAL, 0); + + /* Hamlib Serial Port combobox. */ + + staticBoxSizer18->Add(new wxStaticText(this, wxID_ANY, _("Serial Device:"), wxDefaultPosition, wxDefaultSize, 0), + 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 20); + m_cbSerialPort = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(140, -1), 0, NULL, wxCB_DROPDOWN); + staticBoxSizer18->Add(m_cbSerialPort, 0, wxALIGN_CENTER_VERTICAL, 0); + + /* Hamlib Serial Rate combobox. */ + + staticBoxSizer18->Add(new wxStaticText(this, wxID_ANY, _("Serial Rate:"), wxDefaultPosition, wxDefaultSize, 0), + 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 20); + m_cbSerialRate = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(140, -1), 0, NULL, wxCB_DROPDOWN); + staticBoxSizer18->Add(m_cbSerialRate, 0, wxALIGN_CENTER_VERTICAL, 0); + + + mainSizer->Add(staticBoxSizer18, 0, wxEXPAND, 5); //---------------------------------------------------------------------- // Serial port PTT @@ -329,6 +367,14 @@ void ComPortsDlg::populatePortList() m_cbSerialPort->Append("/dev/ttyUSB1"); m_cbSerialPort->Append("/dev/ttyS0"); m_cbSerialPort->Append("/dev/ttyS1"); + + /* populate Hamlib serial rate combo box */ + + wxString serialRates[] = {"auto", "300", "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200"}; + for(int i=0; iAppend(serialRates[i]); + } + m_cbCtlDevicePath->Clear(); m_cbCtlDevicePath->Append("/dev/ttyUSB0"); m_cbCtlDevicePath->Append("/dev/ttyUSB1"); @@ -357,10 +403,20 @@ void ComPortsDlg::ExchangeData(int inout) m_txtCtrlVoiceKeyerRxPause->SetValue(wxString::Format(wxT("%i"), wxGetApp().m_intVoiceKeyerRxPause)); m_txtCtrlVoiceKeyerRepeats->SetValue(wxString::Format(wxT("%i"), wxGetApp().m_intVoiceKeyerRepeats)); + /* Hamlib */ + m_ckUseHamlibPTT->SetValue(wxGetApp().m_boolHamlibUseForPTT); m_cbRigName->SetSelection(wxGetApp().m_intHamlibRig); m_cbSerialPort->SetValue(wxGetApp().m_strHamlibSerialPort); + if (wxGetApp().m_intHamlibSerialRate == 0) { + m_cbSerialRate->SetSelection(0); + } else { + m_cbSerialRate->SetValue(wxString::Format(wxT("%i"), wxGetApp().m_intHamlibSerialRate)); + } + + /* Serial PTT */ + m_ckUseSerialPTT->SetValue(wxGetApp().m_boolUseSerialPTT); str = wxGetApp().m_strRigCtrlPort; #ifdef __WXMSW__ @@ -399,9 +455,19 @@ void ComPortsDlg::ExchangeData(int inout) wxGetApp().m_intHamlibRig = m_cbRigName->GetSelection(); wxGetApp().m_strHamlibSerialPort = m_cbSerialPort->GetValue(); + wxString s = m_cbSerialRate->GetValue(); + if (s == "auto") { + wxGetApp().m_intHamlibSerialRate = 0; + } else { + m_cbSerialRate->GetValue().ToLong(&tmp); + wxGetApp().m_intHamlibSerialRate = tmp; + } + fprintf(stderr, "serial rate: %ld\n", tmp); + pConfig->Write(wxT("/Hamlib/UseForPTT"), wxGetApp().m_boolHamlibUseForPTT); pConfig->Write(wxT("/Hamlib/RigName"), wxGetApp().m_intHamlibRig); pConfig->Write(wxT("/Hamlib/SerialPort"), wxGetApp().m_strHamlibSerialPort); + pConfig->Write(wxT("/Hamlib/SerialRate"), wxGetApp().m_intHamlibSerialRate); /* Serial settings */ diff --git a/freedv-dev/src/dlg_ptt.h b/freedv-dev/src/dlg_ptt.h index 70b8ff35..623ec391 100644 --- a/freedv-dev/src/dlg_ptt.h +++ b/freedv-dev/src/dlg_ptt.h @@ -62,6 +62,7 @@ class ComPortsDlg : public wxDialog wxCheckBox *m_ckUseHamlibPTT; wxComboBox *m_cbRigName; wxComboBox *m_cbSerialPort; + wxComboBox *m_cbSerialRate; Hamlib *m_hamlib; @@ -95,6 +96,7 @@ protected: void OnCancel(wxCommandEvent& event); void OnApply(wxCommandEvent& event); virtual void OnInitDialog(wxInitDialogEvent& event); + }; #endif // __COMPORTS_DIALOG__ diff --git a/freedv-dev/src/fdmdv2_main.cpp b/freedv-dev/src/fdmdv2_main.cpp index 12a8863b..d15a7a25 100644 --- a/freedv-dev/src/fdmdv2_main.cpp +++ b/freedv-dev/src/fdmdv2_main.cpp @@ -433,6 +433,7 @@ MainFrame::MainFrame(wxString plugInName, wxWindow *parent) : TopFrame(plugInNam wxGetApp().m_boolHamlibUseForPTT = pConfig->ReadBool("/Hamlib/UseForPTT", false); wxGetApp().m_intHamlibRig = pConfig->ReadLong("/Hamlib/RigName", 0); wxGetApp().m_strHamlibSerialPort = pConfig->Read("/Hamlib/SerialPort", ""); + wxGetApp().m_intHamlibSerialRate = pConfig->ReadLong("/Hamlib/SerialRate", 0); wxGetApp().m_boolUseSerialPTT = pConfig->ReadBool(wxT("/Rig/UseSerialPTT"), false); wxGetApp().m_strRigCtrlPort = pConfig->Read(wxT("/Rig/Port"), wxT("")); @@ -512,8 +513,8 @@ MainFrame::MainFrame(wxString plugInName, wxWindow *parent) : TopFrame(plugInNam int mode = pConfig->Read(wxT("/Audio/mode"), (long)0); if (mode == 0) m_rb1600->SetValue(1); - if (mode == 2) - m_rb700b->SetValue(1); + //if (mode == 2) + // m_rb700b->SetValue(1); if (mode == 3) m_rb700c->SetValue(1); if (mode == 4) @@ -697,6 +698,7 @@ MainFrame::~MainFrame() pConfig->Write("/Hamlib/UseForPTT", wxGetApp().m_boolHamlibUseForPTT); pConfig->Write("/Hamlib/RigName", wxGetApp().m_intHamlibRig); pConfig->Write("/Hamlib/SerialPort", wxGetApp().m_strHamlibSerialPort); + pConfig->Write("/Hamlib/SerialRate", wxGetApp().m_intHamlibSerialRate); pConfig->Write(wxT("/File/playFileToMicInPath"), wxGetApp().m_playFileToMicInPath); @@ -726,8 +728,8 @@ MainFrame::~MainFrame() int mode; if (m_rb1600->GetValue()) mode = 0; - if (m_rb700b->GetValue()) - mode = 2; + //if (m_rb700b->GetValue()) + // mode = 2; if (m_rb700c->GetValue()) mode = 3; if (m_rb800xa->GetValue()) @@ -999,7 +1001,7 @@ void MainFrame::OnTimer(wxTimerEvent &evt) m_panelScatter->add_new_samples_scatter(&g_stats.rx_symbols[r][0]); } - if ((freedv_get_mode(g_pfreedv) == FREEDV_MODE_700B) || (freedv_get_mode(g_pfreedv) == FREEDV_MODE_700C)) { + if (/*(freedv_get_mode(g_pfreedv) == FREEDV_MODE_700B) ||*/(freedv_get_mode(g_pfreedv) == FREEDV_MODE_700C)) { if (wxGetApp().m_FreeDV700Combine) { m_panelScatter->setNc(g_Nc/2); /* m_FreeDV700Combine may have changed at run time */ @@ -1339,7 +1341,7 @@ void MainFrame::OnTimer(wxTimerEvent &evt) m_panelTestFrameErrorsHist->add_new_samples(0, ber, 2*FDMDV_NC_MAX); } - if ((freedv_get_mode(g_pfreedv) == FREEDV_MODE_700B) || (freedv_get_mode(g_pfreedv) == FREEDV_MODE_700C)) { + if (/*(freedv_get_mode(g_pfreedv) == FREEDV_MODE_700B) || */(freedv_get_mode(g_pfreedv) == FREEDV_MODE_700C)) { int c; //fprintf(stderr, "after g_error_pattern_fifo read 2\n"); @@ -2402,7 +2404,8 @@ bool MainFrame::OpenHamlibRig() { int rig = wxGetApp().m_intHamlibRig; wxString port = wxGetApp().m_strHamlibSerialPort; - bool status = wxGetApp().m_hamlib->connect(rig, port.mb_str(wxConvUTF8)); + int serial_rate = wxGetApp().m_intHamlibSerialRate; + bool status = wxGetApp().m_hamlib->connect(rig, port.mb_str(wxConvUTF8), serial_rate); if (status == false) wxMessageBox("Couldn't connect to Radio with hamlib", wxT("About"), wxOK | wxICON_ERROR, this); @@ -2434,7 +2437,7 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) vk_state = VK_IDLE; m_rb1600->Disable(); - m_rb700b->Disable(); + //m_rb700b->Disable(); m_rb700c->Disable(); m_rb800xa->Disable(); if (m_rbPlugIn != NULL) @@ -2447,6 +2450,7 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) g_Nc = 16; m_panelScatter->setNc(g_Nc+1); /* +1 for BPSK pilot */ } + #ifdef DISABLED if (m_rb700b->GetValue()) { g_mode = FREEDV_MODE_700B; g_Nc = 14; @@ -2457,6 +2461,7 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) m_panelScatter->setNc(g_Nc); } } + #endif if (m_rb700c->GetValue()) { g_mode = FREEDV_MODE_700C; g_Nc = 14; @@ -2631,7 +2636,7 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) m_togBtnVoiceKeyer->Disable(); m_togBtnOnOff->SetLabel(wxT("Start")); m_rb1600->Enable(); - m_rb700b->Enable(); + //m_rb700b->Enable(); m_rb700c->Enable(); m_rb800xa->Enable(); if (m_rbPlugIn != NULL) diff --git a/freedv-dev/src/fdmdv2_main.h b/freedv-dev/src/fdmdv2_main.h index f14a7587..585fc0c7 100644 --- a/freedv-dev/src/fdmdv2_main.h +++ b/freedv-dev/src/fdmdv2_main.h @@ -184,6 +184,7 @@ class MainApp : public wxApp bool m_boolHamlibUseForPTT; unsigned int m_intHamlibRig; wxString m_strHamlibSerialPort; + unsigned int m_intHamlibSerialRate; Hamlib *m_hamlib; bool m_boolUseSerialPTT; diff --git a/freedv-dev/src/hamlib.cpp b/freedv-dev/src/hamlib.cpp index 575f36a8..6dbf8d0a 100644 --- a/freedv-dev/src/hamlib.cpp +++ b/freedv-dev/src/hamlib.cpp @@ -81,12 +81,12 @@ void Hamlib::populateComboBox(wxComboBox *cb) { } } -bool Hamlib::connect(unsigned int rig_index, const char *serial_port) { +bool Hamlib::connect(unsigned int rig_index, const char *serial_port, const int serial_rate) { /* Look up model from index. */ if (rig_index >= m_rigList.size()) { return false; } - printf("rig: %s %s (%d)\n", m_rigList[rig_index]->mfg_name, + fprintf(stderr, "rig: %s %s (%d)\n", m_rigList[rig_index]->mfg_name, m_rigList[rig_index]->model_name, m_rigList[rig_index]->rig_model); if(m_rig) { @@ -95,14 +95,28 @@ bool Hamlib::connect(unsigned int rig_index, const char *serial_port) { } /* Initialise, configure and open. */ + m_rig = rig_init(m_rigList[rig_index]->rig_model); - /* TODO: Also use baud rate from the screen. */ + if (!m_rig) return false; + + /* TODO we may also need civaddr for Icom */ + + strncpy(m_rig->state.rigport.pathname, serial_port, FILPATHLEN - 1); + if (serial_rate) { + m_rig->state.rigport.parm.serial.rate = serial_rate; + fprintf(stderr, "hamlib: setting serial rate: %d\n", serial_rate); + } + + /* token_t token = rig_token_lookup(m_rig, "rig_pathname"); + if (rig_set_conf(m_rig, token, serial_port) != RIG_OK) { return false; } + */ + if (rig_open(m_rig) == RIG_OK) { return true; } diff --git a/freedv-dev/src/hamlib.h b/freedv-dev/src/hamlib.h index fe3496ff..cf5f34f7 100644 --- a/freedv-dev/src/hamlib.h +++ b/freedv-dev/src/hamlib.h @@ -13,7 +13,7 @@ class Hamlib { Hamlib(); ~Hamlib(); void populateComboBox(wxComboBox *cb); - bool connect(unsigned int rig_index, const char *serial_port); + bool connect(unsigned int rig_index, const char *serial_port, const int serial_rate); bool ptt(bool press); void close(void); diff --git a/freedv-dev/src/topFrame.cpp b/freedv-dev/src/topFrame.cpp index 2092ddeb..4bc5cc6c 100644 --- a/freedv-dev/src/topFrame.cpp +++ b/freedv-dev/src/topFrame.cpp @@ -316,9 +316,9 @@ TopFrame::TopFrame(wxString plugInName, wxWindow* parent, wxWindowID id, const w sbSizer_mode->Add(m_rb1400, 0, wxALIGN_LEFT|wxALL, 1); m_rb700 = new wxRadioButton( this, wxID_ANY, wxT("700"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP); sbSizer_mode->Add(m_rb700, 0, wxALIGN_LEFT|wxALL, 1); -#endif m_rb700b = new wxRadioButton( this, wxID_ANY, wxT("700B"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP); sbSizer_mode->Add(m_rb700b, 0, wxALIGN_LEFT|wxALL, 1); +#endif m_rb700c = new wxRadioButton( this, wxID_ANY, wxT("700C"), wxDefaultPosition, wxDefaultSize, 0); sbSizer_mode->Add(m_rb700c, 0, wxALIGN_LEFT|wxALL, 1); m_rb800xa = new wxRadioButton( this, wxID_ANY, wxT("800XA"), wxDefaultPosition, wxDefaultSize, 0);