From b4f762dca14180e4f790b2401bed3f1f539ed855 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 6 Jun 2020 19:22:56 +0100 Subject: [PATCH] Replicate G4KLX patch against YSF2DMR --- YSF2DMR/Conf.cpp | 30 ++++++++++-------------------- YSF2DMR/Conf.h | 13 ++++++++----- YSF2DMR/YSF2DMR.cpp | 28 ++++++++++++++++++---------- 3 files changed, 36 insertions(+), 35 deletions(-) diff --git a/YSF2DMR/Conf.cpp b/YSF2DMR/Conf.cpp index 0684252..7cb61ab 100644 --- a/YSF2DMR/Conf.cpp +++ b/YSF2DMR/Conf.cpp @@ -154,7 +154,6 @@ bool CConf::read() // Remove quotes from the value size_t len = ::strlen(value); char *t; - unsigned char tokencnt = 0; if (len > 1U && *value == '"' && value[len - 1U] == '"') { value[len - 1U] = '\0'; value++; @@ -190,7 +189,7 @@ bool CConf::read() else if (::strcmp(key, "Daemon") == 0) m_daemon = ::atoi(value) == 1; else if (::strcmp(key, "RadioID") == 0) - ::memcpy(m_ysfRadioID, value, 5); + m_ysfRadioID = value; else if (::strcmp(key, "FICHCallsign") == 0) m_fichCallSign = ::atoi(value); else if (::strcmp(key, "FICHCallMode") == 0) @@ -207,21 +206,12 @@ bool CConf::read() m_fichSQLType = ::atoi(value); else if (::strcmp(key, "FICHSQLCode") == 0) m_fichSQLCode = ::atoi(value); - else if (::strcmp(key, "DT1") == 0){ - tokencnt = 0; - while((t = strtok_r(value, ",", &value)) != NULL){ - if(tokencnt < 10){ - m_ysfDT1[tokencnt++] = atoi(t); - } - } - } - else if (::strcmp(key, "DT2") == 0){ - tokencnt = 0; - while((t = strtok_r(value, ",", &value)) != NULL){ - if(tokencnt < 10){ - m_ysfDT2[tokencnt++] = atoi(t); - } - } + else if (::strcmp(key, "DT1") == 0){ + while ((t = strtok_r(value, ",", &value)) != NULL) + m_ysfDT1.push_back(::atoi(t)); + } else if (::strcmp(key, "DT2") == 0){ + while ((t = strtok_r(value, ",", &value)) != NULL) + m_ysfDT2.push_back(::atoi(t)); } } else if (section == SECTION_INFO) { if (::strcmp(key, "TXFrequency") == 0) @@ -421,17 +411,17 @@ unsigned char CConf::getFICHSQLCode() const return m_fichSQLCode; } -unsigned char* CConf::getYsfDT1() +std::vector CConf::getYsfDT1() { return m_ysfDT1; } -unsigned char* CConf::getYsfDT2() +std::vector CConf::getYsfDT2() { return m_ysfDT2; } -char* CConf::getYsfRadioID() +std::string CConf::getYsfRadioID() { return m_ysfRadioID; } diff --git a/YSF2DMR/Conf.h b/YSF2DMR/Conf.h index cac66bd..63308f1 100644 --- a/YSF2DMR/Conf.h +++ b/YSF2DMR/Conf.h @@ -51,10 +51,13 @@ public: unsigned char getFICHDataType() const; unsigned char getFICHSQLType() const; unsigned char getFICHSQLCode() const; + std::vector getYsfDT1(); + std::vector getYsfDT2(); + std::string getYsfRadioID(); unsigned char* getYsfDT1(); unsigned char* getYsfDT2(); - char* getYsfRadioID(); - bool getDaemon() const; + char* getYsfRadioID(); + bool getDaemon() const; // The Info section unsigned int getRxFrequency() const; @@ -128,9 +131,9 @@ private: unsigned char m_fichDataType; unsigned char m_fichSQLType; unsigned char m_fichSQLCode; - unsigned char m_ysfDT1[10U]; - unsigned char m_ysfDT2[10U]; - char m_ysfRadioID[5]; + std::vector m_ysfDT1; + std::vector m_ysfDT2; + std::string m_ysfRadioID; bool m_daemon; unsigned int m_rxFrequency; diff --git a/YSF2DMR/YSF2DMR.cpp b/YSF2DMR/YSF2DMR.cpp index f21018a..a73b99c 100644 --- a/YSF2DMR/YSF2DMR.cpp +++ b/YSF2DMR/YSF2DMR.cpp @@ -957,7 +957,7 @@ int CYSF2DMR::run() unsigned char csd1[20U], csd2[20U]; memset(csd1, '*', YSF_CALLSIGN_LENGTH/2); - memcpy(csd1 + YSF_CALLSIGN_LENGTH/2, m_conf.getYsfRadioID(), YSF_CALLSIGN_LENGTH/2); + memcpy(csd1 + YSF_CALLSIGN_LENGTH/2, m_conf.getYsfRadioID().c_str(), YSF_CALLSIGN_LENGTH/2); memcpy(csd1 + YSF_CALLSIGN_LENGTH, m_netSrc.c_str(), YSF_CALLSIGN_LENGTH); memset(csd2, ' ', YSF_CALLSIGN_LENGTH + YSF_CALLSIGN_LENGTH); @@ -997,7 +997,7 @@ int CYSF2DMR::run() unsigned char csd1[20U], csd2[20U]; memset(csd1, '*', YSF_CALLSIGN_LENGTH/2); - memcpy(csd1 + YSF_CALLSIGN_LENGTH/2, m_conf.getYsfRadioID(), YSF_CALLSIGN_LENGTH/2); + memcpy(csd1 + YSF_CALLSIGN_LENGTH/2, m_conf.getYsfRadioID().c_str(), YSF_CALLSIGN_LENGTH/2); memcpy(csd1 + YSF_CALLSIGN_LENGTH, m_netSrc.c_str(), YSF_CALLSIGN_LENGTH); memset(csd2, ' ', YSF_CALLSIGN_LENGTH + YSF_CALLSIGN_LENGTH); @@ -1024,25 +1024,33 @@ int CYSF2DMR::run() switch (fn) { case 0: memset(dch, '*', YSF_CALLSIGN_LENGTH/2); - memcpy(dch + YSF_CALLSIGN_LENGTH/2, m_conf.getYsfRadioID(), YSF_CALLSIGN_LENGTH/2); + memcpy(dch + YSF_CALLSIGN_LENGTH/2, m_conf.getYsfRadioID().c_str(), YSF_CALLSIGN_LENGTH/2); ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, dch); break; case 1: - ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, (const unsigned char*)m_netSrc.c_str()); + ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, (unsigned char*)m_netSrc.c_str()); break; case 2: - ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, (const unsigned char*)m_netDst.c_str()); + ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, (unsigned char*)m_netDst.c_str()); break; case 5: memset(dch, ' ', YSF_CALLSIGN_LENGTH/2); - memcpy(dch + YSF_CALLSIGN_LENGTH/2, m_conf.getYsfRadioID(), YSF_CALLSIGN_LENGTH/2); + memcpy(dch + YSF_CALLSIGN_LENGTH/2, m_conf.getYsfRadioID().c_str(), YSF_CALLSIGN_LENGTH/2); ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, dch); // Rem3/4 break; - case 6: - ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, m_conf.getYsfDT1()); + case 6: { + unsigned char dt1[10U] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U}; + for (unsigned int i = 0U; i < m_conf.getYsfDT1().size() && i < 10U; i++) + dt1[i] = m_conf.getYsfDT1()[i]; + ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, dt1); + } break; - case 7: - ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, m_conf.getYsfDT2()); + case 7: { + unsigned char dt2[10U] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U}; + for (unsigned int i = 0U; i < m_conf.getYsfDT2().size() && i < 10U; i++) + dt2[i] = m_conf.getYsfDT2()[i]; + ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, dt2); + } break; default: ysfPayload.writeVDMode2Data(m_ysfFrame + 35U, (const unsigned char*)" ");