diff --git a/DMR2YSF/Conf.cpp b/DMR2YSF/Conf.cpp index 4297c56..251c02d 100644 --- a/DMR2YSF/Conf.cpp +++ b/DMR2YSF/Conf.cpp @@ -119,7 +119,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++; @@ -146,7 +145,7 @@ bool CConf::read() else if (::strcmp(key, "Debug") == 0) m_debug = ::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) @@ -164,22 +163,13 @@ bool CConf::read() 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); - } - } + 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 (::strcmp(key, "DT2") == 0){ - tokencnt = 0; - while((t = strtok_r(value, ",", &value)) != NULL){ - if(tokencnt < 10){ - m_ysfDT2[tokencnt++] = atoi(t); - } - } - } - } else if (section == SECTION_DMR_NETWORK) { + } else if (section == SECTION_DMR_NETWORK) { if (::strcmp(key, "Id") == 0) m_dmrId = (unsigned int)::atoi(value); else if (::strcmp(key, "RptAddress") == 0) @@ -300,17 +290,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/DMR2YSF/Conf.h b/DMR2YSF/Conf.h index cef1052..cf9af24 100644 --- a/DMR2YSF/Conf.h +++ b/DMR2YSF/Conf.h @@ -46,9 +46,9 @@ public: unsigned char getFICHDataType() const; unsigned char getFICHSQLType() const; unsigned char getFICHSQLCode() const; - unsigned char* getYsfDT1(); - unsigned char* getYsfDT2(); - char* getYsfRadioID(); + std::vector getYsfDT1(); + std::vector getYsfDT2(); + std::string getYsfRadioID(); bool getDaemon() const; bool getDebug() const; @@ -89,9 +89,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; bool m_debug; diff --git a/DMR2YSF/DMR2YSF.cpp b/DMR2YSF/DMR2YSF.cpp index 1face91..9e34c81 100644 --- a/DMR2YSF/DMR2YSF.cpp +++ b/DMR2YSF/DMR2YSF.cpp @@ -665,7 +665,7 @@ int CDMR2YSF::run() unsigned char csd1[20U], csd2[20U]; memset(csd1, '*', YSF_CALLSIGN_LENGTH); 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); @@ -706,7 +706,7 @@ int CDMR2YSF::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); @@ -734,25 +734,33 @@ int CDMR2YSF::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*)" ");