From 5fad767288662bf3e3626c06ba3fc09b6653c803 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Wed, 22 Mar 2023 12:33:27 -0400 Subject: [PATCH] rename TSBK_RAW to OSP_TSBK_RAW; add similar raw support to CSBK outbounds; --- dmr/lc/csbk/CSBKFactory.h | 1 + dmr/lc/csbk/CSBK_RAW.cpp | 105 ++++++++++++++++++ dmr/lc/csbk/CSBK_RAW.h | 65 +++++++++++ .../tsbk/{TSBK_RAW.cpp => OSP_TSBK_RAW.cpp} | 17 +-- p25/lc/tsbk/{TSBK_RAW.h => OSP_TSBK_RAW.h} | 16 +-- p25/lc/tsbk/TSBKFactory.h | 3 +- p25/packet/Trunk.cpp | 2 +- 7 files changed, 190 insertions(+), 19 deletions(-) create mode 100644 dmr/lc/csbk/CSBK_RAW.cpp create mode 100644 dmr/lc/csbk/CSBK_RAW.h rename p25/lc/tsbk/{TSBK_RAW.cpp => OSP_TSBK_RAW.cpp} (85%) rename p25/lc/tsbk/{TSBK_RAW.h => OSP_TSBK_RAW.h} (82%) diff --git a/dmr/lc/csbk/CSBKFactory.h b/dmr/lc/csbk/CSBKFactory.h index d90f6643..c36dad6e 100644 --- a/dmr/lc/csbk/CSBKFactory.h +++ b/dmr/lc/csbk/CSBKFactory.h @@ -41,6 +41,7 @@ #include "dmr/lc/csbk/CSBK_PRECCSBK.h" #include "dmr/lc/csbk/CSBK_PV_GRANT.h" #include "dmr/lc/csbk/CSBK_RAND.h" +#include "dmr/lc/csbk/CSBK_RAW.h" #include "dmr/lc/csbk/CSBK_TD_GRANT.h" #include "dmr/lc/csbk/CSBK_TV_GRANT.h" #include "dmr/lc/csbk/CSBK_UU_ANS_RSP.h" diff --git a/dmr/lc/csbk/CSBK_RAW.cpp b/dmr/lc/csbk/CSBK_RAW.cpp new file mode 100644 index 00000000..ff05bb00 --- /dev/null +++ b/dmr/lc/csbk/CSBK_RAW.cpp @@ -0,0 +1,105 @@ +/** +* Digital Voice Modem - Host Software +* GPLv2 Open Source. Use is subject to license terms. +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* @package DVM / Host Software +* +*/ +/* +* Copyright (C) 2023 by Bryan Biedenkapp N2PLL +* +* 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 "Defines.h" +#include "dmr/lc/csbk/CSBK_RAW.h" +#include "Log.h" +#include "Utils.h" + +using namespace dmr::lc::csbk; +using namespace dmr::lc; +using namespace dmr; + +#include +#include + +// --------------------------------------------------------------------------- +// Public Class Members +// --------------------------------------------------------------------------- + +/// +/// Initializes a new instance of the CSBK_RAW class. +/// +CSBK_RAW::CSBK_RAW() : CSBK(), + m_csbk(nullptr) +{ + m_CSBKO = CSBKO_RAND; +} + +/// +/// Finalizes a new instance of the CSBK_RAW class. +/// +CSBK_RAW::~CSBK_RAW() +{ + if (m_csbk != nullptr) { + delete m_csbk; + } +} + +/// +/// Decode a control signalling block. +/// +/// +/// True, if CSBK was decoded, otherwise false. +bool CSBK_RAW::decode(const uint8_t* data) +{ + assert(data != NULL); + + /* stub */ + + return true; +} + +/// +/// Encode a control signalling block. +/// +/// +void CSBK_RAW::encode(uint8_t* data) +{ + assert(data != NULL); + assert(m_csbk != NULL); + + /* stub */ + + CSBK::encode(data, m_csbk); +} + +/// +/// Sets the CSBK to encode. +/// +/// +void CSBK_RAW::setCSBK(const uint8_t* csbk) +{ + assert(csbk != NULL); + + m_CSBKO = csbk[0U] & 0x3FU; // CSBKO + m_lastBlock = (csbk[0U] & 0x80U) == 0x80U; // Last Block Marker + m_FID = csbk[1U]; // Feature ID + + m_csbk = new uint8_t[DMR_CSBK_LENGTH_BYTES]; + ::memset(m_csbk, 0x00U, DMR_CSBK_LENGTH_BYTES); + + ::memcpy(m_csbk, csbk, DMR_CSBK_LENGTH_BYTES); +} diff --git a/dmr/lc/csbk/CSBK_RAW.h b/dmr/lc/csbk/CSBK_RAW.h new file mode 100644 index 00000000..5a255f8b --- /dev/null +++ b/dmr/lc/csbk/CSBK_RAW.h @@ -0,0 +1,65 @@ +/** +* Digital Voice Modem - Host Software +* GPLv2 Open Source. Use is subject to license terms. +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* @package DVM / Host Software +* +*/ +/* +* Copyright (C) 2023 by Bryan Biedenkapp N2PLL +* +* 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. +*/ +#if !defined(__DMR_LC_CSBK__CSBK_RAW_H__) +#define __DMR_LC_CSBK__CSBK_RAW_H__ + +#include "Defines.h" +#include "dmr/lc/CSBK.h" + +namespace dmr +{ + namespace lc + { + namespace csbk + { + // --------------------------------------------------------------------------- + // Class Declaration + // Implements a mechanism to generate raw CSBK data from bytes. + // --------------------------------------------------------------------------- + + class HOST_SW_API CSBK_RAW : public CSBK { + public: + /// Initializes a new instance of the CSBK_RAW class. + CSBK_RAW(); + /// Finalizes a instance of the CSBK_RAW class. + ~CSBK_RAW(); + + /// Decode a trunking signalling block. + virtual bool decode(const uint8_t* data); + /// Encode a trunking signalling block. + virtual void encode(uint8_t* data); + + /// Sets the CSBK to encode. + void setCSBK(const uint8_t* csbk); + + private: + uint8_t* m_csbk; + }; + } // namespace csbk + } // namespace lc +} // namespace dmr + +#endif // __DMR_LC_CSBK__CSBK_RAW_H__ diff --git a/p25/lc/tsbk/TSBK_RAW.cpp b/p25/lc/tsbk/OSP_TSBK_RAW.cpp similarity index 85% rename from p25/lc/tsbk/TSBK_RAW.cpp rename to p25/lc/tsbk/OSP_TSBK_RAW.cpp index 600398d3..73811395 100644 --- a/p25/lc/tsbk/TSBK_RAW.cpp +++ b/p25/lc/tsbk/OSP_TSBK_RAW.cpp @@ -24,7 +24,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "Defines.h" -#include "p25/lc/tsbk/TSBK_RAW.h" +#include "p25/lc/tsbk/OSP_TSBK_RAW.h" #include "Log.h" #include "Utils.h" @@ -40,18 +40,18 @@ using namespace p25; // --------------------------------------------------------------------------- /// -/// Initializes a new instance of the TSBK_RAW class. +/// Initializes a new instance of the OSP_TSBK_RAW class. /// -TSBK_RAW::TSBK_RAW() : TSBK(), +OSP_TSBK_RAW::OSP_TSBK_RAW() : TSBK(), m_tsbk(nullptr) { m_lco = TSBK_IOSP_ACK_RSP; } /// -/// Finalizes a new instance of the TSBK_RAW class. +/// Finalizes a new instance of the OSP_TSBK_RAW class. /// -TSBK_RAW::~TSBK_RAW() +OSP_TSBK_RAW::~OSP_TSBK_RAW() { if (m_tsbk != nullptr) { delete m_tsbk; @@ -64,7 +64,7 @@ TSBK_RAW::~TSBK_RAW() /// /// /// True, if TSBK was decoded, otherwise false. -bool TSBK_RAW::decode(const uint8_t* data, bool rawTSBK) +bool OSP_TSBK_RAW::decode(const uint8_t* data, bool rawTSBK) { assert(data != NULL); @@ -79,9 +79,10 @@ bool TSBK_RAW::decode(const uint8_t* data, bool rawTSBK) /// /// /// -void TSBK_RAW::encode(uint8_t* data, bool rawTSBK, bool noTrellis) +void OSP_TSBK_RAW::encode(uint8_t* data, bool rawTSBK, bool noTrellis) { assert(data != NULL); + assert(m_tsbk != NULL); /* stub */ @@ -92,7 +93,7 @@ void TSBK_RAW::encode(uint8_t* data, bool rawTSBK, bool noTrellis) /// Sets the TSBK to encode. /// /// -void TSBK_RAW::setTSBK(const uint8_t* tsbk) +void OSP_TSBK_RAW::setTSBK(const uint8_t* tsbk) { assert(tsbk != NULL); diff --git a/p25/lc/tsbk/TSBK_RAW.h b/p25/lc/tsbk/OSP_TSBK_RAW.h similarity index 82% rename from p25/lc/tsbk/TSBK_RAW.h rename to p25/lc/tsbk/OSP_TSBK_RAW.h index bacea93c..f84a0824 100644 --- a/p25/lc/tsbk/TSBK_RAW.h +++ b/p25/lc/tsbk/OSP_TSBK_RAW.h @@ -23,8 +23,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#if !defined(__P25_LC_TSBK__TSBK_RAW_H__) -#define __P25_LC_TSBK__TSBK_RAW_H__ +#if !defined(__P25_LC_TSBK__OSP_TSBK_RAW_H__) +#define __P25_LC_TSBK__OSP_TSBK_RAW_H__ #include "Defines.h" #include "p25/lc/TSBK.h" @@ -40,12 +40,12 @@ namespace p25 // Implements a mechanism to generate raw TSBK data from bytes. // --------------------------------------------------------------------------- - class HOST_SW_API TSBK_RAW : public TSBK { + class HOST_SW_API OSP_TSBK_RAW : public TSBK { public: - /// Initializes a new instance of the TSBK_RAW class. - TSBK_RAW(); - /// Finalizes a instance of the TSBK_RAW class. - ~TSBK_RAW(); + /// Initializes a new instance of the OSP_TSBK_RAW class. + OSP_TSBK_RAW(); + /// Finalizes a instance of the OSP_TSBK_RAW class. + ~OSP_TSBK_RAW(); /// Decode a trunking signalling block. virtual bool decode(const uint8_t* data, bool rawTSBK = false); @@ -62,4 +62,4 @@ namespace p25 } // namespace lc } // namespace p25 -#endif // __P25_LC_TSBK__TSBK_RAW_H__ +#endif // __P25_LC_TSBK__OSP_TSBK_RAW_H__ diff --git a/p25/lc/tsbk/TSBKFactory.h b/p25/lc/tsbk/TSBKFactory.h index 8c9d53d7..dd1da0ef 100644 --- a/p25/lc/tsbk/TSBKFactory.h +++ b/p25/lc/tsbk/TSBKFactory.h @@ -76,6 +76,7 @@ #include "p25/lc/tsbk/OSP_SYNC_BCAST.h" #include "p25/lc/tsbk/OSP_SYS_SRV_BCAST.h" #include "p25/lc/tsbk/OSP_TIME_DATE_ANN.h" +#include "p25/lc/tsbk/OSP_TSBK_RAW.h" #include "p25/lc/tsbk/OSP_U_DEREG_ACK.h" #include "p25/lc/tsbk/OSP_U_REG_CMD.h" @@ -94,8 +95,6 @@ #include "p25/lc/tsbk/MBT_OSP_NET_STS_BCAST.h" #include "p25/lc/tsbk/MBT_OSP_RFSS_STS_BCAST.h" -#include "p25/lc/tsbk/TSBK_RAW.h" - namespace p25 { namespace lc diff --git a/p25/packet/Trunk.cpp b/p25/packet/Trunk.cpp index aec2f6d5..e5557fe7 100644 --- a/p25/packet/Trunk.cpp +++ b/p25/packet/Trunk.cpp @@ -1138,7 +1138,7 @@ void Trunk::writeRF_TSDU_Raw(const uint8_t* tsbk) return; } - std::unique_ptr osp = new_unique(TSBK_RAW); + std::unique_ptr osp = new_unique(OSP_TSBK_RAW); osp->setTSBK(tsbk); writeRF_TSDU_SBF(osp.get(), true);