diff --git a/src/dlg_ptt.cpp b/src/dlg_ptt.cpp index 2c1034b8..d6202bd6 100644 --- a/src/dlg_ptt.cpp +++ b/src/dlg_ptt.cpp @@ -463,6 +463,10 @@ void ComPortsDlg::ExchangeData(int inout) wxGetApp().m_boolHamlibUseForPTT = m_ckUseHamlibPTT->GetValue(); wxGetApp().m_intHamlibRig = m_cbRigName->GetSelection(); + + Hamlib *hamlib = wxGetApp().m_hamlib; + wxGetApp().m_strHamlibRigName = hamlib->rigIndexToName(wxGetApp().m_intHamlibRig); + wxGetApp().m_strHamlibSerialPort = m_cbSerialPort->GetValue(); wxString s = m_tcIcomCIVHex->GetValue(); @@ -481,7 +485,7 @@ void ComPortsDlg::ExchangeData(int inout) if (g_verbose) fprintf(stderr, "serial rate: %d\n", wxGetApp().m_intHamlibSerialRate); pConfig->Write(wxT("/Hamlib/UseForPTT"), wxGetApp().m_boolHamlibUseForPTT); - pConfig->Write(wxT("/Hamlib/RigName"), wxGetApp().m_intHamlibRig); + pConfig->Write(wxT("/Hamlib/RigNameStr"), wxGetApp().m_strHamlibRigName); pConfig->Write(wxT("/Hamlib/SerialPort"), wxGetApp().m_strHamlibSerialPort); pConfig->Write(wxT("/Hamlib/SerialRate"), wxGetApp().m_intHamlibSerialRate); diff --git a/src/hamlib.cpp b/src/hamlib.cpp index b526bbd0..5449a3f1 100644 --- a/src/hamlib.cpp +++ b/src/hamlib.cpp @@ -84,6 +84,32 @@ static bool rig_cmp(const struct rig_caps *rig1, const struct rig_caps *rig2) { return rig1->rig_model < rig2->rig_model; } +unsigned int Hamlib::rigNameToIndex(std::string rigName) +{ + unsigned int index = 0; + for (auto& entry : m_rigList) + { + char name[128]; + snprintf(name, 128, "%s %s", entry->mfg_name, entry->model_name); + + if (rigName == std::string(name)) + { + return index; + } + + index++; + } + + return -1; +} + +std::string Hamlib::rigIndexToName(unsigned int rigIndex) +{ + char name[128]; + snprintf(name, 128, "%s %s", m_rigList[rigIndex]->mfg_name, m_rigList[rigIndex]->model_name); + return name; +} + freq_t Hamlib::get_frequency(void) const { return m_currFreq; diff --git a/src/hamlib.h b/src/hamlib.h index 60322309..5ca599a1 100644 --- a/src/hamlib.h +++ b/src/hamlib.h @@ -13,6 +13,11 @@ class Hamlib { public: Hamlib(); ~Hamlib(); + + // Name to index lookup and vice versa. + unsigned int rigNameToIndex(std::string rigName); + std::string rigIndexToName(unsigned int rigIndex); + void populateComboBox(wxComboBox *cb); bool connect(unsigned int rig_index, const char *serial_port, const int serial_rate, const int civ_hex = 0); bool ptt(bool press, wxString &hamlibError); diff --git a/src/main.cpp b/src/main.cpp index 4be99e49..dd48fa82 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -325,7 +325,21 @@ void MainFrame::loadConfiguration_() wxGetApp().m_boolHamlibUseForPTT = pConfig->ReadBool("/Hamlib/UseForPTT", false); wxGetApp().m_intHamlibIcomCIVHex = pConfig->ReadLong("/Hamlib/IcomCIVHex", 0); - wxGetApp().m_intHamlibRig = pConfig->ReadLong("/Hamlib/RigName", 0); + + // Note: we're no longer using RigName but we need to bring over the old data + // for backwards compatibility. + wxGetApp().m_strHamlibRigName = pConfig->Read(wxT("/Hamlib/RigNameStr"), wxT("")); + + if (wxGetApp().m_strHamlibRigName == wxT("")) + { + wxGetApp().m_intHamlibRig = pConfig->ReadLong("/Hamlib/RigName", 0); + wxGetApp().m_strHamlibRigName = wxGetApp().m_hamlib->rigIndexToName(wxGetApp().m_intHamlibRig); + } + else + { + wxGetApp().m_intHamlibRig = wxGetApp().m_hamlib->rigNameToIndex(std::string(wxGetApp().m_strHamlibRigName.ToUTF8())); + } + wxGetApp().m_strHamlibSerialPort = pConfig->Read("/Hamlib/SerialPort", ""); wxGetApp().m_intHamlibSerialRate = pConfig->ReadLong("/Hamlib/SerialRate", 0); @@ -718,7 +732,7 @@ MainFrame::~MainFrame() pConfig->Write(wxT("/Rig/SingleRxThread"), wxGetApp().m_boolSingleRxThread); 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/RigNameStr", wxGetApp().m_strHamlibRigName); pConfig->Write("/Hamlib/SerialPort", wxGetApp().m_strHamlibSerialPort); pConfig->Write("/Hamlib/SerialRate", wxGetApp().m_intHamlibSerialRate); pConfig->Write("/Hamlib/IcomCIVHex", wxGetApp().m_intHamlibIcomCIVHex); diff --git a/src/main.h b/src/main.h index 2726672a..31e8b07f 100644 --- a/src/main.h +++ b/src/main.h @@ -198,6 +198,7 @@ class MainApp : public wxApp bool m_boolHamlibUseForPTT; unsigned int m_intHamlibRig; + wxString m_strHamlibRigName; wxString m_strHamlibSerialPort; unsigned int m_intHamlibSerialRate; unsigned int m_intHamlibIcomCIVHex;