reorganize some code; move NXDN scrambler code to a utils class for reuse purposes; cleanup some calibration mode mess;

2.0-maint
Bryan Biedenkapp 3 years ago
parent 2b89b35e8d
commit 2e622f16d7

@ -83,6 +83,7 @@ HOST_OBJECTS = \
nxdn/Control.o \ nxdn/Control.o \
nxdn/Convolution.o \ nxdn/Convolution.o \
nxdn/Sync.o \ nxdn/Sync.o \
nxdn/NXDNUtils.o \
p25/acl/AccessControl.o \ p25/acl/AccessControl.o \
p25/data/DataBlock.o \ p25/data/DataBlock.o \
p25/data/DataHeader.o \ p25/data/DataHeader.o \
@ -115,7 +116,7 @@ HOST_OBJECTS = \
network/BaseNetwork.o \ network/BaseNetwork.o \
network/Network.o \ network/Network.o \
yaml/Yaml.o \ yaml/Yaml.o \
host/calibrate/Console.o \ host/Console.o \
host/calibrate/HostCal.o \ host/calibrate/HostCal.o \
host/setup/HostSetup.o \ host/setup/HostSetup.o \
host/Host.o \ host/Host.o \

@ -1,246 +0,0 @@
/**
* 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
*
*/
//
// Based on code from the MMDVMHost project. (https://github.com/g4klx/MMDVMHost)
// Licensed under the GPLv2 License (https://opensource.org/licenses/GPL-2.0)
//
/*
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
*
* 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 "host/calibrate/Console.h"
#include <cstdio>
#if defined(_WIN32) || defined(_WIN64)
#include <conio.h>
#else
#include <cstring>
#include <termios.h>
#include <unistd.h>
#include <sys/select.h>
#endif
// ---------------------------------------------------------------------------
// Public Class Members
// ---------------------------------------------------------------------------
#if defined(_WIN32) || defined(_WIN64)
/// <summary>
/// Initializes a new instance of the Console class.
/// </summary>
Console::Console()
{
/* stub */
}
/// <summary>
/// Finalizes a instance of the Console class.
/// </summary>
Console::~Console()
{
/* stub */
}
/// <summary>
/// Opens the terminal console.
/// </summary>
bool Console::open()
{
return true;
}
/// <summary>
/// Retrieves a character input on the keyboard.
/// </summary>
/// <returns></returns>
int Console::getChar()
{
if (::_kbhit() == 0)
return -1;
return ::_getch();
}
/// <summary>
/// Closes the terminal console.
/// </summary>
void Console::close()
{
/* stub */
}
#else
/// <summary>
/// Initializes a new instance of the Console class.
/// </summary>
Console::Console() :
m_termios()
{
::memset(&m_termios, 0x00U, sizeof(termios));
}
/// <summary>
/// Finalizes a instance of the Console class.
/// </summary>
Console::~Console()
{
/* stub */
}
/// <summary>
/// Opens the terminal console.
/// </summary>
bool Console::open()
{
termios tios;
int n = ::tcgetattr(STDIN_FILENO, &tios);
if (n != 0) {
::fprintf(stderr, "tcgetattr: returned %d\r\n", n);
return -1;
}
m_termios = tios;
::cfmakeraw(&tios);
n = ::tcsetattr(STDIN_FILENO, TCSANOW, &tios);
if (n != 0) {
::fprintf(stderr, "tcsetattr: returned %d\r\n", n);
return -1;
}
return true;
}
/// <summary>
/// Retrieves a character input on the keyboard.
/// </summary>
/// <returns></returns>
int Console::getChar()
{
fd_set fds;
FD_ZERO(&fds);
FD_SET(STDIN_FILENO, &fds);
timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 0;
int n = ::select(STDIN_FILENO + 1, &fds, NULL, NULL, &tv);
if (n <= 0) {
if (n < 0)
::fprintf(stderr, "select: returned %d\r\n", n);
return -1;
}
char c;
n = ::read(STDIN_FILENO, &c, 1);
if (n <= 0) {
if (n < 0)
::fprintf(stderr, "read: returned %d\r\n", n);
return -1;
}
return c;
}
/// <summary>
/// Closes the terminal console.
/// </summary>
void Console::close()
{
int n = ::tcsetattr(STDIN_FILENO, TCSANOW, &m_termios);
if (n != 0)
::fprintf(stderr, "tcsetattr: returned %d\r\n", n);
}
#endif
/// <summary>
/// Retrieves an array of characters input on the keyboard.
/// </summary>
/// <param name="line"></param>
/// <param name="max"></param>
/// <param name="mask"></param>
/// <returns></returns>
int Console::getLine(char line[], int max, char mask)
{
int nch = 0;
int c;
bool skipNext = false;
max = max - 1; /* leave room for '\0' */
while ((c = getChar()) != '\n') {
if (c != -1) {
if (c == 10 || c == 13)
break;
// skip "double-byte" control characters
if (c == 224) {
skipNext = true;
continue;
}
if (skipNext) {
skipNext = false;
continue;
}
// has characters and backspace character?
if (nch > 0 && (c == 127 || c == 8)) {
// handle backspace
::fputc(0x8, stdout);
::fputc(' ', stdout);
::fputc(0x8, stdout);
::fflush(stdout);
line[--nch] = 0;
}
else {
// skip control characters
if (iscntrl(c))
continue;
if (nch < max) {
// valid mask character?
if (' ' - 1 < mask && mask < 127)
::fputc(mask, stdout);
else
::fputc(c, stdout);
::fflush(stdout);
line[nch++] = c;
}
}
}
}
if (c == EOF && nch == 0)
return EOF;
::fputc('\r', stdout);
::fputc('\n', stdout);
::fflush(stdout);
line[nch] = '\0';
return nch;
}

@ -1,70 +0,0 @@
/**
* 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
*
*/
//
// Based on code from the MMDVMCal project. (https://github.com/g4klx/MMDVMCal)
// Licensed under the GPLv2 License (https://opensource.org/licenses/GPL-2.0)
//
/*
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
*
* 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(__CONSOLE_H__)
#define __CONSOLE_H__
#include "Defines.h"
#if !defined(_WIN32) && !defined(_WIN64)
#include <termios.h>
#endif
// ---------------------------------------------------------------------------
// Class Declaration
// Implements cross-platform handling of the terminal console. This is
// mainly used for the calibration mode.
// ---------------------------------------------------------------------------
class HOST_SW_API Console {
public:
/// <summary>Initializes a new instance of the Console class.</summary>
Console();
/// <summary>Finalizes a instance of the Console class.</summary>
~Console();
/// <summary>Opens the terminal console.</summary>
bool open();
/// <summary>Retrieves a character input on the keyboard.</summary>
int getChar();
/// <summary>Retrieves an array of characters input on the keyboard.</summary>
int getLine(char line[], int max, char mask);
/// <summary>Closes the terminal console.</summary>
void close();
private:
#if !defined(_WIN32) && !defined(_WIN64)
termios m_termios;
#endif
};
#endif // __CONSOLE_H__

File diff suppressed because it is too large Load Diff

@ -35,7 +35,7 @@
#include "Defines.h" #include "Defines.h"
#include "edac/AMBEFEC.h" #include "edac/AMBEFEC.h"
#include "modem/Modem.h" #include "modem/Modem.h"
#include "host/calibrate/Console.h" #include "host/Console.h"
#include "host/Host.h" #include "host/Host.h"
#include "lookups/IdenTableLookup.h" #include "lookups/IdenTableLookup.h"
#include "yaml/Yaml.h" #include "yaml/Yaml.h"
@ -69,65 +69,19 @@ private:
bool m_duplex; bool m_duplex;
bool m_rxInvert; // dedicated modem - Rx signal inversion
bool m_txInvert; // dedicated modem - Tx signal inversion
bool m_pttInvert; // dedicated modem - PTT signal inversion
bool m_dcBlocker; // dedicated modem - DC blocker
float m_rxLevel; // dedicated/hotspot modem - Rx modulation level
float m_txLevel; // dedicated/hotspot modem - Tx modulation level
bool m_dmrEnabled; bool m_dmrEnabled;
bool m_dmrRx1K; bool m_dmrRx1K;
bool m_p25Enabled; bool m_p25Enabled;
bool m_p25Rx1K; bool m_p25Rx1K;
bool m_nxdnEnabled; bool m_nxdnEnabled;
int m_rxDCOffset; // dedicated modem - Rx signal DC offset
int m_txDCOffset; // dedicated modem - Tx signal DC offset
bool m_isHotspot; bool m_isHotspot;
int8_t m_dmrDiscBWAdj; // hotspot modem - DMR discriminator BW adjustment
int8_t m_p25DiscBWAdj; // hotspot modem - P25 discriminator BW adjustment
int8_t m_nxdnDiscBWAdj; // hotspot modem - NXDN discriminator BW adjustment
int8_t m_dmrPostBWAdj; // hotspot modem - DMR post demod BW adjustment
int8_t m_p25PostBWAdj; // hotspot modem - P25 post demod BW adjustment
int8_t m_nxdnPostBWAdj; // hotspot modem - NXDN post demod BW adjustment
modem::ADF_GAIN_MODE m_adfGainMode; // hotspot modem - ADF7021 Rx gain
bool m_afcEnable; // hotspot modem - ADF7021 AFC enable
uint8_t m_afcKI; // hotspot modem - AFC KI (affects AFC settling time)
uint8_t m_afcKP; // hotspot modem - AFC KP (affects AFC settling time)
uint8_t m_afcRange; // hotspot modem - AFC Maximum Range (m_afcRange * 500hz)
int m_dmrSymLevel3Adj; // dedicated modem - +3/-3 DMR symbol adjustment
int m_dmrSymLevel1Adj; // dedicated modem - +1/-1 DMR symbol adjustment
int m_p25SymLevel3Adj; // dedicated modem - +3/-3 P25 symbol adjustment
int m_p25SymLevel1Adj; // dedicated modem - +1/-1 P25 symbol adjustment
int m_nxdnSymLevel3Adj; // dedicated modem - +3/-3 NXDN symbol adjustment
int m_nxdnSymLevel1Adj; // dedicated modem - +1/-1 NXDN symbol adjustment
uint8_t m_rxCoarsePot; // dedicated modem - with softpot
uint8_t m_rxFinePot; // dedicated modem - with softpot
uint8_t m_txCoarsePot; // dedicated modem - with softpot
uint8_t m_txFinePot; // dedicated modem - with softpot
uint8_t m_rssiCoarsePot; // dedicated modem - with softpot
uint8_t m_rssiFinePot; // dedicated modem - with softpot
uint8_t m_fdmaPreamble;
uint8_t m_dmrRxDelay;
uint8_t m_p25CorrCount;
bool m_debug; bool m_debug;
uint8_t m_mode; uint8_t m_mode;
std::string m_modeStr; std::string m_modeStr;
int m_rxTuning;
int m_txTuning;
uint32_t m_rxFrequency; // hotspot modem - Rx Frequency uint32_t m_rxFrequency; // hotspot modem - Rx Frequency
uint32_t m_rxAdjustedFreq; uint32_t m_rxAdjustedFreq;
uint32_t m_txFrequency; // hotspot modem - Tx Frequency uint32_t m_txFrequency; // hotspot modem - Tx Frequency
@ -226,9 +180,6 @@ private:
/// <summary>Prints the current status of the calibration.</summary> /// <summary>Prints the current status of the calibration.</summary>
void printStatus(); void printStatus();
/// <summary></summary>
void nxdnScrambler(uint8_t* data) const;
/// <summary>Counts the total number of bit errors between bytes.</summary> /// <summary>Counts the total number of bit errors between bytes.</summary>
uint8_t countErrs(uint8_t a, uint8_t b); uint8_t countErrs(uint8_t a, uint8_t b);
}; };

@ -27,7 +27,7 @@
#define __HOST_SETUP_H__ #define __HOST_SETUP_H__
#include "Defines.h" #include "Defines.h"
#include "host/calibrate/Console.h" #include "host/Console.h"
#include "host/Host.h" #include "host/Host.h"
#include "lookups/IdenTableLookup.h" #include "lookups/IdenTableLookup.h"
#include "yaml/Yaml.h" #include "yaml/Yaml.h"

@ -36,6 +36,7 @@
#include "nxdn/channel/FACCH1.h" #include "nxdn/channel/FACCH1.h"
#include "nxdn/lc/RTCH.h" #include "nxdn/lc/RTCH.h"
#include "nxdn/Sync.h" #include "nxdn/Sync.h"
#include "nxdn/NXDNUtils.h"
#include "edac/AMBEFEC.h" #include "edac/AMBEFEC.h"
#include "HostMain.h" #include "HostMain.h"
#include "Log.h" #include "Log.h"
@ -383,7 +384,7 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
Utils::symbols("!!! *Rx NXDN", data + 2U, len - 2U); Utils::symbols("!!! *Rx NXDN", data + 2U, len - 2U);
} }
scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
channel::LICH lich; channel::LICH lich;
bool valid = lich.decode(data + 2U); bool valid = lich.decode(data + 2U);
@ -687,7 +688,7 @@ void Control::processNetwork()
Utils::dump(2U, "!!! *NXDN Network Frame", data, length); Utils::dump(2U, "!!! *NXDN Network Frame", data, length);
} }
scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
channel::LICH lich; channel::LICH lich;
bool valid = lich.decode(data + 2U); bool valid = lich.decode(data + 2U);
@ -791,7 +792,7 @@ void Control::writeRF_Message_Tx_Rel(bool noNetwork)
data[0U] = modem::TAG_DATA; data[0U] = modem::TAG_DATA;
data[1U] = 0x00U; data[1U] = 0x00U;
scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
if (!noNetwork) if (!noNetwork)
m_data->writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U); m_data->writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U);
@ -834,19 +835,3 @@ void Control::writeEndNet()
if (m_network != NULL) if (m_network != NULL)
m_network->resetP25(); m_network->resetP25();
} }
/// <summary>
///
/// </summary>
/// <param name="data"></param>
void Control::scrambler(uint8_t* data) const
{
assert(data != NULL);
for (uint32_t i = 0U; i < NXDN_FRAME_LENGTH_BYTES; i++)
data[i] ^= SCRAMBLER[i];
if (m_debug) {
Utils::symbols("!!! *NXDN (Scrambled)", data, NXDN_FRAME_LENGTH_BYTES);
}
}

@ -197,9 +197,6 @@ namespace nxdn
/// <summary>Helper to write a Tx release packet.</summary> /// <summary>Helper to write a Tx release packet.</summary>
void writeRF_Message_Tx_Rel(bool noNetwork); void writeRF_Message_Tx_Rel(bool noNetwork);
/// <summary></summary>
void scrambler(uint8_t* data) const;
/// <summary>Helper to write RF end of frame data.</summary> /// <summary>Helper to write RF end of frame data.</summary>
void writeEndRF(); void writeEndRF();
/// <summary>Helper to write network end of frame data.</summary> /// <summary>Helper to write network end of frame data.</summary>

@ -34,6 +34,7 @@
#include "nxdn/packet/Data.h" #include "nxdn/packet/Data.h"
#include "nxdn/acl/AccessControl.h" #include "nxdn/acl/AccessControl.h"
#include "nxdn/Sync.h" #include "nxdn/Sync.h"
#include "nxdn/NXDNUtils.h"
#include "edac/CRC.h" #include "edac/CRC.h"
#include "HostMain.h" #include "HostMain.h"
#include "Log.h" #include "Log.h"
@ -255,7 +256,7 @@ bool Data::process(uint8_t option, uint8_t* data, uint32_t len)
data[1U] = 0x00U; data[1U] = 0x00U;
} }
m_nxdn->scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U); writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U);
@ -362,7 +363,7 @@ bool Data::processNetwork(uint8_t option, lc::RTCH& netLC, uint8_t* data, uint32
data[1U] = 0x00U; data[1U] = 0x00U;
} }
m_nxdn->scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
if (m_nxdn->m_duplex) { if (m_nxdn->m_duplex) {
m_nxdn->addFrame(data, NXDN_FRAME_LENGTH_BYTES + 2U); m_nxdn->addFrame(data, NXDN_FRAME_LENGTH_BYTES + 2U);

@ -33,6 +33,7 @@
#include "nxdn/packet/Trunk.h" #include "nxdn/packet/Trunk.h"
#include "nxdn/acl/AccessControl.h" #include "nxdn/acl/AccessControl.h"
#include "nxdn/Sync.h" #include "nxdn/Sync.h"
#include "nxdn/NXDNUtils.h"
#include "edac/CRC.h" #include "edac/CRC.h"
#include "HostMain.h" #include "HostMain.h"
#include "Log.h" #include "Log.h"
@ -407,7 +408,7 @@ void Trunk::writeRF_Message(bool noNetwork, bool clearBeforeWrite)
data[0U] = modem::TAG_DATA; data[0U] = modem::TAG_DATA;
data[1U] = 0x00U; data[1U] = 0x00U;
m_nxdn->scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
addPostBits(data + 2U); addPostBits(data + 2U);
@ -714,7 +715,7 @@ void Trunk::writeRF_CC_Message_Site_Info()
data[0U] = modem::TAG_DATA; data[0U] = modem::TAG_DATA;
data[1U] = 0x00U; data[1U] = 0x00U;
m_nxdn->scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
addPostBits(data + 2U); addPostBits(data + 2U);
@ -763,7 +764,7 @@ void Trunk::writeRF_CC_Message_Service_Info()
data[0U] = modem::TAG_DATA; data[0U] = modem::TAG_DATA;
data[1U] = 0x00U; data[1U] = 0x00U;
m_nxdn->scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
addPostBits(data + 2U); addPostBits(data + 2U);

@ -36,6 +36,7 @@
#include "nxdn/acl/AccessControl.h" #include "nxdn/acl/AccessControl.h"
#include "nxdn/Audio.h" #include "nxdn/Audio.h"
#include "nxdn/Sync.h" #include "nxdn/Sync.h"
#include "nxdn/NXDNUtils.h"
#include "edac/CRC.h" #include "edac/CRC.h"
#include "HostMain.h" #include "HostMain.h"
#include "Log.h" #include "Log.h"
@ -265,7 +266,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS); facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS); facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS);
m_nxdn->scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U); writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U);
@ -449,7 +450,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
facch.encode(start + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS); facch.encode(start + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
facch.encode(start + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS); facch.encode(start + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS);
m_nxdn->scrambler(start + 2U); NXDNUtils::scrambler(start + 2U);
writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U); writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U);
@ -592,7 +593,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len)
data[0U] = modem::TAG_DATA; data[0U] = modem::TAG_DATA;
data[1U] = 0x00U; data[1U] = 0x00U;
m_nxdn->scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U); writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U);
@ -695,7 +696,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS); facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS); facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS);
m_nxdn->scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
if (m_nxdn->m_duplex) { if (m_nxdn->m_duplex) {
data[0U] = type == RTCH_MESSAGE_TYPE_TX_REL ? modem::TAG_EOT : modem::TAG_DATA; data[0U] = type == RTCH_MESSAGE_TYPE_TX_REL ? modem::TAG_EOT : modem::TAG_DATA;
@ -855,7 +856,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
facch.encode(start + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS); facch.encode(start + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);
facch.encode(start + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS); facch.encode(start + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS);
m_nxdn->scrambler(start + 2U); NXDNUtils::scrambler(start + 2U);
if (m_nxdn->m_duplex) { if (m_nxdn->m_duplex) {
start[0U] = modem::TAG_DATA; start[0U] = modem::TAG_DATA;
@ -955,7 +956,7 @@ bool Voice::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
data[0U] = modem::TAG_DATA; data[0U] = modem::TAG_DATA;
data[1U] = 0x00U; data[1U] = 0x00U;
m_nxdn->scrambler(data + 2U); NXDNUtils::scrambler(data + 2U);
if (m_nxdn->m_duplex) { if (m_nxdn->m_duplex) {
data[0U] = modem::TAG_DATA; data[0U] = modem::TAG_DATA;

Loading…
Cancel
Save

Powered by TurnKey Linux.