From 2266f2d8a7d4d674471b0f94baf9341ac2b38fc6 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Tue, 25 Apr 2023 15:59:35 +0200 Subject: [PATCH] Process hyphen in callsign #33 --- .vscode/tasks.json | 10 ++--- APRS/APRSUtils.cpp | 6 +++ Tests/APRSUtils/calcGPSAIcomCRC.cpp | 2 +- Tests/APRSUtils/dstarCallsignToAPRS.cpp | 51 +++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 Tests/APRSUtils/dstarCallsignToAPRS.cpp diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 6d6532b..9f00615 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -13,10 +13,7 @@ "USE_GPSD=1", "all" ], - "group": { - "kind": "build", - "isDefault": true - }, + "group": "build", "problemMatcher": [] }, { @@ -94,7 +91,10 @@ "ENABLE_DEBUG=1", "USE_GPSD=1" ], - "group": "build", + "group": { + "kind": "build", + "isDefault": true + }, "problemMatcher": [] } ] diff --git a/APRS/APRSUtils.cpp b/APRS/APRSUtils.cpp index 5684088..1d4694c 100644 --- a/APRS/APRSUtils.cpp +++ b/APRS/APRSUtils.cpp @@ -22,6 +22,12 @@ void CAPRSUtils::dstarCallsignToAPRS(std::string& dstarCallsign) { + // 20230425 Fix for https://github.com/F4FXL/DStarGateway/issues/33 + size_t hyphenIndex = dstarCallsign.find('-'); + if(hyphenIndex != std::string::npos) { + dstarCallsign = dstarCallsign.substr(0, hyphenIndex); + } + if(dstarCallsign[dstarCallsign.length() - 1] == ' ') { boost::trim(dstarCallsign); } else { diff --git a/Tests/APRSUtils/calcGPSAIcomCRC.cpp b/Tests/APRSUtils/calcGPSAIcomCRC.cpp index 9d5850c..d6a96d5 100644 --- a/Tests/APRSUtils/calcGPSAIcomCRC.cpp +++ b/Tests/APRSUtils/calcGPSAIcomCRC.cpp @@ -20,7 +20,7 @@ #include "APRSUtils.h" -namespace APRStoDPRSTests +namespace APRSUtilsTests { class APRSUtils_calcGPSAIcomCRC : public ::testing::Test { }; diff --git a/Tests/APRSUtils/dstarCallsignToAPRS.cpp b/Tests/APRSUtils/dstarCallsignToAPRS.cpp new file mode 100644 index 0000000..3bf5792 --- /dev/null +++ b/Tests/APRSUtils/dstarCallsignToAPRS.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021-2022 by Geoffrey Merck F4FXL / KC3FRA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include + +#include "APRSUtils.h" + +namespace APRSUtilsTests +{ + class APRSUtils_dstarCallsignToAPRS : public ::testing::Test { + }; + + TEST_F(APRSUtils_dstarCallsignToAPRS, noBlanks) + { + std::string call("N0CALL"); + CAPRSUtils::dstarCallsignToAPRS(call); + + EXPECT_STRCASEEQ(call.c_str(), "N0CALL") << "Call shall not have changed"; + } + + TEST_F(APRSUtils_dstarCallsignToAPRS, withHyphen) + { + std::string call("N0CALL-H"); + CAPRSUtils::dstarCallsignToAPRS(call); + + EXPECT_STRCASEEQ(call.c_str(), "N0CALL") << "-H shall have been removed"; + } + + TEST_F(APRSUtils_dstarCallsignToAPRS, threeBlanks) + { + std::string call("F4AB B"); + CAPRSUtils::dstarCallsignToAPRS(call); + + EXPECT_STRCASEEQ(call.c_str(), "F4AB-B") << "-H shall have been removed"; + } +} \ No newline at end of file