Make AX.25, DMR, P25, NXDN and FM selectable at compile time.

This commit is contained in:
Jonathan Naylor 2020-11-08 22:23:27 +00:00
parent dd5a465a39
commit 81518bf74c
66 changed files with 561 additions and 105 deletions

View File

@ -18,6 +18,9 @@
*/
#include "Config.h"
#if defined(MODE_AX25)
#include "Globals.h"
#include "AX25Demodulator.h"
#include "AX25Defines.h"
@ -312,3 +315,5 @@ float32_t CAX25Demodulator::iir(float32_t input)
return result;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_AX25)
#if !defined(AX25Demodulator_H)
#define AX25Demodulator_H
#include "Config.h"
#include "AX25Frame.h"
#include "AX25Twist.h"
@ -71,3 +73,5 @@ private:
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_AX25)
#include "Globals.h"
#include "AX25Frame.h"
@ -120,3 +123,5 @@ void CAX25Frame::addCRC()
m_data[m_length++] = crc8[1U];
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_AX25)
#if !defined(AX25Frame_H)
#define AX25Frame_H
#include "Config.h"
const uint16_t AX25_MAX_PACKET_LEN = 300U;
class CAX25Frame {
@ -41,3 +43,5 @@ public:
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_AX25)
#include "Globals.h"
#include "AX25RX.h"
@ -203,3 +206,6 @@ uint8_t CAX25RX::rand()
return uint8_t(m_c); //low order bits of other variables
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_AX25)
#if !defined(AX25RX_H)
#define AX25RX_H
#include "Config.h"
#include "AX25Demodulator.h"
class CAX25RX {
@ -57,3 +59,5 @@ private:
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_AX25)
#include "Globals.h"
#include "AX25TX.h"
@ -184,3 +187,5 @@ bool CAX25TX::NRZI(bool b)
return m_nrzi;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_AX25)
#if !defined(AX25TX_H)
#define AX25TX_H
#include "Config.h"
class CAX25TX {
public:
CAX25TX();
@ -47,3 +49,5 @@ private:
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_AX25)
#include "Globals.h"
#include "AX25Twist.h"
@ -309,3 +312,5 @@ void CAX25Twist::setTwist(int8_t n)
m_filter.pCoeffs = coeffs[twist];
}
#endif

View File

@ -16,11 +16,12 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#if !defined(AX25Twist_H)
#define AX25Twist_H
#include "Config.h"
#if defined(MODE_AX25)
#if !defined(AX25Twist_H)
#define AX25Twist_H
class CAX25Twist {
public:
@ -37,3 +38,5 @@ private:
#endif
#endif

View File

@ -18,6 +18,9 @@
*/
#include "Config.h"
#if defined(MODE_DMR)
#include "Globals.h"
#include "CalDMR.h"
@ -221,3 +224,5 @@ uint8_t CCalDMR::write(const uint8_t* data, uint16_t length)
return 0U;
}
#endif

View File

@ -17,10 +17,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_DMR)
#if !defined(CALDMR_H)
#define CALDMR_H
#include "Config.h"
#include "DMRDefines.h"
enum DMRCAL1K {
@ -53,3 +56,5 @@ private:
#endif
#endif

View File

@ -19,6 +19,9 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#include "Globals.h"
#include "CalFM.h"
@ -125,3 +128,6 @@ uint8_t CCalFM::write(const uint8_t* data, uint16_t length)
return 0U;
}
#endif

View File

@ -18,11 +18,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(CALFM_H)
#define CALFM_H
#include "Config.h"
class CCalFM {
public:
CCalFM();
@ -49,3 +51,5 @@ private:
#endif
#endif

View File

@ -18,6 +18,9 @@
*/
#include "Config.h"
#if defined(MODE_NXDN)
#include "Globals.h"
#include "CalNXDN.h"
@ -93,3 +96,5 @@ uint8_t CCalNXDN::write(const uint8_t* data, uint16_t length)
return 0U;
}
#endif

View File

@ -17,11 +17,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_NXDN)
#if !defined(CALNXDN_H)
#define CALNXDN_H
#include "Config.h"
enum NXDNCAL1K {
NXDNCAL1K_IDLE,
NXDNCAL1K_TX
@ -43,3 +45,5 @@ private:
#endif
#endif

View File

@ -18,6 +18,9 @@
*/
#include "Config.h"
#if defined(MODE_P25)
#include "Globals.h"
#include "CalP25.h"
@ -96,3 +99,5 @@ uint8_t CCalP25::write(const uint8_t* data, uint16_t length)
return 0U;
}
#endif

View File

@ -17,10 +17,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_P25)
#if !defined(CALP25_H)
#define CALP25_H
#include "Config.h"
#include "P25Defines.h"
enum P25CAL1K {
@ -44,3 +47,5 @@ private:
#endif
#endif

View File

@ -24,14 +24,14 @@
// Enable D-Star support, the D-Star correlator improves the sensitivity of D-Star enormously but uses quite a lot
// of processing power.
// #define MODE_DSTAR
#define MODE_DSTAR
#define USE_DSTAR_CORRELATOR
// Enable DMR support
#define MODE_DMR
// Enable System Fusion support
// #define MODE_YSF
#define MODE_YSF
// Enable P25 phase 1 support, the boxcar filter sometimes improves the performance of P25 receive on some systems.
#define MODE_P25
@ -41,15 +41,15 @@
#define MODE_NXDN
// Enable M17 support
// #define MODE_M17
#define MODE_M17
// Enable POCSAG support
// #define MODE_POCSAG
#define MODE_POCSAG
// Enable FM support
#define MODE_FM
// Enable AX.25 support
// Enable AX.25 support, this is only enabled if MODE_FM is also defined.
#define MODE_AX25
// Allow for the use of high quality external clock oscillators

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2009-2017 by Jonathan Naylor G4KLX
* Copyright (C) 2009-2017,2020 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
@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_DMR)
#include "Globals.h"
#include "DMRDMORX.h"
#include "DMRSlotType.h"
@ -423,3 +426,6 @@ void CDMRDMORX::writeRSSIData(uint8_t* frame)
serial.writeDMRData(true, frame, DMR_FRAME_LENGTH_BYTES + 1U);
#endif
}
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2016,2017,2020 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
@ -16,10 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_DMR)
#if !defined(DMRDMORX_H)
#define DMRDMORX_H
#include "Config.h"
#include "DMRDefines.h"
const uint16_t DMO_BUFFER_LENGTH_SAMPLES = 1440U; // 60ms at 24 kHz
@ -67,3 +70,6 @@ private:
};
#endif
#endif

View File

@ -19,6 +19,9 @@
*/
#include "Config.h"
#if defined(MODE_DMR)
#include "Globals.h"
#include "DMRSlotType.h"
@ -161,3 +164,5 @@ void CDMRDMOTX::setTXDelay(uint8_t delay)
m_txDelay = 1200U;
}
#endif

View File

@ -17,10 +17,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_DMR)
#if !defined(DMRDMOTX_H)
#define DMRDMOTX_H
#include "Config.h"
#include "DMRDefines.h"
#include "RingBuffer.h"
@ -51,3 +54,5 @@ private:
#endif
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2009-2017 by Jonathan Naylor G4KLX
* Copyright (C) 2009-2017,2020 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
@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_DMR)
#include "Globals.h"
#include "DMRIdleRX.h"
#include "DMRSlotType.h"
@ -209,3 +212,6 @@ void CDMRIdleRX::setColorCode(uint8_t colorCode)
{
m_colorCode = colorCode;
}
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2015 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2020 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
@ -16,10 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_DMR)
#if !defined(DMRIDLERX_H)
#define DMRIDLERX_H
#include "Config.h"
#include "DMRDefines.h"
class CDMRIdleRX {
@ -49,3 +52,5 @@ private:
#endif
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2016,2020 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
@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_DMR)
#include "Globals.h"
#include "DMRRX.h"
@ -68,3 +71,5 @@ void CDMRRX::reset()
m_slot2RX.reset();
}
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2016,2020 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
@ -16,10 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_DMR)
#if !defined(DMRRX_H)
#define DMRRX_H
#include "Config.h"
#include "DMRSlotRX.h"
class CDMRRX {
@ -40,3 +43,5 @@ private:
#endif
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2009-2017 by Jonathan Naylor G4KLX
* Copyright (C) 2009-2017,2020 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
@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_DMR)
#include "Globals.h"
#include "DMRSlotRX.h"
#include "DMRSlotType.h"
@ -400,3 +403,6 @@ void CDMRSlotRX::writeRSSIData(uint8_t* frame)
serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U);
#endif
}
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2016,2017,2020 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
@ -16,10 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_DMR)
#if !defined(DMRSLOTRX_H)
#define DMRSLOTRX_H
#include "Config.h"
#include "DMRDefines.h"
enum DMRRX_STATE {
@ -70,3 +73,6 @@ private:
};
#endif
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2015 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2020 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
@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_DMR)
#include "Globals.h"
#include "DMRSlotType.h"
@ -285,3 +288,5 @@ void CDMRSlotType::encode(uint8_t colorCode, uint8_t dataType, uint8_t* frame) c
frame[20U] = (frame[20U] & 0x03U) | ((slotType[1U] << 6) & 0xC0U) | ((slotType[2U] >> 2) & 0x3CU);
}
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2015 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2020 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
@ -16,6 +16,10 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_DMR)
#if !defined(DMRSLOTTYPE_H)
#define DMRSLOTTYPE_H
@ -35,3 +39,5 @@ private:
#endif
#endif

View File

@ -19,6 +19,9 @@
*/
#include "Config.h"
#if defined(MODE_DMR)
#include "Globals.h"
#include "DMRSlotType.h"
@ -414,3 +417,6 @@ uint32_t CDMRTX::getFrameCount()
{
return m_frameCount;
}
#endif

View File

@ -17,10 +17,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_DMR)
#if !defined(DMRTX_H)
#define DMRTX_H
#include "Config.h"
#include "DMRDefines.h"
#include "RingBuffer.h"
@ -83,3 +86,5 @@ private:
#endif
#endif

6
FM.cpp
View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#include "Globals.h"
#include "FM.h"
@ -1054,3 +1057,6 @@ void CFM::insertSilence(uint16_t ms)
for (uint32_t i = 0U; i < nSamples; i++)
m_outputRFRB.put(0);
}
#endif

9
FM.h
View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(FM_H)
#define FM_H
#include "Config.h"
#include "FMBlanking.h"
#include "FMCTCSSRX.h"
#include "FMCTCSSTX.h"
@ -143,3 +145,6 @@ private:
};
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#include "Globals.h"
#include "FMBlanking.h"
@ -80,3 +83,6 @@ q15_t CFMBlanking::process(q15_t sample)
return sample;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(FMBlanking_H)
#define FMBlanking_H
#include "Config.h"
class CFMBlanking {
public:
CFMBlanking();
@ -39,3 +41,6 @@ private:
};
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#include "Globals.h"
#include "FMCTCSSRX.h"
@ -173,3 +176,6 @@ void CFMCTCSSRX::reset()
m_state = false;
m_count = 0U;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(FMCTCSSRX_H)
#define FMCTCSSRX_H
#include "Config.h"
class CFMCTCSSRX {
public:
CFMCTCSSRX();
@ -42,3 +44,6 @@ private:
};
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#include "Globals.h"
#include "FMCTCSSTX.h"
@ -126,3 +129,6 @@ q15_t CFMCTCSSTX::getAudio(bool reverse)
else
return sample;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(FMCTCSSTX_H)
#define FMCTCSSTX_H
#include "Config.h"
class CFMCTCSSTX {
public:
CFMCTCSSTX();
@ -36,3 +38,6 @@ private:
};
#endif
#endif

View File

@ -29,6 +29,10 @@ THE SOFTWARE.
// based on https://raw.githubusercontent.com/berndporr/iir_fixed_point/master/DirectFormI.h
#include "Config.h"
#if defined(MODE_FM)
#include <cstdint>
#ifndef DIRECTFORMI_H_
@ -108,4 +112,7 @@ private:
q31_t c_a1,c_a2; // IIR
};
#endif /* DIRECTFORMI_H */
#endif /* DIRECTFORMI_H */
#endif

View File

@ -18,6 +18,9 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#include "FMDownSampler.h"
CFMDownSampler::CFMDownSampler(uint16_t length) :
@ -72,3 +75,6 @@ void CFMDownSampler::reset()
{
m_sampleIndex = 0U;
}
#endif

View File

@ -17,10 +17,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(FMDOWNSAMPLER_H)
#define FMDOWNSAMPLER_H
#include "Config.h"
#include "RingBuffer.h"
#include "FMSamplePairPack.h"
@ -45,3 +48,5 @@ private:
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#include "Globals.h"
#include "FMKeyer.h"
@ -214,3 +217,6 @@ bool CFMKeyer::isRunning() const
{
return m_poPos > 0U || m_dotPos > 0U || m_audioPos > 0U;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(FMKeyer_H)
#define FMKeyer_H
#include "Config.h"
class CFMKeyer {
public:
CFMKeyer();
@ -52,3 +54,6 @@ private:
};
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#include "Globals.h"
#include "FMNoiseSquelch.h"
@ -125,3 +128,6 @@ void CFMNoiseSquelch::reset()
m_state = false;
m_count = 0U;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(FMNOISESQUELCH_H)
#define FMNOISESQUELCH_H
#include "Config.h"
class CFMNoiseSquelch {
public:
CFMNoiseSquelch();
@ -43,3 +45,6 @@ private:
};
#endif
#endif

View File

@ -17,6 +17,10 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(TSAMPLEPACK_H)
#define TSAMPLEPACK_H
@ -26,4 +30,7 @@ struct TSamplePairPack {
uint8_t byte2;
};
#endif
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#include "Globals.h"
#include "FMTimeout.h"
@ -72,3 +75,6 @@ void CFMTimeout::stop()
{
m_running = false;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(FMTimeout_H)
#define FMTimeout_H
#include "Config.h"
class CFMTimeout {
public:
CFMTimeout();
@ -40,3 +42,6 @@ private:
};
#endif
#endif

View File

@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#include "Globals.h"
#include "FMTimer.h"
@ -68,3 +71,6 @@ bool CFMTimer::hasExpired() const
return false;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(FMTimer_H)
#define FMTimer_H
#include "Config.h"
class CFMTimer {
public:
CFMTimer();
@ -45,3 +47,6 @@ private:
};
#endif
#endif

View File

@ -17,6 +17,10 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_FM)
#include "FMUpSampler.h"
const uint32_t FM_UPSAMPLE_MASK = 0x00000FFFU;
@ -94,4 +98,7 @@ uint16_t CFMUpSampler::getSpace() const
{
//return available space in bytes
return m_samples.getSpace() * sizeof(TSamplePairPack);
}
}
#endif

View File

@ -18,10 +18,13 @@
*/
#include "Config.h"
#if defined(MODE_FM)
#if !defined(FMUPSAMPLER_H)
#define FMUPSAMPLER_H
#include "Config.h"
#include "RingBuffer.h"
#include "FMSamplePairPack.h"
@ -45,4 +48,7 @@ private:
bool m_running;
};
#endif
#endif
#endif

96
IO.cpp
View File

@ -22,9 +22,11 @@
#include "Globals.h"
#include "IO.h"
#if defined(USE_DCBLOCKER)
// Generated using [b, a] = butter(1, 0.001) in MATLAB
static q31_t DC_FILTER[] = {3367972, 0, 3367972, 0, 2140747704, 0}; // {b0, 0, b1, b2, -a1, -a2}
const uint32_t DC_FILTER_STAGES = 1U; // One Biquad stage
#endif
#if defined(MODE_DMR) || defined(MODE_YSF)
// Generated using rcosdesign(0.2, 8, 5, 'sqrt') in MATLAB
@ -42,6 +44,7 @@ static q15_t RRC_0_5_FILTER[] = {-147, -88, 72, 220, 223, 46, -197, -285, -79, 3
const uint16_t RRC_0_5_FILTER_LEN = 42U;
#endif
#if defined(MODE_NXDN)
// Generated using rcosdesign(0.2, 8, 10, 'sqrt') in MATLAB
static q15_t NXDN_0_2_FILTER[] = {284, 198, 73, -78, -240, -393, -517, -590, -599, -533, -391, -181, 79, 364, 643, 880, 1041, 1097, 1026, 819,
483, 39, -477, -1016, -1516, -1915, -2150, -2164, -1914, -1375, -545, 557, 1886, 3376, 4946, 6502, 7946, 9184,
@ -53,6 +56,7 @@ const uint16_t NXDN_0_2_FILTER_LEN = 82U;
static q15_t NXDN_ISINC_FILTER[] = {790, -1085, -1073, -553, 747, 2341, 3156, 2152, -893, -4915, -7834, -7536, -3102, 4441, 12354, 17394, 17394,
12354, 4441, -3102, -7536, -7834, -4915, -893, 2152, 3156, 2341, 747, -553, -1073, -1085, 790};
const uint16_t NXDN_ISINC_FILTER_LEN = 32U;
#endif
#if defined(MODE_DSTAR)
// Generated using gaussfir(0.5, 4, 5) in MATLAB
@ -60,9 +64,11 @@ static q15_t GAUSSIAN_0_5_FILTER[] = {8, 104, 760, 3158, 7421, 9866, 7421, 315
const uint16_t GAUSSIAN_0_5_FILTER_LEN = 12U;
#endif
#if defined(MODE_P25)
// One symbol boxcar filter
static q15_t BOXCAR_FILTER[] = {12000, 12000, 12000, 12000, 12000, 0};
const uint16_t BOXCAR_FILTER_LEN = 6U;
#endif
const uint16_t DC_OFFSET = 2048U;
@ -71,26 +77,32 @@ m_started(false),
m_rxBuffer(RX_RINGBUFFER_SIZE),
m_txBuffer(TX_RINGBUFFER_SIZE),
m_rssiBuffer(RX_RINGBUFFER_SIZE),
#if defined(USE_DCBLOCKER)
m_dcFilter(),
m_dcState(),
#endif
#if defined(MODE_DSTAR)
m_gaussianFilter(),
m_gaussianState(),
#endif
m_boxcarFilter(),
m_nxdnFilter(),
m_nxdnISincFilter(),
#if defined(MODE_DMR) || defined(MODE_YSF)
m_rrc02Filter(),
m_rrc02State(),
#endif
#if defined(MODE_P25)
m_boxcarFilter(),
m_boxcarState(),
#endif
#if defined(MODE_NXDN)
m_nxdnFilter(),
m_nxdnISincFilter(),
m_nxdnState(),
m_nxdnISincState(),
#endif
#if defined(MODE_M17)
m_rrc05Filter(),
m_rrc05State(),
#endif
m_boxcarState(),
m_nxdnState(),
m_nxdnISincState(),
m_pttInvert(false),
m_rxLevel(128 * 128),
m_cwIdTXLevel(128 * 128),
@ -114,6 +126,14 @@ m_dacOverflow(0U),
m_watchdog(0U),
m_lockout(false)
{
#if defined(USE_DCBLOCKER)
::memset(m_dcState, 0x00U, 4U * sizeof(q31_t));
m_dcFilter.numStages = DC_FILTER_STAGES;
m_dcFilter.pState = m_dcState;
m_dcFilter.pCoeffs = DC_FILTER;
m_dcFilter.postShift = 0;
#endif
#if defined(MODE_DSTAR)
::memset(m_gaussianState, 0x00U, 40U * sizeof(q15_t));
m_gaussianFilter.numTaps = GAUSSIAN_0_5_FILTER_LEN;
@ -121,16 +141,6 @@ m_lockout(false)
m_gaussianFilter.pCoeffs = GAUSSIAN_0_5_FILTER;
#endif
::memset(m_boxcarState, 0x00U, 30U * sizeof(q15_t));
::memset(m_nxdnState, 0x00U, 110U * sizeof(q15_t));
::memset(m_nxdnISincState, 0x00U, 60U * sizeof(q15_t));
::memset(m_dcState, 0x00U, 4U * sizeof(q31_t));
m_dcFilter.numStages = DC_FILTER_STAGES;
m_dcFilter.pState = m_dcState;
m_dcFilter.pCoeffs = DC_FILTER;
m_dcFilter.postShift = 0;
#if defined(MODE_DMR) || defined(MODE_YSF)
::memset(m_rrc02State, 0x00U, 70U * sizeof(q15_t));
m_rrc02Filter.numTaps = RRC_0_2_FILTER_LEN;
@ -138,17 +148,17 @@ m_lockout(false)
m_rrc02Filter.pCoeffs = RRC_0_2_FILTER;
#endif
#if defined(MODE_M17)
::memset(m_rrc05State, 0x00U, 70U * sizeof(q15_t));
m_rrc05Filter.numTaps = RRC_0_5_FILTER_LEN;
m_rrc05Filter.pState = m_rrc05State;
m_rrc05Filter.pCoeffs = RRC_0_5_FILTER;
#endif
#if defined(MODE_P25)
::memset(m_boxcarState, 0x00U, 30U * sizeof(q15_t));
m_boxcarFilter.numTaps = BOXCAR_FILTER_LEN;
m_boxcarFilter.pState = m_boxcarState;
m_boxcarFilter.pCoeffs = BOXCAR_FILTER;
#endif
#if defined(MODE_NXDN)
::memset(m_nxdnState, 0x00U, 110U * sizeof(q15_t));
::memset(m_nxdnISincState, 0x00U, 60U * sizeof(q15_t));
m_nxdnFilter.numTaps = NXDN_0_2_FILTER_LEN;
m_nxdnFilter.pState = m_nxdnState;
m_nxdnFilter.pCoeffs = NXDN_0_2_FILTER;
@ -156,6 +166,14 @@ m_lockout(false)
m_nxdnISincFilter.numTaps = NXDN_ISINC_FILTER_LEN;
m_nxdnISincFilter.pState = m_nxdnISincState;
m_nxdnISincFilter.pCoeffs = NXDN_ISINC_FILTER;
#endif
#if defined(MODE_M17)
::memset(m_rrc05State, 0x00U, 70U * sizeof(q15_t));
m_rrc05Filter.numTaps = RRC_0_5_FILTER_LEN;
m_rrc05Filter.pState = m_rrc05State;
m_rrc05Filter.pCoeffs = RRC_0_5_FILTER;
#endif
initInt();
@ -292,8 +310,10 @@ void CIO::process()
// Two seconds timeout
if (m_watchdog >= 48000U) {
if (m_modemState == STATE_DSTAR || m_modemState == STATE_DMR || m_modemState == STATE_YSF || m_modemState == STATE_P25 || m_modemState == STATE_NXDN || m_modemState == STATE_M17 || m_modemState == STATE_POCSAG) {
#if defined(MODE_DMR)
if (m_modemState == STATE_DMR && m_tx)
dmrTX.setStart(false);
#endif
setMode(STATE_IDLE);
}
@ -383,6 +403,7 @@ void CIO::process()
}
#endif
#if defined(MODE_P25)
if (m_p25Enable) {
q15_t P25Vals[RX_BLOCK_SIZE];
#if defined(USE_DCBLOCKER)
@ -392,7 +413,9 @@ void CIO::process()
#endif
p25RX.samples(P25Vals, rssi, RX_BLOCK_SIZE);
}
#endif
#if defined(MODE_NXDN)
if (m_nxdnEnable) {
q15_t NXDNValsTmp[RX_BLOCK_SIZE];
#if defined(USE_DCBLOCKER)
@ -405,7 +428,9 @@ void CIO::process()
nxdnRX.samples(NXDNVals, rssi, RX_BLOCK_SIZE);
}
#endif
#if defined(MODE_DMR)
if (m_dmrEnable) {
q15_t DMRVals[RX_BLOCK_SIZE];
::arm_fir_fast_q15(&m_rrc02Filter, samples, DMRVals, RX_BLOCK_SIZE);
@ -415,6 +440,7 @@ void CIO::process()
else
dmrDMORX.samples(DMRVals, rssi, RX_BLOCK_SIZE);
}
#endif
#if defined(MODE_YSF)
if (m_ysfEnable) {
@ -440,6 +466,7 @@ void CIO::process()
}
#endif
#if defined(MODE_FM)
if (m_fmEnable) {
bool cos = getCOSInt();
#if defined(USE_DCBLOCKER)
@ -448,7 +475,9 @@ void CIO::process()
fm.samples(cos, samples, RX_BLOCK_SIZE);
#endif
}
#endif
#if defined(MODE_FM) && defined(MODE_AX25)
if (m_ax25Enable) {
#if defined(USE_DCBLOCKER)
ax25RX.samples(dcSamples, RX_BLOCK_SIZE);
@ -456,6 +485,7 @@ void CIO::process()
ax25RX.samples(samples, RX_BLOCK_SIZE);
#endif
}
#endif
}
#if defined(MODE_DSTAR)
@ -472,6 +502,7 @@ void CIO::process()
}
#endif
#if defined(MODE_DMR)
else if (m_modemState == STATE_DMR) {
if (m_dmrEnable) {
q15_t DMRVals[RX_BLOCK_SIZE];
@ -488,6 +519,7 @@ void CIO::process()
}
}
}
#endif
#if defined(MODE_YSF)
else if (m_modemState == STATE_YSF) {
@ -503,6 +535,7 @@ void CIO::process()
}
#endif
#if defined(MODE_P25)
else if (m_modemState == STATE_P25) {
if (m_p25Enable) {
q15_t P25Vals[RX_BLOCK_SIZE];
@ -513,7 +546,11 @@ void CIO::process()
#endif
p25RX.samples(P25Vals, rssi, RX_BLOCK_SIZE);
}
} else if (m_modemState == STATE_NXDN) {
}
#endif
#if defined(MODE_NXDN)
else if (m_modemState == STATE_NXDN) {
if (m_nxdnEnable) {
q15_t NXDNValsTmp[RX_BLOCK_SIZE];
#if defined(USE_DCBLOCKER)
@ -527,6 +564,7 @@ void CIO::process()
nxdnRX.samples(NXDNVals, rssi, RX_BLOCK_SIZE);
}
}
#endif
#if defined(MODE_M17)
else if (m_modemState == STATE_M17) {
@ -542,18 +580,26 @@ void CIO::process()
}
#endif
#if defined(MODE_FM)
else if (m_modemState == STATE_FM) {
bool cos = getCOSInt();
#if defined(USE_DCBLOCKER)
fm.samples(cos, dcSamples, RX_BLOCK_SIZE);
#if defined(MODE_AX25)
if (m_ax25Enable)
ax25RX.samples(dcSamples, RX_BLOCK_SIZE);
#endif
#else
fm.samples(cos, samples, RX_BLOCK_SIZE);
#if defined(MODE_AX25)
if (m_ax25Enable)
ax25RX.samples(samples, RX_BLOCK_SIZE);
#endif
#endif
}
#endif
#if defined(MODE_DSTAR)
else if (m_modemState == STATE_DSTARCAL) {

22
IO.h
View File

@ -67,32 +67,38 @@ private:
CRingBuffer<TSample> m_txBuffer;
CRingBuffer<uint16_t> m_rssiBuffer;
#if defined(USE_DCBLOCKER)
arm_biquad_casd_df1_inst_q31 m_dcFilter;
q31_t m_dcState[4];
#endif
#if defined(MODE_DSTAR)
arm_fir_instance_q15 m_gaussianFilter;
q15_t m_gaussianState[40U]; // NoTaps + BlockSize - 1, 12 + 20 - 1 plus some spare
#endif
arm_fir_instance_q15 m_boxcarFilter;
arm_fir_instance_q15 m_nxdnFilter;
arm_fir_instance_q15 m_nxdnISincFilter;
#if defined(MODE_DMR) || defined(MODE_YSF)
arm_fir_instance_q15 m_rrc02Filter;
q15_t m_rrc02State[70U]; // NoTaps + BlockSize - 1, 42 + 20 - 1 plus some spare
#endif
#if defined(MODE_P25)
arm_fir_instance_q15 m_boxcarFilter;
q15_t m_boxcarState[30U]; // NoTaps + BlockSize - 1, 6 + 20 - 1 plus some spare
#endif
#if defined(MODE_NXDN)
arm_fir_instance_q15 m_nxdnFilter;
arm_fir_instance_q15 m_nxdnISincFilter;
q15_t m_nxdnState[110U]; // NoTaps + BlockSize - 1, 82 + 20 - 1 plus some spare
q15_t m_nxdnISincState[60U]; // NoTaps + BlockSize - 1, 32 + 20 - 1 plus some spare
#endif
#if defined(MODE_M17)
arm_fir_instance_q15 m_rrc05Filter;
q15_t m_rrc05State[70U]; // NoTaps + BlockSize - 1, 42 + 20 - 1 plus some spare
#endif
q15_t m_boxcarState[30U]; // NoTaps + BlockSize - 1, 6 + 20 - 1 plus some spare
q15_t m_nxdnState[110U]; // NoTaps + BlockSize - 1, 82 + 20 - 1 plus some spare
q15_t m_nxdnISincState[60U]; // NoTaps + BlockSize - 1, 32 + 20 - 1 plus some spare
bool m_pttInvert;
q15_t m_rxLevel;
q15_t m_cwIdTXLevel;

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2009-2018 by Jonathan Naylor G4KLX
* Copyright (C) 2009-2018,2020 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
@ -17,6 +17,9 @@
*/
#include "Config.h"
#if defined(MODE_NXDN)
#include "Globals.h"
#include "NXDNRX.h"
#include "Utils.h"
@ -403,3 +406,5 @@ void CNXDNRX::writeRSSIData(uint8_t* data)
m_rssiCount = 0U;
}
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2016,2017,2018,2020 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
@ -16,10 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_NXDN)
#if !defined(NXDNRX_H)
#define NXDNRX_H
#include "Config.h"
#include "NXDNDefines.h"
enum NXDNRX_STATE {
@ -67,3 +70,5 @@ private:
#endif
#endif

View File

@ -18,6 +18,9 @@
*/
#include "Config.h"
#if defined(MODE_NXDN)
#include "Globals.h"
#include "NXDNTX.h"
@ -200,3 +203,6 @@ void CNXDNTX::setParams(uint8_t txHang)
{
m_txHang = txHang * 600U;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_NXDN)
#if !defined(NXDNTX_H)
#define NXDNTX_H
#include "Config.h"
#include "RingBuffer.h"
class CNXDNTX {
@ -55,3 +57,6 @@ private:
};
#endif
#endif

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2009-2017 by Jonathan Naylor G4KLX
* Copyright (C) 2009-2017,2020 by Jonathan Naylor G4KLX
* Copyright (C) 2018 by Bryan Biedenkapp <gatekeep@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
@ -18,6 +18,9 @@
*/
#include "Config.h"
#if defined(MODE_P25)
#include "Globals.h"
#include "P25RX.h"
#include "Utils.h"
@ -535,3 +538,6 @@ void CP25RX::writeRSSILdu(uint8_t* ldu)
m_rssiAccum = 0U;
m_rssiCount = 0U;
}
#endif

10
P25RX.h
View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2016,2017,2020 by Jonathan Naylor G4KLX
* Copyright (C) 2018 by Bryan Biedenkapp <gatekeep@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
@ -17,10 +17,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_P25)
#if !defined(P25RX_H)
#define P25RX_H
#include "Config.h"
#include "P25Defines.h"
enum P25RX_STATE {
@ -72,3 +75,6 @@ private:
};
#endif
#endif

View File

@ -18,6 +18,9 @@
*/
#include "Config.h"
#if defined(MODE_P25)
#include "Globals.h"
#include "P25TX.h"
@ -198,3 +201,6 @@ void CP25TX::setParams(uint8_t txHang)
{
m_txHang = txHang * 1200U;
}
#endif

View File

@ -16,11 +16,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Config.h"
#if defined(MODE_P25)
#if !defined(P25TX_H)
#define P25TX_H
#include "Config.h"
#include "RingBuffer.h"
class CP25TX {
@ -55,3 +57,6 @@ private:
};
#endif
#endif

View File

@ -112,7 +112,7 @@ const uint8_t MMDVM_DEBUG5 = 0xF5U;
#define HW_TYPE "MMDVM"
#endif
#define DESCRIPTION "20201106 (D-Star/DMR/System Fusion/P25/NXDN/M17/POCSAG/FM/AX.25)"
#define DESCRIPTION "20201108 (D-Star/DMR/System Fusion/P25/NXDN/M17/POCSAG/FM/AX.25)"
#if defined(GITVERSION)
#define concat(h, a, b, c) h " " a " " b " GitID #" c ""
@ -204,6 +204,7 @@ void CSerialPort::getStatus()
reply[5U] = 0U;
#endif
#if defined(MODE_DMR)
if (m_dmrEnable) {
if (m_duplex) {
reply[6U] = dmrTX.getSpace1();
@ -216,6 +217,10 @@ void CSerialPort::getStatus()
reply[6U] = 0U;
reply[7U] = 0U;
}
#else
reply[6U] = 0U;
reply[7U] = 0U;
#endif
#if defined(MODE_YSF)
if (m_ysfEnable)
@ -226,15 +231,23 @@ void CSerialPort::getStatus()
reply[8U] = 0U;
#endif
#if defined(MODE_P25)
if (m_p25Enable)
reply[9U] = p25TX.getSpace();
else
reply[9U] = 0U;
#else
reply[9U] = 0U;
#endif
#if defined(MODE_NXDN)
if (m_nxdnEnable)
reply[10U] = nxdnTX.getSpace();
else
reply[10U] = 0U;
#else
reply[10U] = 0U;
#endif
#if defined(MODE_M17)
if (m_m17Enable)
@ -254,15 +267,23 @@ void CSerialPort::getStatus()
reply[12U] = 0U;
#endif
#if defined(MODE_FM)
if (m_fmEnable)
reply[13U] = fm.getSpace();
else
reply[13U] = 0U;
#else
reply[13U] = 0U;
#endif
#if defined(MODE_AX25)
if (m_ax25Enable)
reply[14U] = ax25TX.getSpace();
else
reply[14U] = 0U;
#else
reply[14U] = 0U;
#endif
writeInt(1U, reply, 15);
}
@ -390,32 +411,48 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint16_t length)
#if defined(MODE_YSF)
ysfTX.setTXDelay(txDelay);
#endif
#if defined(MODE_P25)
p25TX.setTXDelay(txDelay);
#endif
#if defined(MODE_DMR)
dmrDMOTX.setTXDelay(txDelay);
#endif
#if defined(MODE_NXDN)
nxdnTX.setTXDelay(txDelay);
#endif
#if defined(MODE_M17)
m17TX.setTXDelay(txDelay);
#endif
#if defined(MODE_POCSAG)
pocsagTX.setTXDelay(txDelay);
#endif
#if defined(MODE_AX25)
ax25TX.setTXDelay(ax25TXDelay);
#endif
#if defined(MODE_DMR)
dmrTX.setColorCode(colorCode);
dmrRX.setColorCode(colorCode);
dmrRX.setDelay(dmrDelay);
dmrDMORX.setColorCode(colorCode);
dmrIdleRX.setColorCode(colorCode);
#endif
#if defined(MODE_YSF)
ysfTX.setParams(ysfLoDev, ysfTXHang);
#endif
#if defined(MODE_P25)
p25TX.setParams(p25TXHang);
#endif
#if defined(MODE_NXDN)
nxdnTX.setParams(nxdnTXHang);
#endif
#if defined(MODE_M17)
m17TX.setParams(m17TXHang);
#endif
#if defined(MODE_AX25)
ax25RX.setParams(ax25RXTwist, ax25SlotTime, ax25PPersist);
#endif
io.setParameters(rxInvert, txInvert, pttInvert, rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, m17TXLevel, pocsagTXLevel, fmTXLevel, ax25TXLevel, txDCOffset, rxDCOffset, useCOSAsLockout);
@ -424,7 +461,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint16_t length)
return 0U;
}
#if defined(MODE_AX25)
#if defined(MODE_FM)
uint8_t CSerialPort::setFMParams1(const uint8_t* data, uint16_t length)
{
if (length < 8U)
@ -633,30 +670,38 @@ void CSerialPort::setMode(MMDVM_STATE modemState)
dstarRX.reset();
#endif
#if defined(MODE_DMR)
if (modemState != STATE_DMR) {
dmrIdleRX.reset();
dmrDMORX.reset();
dmrRX.reset();
}
#endif
#if defined(MODE_YSF)
if (modemState != STATE_YSF)
ysfRX.reset();
#endif
#if defined(MODE_P25)
if (modemState != STATE_P25)
p25RX.reset();
#endif
#if defined(MODE_NXDN)
if (modemState != STATE_NXDN)
nxdnRX.reset();
#endif
#if defined(MODE_M17)
if (modemState != STATE_M17)
m17RX.reset();
#endif
#if defined(MODE_FM)
if (modemState != STATE_FM)
fm.reset();
#endif
cwIdTX.reset();
@ -822,14 +867,22 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
if (m_modemState == STATE_DSTARCAL)
err = calDStarTX.write(buffer, length);
#endif
#if defined(MODE_DMR)
if (m_modemState == STATE_DMRCAL || m_modemState == STATE_LFCAL || m_modemState == STATE_DMRCAL1K || m_modemState == STATE_DMRDMO1K)
err = calDMR.write(buffer, length);
#endif
#if defined(MODE_FM)
if (m_modemState == STATE_FMCAL10K || m_modemState == STATE_FMCAL12K || m_modemState == STATE_FMCAL15K || m_modemState == STATE_FMCAL20K || m_modemState == STATE_FMCAL25K || m_modemState == STATE_FMCAL30K)
err = calFM.write(buffer, length);
#endif
#if defined(MODE_P25)
if (m_modemState == STATE_P25CAL1K)
err = calP25.write(buffer, length);
#endif
#if defined(MODE_NXDN)
if (m_modemState == STATE_NXDNCAL1K)
err = calNXDN.write(buffer, length);
#endif
#if defined(MODE_POCSAG)
if (m_modemState == STATE_POCSAGCAL)
err = calPOCSAG.write(buffer, length);
@ -896,6 +949,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
break;
#endif
#if defined(MODE_DMR)
case MMDVM_DMR_DATA1:
if (m_dmrEnable) {
if (m_modemState == STATE_IDLE || m_modemState == STATE_DMR) {
@ -968,6 +1022,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
sendNAK(err);
}
break;
#endif
#if defined(MODE_YSF)
case MMDVM_YSF_DATA:
@ -985,6 +1040,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
break;
#endif
#if defined(MODE_P25)
case MMDVM_P25_HDR:
if (m_p25Enable) {
if (m_modemState == STATE_IDLE || m_modemState == STATE_P25)
@ -1012,7 +1068,9 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
sendNAK(err);
}
break;
#endif
#if defined(MODE_NXDN)
case MMDVM_NXDN_DATA:
if (m_nxdnEnable) {
if (m_modemState == STATE_IDLE || m_modemState == STATE_NXDN)
@ -1026,6 +1084,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
sendNAK(err);
}
break;
#endif
#if defined(MODE_M17)
case MMDVM_M17_DATA:
@ -1059,6 +1118,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
break;
#endif
#if defined(MODE_FM)
case MMDVM_FM_DATA:
if (m_fmEnable) {
if (m_modemState == STATE_IDLE || m_modemState == STATE_FM)
@ -1072,7 +1132,9 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
sendNAK(err);
}
break;
#endif
#if defined(MODE_AX25)
case MMDVM_AX25_DATA:
if (m_ax25Enable) {
if (m_modemState == STATE_IDLE || m_modemState == STATE_FM)
@ -1083,6 +1145,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
sendNAK(err);
}
break;
#endif
case MMDVM_TRANSPARENT:
case MMDVM_QSO_INFO:
@ -1188,6 +1251,7 @@ void CSerialPort::writeDStarEOT()
}
#endif
#if defined(MODE_DMR)
void CSerialPort::writeDMRData(bool slot, const uint8_t* data, uint8_t length)
{
if (m_modemState != STATE_DMR && m_modemState != STATE_IDLE)
@ -1227,6 +1291,7 @@ void CSerialPort::writeDMRLost(bool slot)
writeInt(1U, reply, 3);
}
#endif
#if defined(MODE_YSF)
void CSerialPort::writeYSFData(const uint8_t* data, uint8_t length)
@ -1270,6 +1335,7 @@ void CSerialPort::writeYSFLost()
}
#endif
#if defined(MODE_P25)
void CSerialPort::writeP25Hdr(const uint8_t* data, uint8_t length)
{
if (m_modemState != STATE_P25 && m_modemState != STATE_IDLE)
@ -1332,7 +1398,9 @@ void CSerialPort::writeP25Lost()
writeInt(1U, reply, 3);
}
#endif
#if defined(MODE_NXDN)
void CSerialPort::writeNXDNData(const uint8_t* data, uint8_t length)
{
if (m_modemState != STATE_NXDN && m_modemState != STATE_IDLE)
@ -1372,6 +1440,7 @@ void CSerialPort::writeNXDNLost()
writeInt(1U, reply, 3);
}
#endif
#if defined(MODE_M17)
void CSerialPort::writeM17Data(const uint8_t* data, uint8_t length)
@ -1415,6 +1484,7 @@ void CSerialPort::writeM17Lost()
}
#endif
#if defined(MODE_FM)
void CSerialPort::writeFMData(const uint8_t* data, uint16_t length)
{
if (m_modemState != STATE_FM && m_modemState != STATE_IDLE)
@ -1481,7 +1551,9 @@ void CSerialPort::writeFMEOT()
writeInt(1U, reply, 3U);
}
#endif
#if defined(MODE_AX25)
void CSerialPort::writeAX25Data(const uint8_t* data, uint16_t length)
{
if (m_modemState != STATE_FM && m_modemState != STATE_IDLE)
@ -1513,6 +1585,7 @@ void CSerialPort::writeAX25Data(const uint8_t* data, uint16_t length)
writeInt(1U, reply, length + 3U);
}
}
#endif
void CSerialPort::writeCalData(const uint8_t* data, uint8_t length)
{