change C++ standard from C++0x to standard C++11; begin swapping C nomenclature for NULL to nullptr where applicable; start removing instances of raw pointers were acceptable in favor of memory safe std::unique_ptr, std::shared_ptr;

3.0-rcon_maint
Bryan Biedenkapp 3 years ago
parent 3254122c4d
commit f3d2bf319b

@ -238,10 +238,10 @@ endif (CROSS_COMPILE_RPI_ARM)
set(THREADS_PREFER_PTHREAD_FLAG ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY .)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O3 -Wall -std=c++0x")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 -Wall -std=c++0x")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -g -O3 -Wall -std=c++0x -s")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g -O3 -Wall -std=c++0x -s")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O3 -Wall -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 -Wall -std=c++11")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -g -O3 -Wall -std=c++11 -s")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g -O3 -Wall -std=c++11 -s")
set(GIT_VER "")
set(GIT_VER_HASH "")

@ -33,9 +33,10 @@
#include <stdint.h>
#include <string>
#include <memory>
#include <sstream>
#include <ios>
#include <string>
#if !defined(ENABLE_DMR) && !defined(ENABLE_P25) && !defined(ENABLE_NXDN)
#error "No protocol support compiled in? Must enable at least one: ENABLE_DMR, ENABLE_P25 and/or ENABLE_NXDN."
@ -227,6 +228,13 @@ inline std::string __IP_FROM_ULONG(const ulong64_t& value) {
(buffer[offset + 1U] << 8) | \
(buffer[offset + 2U] << 0);
#define new_unique(type) std::unique_ptr<type>(new type())
/// <summary>Creates a named unique buffer.</summary>
#define __UNIQUE_BUFFER(name, type, length) \
std::unique_ptr<type[]> name = std::unique_ptr<type[]>(new type[length]); \
::memset(name.get(), 0x00U, length);
/**
* Class Copy Code Pattern
*/

@ -133,7 +133,7 @@ const uint8_t LDU2_1K[] = {
HostCal::HostCal(const std::string& confFile) :
m_confFile(confFile),
m_conf(),
m_modem(NULL),
m_modem(nullptr),
m_console(),
m_fec(),
m_transmit(false),
@ -153,7 +153,7 @@ HostCal::HostCal(const std::string& confFile) :
m_txAdjustedFreq(0U),
m_channelId(0U),
m_channelNo(0U),
m_idenTable(NULL),
m_idenTable(nullptr),
m_berFrames(0U),
m_berBits(0U),
m_berErrs(0U),
@ -332,7 +332,7 @@ int HostCal::run()
std::string uartPort = uartProtocol["port"].as<std::string>();
uint32_t uartSpeed = uartProtocol["speed"].as<uint32_t>(115200);
port::IModemPort* modemPort = NULL;
port::IModemPort* modemPort = nullptr;
std::transform(portType.begin(), portType.end(), portType.begin(), ::tolower);
if (portType == NULL_PORT) {
::LogError(LOG_HOST, "Calibration mode is unsupported with the null modem!");
@ -407,7 +407,7 @@ int HostCal::run()
return 2;
}
if (modemPort == NULL) {
if (modemPort == nullptr) {
::LogError(LOG_HOST, "Invalid modem port type, %s!", portType.c_str());
return 2;
}
@ -2105,18 +2105,17 @@ void HostCal::processP25BER(const uint8_t* buffer)
else if (duid == P25_DUID_TSDU) {
timerStop();
lc::TSBK *tsbk = lc::tsbk::TSBKFactory::createTSBK(buffer + 1U);
std::unique_ptr<lc::TSBK> tsbk = lc::tsbk::TSBKFactory::createTSBK(buffer + 1U);
Utils::dump(1U, "Raw TSBK Dump", buffer + 1U, P25_TSDU_FRAME_LENGTH_BYTES);
if (tsbk == NULL) {
if (tsbk == nullptr) {
LogWarning(LOG_CAL, P25_TSDU_STR ", undecodable LC");
m_berUndecodableLC++;
}
else {
LogMessage(LOG_CAL, P25_TSDU_STR ", mfId = $%02X, lco = $%02X, srcId = %u, dstId = %u, service = %u, netId = %u, sysId = %u",
tsbk->getMFId(), tsbk->getLCO(), tsbk->getSrcId(), tsbk->getDstId(), tsbk->getService(), tsbk->getNetId(), tsbk->getSysId());
delete tsbk;
}
}
}

@ -56,7 +56,7 @@ HostSetup::HostSetup(const std::string& confFile) :
m_txFrequency(0U),
m_channelId(0U),
m_channelNo(0U),
m_idenTable(NULL)
m_idenTable(nullptr)
{
/* stub */
}

@ -66,7 +66,7 @@ Audio::~Audio()
/// <returns>Number of errors corrected.</returns>
uint32_t Audio::process(uint8_t* data)
{
assert(data != NULL);
assert(data != nullptr);
uint32_t errs = 0U;
@ -119,8 +119,8 @@ uint32_t Audio::process(uint8_t* data)
/// <param name="n"></param>
void Audio::decode(const uint8_t* data, uint8_t* imbe, uint32_t n)
{
assert(data != NULL);
assert(imbe != NULL);
assert(data != nullptr);
assert(imbe != nullptr);
uint8_t temp[18U];
@ -236,8 +236,8 @@ void Audio::decode(const uint8_t* data, uint8_t* imbe, uint32_t n)
/// <param name="n"></param>
void Audio::encode(uint8_t* data, const uint8_t* imbe, uint32_t n)
{
assert(data != NULL);
assert(imbe != NULL);
assert(data != nullptr);
assert(imbe != nullptr);
bool bTemp[144U];
bool* bit = bTemp;

@ -85,9 +85,9 @@ Control::Control(uint32_t nac, uint32_t callHang, uint32_t queueSize, modem::Mod
uint32_t timeout, uint32_t tgHang, bool duplex, ::lookups::RadioIdLookup* ridLookup,
::lookups::TalkgroupIdLookup* tidLookup, ::lookups::IdenTableLookup* idenTable, ::lookups::RSSIInterpolator* rssiMapper,
bool dumpPDUData, bool repeatPDU, bool dumpTSBKData, bool debug, bool verbose) :
m_voice(NULL),
m_data(NULL),
m_trunk(NULL),
m_voice(nullptr),
m_data(nullptr),
m_trunk(nullptr),
m_nac(nac),
m_txNAC(nac),
m_timeout(timeout),
@ -138,10 +138,10 @@ Control::Control(uint32_t nac, uint32_t callHang, uint32_t queueSize, modem::Mod
m_verbose(verbose),
m_debug(debug)
{
assert(ridLookup != NULL);
assert(tidLookup != NULL);
assert(idenTable != NULL);
assert(rssiMapper != NULL);
assert(ridLookup != nullptr);
assert(tidLookup != nullptr);
assert(idenTable != nullptr);
assert(rssiMapper != nullptr);
acl::AccessControl::init(m_ridLookup, m_tidLookup);
@ -170,15 +170,15 @@ Control::Control(uint32_t nac, uint32_t callHang, uint32_t queueSize, modem::Mod
/// </summary>
Control::~Control()
{
if (m_voice != NULL) {
if (m_voice != nullptr) {
delete m_voice;
}
if (m_trunk != NULL) {
if (m_trunk != nullptr) {
delete m_trunk;
}
if (m_data != NULL) {
if (m_data != nullptr) {
delete m_data;
}
}
@ -191,11 +191,11 @@ void Control::reset()
m_rfState = RS_RF_LISTENING;
m_ccHalted = false;
if (m_voice != NULL) {
if (m_voice != nullptr) {
m_voice->resetRF();
}
if (m_data != NULL) {
if (m_data != nullptr) {
m_data->resetRF();
}
@ -349,12 +349,12 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s
m_nid.setTxNAC(m_txNAC);
}
if (m_voice != NULL) {
if (m_voice != nullptr) {
m_voice->resetRF();
m_voice->resetNet();
}
if (m_data != NULL) {
if (m_data != nullptr) {
m_data->resetRF();
}
}
@ -367,7 +367,7 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s
/// <returns></returns>
bool Control::processFrame(uint8_t* data, uint32_t len)
{
assert(data != NULL);
assert(data != nullptr);
#if ENABLE_DFSI_SUPPORT
if (m_modem->isP25DFSI()) {
@ -407,7 +407,7 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
m_rfTimeout.stop();
m_queue.clear();
if (m_network != NULL)
if (m_network != nullptr)
m_network->resetP25();
return false;
@ -556,7 +556,7 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
/// <returns>Length of frame data retreived.</returns>
uint32_t Control::getFrame(uint8_t* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_queue.isEmpty())
return 0U;
@ -595,7 +595,7 @@ bool Control::writeRF_VoiceEnd()
}
m_tailOnIdle = false;
if (m_network != NULL)
if (m_network != nullptr)
m_network->resetP25();
ret = true;
@ -618,7 +618,7 @@ bool Control::writeRF_VoiceEnd()
/// <param name="ms"></param>
void Control::clock(uint32_t ms)
{
if (m_network != NULL) {
if (m_network != nullptr) {
processNetwork();
if (m_network->getStatus() == network::NET_STAT_RUNNING) {
@ -697,7 +697,7 @@ void Control::clock(uint32_t ms)
}
if (m_dedicatedControl) {
if (m_network != NULL)
if (m_network != nullptr)
m_network->resetP25();
}
@ -719,18 +719,18 @@ void Control::clock(uint32_t ms)
m_data->resetRF();
if (m_network != NULL)
if (m_network != nullptr)
m_network->resetP25();
m_rfState = RS_RF_LISTENING;
}
// clock data and trunking
if (m_data != NULL) {
if (m_data != nullptr) {
m_data->clock(ms);
}
if (m_trunk != NULL) {
if (m_trunk != nullptr) {
m_trunk->clock(ms);
}
}
@ -767,7 +767,7 @@ void Control::setDebugVerbose(bool debug, bool verbose)
/// <param name="net"></param>
void Control::addFrame(const uint8_t* data, uint32_t length, bool net)
{
assert(data != NULL);
assert(data != nullptr);
if (!net) {
if (m_rfTimeout.isRunning() && m_rfTimeout.hasExpired())
@ -815,7 +815,7 @@ void Control::addFrame(const uint8_t* data, uint32_t length, bool net)
/// <returns></returns>
bool Control::processDFSI(uint8_t* data, uint32_t len)
{
assert(data != NULL);
assert(data != nullptr);
dfsi::LC dfsiLC = dfsi::LC();
@ -849,7 +849,7 @@ bool Control::processDFSI(uint8_t* data, uint32_t len)
m_rfTimeout.stop();
m_queue.clear();
if (m_network != NULL)
if (m_network != nullptr)
m_network->resetP25();
return false;
@ -979,7 +979,7 @@ void Control::processNetwork()
return;
if (length == 0U)
return;
if (data == NULL) {
if (data == nullptr) {
m_network->resetP25();
return;
}
@ -1188,7 +1188,7 @@ void Control::writeRF_TDU(bool noNetwork)
/// <param name="b2"></param>
void Control::setBusyBits(uint8_t* data, uint32_t ssOffset, bool b1, bool b2)
{
assert(data != NULL);
assert(data != nullptr);
WRITE_BIT(data, ssOffset, b1);
WRITE_BIT(data, ssOffset + 1U, b2);
@ -1203,7 +1203,7 @@ void Control::setBusyBits(uint8_t* data, uint32_t ssOffset, bool b1, bool b2)
/// <param name="b2"></param>
void Control::addBusyBits(uint8_t* data, uint32_t length, bool b1, bool b2)
{
assert(data != NULL);
assert(data != nullptr);
// insert the "10" (Unknown, use for inbound or outbound) status bits
for (uint32_t ss0Pos = P25_SS0_START; ss0Pos < length; ss0Pos += P25_SS_INCREMENT) {

@ -142,8 +142,8 @@ namespace p25
uint32_t m_txNAC;
uint32_t m_timeout;
modem::Modem* m_modem;
network::BaseNetwork* m_network;
std::unique_ptr<modem::Modem> m_modem;
std::unique_ptr<network::BaseNetwork> m_network;
bool m_inhibitIllegal;
bool m_legacyGroupGrnt;

@ -56,17 +56,17 @@ const uint32_t MAX_NID_ERRS = 7U;//5U;
NID::NID(uint32_t nac) :
m_duid(0U),
m_nac(nac),
m_rxTx(NULL),
m_tx(NULL),
m_rxTx(nullptr),
m_tx(nullptr),
m_splitNac(false)
{
m_rxTx = new uint8_t*[16U];
for (uint8_t i = 0; i < 16U; i++)
m_rxTx[i] = NULL;
m_rxTx[i] = nullptr;
m_tx = new uint8_t*[16U];
for (uint8_t i = 0; i < 16U; i++)
m_tx[i] = NULL;
m_tx[i] = nullptr;
createRxTxNID(nac);
}
@ -78,11 +78,11 @@ NID::~NID()
{
for (uint8_t i = 0; i < 16U; i++)
{
if (m_rxTx[i] != NULL) {
if (m_rxTx[i] != nullptr) {
delete[] m_rxTx[i];
}
if (m_tx[i] != NULL) {
if (m_tx[i] != nullptr) {
delete[] m_tx[i];
}
}
@ -98,7 +98,7 @@ NID::~NID()
/// <returns></returns>
bool NID::decode(const uint8_t* data)
{
assert(data != NULL);
assert(data != nullptr);
uint8_t nid[P25_NID_LENGTH_BYTES];
P25Utils::decode(data, nid, 48U, 114U);
@ -155,7 +155,7 @@ bool NID::decode(const uint8_t* data)
/// <param name="duid"></param>
void NID::encode(uint8_t* data, uint8_t duid) const
{
assert(data != NULL);
assert(data != nullptr);
if (m_splitNac) {
switch (duid) {

@ -50,8 +50,8 @@ using namespace p25;
/// <returns></returns>
uint32_t P25Utils::decode(const uint8_t* in, uint8_t* out, uint32_t start, uint32_t stop)
{
assert(in != NULL);
assert(out != NULL);
assert(in != nullptr);
assert(out != nullptr);
// Move the SSx positions to the range needed
uint32_t ss0Pos = P25_SS0_START;
@ -90,8 +90,8 @@ uint32_t P25Utils::decode(const uint8_t* in, uint8_t* out, uint32_t start, uint3
/// <returns></returns>
uint32_t P25Utils::encode(const uint8_t* in, uint8_t* out, uint32_t start, uint32_t stop)
{
assert(in != NULL);
assert(out != NULL);
assert(in != nullptr);
assert(out != nullptr);
// Move the SSx positions to the range needed
uint32_t ss0Pos = P25_SS0_START;
@ -129,8 +129,8 @@ uint32_t P25Utils::encode(const uint8_t* in, uint8_t* out, uint32_t start, uint3
/// <returns></returns>
uint32_t P25Utils::encode(const uint8_t* in, uint8_t* out, uint32_t length)
{
assert(in != NULL);
assert(out != NULL);
assert(in != nullptr);
assert(out != nullptr);
// Move the SSx positions to the range needed
uint32_t ss0Pos = P25_SS0_START;
@ -169,8 +169,8 @@ uint32_t P25Utils::encode(const uint8_t* in, uint8_t* out, uint32_t length)
/// <returns></returns>
uint32_t P25Utils::compare(const uint8_t* data1, const uint8_t* data2, uint32_t length)
{
assert(data1 != NULL);
assert(data2 != NULL);
assert(data1 != nullptr);
assert(data2 != nullptr);
uint32_t errs = 0U;
for (uint32_t i = 0U; i < length; i++) {

@ -47,7 +47,7 @@ using namespace p25;
/// <param name="data"></param>
void Sync::addP25Sync(uint8_t* data)
{
assert(data != NULL);
assert(data != nullptr);
::memcpy(data, P25_SYNC_BYTES, P25_SYNC_LENGTH_BYTES);
}

@ -54,9 +54,9 @@ LC::LC() :
m_rssi(0U),
m_source(P25_DFSI_DEF_SOURCE),
m_control(),
m_tsbk(NULL),
m_tsbk(nullptr),
m_lsd(),
m_mi(NULL)
m_mi(nullptr)
{
m_mi = new uint8_t[P25_MI_LENGTH_BYTES];
::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
@ -109,7 +109,7 @@ LC& LC::operator=(const LC& data)
/// <returns>True, if decoded, otherwise false.</returns>
bool LC::decodeNID(const uint8_t* data)
{
assert(data != NULL);
assert(data != nullptr);
m_frameType = data[0U]; // Frame Type
@ -122,7 +122,7 @@ bool LC::decodeNID(const uint8_t* data)
/// <param name="data"></param>
void LC::encodeNID(uint8_t* data)
{
assert(data != NULL);
assert(data != nullptr);
uint8_t dfsiFrame[P25_DFSI_SS_FRAME_LENGTH_BYTES];
::memset(dfsiFrame, 0x00U, P25_DFSI_SS_FRAME_LENGTH_BYTES);
@ -146,7 +146,7 @@ void LC::encodeNID(uint8_t* data)
/// <returns>True, if decoded, otherwise false.</returns>
bool LC::decodeVHDR1(const uint8_t* data)
{
assert(data != NULL);
assert(data != nullptr);
m_frameType = data[0U]; // Frame Type
if (m_frameType != P25_DFSI_VHDR1) {
@ -171,7 +171,7 @@ bool LC::decodeVHDR1(const uint8_t* data)
/// <param name="data"></param>
void LC::encodeVHDR1(uint8_t* data)
{
assert(data != NULL);
assert(data != nullptr);
uint8_t dfsiFrame[P25_DFSI_VHDR1_FRAME_LENGTH_BYTES];
::memset(dfsiFrame, 0x00U, P25_DFSI_VHDR1_FRAME_LENGTH_BYTES);
@ -198,7 +198,7 @@ void LC::encodeVHDR1(uint8_t* data)
/// <returns>True, if decoded, otherwise false.</returns>
bool LC::decodeVHDR2(const uint8_t* data)
{
assert(data != NULL);
assert(data != nullptr);
m_control = lc::LC();
m_frameType = data[0U]; // Frame Type
@ -219,7 +219,7 @@ bool LC::decodeVHDR2(const uint8_t* data)
/// <param name="data"></param>
void LC::encodeVHDR2(uint8_t* data)
{
assert(data != NULL);
assert(data != nullptr);
uint8_t dfsiFrame[P25_DFSI_VHDR2_FRAME_LENGTH_BYTES];
::memset(dfsiFrame, 0x00U, P25_DFSI_VHDR2_FRAME_LENGTH_BYTES);
@ -246,8 +246,8 @@ void LC::encodeVHDR2(uint8_t* data)
/// <returns>True, if decoded, otherwise false.</returns>
bool LC::decodeLDU1(const uint8_t* data, uint8_t* imbe)
{
assert(data != NULL);
assert(imbe != NULL);
assert(data != nullptr);
assert(imbe != nullptr);
m_frameType = data[0U]; // Frame Type
@ -337,8 +337,8 @@ bool LC::decodeLDU1(const uint8_t* data, uint8_t* imbe)
/// <param name="imbe"></param>
void LC::encodeLDU1(uint8_t* data, const uint8_t* imbe)
{
assert(data != NULL);
assert(imbe != NULL);
assert(data != nullptr);
assert(imbe != nullptr);
uint8_t serviceOptions =
(m_control.getEmergency() ? 0x80U : 0x00U) +
@ -480,8 +480,8 @@ void LC::encodeLDU1(uint8_t* data, const uint8_t* imbe)
/// <returns>True, if decoded, otherwise false.</returns>
bool LC::decodeLDU2(const uint8_t* data, uint8_t* imbe)
{
assert(data != NULL);
assert(imbe != NULL);
assert(data != nullptr);
assert(imbe != nullptr);
m_frameType = data[0U]; // Frame Type
@ -573,8 +573,8 @@ bool LC::decodeLDU2(const uint8_t* data, uint8_t* imbe)
/// <param name="imbe"></param>
void LC::encodeLDU2(uint8_t* data, const uint8_t* imbe)
{
assert(data != NULL);
assert(imbe != NULL);
assert(data != nullptr);
assert(imbe != nullptr);
// generate MI data
uint8_t mi[P25_MI_LENGTH_BYTES];
@ -717,10 +717,10 @@ void LC::encodeLDU2(uint8_t* data, const uint8_t* imbe)
/// <returns>True, if decoded, otherwise false.</returns>
bool LC::decodeTSBK(const uint8_t* data)
{
assert(data != NULL);
if (m_tsbk != NULL) {
assert(data != nullptr);
if (m_tsbk != nullptr) {
delete m_tsbk;
m_tsbk = NULL;
m_tsbk = nullptr;
}
m_frameType = data[0U]; // Frame Type
@ -731,11 +731,12 @@ bool LC::decodeTSBK(const uint8_t* data)
decodeStart(data + 1U); // Start Record
uint8_t tsbk[P25_TSBK_LENGTH_BYTES];
::memcpy(tsbk, data + 9U, P25_TSBK_LENGTH_BYTES); // Raw TSBK + CRC
uint8_t buffer[P25_TSBK_LENGTH_BYTES];
::memcpy(buffer, data + 9U, P25_TSBK_LENGTH_BYTES); // Raw TSBK + CRC
m_tsbk = lc::tsbk::TSBKFactory::createTSBK(tsbk, true);
if (m_tsbk != NULL) {
std::unique_ptr<lc::TSBK> tsbk = lc::tsbk::TSBKFactory::createTSBK(buffer, true);
m_tsbk = tsbk.release();
if (m_tsbk != nullptr) {
return true;
} else {
return false;

@ -85,7 +85,7 @@ void AMBT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
/// </summary>
/// <param name="tsbk"></param>
/// <returns></returns>
ulong64_t AMBT::tsbkValue(const data::DataHeader dataHeader, const uint8_t* pduUserData)
ulong64_t AMBT::toValue(const data::DataHeader dataHeader, const uint8_t* pduUserData)
{
ulong64_t tsbkValue = 0U;

@ -57,7 +57,7 @@ namespace p25
protected:
/// <summary>Internal helper to convert TSBK bytes to a 64-bit long value.</summary>
static ulong64_t tsbkValue(const data::DataHeader dataHeader, const uint8_t* pduUserData);
static ulong64_t toValue(const data::DataHeader dataHeader, const uint8_t* pduUserData);
/// <summary>Internal helper to decode a trunking signalling block.</summary>
bool decode(const data::DataHeader dataHeader, const data::DataBlock* blocks, uint8_t* pduUserData);

@ -131,6 +131,11 @@ TSBK::~TSBK()
/// <param name="callsign">Callsign.</param>
void TSBK::setCallsign(std::string callsign)
{
if (m_siteCallsign == NULL) {
m_siteCallsign = new uint8_t[P25_MOT_CALLSIGN_LENGTH_BYTES];
::memset(m_siteCallsign, 0x00U, P25_MOT_CALLSIGN_LENGTH_BYTES);
}
uint32_t idLength = callsign.length();
if (idLength > 0) {
::memset(m_siteCallsign, 0x20U, P25_MOT_CALLSIGN_LENGTH_BYTES);
@ -151,7 +156,7 @@ void TSBK::setCallsign(std::string callsign)
/// </summary>
/// <param name="tsbk"></param>
/// <returns></returns>
ulong64_t TSBK::tsbkValue(const uint8_t* tsbk)
ulong64_t TSBK::toValue(const uint8_t* tsbk)
{
ulong64_t tsbkValue = 0U;
@ -173,10 +178,9 @@ ulong64_t TSBK::tsbkValue(const uint8_t* tsbk)
/// </summary>
/// <param name="tsbkValue"></param>
/// <returns></returns>
uint8_t* TSBK::tsbkValue(const ulong64_t tsbkValue)
std::unique_ptr<uint8_t[]> TSBK::fromValue(const ulong64_t tsbkValue)
{
uint8_t* tsbk = new uint8_t[P25_TSBK_LENGTH_BYTES];
::memset(tsbk, 0x00U, P25_TSBK_LENGTH_BYTES);
__UNIQUE_BUFFER(tsbk, uint8_t, P25_TSBK_LENGTH_BYTES);
// split ulong64_t (8 byte) value into bytes
tsbk[2U] = (uint8_t)((tsbkValue >> 56) & 0xFFU);

@ -156,9 +156,9 @@ namespace p25
static SiteData m_siteData;
/// <summary>Internal helper to convert TSBK bytes to a 64-bit long value.</summary>
static ulong64_t tsbkValue(const uint8_t* tsbk);
static ulong64_t toValue(const uint8_t* tsbk);
/// <summary>Internal helper to convert a 64-bit long value to TSBK bytes.</summary>
static uint8_t* tsbkValue(const ulong64_t tsbkValue);
static std::unique_ptr<uint8_t[]> fromValue(const ulong64_t tsbkValue);
/// <summary>Internal helper to decode a trunking signalling block.</summary>
bool decode(const uint8_t* data, uint8_t* tsbk, bool rawTSBK = false);

@ -64,7 +64,7 @@ bool IOSP_ACK_RSP::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag
m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type
@ -98,7 +98,6 @@ void IOSP_ACK_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
}
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -64,7 +64,7 @@ bool IOSP_CALL_ALRT::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFFFU); // Target Radio Address
m_srcId = (uint32_t)(tsbkValue & 0xFFFFFFU); // Source Radio Address
@ -87,7 +87,6 @@ void IOSP_CALL_ALRT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 40) + m_dstId; // Target Radio Address
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -65,7 +65,7 @@ bool IOSP_EXT_FNCT::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_extendedFunction = (uint32_t)((tsbkValue >> 48) & 0xFFFFU); // Extended Function
m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFFFU); // Argument
@ -90,9 +90,8 @@ void IOSP_EXT_FNCT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + m_srcId; // Argument
tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -65,7 +65,7 @@ bool IOSP_GRP_AFF::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_sysId = (uint32_t)((tsbkValue >> 40) & 0xFFFU); // System ID
m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFU); // Talkgroup Address
@ -92,9 +92,8 @@ void IOSP_GRP_AFF::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 16) + (m_dstId & 0xFFFFU); // Talkgroup Address
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -64,7 +64,7 @@ bool IOSP_GRP_VCH::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_emergency = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag
m_encrypted = (((tsbkValue >> 56) & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag
@ -98,7 +98,6 @@ void IOSP_GRP_VCH::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 16) + m_dstId; // Talkgroup Address
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -65,7 +65,7 @@ bool IOSP_MSG_UPDT::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_messageValue = (uint8_t)((tsbkValue >> 56) & 0xFFU); // Message Value
m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFFFU); // Target Radio Address
@ -90,9 +90,8 @@ void IOSP_MSG_UPDT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -66,7 +66,7 @@ bool IOSP_RAD_MON::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_txMult = (uint8_t)((tsbkValue >> 48) & 0x3U); // TX Multiplier
m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFFFU); // Target Radio Address
@ -91,9 +91,8 @@ void IOSP_RAD_MON::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + (m_srcId & 0xFFFFFFU); // Source Radio Address
tsbkValue = tsbkValue + (m_dstId & 0xFFFFFFU); // Target Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -65,7 +65,7 @@ bool IOSP_STS_UPDT::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_statusValue = (uint8_t)((tsbkValue >> 56) & 0xFFU); // Status Value
m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFFFU); // Target Radio Address
@ -90,9 +90,8 @@ void IOSP_STS_UPDT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -64,7 +64,7 @@ bool IOSP_UU_ANS::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_emergency = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag
m_encrypted = (((tsbkValue >> 56) & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag
@ -95,7 +95,6 @@ void IOSP_UU_ANS::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 32) + m_dstId; // Target Radio Address
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -64,7 +64,7 @@ bool IOSP_UU_VCH::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_emergency = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag
m_encrypted = (((tsbkValue >> 56) & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag
@ -98,7 +98,6 @@ void IOSP_UU_VCH::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -64,7 +64,7 @@ bool IOSP_U_REG::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_netId = (uint32_t)((tsbkValue >> 36) & 0xFFFFFU); // Network ID
m_sysId = (uint32_t)((tsbkValue >> 24) & 0xFFFU); // System ID
@ -90,7 +90,6 @@ void IOSP_U_REG::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + m_dstId; // Source ID
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -66,7 +66,7 @@ bool ISP_AUTH_FNE_RST::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_authSuccess = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Authentication Success Flag
m_authStandalone = (((tsbkValue >> 56) & 0xFFU) & 0x01U) == 0x01U; // Authentication Standalone Flag

@ -80,7 +80,7 @@ bool ISP_AUTH_RESP::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag
m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type

@ -64,7 +64,7 @@ bool ISP_AUTH_SU_DMD::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_srcId = (uint32_t)(tsbkValue & 0xFFFFFFU); // Source Radio Address

@ -64,7 +64,7 @@ bool ISP_CAN_SRV_REQ::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag
m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type

@ -64,7 +64,7 @@ bool ISP_EMERG_ALRM_REQ::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
/*
** bryanb: this is a bit of a hack -- because the EMERG ALRM and DENY have the same

@ -65,7 +65,7 @@ bool ISP_GRP_AFF_Q_RSP::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_announceGroup = (uint32_t)((tsbkValue >> 40) & 0xFFFFU); // Announcement Group Address
m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFU); // Talkgroup Address

@ -65,7 +65,7 @@ bool ISP_LOC_REG_REQ::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_lra = (uint8_t)((tsbkValue >> 40) & 0xFFU); // LRA
m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFU); // Talkgroup Address

@ -66,7 +66,7 @@ bool ISP_SNDCP_CH_REQ::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_dataServiceOptions = (uint8_t)((tsbkValue >> 56) & 0xFFU); // Data Service Options
m_dataAccessControl = (uint32_t)((tsbkValue >> 40) & 0xFFFFFFFFU); // Data Access Control

@ -64,7 +64,7 @@ bool ISP_U_DEREG_REQ::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_netId = (uint32_t)((tsbkValue >> 36) & 0xFFFFFU); // Network ID
m_sysId = (uint32_t)((tsbkValue >> 24) & 0xFFFU); // System ID

@ -64,7 +64,7 @@ bool MBT_IOSP_ACK_RSP::decodeMBT(const data::DataHeader dataHeader, const data::
if (!ret)
return false;
ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData);
ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData);
m_aivFlag = false;
m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type

@ -64,7 +64,7 @@ bool MBT_IOSP_CALL_ALRT::decodeMBT(const data::DataHeader dataHeader, const data
if (!ret)
return false;
ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData);
ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData);
m_netId = (uint32_t)((tsbkValue >> 44) & 0xFFFFFU); // Network ID
m_sysId = (uint32_t)((tsbkValue >> 32) & 0xFFFU); // System ID

@ -65,7 +65,7 @@ bool MBT_IOSP_EXT_FNCT::decodeMBT(const data::DataHeader dataHeader, const data:
if (!ret)
return false;
ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData);
ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData);
m_netId = (uint32_t)((tsbkValue >> 44) & 0xFFFFFU); // Network ID
m_sysId = (uint32_t)((tsbkValue >> 32) & 0xFFFU); // System ID

@ -64,7 +64,7 @@ bool MBT_IOSP_GRP_AFF::decodeMBT(const data::DataHeader dataHeader, const data::
if (!ret)
return false;
ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData);
ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData);
m_netId = (uint32_t)((tsbkValue >> 44) & 0xFFFFFU); // Network ID
m_sysId = (uint32_t)((tsbkValue >> 32) & 0xFFFU); // System ID

@ -65,7 +65,7 @@ bool MBT_IOSP_MSG_UPDT::decodeMBT(const data::DataHeader dataHeader, const data:
if (!ret)
return false;
ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData);
ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData);
m_messageValue = (uint8_t)((tsbkValue >> 48) & 0xFFFFU); // Message Value
m_netId = (uint32_t)((tsbkValue >> 28) & 0xFFFFFU); // Network ID

@ -65,7 +65,7 @@ bool MBT_IOSP_STS_UPDT::decodeMBT(const data::DataHeader dataHeader, const data:
if (!ret)
return false;
ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData);
ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData);
m_statusValue = (uint8_t)((tsbkValue >> 48) & 0xFFFFU); // Message Value
m_netId = (uint32_t)((tsbkValue >> 28) & 0xFFFFFU); // Network ID

@ -85,7 +85,7 @@ bool MBT_ISP_AUTH_RESP_M::decodeMBT(const data::DataHeader dataHeader, const dat
if (!ret)
return false;
ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData);
ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData);
if (dataHeader.getBlocksToFollow() != 2) {
LogError(LOG_P25, "TSBK::decodeMBT(), PDU does not contain the appropriate amount of data blocks");

@ -64,7 +64,7 @@ bool MBT_ISP_AUTH_SU_DMD::decodeMBT(const data::DataHeader dataHeader, const dat
if (!ret)
return false;
ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData);
ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData);
m_netId = (uint32_t)((tsbkValue >> 44) & 0xFFFFFU); // Network ID
m_sysId = (uint32_t)((tsbkValue >> 32) & 0xFFFU); // System ID

@ -64,7 +64,7 @@ bool MBT_ISP_CAN_SRV_REQ::decodeMBT(const data::DataHeader dataHeader, const dat
if (!ret)
return false;
ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData);
ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData);
m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag
m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type

@ -70,7 +70,7 @@ bool OSP_ADJ_STS_BCAST::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_adjSysId = (uint32_t)((tsbkValue >> 40) & 0xFFFU); // Site System ID
m_adjRfssId = (uint8_t)((tsbkValue >> 32) & 0xFFU); // Site RFSS ID
@ -104,9 +104,8 @@ void OSP_ADJ_STS_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel Number
tsbkValue = (tsbkValue << 8) + m_siteData.serviceClass(); // System Service Class
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -95,9 +95,8 @@ void OSP_AUTH_FNE_RESP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 8) + m_authRes[0U]; // Result b0
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
/// <summary>Sets the authentication result.</summary>

@ -64,7 +64,7 @@ bool OSP_DENY_RSP::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag
m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type
@ -108,7 +108,6 @@ void OSP_DENY_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
}
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -84,7 +84,6 @@ void OSP_DVM_GIT_HASH::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 4) + m_siteData.channelId(); // Channel ID
tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel Number
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -65,7 +65,7 @@ bool OSP_DVM_LC_CALL_TERM::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_grpVchId = ((tsbkValue >> 52) & 0x0FU); // Channel ID
m_grpVchNo = ((tsbkValue >> 40) & 0xFFFU); // Channel Number
@ -92,7 +92,6 @@ void OSP_DVM_LC_CALL_TERM::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 16) + m_dstId; // Talkgroup Address
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -77,7 +77,6 @@ void OSP_GRP_AFF_Q::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -79,7 +79,6 @@ void OSP_GRP_VCH_GRANT_UPD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 16) + m_dstId; // Talkgroup Address
tsbkValue = (tsbkValue << 32) + 0;
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -105,7 +105,6 @@ void OSP_IDEN_UP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
return; // blatently ignore creating this TSBK
}
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -99,7 +99,6 @@ void OSP_IDEN_UP_VU::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
return; // blatently ignore creating this TSBK
}
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -80,7 +80,6 @@ void OSP_LOC_REG_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 8) + m_siteData.sysId(); // Site ID
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -82,7 +82,6 @@ void OSP_MOT_CC_BSI::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 4) + m_siteData.channelId(); // Channel ID
tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel Number
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -95,9 +95,8 @@ void OSP_MOT_GRG_ADD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
}
}
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -100,9 +100,8 @@ void OSP_MOT_GRG_DEL::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
return; // blatently ignore creating this TSBK
}
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -88,9 +88,8 @@ void OSP_MOT_GRG_VCH_GRANT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
return; // blatently ignore creating this TSBK
}
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -83,9 +83,8 @@ void OSP_MOT_GRG_VCH_UPD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 4) + m_siteData.channelNo(); // Channel Number
tsbkValue = (tsbkValue << 12) + m_patchGroup2Id; // Patch Group 2
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -75,7 +75,6 @@ void OSP_MOT_PSH_CCH::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -81,7 +81,6 @@ void OSP_NET_STS_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel Number
tsbkValue = (tsbkValue << 8) + m_siteData.serviceClass(); // System Service Class
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -64,7 +64,7 @@ bool OSP_QUE_RSP::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag
m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type
@ -108,7 +108,6 @@ void OSP_QUE_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
}
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -84,7 +84,6 @@ void OSP_RFSS_STS_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel Number
tsbkValue = (tsbkValue << 8) + m_siteData.serviceClass(); // System Service Class
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -93,9 +93,8 @@ void OSP_SCCB::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 8) + (P25_SVC_CLS_INVALID); // System Service Class
}
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -91,9 +91,8 @@ void OSP_SCCB_EXP::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 8) + (P25_SVC_CLS_INVALID); // System Service Class
}
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -97,9 +97,8 @@ void OSP_SNDCP_CH_ANN::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 12) + (rxChNo & 0xFFFU); // Channel (R) Number
tsbkValue = (tsbkValue << 16) + m_sndcpDAC; // Data Access Control
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -93,9 +93,8 @@ void OSP_SNDCP_CH_GNT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 12) + (rxChNo & 0xFFFU); // Channel (R) Number
tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -124,9 +124,8 @@ void OSP_SYNC_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 13) + (m_microslotCount & 0x1FFFU); // Microslot Count
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}
// ---------------------------------------------------------------------------

@ -79,7 +79,6 @@ void OSP_SYS_SRV_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 16) + services; // System Services Available
tsbkValue = (tsbkValue << 24) + services; // System Services Supported
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -64,7 +64,7 @@ bool OSP_U_DEREG_ACK::decode(const uint8_t* data, bool rawTSBK)
if (!ret)
return false;
ulong64_t tsbkValue = TSBK::tsbkValue(tsbk);
ulong64_t tsbkValue = TSBK::toValue(tsbk);
m_netId = (uint32_t)((tsbkValue >> 36) & 0xFFFFFU); // Network ID
m_sysId = (uint32_t)((tsbkValue >> 24) & 0xFFFU); // System ID
@ -89,7 +89,6 @@ void OSP_U_DEREG_ACK::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 12) + m_siteData.sysId(); // System ID
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -77,7 +77,6 @@ void OSP_U_REG_CMD::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address
tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address
uint8_t* tsbk = TSBK::tsbkValue(tsbkValue);
TSBK::encode(data, tsbk, rawTSBK, noTrellis);
delete[] tsbk;
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);
TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis);
}

@ -71,7 +71,7 @@ TSBKFactory::~TSBKFactory()
/// <param name="data"></param>
/// <param name="rawTSBK"></param>
/// <returns>True, if TSBK was decoded, otherwise false.</returns>
TSBK* TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK)
std::unique_ptr<TSBK> TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK)
{
assert(data != NULL);
@ -247,7 +247,7 @@ TSBK* TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK)
/// <param name="dataHeader"></param>
/// <param name="blocks"></param>
/// <returns></returns>
AMBT* TSBKFactory::createAMBT(const data::DataHeader dataHeader, const data::DataBlock* blocks)
std::unique_ptr<AMBT> TSBKFactory::createAMBT(const data::DataHeader dataHeader, const data::DataBlock* blocks)
{
assert(blocks != NULL);
@ -339,7 +339,7 @@ AMBT* TSBKFactory::createAMBT(const data::DataHeader dataHeader, const data::Dat
/// <param name="data"></param>
/// <param name="rawTSBK"></param>
/// <returns></returns>
TSBK* TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK)
std::unique_ptr<TSBK> TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK)
{
assert(tsbk != NULL);
assert(data != NULL);
@ -348,7 +348,7 @@ TSBK* TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK)
return NULL;
}
return tsbk;
return std::unique_ptr<TSBK>(tsbk);
}
/// <summary>
@ -358,7 +358,7 @@ TSBK* TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK)
/// <param name="dataHeader"></param>
/// <param name="blocks"></param>
/// <returns></returns>
AMBT* TSBKFactory::decode(AMBT* ambt, const data::DataHeader dataHeader, const data::DataBlock* blocks)
std::unique_ptr<AMBT> TSBKFactory::decode(AMBT* ambt, const data::DataHeader dataHeader, const data::DataBlock* blocks)
{
assert(ambt != NULL);
assert(blocks != NULL);
@ -367,5 +367,5 @@ AMBT* TSBKFactory::decode(AMBT* ambt, const data::DataHeader dataHeader, const d
return NULL;
}
return ambt;
return std::unique_ptr<AMBT>(ambt);
}

@ -112,9 +112,9 @@ namespace p25
~TSBKFactory();
/// <summary>Create an instance of a TSBK.</summary>
static TSBK* createTSBK(const uint8_t* data, bool rawTSBK = false);
static std::unique_ptr<TSBK> createTSBK(const uint8_t* data, bool rawTSBK = false);
/// <summary>Create an instance of a AMBT.</summary>
static AMBT* createAMBT(const data::DataHeader dataHeader, const data::DataBlock* blocks);
static std::unique_ptr<AMBT> createAMBT(const data::DataHeader dataHeader, const data::DataBlock* blocks);
/// <summary>Sets the flag indicating CRC-errors should be warnings and not errors.</summary>
static void setWarnCRC(bool warnCRC) { m_warnCRC = warnCRC; }
@ -123,9 +123,9 @@ namespace p25
static bool m_warnCRC;
/// <summary></summary>
static TSBK* decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK = false);
static std::unique_ptr<TSBK> decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK = false);
/// <summary></summary>
static AMBT* decode(AMBT* ambt, const data::DataHeader dataHeader, const data::DataBlock* blocks);
static std::unique_ptr<AMBT> decode(AMBT* ambt, const data::DataHeader dataHeader, const data::DataBlock* blocks);
};
} // namespace tsbk
} // namespace lc

@ -39,6 +39,7 @@
using namespace p25;
using namespace p25::data;
using namespace p25::lc::tsbk;
using namespace p25::packet;
#include <cassert>
@ -158,7 +159,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
return false;
uint8_t duid = 0U;
if (preDecodedTSBK == NULL) {
if (preDecodedTSBK == nullptr) {
// Decode the NID
bool valid = m_p25->m_nid.decode(data + 2U);
@ -171,7 +172,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
}
RPT_RF_STATE prevRfState = m_p25->m_rfState;
lc::TSBK *tsbk = NULL;
std::unique_ptr<lc::TSBK> tsbk;
// handle individual DUIDs
if (duid == P25_DUID_TSDU) {
@ -181,15 +182,15 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
m_p25->m_queue.clear();
if (preDecodedTSBK == NULL) {
tsbk = lc::tsbk::TSBKFactory::createTSBK(data + 2U);
if (tsbk == NULL) {
if (preDecodedTSBK == nullptr) {
tsbk = TSBKFactory::createTSBK(data + 2U);
if (tsbk == nullptr) {
LogWarning(LOG_RF, P25_TSDU_STR ", undecodable LC");
m_p25->m_rfState = prevRfState;
return false;
}
} else {
tsbk = preDecodedTSBK;
tsbk = std::unique_ptr<lc::TSBK>(preDecodedTSBK);
}
uint32_t srcId = tsbk->getSrcId();
@ -263,7 +264,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
// validate the target RID
VALID_DSTID("TSBK_IOSP_UU_ANS (Unit-to-Unit Answer Response)", TSBK_IOSP_UU_ANS, srcId, dstId);
lc::tsbk::IOSP_UU_ANS* iosp = (lc::tsbk::IOSP_UU_ANS*)tsbk;
IOSP_UU_ANS* iosp = static_cast<IOSP_UU_ANS*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_ANS (Unit-to-Unit Answer Response), response = $%02X, srcId = %u, dstId = %u",
iosp->getResponse(), srcId, dstId);
@ -307,7 +308,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
// validate the source RID
VALID_SRCID("TSBK_ISP_SNDCP_CH_REQ (SNDCP Channel Request)", TSBK_ISP_SNDCP_CH_REQ, srcId);
lc::tsbk::ISP_SNDCP_CH_REQ* isp = (lc::tsbk::ISP_SNDCP_CH_REQ*)data;
ISP_SNDCP_CH_REQ* isp = static_cast<ISP_SNDCP_CH_REQ*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_SNDCP_CH_REQ (SNDCP Channel Request), dataServiceOptions = $%02X, dataAccessControl = %u, srcId = %u",
isp->getDataServiceOptions(), isp->getDataAccessControl(), srcId);
@ -326,7 +327,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
// validate the source RID
VALID_SRCID("TSBK_IOSP_STS_UPDT (Status Update)", TSBK_IOSP_STS_UPDT, srcId);
lc::tsbk::IOSP_STS_UPDT* iosp = (lc::tsbk::IOSP_STS_UPDT*)data;
IOSP_STS_UPDT* iosp = static_cast<IOSP_STS_UPDT*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_STS_UPDT (Status Update), status = $%02X, srcId = %u", iosp->getStatus(), srcId);
}
@ -345,7 +346,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
// validate the source RID
VALID_SRCID("TSBK_IOSP_MSG_UPDT (Message Update)", TSBK_IOSP_MSG_UPDT, srcId);
lc::tsbk::IOSP_MSG_UPDT* iosp = (lc::tsbk::IOSP_MSG_UPDT*)data;
IOSP_MSG_UPDT* iosp = static_cast<IOSP_MSG_UPDT*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_MSG_UPDT (Message Update), message = $%02X, srcId = %u, dstId = %u",
iosp->getMessage(), srcId, dstId);
@ -368,7 +369,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
// validate the target RID
VALID_DSTID("TSBK_IOSP_RAD_MON (Radio Monitor)", TSBK_IOSP_RAD_MON, srcId, dstId);
lc::tsbk::IOSP_RAD_MON* iosp = (lc::tsbk::IOSP_RAD_MON*)tsbk;
IOSP_RAD_MON* iosp = static_cast<IOSP_RAD_MON*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_RAD_MON_REQ (Radio Monitor), srcId = %u, dstId = %u", srcId, dstId);
}
@ -403,7 +404,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
// validate the target RID
VALID_DSTID("TSBK_IOSP_ACK_RSP (Acknowledge Response)", TSBK_IOSP_ACK_RSP, srcId, dstId);
lc::tsbk::IOSP_ACK_RSP* iosp = (lc::tsbk::IOSP_ACK_RSP*)tsbk;
IOSP_ACK_RSP* iosp = static_cast<IOSP_ACK_RSP*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_ACK_RSP (Acknowledge Response), AIV = %u, serviceType = $%02X, srcId = %u, dstId = %u",
iosp->getAIV(), iosp->getService(), srcId, dstId);
@ -424,7 +425,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
break;
case TSBK_ISP_CAN_SRV_REQ:
{
lc::tsbk::ISP_CAN_SRV_REQ* isp = (lc::tsbk::ISP_CAN_SRV_REQ*)tsbk;
ISP_CAN_SRV_REQ* isp = static_cast<ISP_CAN_SRV_REQ*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_CAN_SRV_REQ (Cancel Service Request), AIV = %u, serviceType = $%02X, reason = $%02X, srcId = %u, dstId = %u",
isp->getAIV(), isp->getService(), isp->getResponse(), srcId, dstId);
@ -437,7 +438,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
break;
case TSBK_IOSP_EXT_FNCT:
{
lc::tsbk::IOSP_EXT_FNCT* iosp = (lc::tsbk::IOSP_EXT_FNCT*)tsbk;
IOSP_EXT_FNCT* iosp = static_cast<IOSP_EXT_FNCT*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_EXT_FNCT (Extended Function), op = $%02X, arg = %u, tgt = %u",
iosp->getExtendedFunction(), dstId, srcId);
@ -460,7 +461,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
case TSBK_ISP_EMERG_ALRM_REQ:
{
if (!m_p25->m_emergDisabled) {
lc::tsbk::ISP_EMERG_ALRM_REQ* isp = (lc::tsbk::ISP_EMERG_ALRM_REQ*)tsbk;
ISP_EMERG_ALRM_REQ* isp = static_cast<ISP_EMERG_ALRM_REQ*>(tsbk.get());
if (isp->getEmergency()) {
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_EMERG_ALRM_REQ (Emergency Alarm Request), srcId = %u, dstId = %u",
@ -500,7 +501,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
// make sure control data is supported
IS_SUPPORT_CONTROL_CHECK("TSBK_IOSP_GRP_AFF (Group Affiliation Query Response)", TSBK_ISP_GRP_AFF_Q_RSP, srcId);
lc::tsbk::ISP_GRP_AFF_Q_RSP* isp = (lc::tsbk::ISP_GRP_AFF_Q_RSP*)tsbk;
ISP_GRP_AFF_Q_RSP* isp = static_cast<ISP_GRP_AFF_Q_RSP*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_AFF (Group Affiliation Query Response), srcId = %u, dstId = %u, anncId = %u", srcId, dstId,
isp->getAnnounceGroup());
@ -569,7 +570,6 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
}
m_p25->m_rfState = prevRfState;
delete tsbk;
return true;
}
else {
@ -598,19 +598,18 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
switch (duid) {
case P25_DUID_TSDU:
if (m_p25->m_netState == RS_NET_IDLE) {
lc::TSBK *tsbk = lc::tsbk::TSBKFactory::createTSBK(data);
if (tsbk == NULL) {
std::unique_ptr<lc::TSBK> tsbk = TSBKFactory::createTSBK(data);
if (tsbk == nullptr) {
return false;
}
// handle updating internal adjacent site information
if (tsbk->getLCO() == TSBK_OSP_ADJ_STS_BCAST) {
if (!m_p25->m_control) {
delete tsbk;
return false;
}
lc::tsbk::OSP_ADJ_STS_BCAST* osp = (lc::tsbk::OSP_ADJ_STS_BCAST*)tsbk;
OSP_ADJ_STS_BCAST* osp = static_cast<OSP_ADJ_STS_BCAST*>(tsbk.get());
if (osp->getAdjSiteId() != m_p25->m_siteData.siteId()) {
// update site table data
SiteData site;
@ -653,7 +652,6 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
m_sccbUpdateCnt[site.rfssId()] = ADJ_SITE_UPDATE_CNT;
}
delete tsbk;
return true;
}
@ -681,13 +679,10 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
break;
default:
LogError(LOG_NET, P25_TSDU_STR ", unhandled LCO, mfId = $%02X, lco = $%02X", tsbk->getMFId(), tsbk->getLCO());
delete tsbk;
return false;
}
writeNet_TSDU(tsbk);
delete tsbk;
writeNet_TSDU(tsbk.get());
return true;
}
@ -708,8 +703,6 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl && m_p25->m_affiliations.getRFChCnt() == 1U) {
writeRF_TSDU_Grant(srcId, dstId, serviceOptions, true);
}
delete tsbk;
}
return true; // don't allow this to write to the air
case TSBK_IOSP_UU_VCH:
@ -727,13 +720,11 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl && m_p25->m_affiliations.getRFChCnt() == 1U) {
writeRF_TSDU_Grant(srcId, dstId, serviceOptions, false);
}
delete tsbk;
}
return true; // don't allow this to write to the air
case TSBK_IOSP_UU_ANS:
{
lc::tsbk::IOSP_UU_ANS* iosp = (lc::tsbk::IOSP_UU_ANS*)tsbk;
IOSP_UU_ANS* iosp = static_cast<IOSP_UU_ANS*>(tsbk.get());
if (iosp->getResponse() > 0U) {
if (m_verbose) {
LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_UU_ANS (Unit-to-Unit Answer Response), response = $%02X, srcId = %u, dstId = %u",
@ -752,7 +743,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
// validate the source RID
VALID_SRCID_NET("TSBK_IOSP_STS_UPDT (Status Update)", srcId);
lc::tsbk::IOSP_STS_UPDT* iosp = (lc::tsbk::IOSP_STS_UPDT*)tsbk;
IOSP_STS_UPDT* iosp = static_cast<IOSP_STS_UPDT*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_STS_UPDT (Status Update), status = $%02X, srcId = %u",
iosp->getStatus(), srcId);
@ -766,7 +757,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
// validate the source RID
VALID_SRCID_NET("TSBK_IOSP_MSG_UPDT (Message Update)", srcId);
lc::tsbk::IOSP_MSG_UPDT* iosp = (lc::tsbk::IOSP_MSG_UPDT*)tsbk;
IOSP_MSG_UPDT* iosp = static_cast<IOSP_MSG_UPDT*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_MSG_UPDT (Message Update), message = $%02X, srcId = %u, dstId = %u",
iosp->getMessage(), srcId, dstId);
@ -783,7 +774,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
// validate the target RID
VALID_DSTID("TSBK_ISP_RAD_MON_REQ (Radio monitor)", TSBK_IOSP_RAD_MON, srcId, dstId);
lc::tsbk::IOSP_RAD_MON* iosp = (lc::tsbk::IOSP_RAD_MON*)tsbk;
IOSP_RAD_MON* iosp = static_cast<IOSP_RAD_MON*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_RF , P25_TSDU_STR ", TSBK_ISP_RAD_MON_REQ (Radio Monitor), srcId = %u, dstId = %u" , srcId , dstId);
}
@ -822,7 +813,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
// validate the target RID
VALID_DSTID_NET("TSBK_IOSP_ACK_RSP (Acknowledge Response)", dstId);
lc::tsbk::IOSP_ACK_RSP* iosp = (lc::tsbk::IOSP_ACK_RSP*)tsbk;
IOSP_ACK_RSP* iosp = static_cast<IOSP_ACK_RSP*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_ACK_RSP (Acknowledge Response), AIV = %u, serviceType = $%02X, srcId = %u, dstId = %u",
iosp->getAIV(), iosp->getService(), dstId, srcId);
@ -836,7 +827,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
// validate the target RID
VALID_DSTID_NET("TSBK_IOSP_EXT_FNCT (Extended Function)", dstId);
lc::tsbk::IOSP_EXT_FNCT* iosp = (lc::tsbk::IOSP_EXT_FNCT*)tsbk;
IOSP_EXT_FNCT* iosp = static_cast<IOSP_EXT_FNCT*>(tsbk.get());
if (m_verbose) {
LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_EXT_FNCT (Extended Function), serviceType = $%02X, arg = %u, tgt = %u",
iosp->getService(), srcId, dstId);
@ -845,7 +836,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
break;
case TSBK_ISP_EMERG_ALRM_REQ:
{
lc::tsbk::ISP_EMERG_ALRM_REQ* isp = (lc::tsbk::ISP_EMERG_ALRM_REQ*)tsbk;
ISP_EMERG_ALRM_REQ* isp = static_cast<ISP_EMERG_ALRM_REQ*>(tsbk.get());
// non-emergency mode is a TSBK_OSP_DENY_RSP
if (!isp->getEmergency()) {
@ -866,28 +857,22 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
break;
case TSBK_IOSP_GRP_AFF:
// ignore a network group affiliation command
delete tsbk;
return true; // don't allow this to write to the air
case TSBK_OSP_U_DEREG_ACK:
// ignore a network user deregistration command
delete tsbk;
return true; // don't allow this to write to the air
case TSBK_OSP_LOC_REG_RSP:
// ignore a network location registration command
delete tsbk;
return true; // don't allow this to write to the air
case TSBK_OSP_QUE_RSP:
// ignore a network queue command
delete tsbk;
return true; // don't allow this to write to the air
default:
LogError(LOG_NET, P25_TSDU_STR ", unhandled LCO, mfId = $%02X, lco = $%02X", tsbk->getMFId(), tsbk->getLCO());
delete tsbk;
return false;
} // switch (tsbk->getLCO())
writeNet_TSDU(tsbk);
delete tsbk;
writeNet_TSDU(tsbk.get());
}
break;
default:
@ -907,9 +892,9 @@ bool Trunk::processMBT(DataHeader dataHeader, DataBlock* blocks)
uint8_t data[1U];
::memset(data, 0x00U, 1U);
lc::AMBT* ambt = lc::tsbk::TSBKFactory::createAMBT(dataHeader, blocks);
if (ambt != NULL) {
return process(data, 1U, ambt);
std::unique_ptr<lc::AMBT> ambt = TSBKFactory::createAMBT(dataHeader, blocks);
if (ambt != nullptr) {
return process(data, 1U, ambt.get());
} else {
return false;
}
@ -936,7 +921,7 @@ void Trunk::writeAdjSSNetwork()
}
// transmit adjacent site broadcast
lc::tsbk::OSP_ADJ_STS_BCAST *osp = new lc::tsbk::OSP_ADJ_STS_BCAST();
std::unique_ptr<OSP_ADJ_STS_BCAST> osp = new_unique(OSP_ADJ_STS_BCAST);
osp->setSrcId(P25_WUID_FNE);
osp->setAdjSiteCFVA(cfva);
osp->setAdjSiteSysId(m_p25->m_siteData.sysId());
@ -946,8 +931,7 @@ void Trunk::writeAdjSSNetwork()
osp->setAdjSiteChnNo(m_p25->m_siteData.channelNo());
osp->setAdjSiteSvcClass(m_p25->m_siteData.serviceClass());
RF_TO_WRITE_NET(osp);
delete osp;
RF_TO_WRITE_NET(osp.get());
}
}
@ -1033,12 +1017,11 @@ void Trunk::writeRF_TSDU_Call_Alrt(uint32_t srcId, uint32_t dstId)
::ActivityLog("P25", true, "call alert request from %u to %u", srcId, dstId);
lc::tsbk::IOSP_CALL_ALRT *iosp = new lc::tsbk::IOSP_CALL_ALRT();
std::unique_ptr<IOSP_CALL_ALRT> iosp = new_unique(IOSP_CALL_ALRT);
iosp->setSrcId(srcId);
iosp->setDstId(dstId);
writeRF_TSDU_SBF(iosp, false);
delete iosp;
writeRF_TSDU_SBF(iosp.get(), false);
}
/// <summary>
@ -1055,13 +1038,12 @@ void Trunk::writeRF_TSDU_Radio_Mon(uint32_t srcId, uint32_t dstId, uint8_t txMul
::ActivityLog("P25" , true , "Radio Unit Monitor request from %u to %u" , srcId , dstId);
lc::tsbk::IOSP_RAD_MON *iosp = new lc::tsbk::IOSP_RAD_MON();
std::unique_ptr<IOSP_RAD_MON> iosp = new_unique(IOSP_RAD_MON);
iosp->setSrcId(srcId);
iosp->setDstId(dstId);
iosp->setTxMult(txMult);
writeRF_TSDU_SBF(iosp, false);
delete iosp;
writeRF_TSDU_SBF(iosp.get(), false);
}
/// <summary>
@ -1072,7 +1054,7 @@ void Trunk::writeRF_TSDU_Radio_Mon(uint32_t srcId, uint32_t dstId, uint8_t txMul
/// <param name="dstId"></param>
void Trunk::writeRF_TSDU_Ext_Func(uint32_t func, uint32_t arg, uint32_t dstId)
{
lc::tsbk::IOSP_EXT_FNCT *iosp = new lc::tsbk::IOSP_EXT_FNCT();
std::unique_ptr<IOSP_EXT_FNCT> iosp = new_unique(IOSP_EXT_FNCT);
iosp->setExtendedFunction(func);
iosp->setSrcId(arg);
iosp->setDstId(dstId);
@ -1093,8 +1075,7 @@ void Trunk::writeRF_TSDU_Ext_Func(uint32_t func, uint32_t arg, uint32_t dstId)
::ActivityLog("P25", true, "radio uninhibit request from %u to %u", arg, dstId);
}
writeRF_TSDU_SBF(iosp, false);
delete iosp;
writeRF_TSDU_SBF(iosp.get(), false);
}
/// <summary>
@ -1109,12 +1090,11 @@ void Trunk::writeRF_TSDU_Grp_Aff_Q(uint32_t dstId)
::ActivityLog("P25", true, "group affiliation query command from %u to %u", P25_WUID_FNE, dstId);
lc::tsbk::OSP_GRP_AFF_Q *osp = new lc::tsbk::OSP_GRP_AFF_Q();
std::unique_ptr<OSP_GRP_AFF_Q> osp = new_unique(OSP_GRP_AFF_Q);
osp->setSrcId(P25_WUID_FNE);
osp->setDstId(dstId);
writeRF_TSDU_SBF(osp, true);
delete osp;
writeRF_TSDU_SBF(osp.get(), true);
}
/// <summary>
@ -1129,12 +1109,11 @@ void Trunk::writeRF_TSDU_U_Reg_Cmd(uint32_t dstId)
::ActivityLog("P25", true, "unit registration command from %u to %u", P25_WUID_FNE, dstId);
lc::tsbk::OSP_U_REG_CMD *osp = new lc::tsbk::OSP_U_REG_CMD();
std::unique_ptr<OSP_U_REG_CMD> osp = new_unique(OSP_U_REG_CMD);
osp->setSrcId(P25_WUID_FNE);
osp->setDstId(dstId);
writeRF_TSDU_SBF(osp, true);
delete osp;
writeRF_TSDU_SBF(osp.get(), true);
}
/// <summary>
@ -1148,7 +1127,7 @@ void Trunk::writeRF_TSDU_Emerg_Alrm(uint32_t srcId, uint32_t dstId)
return;
}
lc::tsbk::ISP_EMERG_ALRM_REQ *isp = new lc::tsbk::ISP_EMERG_ALRM_REQ();
std::unique_ptr<ISP_EMERG_ALRM_REQ> isp = new_unique(ISP_EMERG_ALRM_REQ);
isp->setSrcId(srcId);
isp->setDstId(dstId);
@ -1157,8 +1136,7 @@ void Trunk::writeRF_TSDU_Emerg_Alrm(uint32_t srcId, uint32_t dstId)
srcId, dstId);
}
writeRF_TSDU_SBF(isp, true);
delete isp;
writeRF_TSDU_SBF(isp.get(), true);
}
/// <summary>
@ -1171,13 +1149,10 @@ void Trunk::setConvFallback(bool fallback)
if (m_convFallback && m_p25->m_control) {
m_convFallbackPacketDelay = 0U;
lc::tsbk::OSP_MOT_PSH_CCH *osp = new lc::tsbk::OSP_MOT_PSH_CCH();
std::unique_ptr<OSP_MOT_PSH_CCH> osp = new_unique(OSP_MOT_PSH_CCH);
for (uint8_t i = 0U; i < 3U; i++) {
writeRF_TSDU_SBF(osp, true);
writeRF_TSDU_SBF(osp.get(), true);
}
delete osp;
}
}
@ -1264,7 +1239,7 @@ Trunk::~Trunk()
/// <param name="autoReset"></param>
void Trunk::writeNetworkRF(lc::TSBK* tsbk, const uint8_t* data, bool autoReset)
{
assert(tsbk != NULL);
assert(tsbk != nullptr);
assert(data != NULL);
if (m_network == NULL)
@ -1603,7 +1578,7 @@ void Trunk::writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool clearBeforeWri
if (!m_p25->m_control)
return;
assert(tsbk != NULL);
assert(tsbk != nullptr);
uint8_t data[P25_TSDU_FRAME_LENGTH_BYTES + 2U];
::memset(data + 2U, 0x00U, P25_TSDU_FRAME_LENGTH_BYTES);
@ -1667,7 +1642,7 @@ void Trunk::writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool clearBeforeWri
/// <param name="tsbk"></param>
void Trunk::writeNet_TSDU(lc::TSBK* tsbk)
{
assert(tsbk != NULL);
assert(tsbk != nullptr);
uint8_t buffer[P25_TSDU_FRAME_LENGTH_BYTES + 2U];
::memset(buffer, 0x00U, P25_TSDU_FRAME_LENGTH_BYTES + 2U);
@ -1710,7 +1685,7 @@ void Trunk::writeRF_TSDU_MBF(lc::TSBK* tsbk, bool clearBeforeWrite)
return;
}
assert(tsbk != NULL);
assert(tsbk != nullptr);
uint8_t frame[P25_TSBK_FEC_LENGTH_BYTES];
::memset(frame, 0x00U, P25_TSBK_FEC_LENGTH_BYTES);
@ -1828,7 +1803,7 @@ void Trunk::writeRF_TSDU_AMBT(lc::AMBT* ambt, bool clearBeforeWrite)
if (!m_p25->m_control)
return;
assert(ambt != NULL);
assert(ambt != nullptr);
DataHeader header = DataHeader();
uint8_t pduUserData[P25_PDU_UNCONFIRMED_LENGTH_BYTES * P25_MAX_PDU_COUNT];
@ -1862,7 +1837,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
if (!m_p25->m_control)
return;
lc::TSBK* tsbk = NULL;
std::unique_ptr<lc::TSBK> tsbk;
switch (lco) {
case TSBK_OSP_GRP_VCH_GRANT_UPD:
@ -1875,7 +1850,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_GRP_VCH_GRANT_UPD (Group Voice Channel Grant Update)");
}
lc::tsbk::OSP_GRP_VCH_GRANT_UPD* osp = new lc::tsbk::OSP_GRP_VCH_GRANT_UPD();
std::unique_ptr<OSP_GRP_VCH_GRANT_UPD> osp = new_unique(OSP_GRP_VCH_GRANT_UPD);
bool noData = false;
uint8_t i = 0U;
@ -1908,10 +1883,9 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
}
if (noData) {
delete osp;
return; // don't create anything
} else {
tsbk = osp;
tsbk = std::move(osp);
}
}
else {
@ -1943,18 +1917,18 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
// handle 700/800/900 identities
if (entry.baseFrequency() >= 762000000U) {
lc::tsbk::OSP_IDEN_UP* osp = new lc::tsbk::OSP_IDEN_UP();
std::unique_ptr<OSP_IDEN_UP> osp = new_unique(OSP_IDEN_UP);
osp->siteIdenEntry(entry);
// transmit channel ident broadcast
tsbk = osp;
tsbk = std::move(osp);
}
else {
lc::tsbk::OSP_IDEN_UP_VU* osp = new lc::tsbk::OSP_IDEN_UP_VU();
std::unique_ptr<OSP_IDEN_UP_VU> osp = new_unique(OSP_IDEN_UP_VU);
osp->siteIdenEntry(entry);
// transmit channel ident broadcast
tsbk = osp;
tsbk = std::move(osp);
}
m_mbfIdenCnt++;
@ -1969,7 +1943,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
}
// transmit net status burst
tsbk = new lc::tsbk::OSP_NET_STS_BCAST();
tsbk = new_unique(OSP_NET_STS_BCAST);
break;
case TSBK_OSP_RFSS_STS_BCAST:
if (m_debug) {
@ -1977,7 +1951,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
}
// transmit rfss status burst
tsbk = new lc::tsbk::OSP_RFSS_STS_BCAST();
tsbk = new_unique(OSP_RFSS_STS_BCAST);
break;
case TSBK_OSP_ADJ_STS_BCAST:
// write ADJSS
@ -1989,7 +1963,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_ADJ_STS_BCAST (Adjacent Site Broadcast)");
}
lc::tsbk::OSP_ADJ_STS_BCAST* osp = new lc::tsbk::OSP_ADJ_STS_BCAST();
std::unique_ptr<OSP_ADJ_STS_BCAST> osp = new_unique(OSP_ADJ_STS_BCAST);
uint8_t i = 0U;
for (auto it = m_adjSiteTable.begin(); it != m_adjSiteTable.end(); ++it) {
@ -2018,7 +1992,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
osp->setAdjSiteChnNo(site.channelNo());
osp->setAdjSiteSvcClass(site.serviceClass());
tsbk = osp;
tsbk = std::move(osp);
m_mbfAdjSSCnt++;
break;
}
@ -2038,7 +2012,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_SCCB_EXP (Secondary Control Channel Broadcast)");
}
lc::tsbk::OSP_SCCB_EXP* osp = new lc::tsbk::OSP_SCCB_EXP();
std::unique_ptr<OSP_SCCB_EXP> osp = new_unique(OSP_SCCB_EXP);
uint8_t i = 0U;
for (auto it = m_sccbTable.begin(); it != m_sccbTable.end(); ++it) {
@ -2055,7 +2029,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
osp->setSCCBChnId1(site.channelId());
osp->setSCCBChnNo(site.channelNo());
tsbk = osp;
tsbk = std::move(osp);
m_mbfSCCBCnt++;
break;
}
@ -2071,7 +2045,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
}
// transmit SNDCP announcement
tsbk = new lc::tsbk::OSP_SNDCP_CH_ANN();
tsbk = new_unique(OSP_SNDCP_CH_ANN);
break;
case TSBK_OSP_SYNC_BCAST:
{
@ -2080,8 +2054,9 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
}
// transmit sync broadcast
lc::tsbk::OSP_SYNC_BCAST* osp = new lc::tsbk::OSP_SYNC_BCAST();
std::unique_ptr<OSP_SYNC_BCAST> osp = new_unique(OSP_SYNC_BCAST);
osp->setMicroslotCount(m_microslotCount);
tsbk = std::move(osp);
}
break;
@ -2092,7 +2067,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
}
// transmit motorola PSH CCH burst
tsbk = new lc::tsbk::OSP_MOT_PSH_CCH();
tsbk = new_unique(OSP_MOT_PSH_CCH);
break;
case TSBK_OSP_MOT_CC_BSI:
@ -2101,7 +2076,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
}
// transmit motorola CC BSI burst
tsbk = new lc::tsbk::OSP_MOT_CC_BSI();
tsbk = new_unique(OSP_MOT_CC_BSI);
break;
/** DVM CC data */
@ -2111,7 +2086,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
}
// transmit git hash burst
tsbk = new lc::tsbk::OSP_DVM_GIT_HASH();
tsbk = new_unique(OSP_DVM_GIT_HASH);
break;
}
@ -2120,13 +2095,11 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
// are we transmitting CC as a multi-block?
if (m_ctrlTSDUMBF) {
writeRF_TSDU_MBF(tsbk);
writeRF_TSDU_MBF(tsbk.get());
}
else {
writeRF_TSDU_SBF(tsbk, true);
writeRF_TSDU_SBF(tsbk.get(), true);
}
delete tsbk;
}
}
@ -2240,7 +2213,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp
::ActivityLog("P25", true, "group grant request from %u to TG %u", srcId, dstId);
}
lc::tsbk::IOSP_GRP_VCH *iosp = new lc::tsbk::IOSP_GRP_VCH();
std::unique_ptr<IOSP_GRP_VCH> iosp = new_unique(IOSP_GRP_VCH);
iosp->setSrcId(srcId);
iosp->setDstId(dstId);
iosp->setGrpVchNo(chNo);
@ -2255,15 +2228,14 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp
// transmit group grant
// m_p25->m_writeImmediate = true;
writeRF_TSDU_SBF(iosp, false, true, net);
delete iosp;
writeRF_TSDU_SBF(iosp.get(), false, true, net);
}
else {
if (!net) {
::ActivityLog("P25", true, "unit-to-unit grant request from %u to %u", srcId, dstId);
}
lc::tsbk::IOSP_UU_VCH *iosp = new lc::tsbk::IOSP_UU_VCH();
std::unique_ptr<IOSP_UU_VCH> iosp = new_unique(IOSP_UU_VCH);
iosp->setSrcId(srcId);
iosp->setDstId(dstId);
iosp->setGrpVchNo(chNo);
@ -2278,8 +2250,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp
// transmit private grant
// m_p25->m_writeImmediate = true;
writeRF_TSDU_SBF(iosp, false, true, net);
delete iosp;
writeRF_TSDU_SBF(iosp.get(), false, true, net);
}
}
@ -2296,7 +2267,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp
/// <returns></returns>
bool Trunk::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip, bool net)
{
lc::tsbk::OSP_SNDCP_CH_GNT *osp = new lc::tsbk::OSP_SNDCP_CH_GNT();
std::unique_ptr<OSP_SNDCP_CH_GNT> osp = new_unique(OSP_SNDCP_CH_GNT);
osp->setSrcId(srcId);
osp->setDstId(dstId);
@ -2315,7 +2286,6 @@ bool Trunk::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip,
m_p25->m_rfState = RS_RF_REJECTED;
}
delete osp;
return false;
}
@ -2329,7 +2299,6 @@ bool Trunk::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip,
m_p25->m_rfState = RS_RF_REJECTED;
}
delete osp;
return false;
}
else {
@ -2360,8 +2329,7 @@ bool Trunk::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip,
}
// transmit SNDCP grant
writeRF_TSDU_SBF(osp, false, true, net);
delete osp;
writeRF_TSDU_SBF(osp.get(), false, true, net);
return true;
}
@ -2372,7 +2340,7 @@ bool Trunk::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip,
/// <param name="dstId"></param>
void Trunk::writeRF_TSDU_UU_Ans_Req(uint32_t srcId, uint32_t dstId)
{
lc::tsbk::IOSP_UU_ANS *iosp = new lc::tsbk::IOSP_UU_ANS();
std::unique_ptr<IOSP_UU_ANS> iosp = new_unique(IOSP_UU_ANS);
iosp->setSrcId(srcId);
iosp->setDstId(dstId);
@ -2380,8 +2348,7 @@ void Trunk::writeRF_TSDU_UU_Ans_Req(uint32_t srcId, uint32_t dstId)
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_ANS (Unit-to-Unit Answer Request), srcId = %u, dstId = %u", srcId, dstId);
}
writeRF_TSDU_SBF(iosp, false);
delete iosp;
writeRF_TSDU_SBF(iosp.get(), false);
}
/// <summary>
@ -2392,7 +2359,7 @@ void Trunk::writeRF_TSDU_UU_Ans_Req(uint32_t srcId, uint32_t dstId)
/// <param name="noNetwork"></param>
void Trunk::writeRF_TSDU_ACK_FNE(uint32_t srcId, uint32_t service, bool extended, bool noNetwork)
{
lc::tsbk::IOSP_ACK_RSP *iosp = new lc::tsbk::IOSP_ACK_RSP();
std::unique_ptr<IOSP_ACK_RSP> iosp = new_unique(IOSP_ACK_RSP);
iosp->setSrcId(srcId);
iosp->setService(service);
@ -2406,8 +2373,7 @@ void Trunk::writeRF_TSDU_ACK_FNE(uint32_t srcId, uint32_t service, bool extended
iosp->getAIV(), iosp->getEX(), iosp->getService(), srcId);
}
writeRF_TSDU_SBF(iosp, noNetwork);
delete iosp;
writeRF_TSDU_SBF(iosp.get(), noNetwork);
}
/// <summary>
@ -2419,7 +2385,7 @@ void Trunk::writeRF_TSDU_ACK_FNE(uint32_t srcId, uint32_t service, bool extended
/// <param name="aiv"></param>
void Trunk::writeRF_TSDU_Deny(uint32_t dstId, uint8_t reason, uint8_t service, bool aiv)
{
lc::tsbk::OSP_DENY_RSP* osp = new lc::tsbk::OSP_DENY_RSP();
std::unique_ptr<OSP_DENY_RSP> osp = new_unique(OSP_DENY_RSP);
osp->setAIV(aiv);
osp->setSrcId(P25_WUID_FNE);
osp->setDstId(dstId);
@ -2431,8 +2397,7 @@ void Trunk::writeRF_TSDU_Deny(uint32_t dstId, uint8_t reason, uint8_t service, b
osp->getAIV(), reason, osp->getSrcId(), osp->getDstId());
}
writeRF_TSDU_SBF(osp, false);
delete osp;
writeRF_TSDU_SBF(osp.get(), false);
}
/// <summary>
@ -2444,7 +2409,7 @@ bool Trunk::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId)
{
bool ret = false;
lc::tsbk::IOSP_GRP_AFF *iosp = new lc::tsbk::IOSP_GRP_AFF();
std::unique_ptr<IOSP_GRP_AFF> iosp = new_unique(IOSP_GRP_AFF);
iosp->setAnnounceGroup(m_patchSuperGroup); // this isn't right...
iosp->setSrcId(srcId);
iosp->setDstId(dstId);
@ -2489,8 +2454,7 @@ bool Trunk::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId)
m_p25->m_affiliations.groupAff(srcId, dstId);
}
writeRF_TSDU_SBF(iosp, false);
delete iosp;
writeRF_TSDU_SBF(iosp.get(), false);
return ret;
}
@ -2501,7 +2465,7 @@ bool Trunk::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId)
/// <param name="sysId"></param>
void Trunk::writeRF_TSDU_U_Reg_Rsp(uint32_t srcId, uint32_t sysId)
{
lc::tsbk::IOSP_U_REG *iosp = new lc::tsbk::IOSP_U_REG();
std::unique_ptr<IOSP_U_REG> iosp = new_unique(IOSP_U_REG);
iosp->setResponse(P25_RSP_ACCEPT);
iosp->setSrcId(srcId);
iosp->setDstId(srcId);
@ -2533,8 +2497,7 @@ void Trunk::writeRF_TSDU_U_Reg_Rsp(uint32_t srcId, uint32_t sysId)
}
}
writeRF_TSDU_SBF(iosp, true);
delete iosp;
writeRF_TSDU_SBF(iosp.get(), true);
// validate the source RID
if (!acl::AccessControl::validateSrcId(srcId)) {
@ -2560,12 +2523,11 @@ void Trunk::writeRF_TSDU_U_Dereg_Ack(uint32_t srcId)
::ActivityLog("P25", true, "unit deregistration request from %u", srcId);
lc::tsbk::OSP_U_DEREG_ACK *osp = new lc::tsbk::OSP_U_DEREG_ACK();
std::unique_ptr<OSP_U_DEREG_ACK> osp = new_unique(OSP_U_DEREG_ACK);
osp->setSrcId(P25_WUID_FNE);
osp->setDstId(srcId);
writeRF_TSDU_SBF(osp, false);
delete osp;
writeRF_TSDU_SBF(osp.get(), false);
}
else {
::ActivityLog("P25", true, "unit deregistration request from %u denied", srcId);
@ -2581,7 +2543,7 @@ void Trunk::writeRF_TSDU_U_Dereg_Ack(uint32_t srcId)
/// <param name="aiv"></param>
void Trunk::writeRF_TSDU_Queue(uint32_t dstId, uint8_t reason, uint8_t service, bool aiv)
{
lc::tsbk::OSP_QUE_RSP *osp = new lc::tsbk::OSP_QUE_RSP();
std::unique_ptr<OSP_QUE_RSP> osp = new_unique(OSP_QUE_RSP);
osp->setAIV(aiv);
osp->setSrcId(P25_WUID_FNE);
osp->setDstId(dstId);
@ -2593,8 +2555,7 @@ void Trunk::writeRF_TSDU_Queue(uint32_t dstId, uint8_t reason, uint8_t service,
osp->getAIV(), reason, osp->getSrcId(), osp->getDstId());
}
writeRF_TSDU_SBF(osp, false);
delete osp;
writeRF_TSDU_SBF(osp.get(), false);
}
/// <summary>
@ -2607,7 +2568,7 @@ bool Trunk::writeRF_TSDU_Loc_Reg_Rsp(uint32_t srcId, uint32_t dstId, bool grp)
{
bool ret = false;
lc::tsbk::OSP_LOC_REG_RSP *osp = new lc::tsbk::OSP_LOC_REG_RSP();
std::unique_ptr<OSP_LOC_REG_RSP> osp = new_unique(OSP_LOC_REG_RSP);
osp->setResponse(P25_RSP_ACCEPT);
osp->setDstId(dstId);
osp->setSrcId(srcId);
@ -2650,8 +2611,7 @@ bool Trunk::writeRF_TSDU_Loc_Reg_Rsp(uint32_t srcId, uint32_t dstId, bool grp)
ret = true;
}
writeRF_TSDU_SBF(osp, false);
delete osp;
writeRF_TSDU_SBF(osp.get(), false);
return ret;
}
@ -2662,14 +2622,13 @@ bool Trunk::writeRF_TSDU_Loc_Reg_Rsp(uint32_t srcId, uint32_t dstId, bool grp)
/// <param name="dstId"></param>
bool Trunk::writeNet_TSDU_Call_Term(uint32_t srcId, uint32_t dstId)
{
lc::tsbk::OSP_DVM_LC_CALL_TERM* osp = new lc::tsbk::OSP_DVM_LC_CALL_TERM();
std::unique_ptr<OSP_DVM_LC_CALL_TERM> osp = new_unique(OSP_DVM_LC_CALL_TERM);
osp->setGrpVchId(m_p25->m_siteData.channelId());
osp->setGrpVchNo(m_p25->m_siteData.channelNo());
osp->setDstId(dstId);
osp->setSrcId(srcId);
writeRF_TSDU_SBF(osp, false);
delete osp;
writeRF_TSDU_SBF(osp.get(), false);
return true;
}

@ -64,7 +64,7 @@ namespace p25
class HOST_SW_API Trunk {
public:
/// <summary>Process a data frame from the RF interface.</summary>
virtual bool process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK = NULL);
virtual bool process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK = nullptr);
/// <summary>Process a data frame from the network.</summary>
virtual bool processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, uint8_t& duid);

Loading…
Cancel
Save

Powered by TurnKey Linux.