mirror of https://github.com/g4klx/MMDVM.git
Make AX.25, DMR, P25, NXDN and FM selectable at compile time.
This commit is contained in:
parent
dd5a465a39
commit
81518bf74c
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
8
AX25RX.h
8
AX25RX.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
8
AX25TX.h
8
AX25TX.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
7
CalDMR.h
7
CalDMR.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
8
CalFM.h
8
CalFM.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
7
CalP25.h
7
CalP25.h
|
@ -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
|
||||
|
||||
|
|
10
Config.h
10
Config.h
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
10
DMRDMORX.h
10
DMRDMORX.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
9
DMRRX.h
9
DMRRX.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
10
DMRSlotRX.h
10
DMRSlotRX.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
7
DMRTX.h
7
DMRTX.h
|
@ -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
6
FM.cpp
|
@ -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
9
FM.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
96
IO.cpp
|
@ -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
22
IO.h
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
9
NXDNRX.h
9
NXDNRX.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
9
NXDNTX.h
9
NXDNTX.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
10
P25RX.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
9
P25TX.h
9
P25TX.h
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue