mirror of https://github.com/g4klx/MMDVM.git
Make D-Star, System Fusion, M17, and POCSAG optional.
This commit is contained in:
parent
a345586ee9
commit
dd5a465a39
|
@ -17,6 +17,9 @@
|
|||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
|
||||
#include "Globals.h"
|
||||
#include "CalDStarRX.h"
|
||||
#include "Utils.h"
|
||||
|
@ -126,3 +129,5 @@ void CCalDStarRX::process(q15_t value)
|
|||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -16,10 +16,13 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
|
||||
#if !defined(CALDSTARRX_H)
|
||||
#define CALDSTARRX_H
|
||||
|
||||
#include "Config.h"
|
||||
#include "DStarDefines.h"
|
||||
|
||||
class CCalDStarRX {
|
||||
|
@ -40,3 +43,5 @@ private:
|
|||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -17,6 +17,9 @@
|
|||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
|
||||
#include "Globals.h"
|
||||
#include "CalDStarTX.h"
|
||||
|
||||
|
@ -181,3 +184,5 @@ uint8_t CCalDStarTX::write(const uint8_t* data, uint16_t length)
|
|||
return 0U;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -16,10 +16,13 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
|
||||
#if !defined(CALDSTARTX_H)
|
||||
#define CALDSTARTX_H
|
||||
|
||||
#include "Config.h"
|
||||
#include "DStarDefines.h"
|
||||
|
||||
class CCalDStarTX {
|
||||
|
@ -37,3 +40,5 @@ private:
|
|||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -18,10 +18,12 @@
|
|||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
|
||||
#include "Globals.h"
|
||||
#include "CalPOCSAG.h"
|
||||
|
||||
|
||||
CCalPOCSAG::CCalPOCSAG() :
|
||||
m_state(POCSAGCAL_IDLE)
|
||||
{
|
||||
|
@ -48,3 +50,6 @@ uint8_t CCalPOCSAG::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_POCSAG)
|
||||
|
||||
#if !defined(CALPOCSAG_H)
|
||||
#define CALPOCSAG_H
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
enum POCSAGCAL {
|
||||
POCSAGCAL_IDLE,
|
||||
POCSAGCAL_TX
|
||||
|
@ -40,3 +42,6 @@ private:
|
|||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
35
Config.h
35
Config.h
|
@ -19,6 +19,39 @@
|
|||
#if !defined(CONFIG_H)
|
||||
#define CONFIG_H
|
||||
|
||||
// Allow for the selection of which modes to compile into the firmware. This is particularly useful for processors
|
||||
// which have limited code space and processing power like the STM32F103, which is found on older/cheaper boards.
|
||||
|
||||
// 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 USE_DSTAR_CORRELATOR
|
||||
|
||||
// Enable DMR support
|
||||
#define MODE_DMR
|
||||
|
||||
// Enable System Fusion support
|
||||
// #define MODE_YSF
|
||||
|
||||
// Enable P25 phase 1 support, the boxcar filter sometimes improves the performance of P25 receive on some systems.
|
||||
#define MODE_P25
|
||||
#define USE_P25_BOXCAR
|
||||
|
||||
// Enable NXDN support
|
||||
#define MODE_NXDN
|
||||
|
||||
// Enable M17 support
|
||||
// #define MODE_M17
|
||||
|
||||
// Enable POCSAG support
|
||||
// #define MODE_POCSAG
|
||||
|
||||
// Enable FM support
|
||||
#define MODE_FM
|
||||
|
||||
// Enable AX.25 support
|
||||
#define MODE_AX25
|
||||
|
||||
// Allow for the use of high quality external clock oscillators
|
||||
// The number is the frequency of the oscillator in Hertz.
|
||||
//
|
||||
|
@ -44,7 +77,7 @@
|
|||
// #define USE_COS_AS_LOCKOUT
|
||||
|
||||
// Use pins to output the current mode via LEDs
|
||||
#define MODE_LEDS
|
||||
// #define MODE_LEDS
|
||||
|
||||
// For the original Arduino Due pin layout
|
||||
// #define ARDUINO_DUE_PAPA
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
|
||||
#include "Globals.h"
|
||||
#include "DStarRX.h"
|
||||
#include "Utils.h"
|
||||
|
@ -715,3 +718,6 @@ bool CDStarRX::checksum(const uint8_t* header) const
|
|||
|
||||
return crc8[0U] == header[DSTAR_HEADER_LENGTH_BYTES - 2U] && crc8[1U] == header[DSTAR_HEADER_LENGTH_BYTES - 1U];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -16,10 +16,13 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
|
||||
#if !defined(DSTARRX_H)
|
||||
#define DSTARRX_H
|
||||
|
||||
#include "Config.h"
|
||||
#include "DStarDefines.h"
|
||||
|
||||
enum DSRX_STATE {
|
||||
|
@ -68,3 +71,5 @@ private:
|
|||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
|
||||
#include "Globals.h"
|
||||
#include "DStarTX.h"
|
||||
|
||||
|
@ -446,3 +449,5 @@ uint8_t CDStarTX::getSpace() const
|
|||
return m_buffer.getSpace() / (DSTAR_DATA_LENGTH_BYTES + 1U);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -16,11 +16,13 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
|
||||
#if !defined(DSTARTX_H)
|
||||
#define DSTARTX_H
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#include "RingBuffer.h"
|
||||
|
||||
class CDStarTX {
|
||||
|
@ -52,3 +54,5 @@ private:
|
|||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
42
Globals.h
42
Globals.h
|
@ -142,9 +142,15 @@ extern bool m_dcd;
|
|||
extern CSerialPort serial;
|
||||
extern CIO io;
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
extern CDStarRX dstarRX;
|
||||
extern CDStarTX dstarTX;
|
||||
|
||||
extern CCalDStarRX calDStarRX;
|
||||
extern CCalDStarTX calDStarTX;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_DMR)
|
||||
extern CDMRIdleRX dmrIdleRX;
|
||||
extern CDMRRX dmrRX;
|
||||
extern CDMRTX dmrTX;
|
||||
|
@ -152,33 +158,49 @@ extern CDMRTX dmrTX;
|
|||
extern CDMRDMORX dmrDMORX;
|
||||
extern CDMRDMOTX dmrDMOTX;
|
||||
|
||||
extern CCalDMR calDMR;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
extern CYSFRX ysfRX;
|
||||
extern CYSFTX ysfTX;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_P25)
|
||||
extern CP25RX p25RX;
|
||||
extern CP25TX p25TX;
|
||||
|
||||
extern CCalP25 calP25;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_NXDN)
|
||||
extern CNXDNRX nxdnRX;
|
||||
extern CNXDNTX nxdnTX;
|
||||
|
||||
extern CPOCSAGTX pocsagTX;
|
||||
extern CCalNXDN calNXDN;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
extern CPOCSAGTX pocsagTX;
|
||||
extern CCalPOCSAG calPOCSAG;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_M17)
|
||||
extern CM17RX m17RX;
|
||||
extern CM17TX m17TX;
|
||||
#endif
|
||||
|
||||
extern CFM fm;
|
||||
#if defined(MODE_FM)
|
||||
extern CFM fm;
|
||||
extern CCalFM calFM;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_AX25)
|
||||
extern CAX25RX ax25RX;
|
||||
extern CAX25TX ax25TX;
|
||||
#endif
|
||||
|
||||
extern CCalDStarRX calDStarRX;
|
||||
extern CCalDStarTX calDStarTX;
|
||||
extern CCalDMR calDMR;
|
||||
extern CCalFM calFM;
|
||||
extern CCalP25 calP25;
|
||||
extern CCalNXDN calNXDN;
|
||||
extern CCalPOCSAG calPOCSAG;
|
||||
extern CCalRSSI calRSSI;
|
||||
extern CCalRSSI calRSSI;
|
||||
|
||||
extern CCWIdTX cwIdTX;
|
||||
|
||||
|
|
84
IO.cpp
84
IO.cpp
|
@ -26,17 +26,21 @@
|
|||
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
|
||||
|
||||
#if defined(MODE_DMR) || defined(MODE_YSF)
|
||||
// Generated using rcosdesign(0.2, 8, 5, 'sqrt') in MATLAB
|
||||
static q15_t RRC_0_2_FILTER[] = {401, 104, -340, -731, -847, -553, 112, 909, 1472, 1450, 683, -675, -2144, -3040, -2706, -770, 2667, 6995,
|
||||
11237, 14331, 15464, 14331, 11237, 6995, 2667, -770, -2706, -3040, -2144, -675, 683, 1450, 1472, 909, 112,
|
||||
-553, -847, -731, -340, 104, 401, 0};
|
||||
const uint16_t RRC_0_2_FILTER_LEN = 42U;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_M17)
|
||||
// Generated using rcosdesign(0.5, 8, 5, 'sqrt') in MATLAB
|
||||
static q15_t RRC_0_5_FILTER[] = {-147, -88, 72, 220, 223, 46, -197, -285, -79, 334, 623, 390, -498, -1691, -2363, -1556, 1284, 5872, 11033,
|
||||
15109, 16656, 15109, 11033, 5872, 1284, -1556, -2363, -1691, -498, 390, 623, 334, -79, -285, -197, 46, 223,
|
||||
220, 72, -88, -147, 0};
|
||||
const uint16_t RRC_0_5_FILTER_LEN = 42U;
|
||||
#endif
|
||||
|
||||
// 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,
|
||||
|
@ -50,9 +54,11 @@ static q15_t NXDN_ISINC_FILTER[] = {790, -1085, -1073, -553, 747, 2341, 3156, 21
|
|||
12354, 4441, -3102, -7536, -7834, -4915, -893, 2152, 3156, 2341, 747, -553, -1073, -1085, 790};
|
||||
const uint16_t NXDN_ISINC_FILTER_LEN = 32U;
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
// Generated using gaussfir(0.5, 4, 5) in MATLAB
|
||||
static q15_t GAUSSIAN_0_5_FILTER[] = {8, 104, 760, 3158, 7421, 9866, 7421, 3158, 760, 104, 8, 0};
|
||||
const uint16_t GAUSSIAN_0_5_FILTER_LEN = 12U;
|
||||
#endif
|
||||
|
||||
// One symbol boxcar filter
|
||||
static q15_t BOXCAR_FILTER[] = {12000, 12000, 12000, 12000, 12000, 0};
|
||||
|
@ -67,15 +73,21 @@ m_txBuffer(TX_RINGBUFFER_SIZE),
|
|||
m_rssiBuffer(RX_RINGBUFFER_SIZE),
|
||||
m_dcFilter(),
|
||||
m_dcState(),
|
||||
m_rrc02Filter(),
|
||||
m_rrc05Filter(),
|
||||
#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_M17)
|
||||
m_rrc05Filter(),
|
||||
m_rrc05State(),
|
||||
m_gaussianState(),
|
||||
#endif
|
||||
m_boxcarState(),
|
||||
m_nxdnState(),
|
||||
m_nxdnISincState(),
|
||||
|
@ -102,9 +114,13 @@ m_dacOverflow(0U),
|
|||
m_watchdog(0U),
|
||||
m_lockout(false)
|
||||
{
|
||||
::memset(m_rrc02State, 0x00U, 70U * sizeof(q15_t));
|
||||
::memset(m_rrc05State, 0x00U, 70U * sizeof(q15_t));
|
||||
::memset(m_gaussianState, 0x00U, 40U * sizeof(q15_t));
|
||||
#if defined(MODE_DSTAR)
|
||||
::memset(m_gaussianState, 0x00U, 40U * sizeof(q15_t));
|
||||
m_gaussianFilter.numTaps = GAUSSIAN_0_5_FILTER_LEN;
|
||||
m_gaussianFilter.pState = m_gaussianState;
|
||||
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));
|
||||
|
@ -115,17 +131,19 @@ m_lockout(false)
|
|||
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;
|
||||
m_rrc02Filter.pState = m_rrc02State;
|
||||
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;
|
||||
|
||||
m_gaussianFilter.numTaps = GAUSSIAN_0_5_FILTER_LEN;
|
||||
m_gaussianFilter.pState = m_gaussianState;
|
||||
m_gaussianFilter.pCoeffs = GAUSSIAN_0_5_FILTER;
|
||||
#endif
|
||||
|
||||
m_boxcarFilter.numTaps = BOXCAR_FILTER_LEN;
|
||||
m_boxcarFilter.pState = m_boxcarState;
|
||||
|
@ -353,6 +371,7 @@ void CIO::process()
|
|||
#endif
|
||||
|
||||
if (m_modemState == STATE_IDLE) {
|
||||
#if defined(MODE_DSTAR)
|
||||
if (m_dstarEnable) {
|
||||
q15_t GMSKVals[RX_BLOCK_SIZE];
|
||||
#if defined(USE_DCBLOCKER)
|
||||
|
@ -362,6 +381,7 @@ void CIO::process()
|
|||
#endif
|
||||
dstarRX.samples(GMSKVals, rssi, RX_BLOCK_SIZE);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_p25Enable) {
|
||||
q15_t P25Vals[RX_BLOCK_SIZE];
|
||||
|
@ -396,6 +416,7 @@ void CIO::process()
|
|||
dmrDMORX.samples(DMRVals, rssi, RX_BLOCK_SIZE);
|
||||
}
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
if (m_ysfEnable) {
|
||||
q15_t YSFVals[RX_BLOCK_SIZE];
|
||||
#if defined(USE_DCBLOCKER)
|
||||
|
@ -405,7 +426,9 @@ void CIO::process()
|
|||
#endif
|
||||
ysfRX.samples(YSFVals, rssi, RX_BLOCK_SIZE);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(MODE_M17)
|
||||
if (m_m17Enable) {
|
||||
q15_t RRCVals[RX_BLOCK_SIZE];
|
||||
#if defined(USE_DCBLOCKER)
|
||||
|
@ -415,6 +438,7 @@ void CIO::process()
|
|||
#endif
|
||||
m17RX.samples(RRCVals, rssi, RX_BLOCK_SIZE);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_fmEnable) {
|
||||
bool cos = getCOSInt();
|
||||
|
@ -432,7 +456,10 @@ void CIO::process()
|
|||
ax25RX.samples(samples, RX_BLOCK_SIZE);
|
||||
#endif
|
||||
}
|
||||
} else if (m_modemState == STATE_DSTAR) {
|
||||
}
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
else if (m_modemState == STATE_DSTAR) {
|
||||
if (m_dstarEnable) {
|
||||
q15_t GMSKVals[RX_BLOCK_SIZE];
|
||||
#if defined(USE_DCBLOCKER)
|
||||
|
@ -442,7 +469,10 @@ void CIO::process()
|
|||
#endif
|
||||
dstarRX.samples(GMSKVals, rssi, RX_BLOCK_SIZE);
|
||||
}
|
||||
} else if (m_modemState == STATE_DMR) {
|
||||
}
|
||||
#endif
|
||||
|
||||
else if (m_modemState == STATE_DMR) {
|
||||
if (m_dmrEnable) {
|
||||
q15_t DMRVals[RX_BLOCK_SIZE];
|
||||
::arm_fir_fast_q15(&m_rrc02Filter, samples, DMRVals, RX_BLOCK_SIZE);
|
||||
|
@ -457,7 +487,10 @@ void CIO::process()
|
|||
dmrDMORX.samples(DMRVals, rssi, RX_BLOCK_SIZE);
|
||||
}
|
||||
}
|
||||
} else if (m_modemState == STATE_YSF) {
|
||||
}
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
else if (m_modemState == STATE_YSF) {
|
||||
if (m_ysfEnable) {
|
||||
q15_t YSFVals[RX_BLOCK_SIZE];
|
||||
#if defined(USE_DCBLOCKER)
|
||||
|
@ -467,7 +500,10 @@ void CIO::process()
|
|||
#endif
|
||||
ysfRX.samples(YSFVals, rssi, RX_BLOCK_SIZE);
|
||||
}
|
||||
} else if (m_modemState == STATE_P25) {
|
||||
}
|
||||
#endif
|
||||
|
||||
else if (m_modemState == STATE_P25) {
|
||||
if (m_p25Enable) {
|
||||
q15_t P25Vals[RX_BLOCK_SIZE];
|
||||
#if defined(USE_DCBLOCKER)
|
||||
|
@ -490,7 +526,10 @@ void CIO::process()
|
|||
|
||||
nxdnRX.samples(NXDNVals, rssi, RX_BLOCK_SIZE);
|
||||
}
|
||||
} else if (m_modemState == STATE_M17) {
|
||||
}
|
||||
|
||||
#if defined(MODE_M17)
|
||||
else if (m_modemState == STATE_M17) {
|
||||
if (m_m17Enable) {
|
||||
q15_t M17Vals[RX_BLOCK_SIZE];
|
||||
#if defined(USE_DCBLOCKER)
|
||||
|
@ -500,7 +539,10 @@ void CIO::process()
|
|||
#endif
|
||||
m17RX.samples(M17Vals, rssi, RX_BLOCK_SIZE);
|
||||
}
|
||||
} else if (m_modemState == STATE_FM) {
|
||||
}
|
||||
#endif
|
||||
|
||||
else if (m_modemState == STATE_FM) {
|
||||
bool cos = getCOSInt();
|
||||
#if defined(USE_DCBLOCKER)
|
||||
fm.samples(cos, dcSamples, RX_BLOCK_SIZE);
|
||||
|
@ -511,12 +553,18 @@ void CIO::process()
|
|||
if (m_ax25Enable)
|
||||
ax25RX.samples(samples, RX_BLOCK_SIZE);
|
||||
#endif
|
||||
} else if (m_modemState == STATE_DSTARCAL) {
|
||||
}
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
else if (m_modemState == STATE_DSTARCAL) {
|
||||
q15_t GMSKVals[RX_BLOCK_SIZE];
|
||||
::arm_fir_fast_q15(&m_gaussianFilter, samples, GMSKVals, RX_BLOCK_SIZE);
|
||||
|
||||
calDStarRX.samples(GMSKVals, RX_BLOCK_SIZE);
|
||||
} else if (m_modemState == STATE_RSSICAL) {
|
||||
}
|
||||
#endif
|
||||
|
||||
else if (m_modemState == STATE_RSSICAL) {
|
||||
calRSSI.samples(rssi, RX_BLOCK_SIZE);
|
||||
}
|
||||
}
|
||||
|
|
16
IO.h
16
IO.h
|
@ -70,15 +70,25 @@ private:
|
|||
arm_biquad_casd_df1_inst_q31 m_dcFilter;
|
||||
q31_t m_dcState[4];
|
||||
|
||||
arm_fir_instance_q15 m_rrc02Filter;
|
||||
arm_fir_instance_q15 m_rrc05Filter;
|
||||
#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_M17)
|
||||
arm_fir_instance_q15 m_rrc05Filter;
|
||||
q15_t m_rrc05State[70U]; // NoTaps + BlockSize - 1, 42 + 20 - 1 plus some spare
|
||||
q15_t m_gaussianState[40U]; // NoTaps + BlockSize - 1, 12 + 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
|
||||
|
|
|
@ -17,6 +17,9 @@
|
|||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_M17)
|
||||
|
||||
#include "Globals.h"
|
||||
#include "M17RX.h"
|
||||
#include "Utils.h"
|
||||
|
@ -402,3 +405,6 @@ void CM17RX::writeRSSIData(uint8_t* data)
|
|||
m_rssiAccum = 0U;
|
||||
m_rssiCount = 0U;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
7
M17RX.h
7
M17RX.h
|
@ -16,10 +16,13 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_M17)
|
||||
|
||||
#if !defined(M17RX_H)
|
||||
#define M17RX_H
|
||||
|
||||
#include "Config.h"
|
||||
#include "M17Defines.h"
|
||||
|
||||
enum M17RX_STATE {
|
||||
|
@ -67,3 +70,5 @@ private:
|
|||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_M17)
|
||||
|
||||
#include "Globals.h"
|
||||
#include "M17TX.h"
|
||||
|
||||
|
@ -182,3 +185,6 @@ void CM17TX::setParams(uint8_t txHang)
|
|||
{
|
||||
m_txHang = txHang * 1200U;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
8
M17TX.h
8
M17TX.h
|
@ -16,11 +16,13 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_M17)
|
||||
|
||||
#if !defined(M17TX_H)
|
||||
#define M17TX_H
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#include "RingBuffer.h"
|
||||
|
||||
class CM17TX {
|
||||
|
@ -54,3 +56,5 @@ private:
|
|||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
125
MMDVM.cpp
125
MMDVM.cpp
|
@ -41,42 +41,65 @@ bool m_duplex = true;
|
|||
bool m_tx = false;
|
||||
bool m_dcd = false;
|
||||
|
||||
CDStarRX dstarRX;
|
||||
CDStarTX dstarTX;
|
||||
|
||||
CDMRIdleRX dmrIdleRX;
|
||||
CDMRRX dmrRX;
|
||||
CDMRTX dmrTX;
|
||||
|
||||
CDMRDMORX dmrDMORX;
|
||||
CDMRDMOTX dmrDMOTX;
|
||||
|
||||
CYSFRX ysfRX;
|
||||
CYSFTX ysfTX;
|
||||
|
||||
CP25RX p25RX;
|
||||
CP25TX p25TX;
|
||||
|
||||
CNXDNRX nxdnRX;
|
||||
CNXDNTX nxdnTX;
|
||||
|
||||
CM17RX m17RX;
|
||||
CM17TX m17TX;
|
||||
|
||||
CPOCSAGTX pocsagTX;
|
||||
|
||||
CFM fm;
|
||||
CAX25RX ax25RX;
|
||||
CAX25TX ax25TX;
|
||||
#if defined(MODE_DSTAR)
|
||||
CDStarRX dstarRX;
|
||||
CDStarTX dstarTX;
|
||||
|
||||
CCalDStarRX calDStarRX;
|
||||
CCalDStarTX calDStarTX;
|
||||
CCalDMR calDMR;
|
||||
CCalP25 calP25;
|
||||
CCalNXDN calNXDN;
|
||||
CCalFM calFM;
|
||||
CCalPOCSAG calPOCSAG;
|
||||
CCalRSSI calRSSI;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_DMR)
|
||||
CDMRIdleRX dmrIdleRX;
|
||||
CDMRRX dmrRX;
|
||||
CDMRTX dmrTX;
|
||||
|
||||
CDMRDMORX dmrDMORX;
|
||||
CDMRDMOTX dmrDMOTX;
|
||||
|
||||
CCalDMR calDMR;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
CYSFRX ysfRX;
|
||||
CYSFTX ysfTX;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_P25)
|
||||
CP25RX p25RX;
|
||||
CP25TX p25TX;
|
||||
|
||||
CCalP25 calP25;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_NXDN)
|
||||
CNXDNRX nxdnRX;
|
||||
CNXDNTX nxdnTX;
|
||||
|
||||
CCalNXDN calNXDN;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_M17)
|
||||
CM17RX m17RX;
|
||||
CM17TX m17TX;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
CPOCSAGTX pocsagTX;
|
||||
CCalPOCSAG calPOCSAG;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_FM)
|
||||
CFM fm;
|
||||
CCalFM calFM;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_AX25)
|
||||
CAX25RX ax25RX;
|
||||
CAX25TX ax25TX;
|
||||
#endif
|
||||
|
||||
CCalRSSI calRSSI;
|
||||
|
||||
CCWIdTX cwIdTX;
|
||||
|
||||
|
@ -95,54 +118,84 @@ void loop()
|
|||
io.process();
|
||||
|
||||
// The following is for transmitting
|
||||
#if defined(MODE_DSTAR)
|
||||
if (m_dstarEnable && m_modemState == STATE_DSTAR)
|
||||
dstarTX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_DMR)
|
||||
if (m_dmrEnable && m_modemState == STATE_DMR) {
|
||||
if (m_duplex)
|
||||
dmrTX.process();
|
||||
else
|
||||
dmrDMOTX.process();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
if (m_ysfEnable && m_modemState == STATE_YSF)
|
||||
ysfTX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_P25)
|
||||
if (m_p25Enable && m_modemState == STATE_P25)
|
||||
p25TX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_NXDN)
|
||||
if (m_nxdnEnable && m_modemState == STATE_NXDN)
|
||||
nxdnTX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_M17)
|
||||
if (m_m17Enable && m_modemState == STATE_M17)
|
||||
m17TX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
if (m_pocsagEnable && (m_modemState == STATE_POCSAG || pocsagTX.busy()))
|
||||
pocsagTX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_AX25)
|
||||
if (m_ax25Enable && (m_modemState == STATE_IDLE || m_modemState == STATE_FM))
|
||||
ax25TX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_FM)
|
||||
if (m_fmEnable && m_modemState == STATE_FM)
|
||||
fm.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
if (m_modemState == STATE_DSTARCAL)
|
||||
calDStarTX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_DMR)
|
||||
if (m_modemState == STATE_DMRCAL || m_modemState == STATE_LFCAL || m_modemState == STATE_DMRCAL1K || m_modemState == STATE_DMRDMO1K)
|
||||
calDMR.process();
|
||||
#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)
|
||||
calFM.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_P25)
|
||||
if (m_modemState == STATE_P25CAL1K)
|
||||
calP25.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_NXDN)
|
||||
if (m_modemState == STATE_NXDNCAL1K)
|
||||
calNXDN.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
if (m_modemState == STATE_POCSAGCAL)
|
||||
calPOCSAG.process();
|
||||
|
||||
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)
|
||||
calFM.process();
|
||||
#endif
|
||||
|
||||
if (m_modemState == STATE_IDLE)
|
||||
cwIdTX.process();
|
||||
|
|
120
MMDVM.ino
120
MMDVM.ino
|
@ -38,42 +38,65 @@ bool m_duplex = true;
|
|||
bool m_tx = false;
|
||||
bool m_dcd = false;
|
||||
|
||||
CDStarRX dstarRX;
|
||||
CDStarTX dstarTX;
|
||||
|
||||
CDMRIdleRX dmrIdleRX;
|
||||
CDMRRX dmrRX;
|
||||
CDMRTX dmrTX;
|
||||
|
||||
CDMRDMORX dmrDMORX;
|
||||
CDMRDMOTX dmrDMOTX;
|
||||
|
||||
CYSFRX ysfRX;
|
||||
CYSFTX ysfTX;
|
||||
|
||||
CP25RX p25RX;
|
||||
CP25TX p25TX;
|
||||
|
||||
CNXDNRX nxdnRX;
|
||||
CNXDNTX nxdnTX;
|
||||
|
||||
CM17RX m17RX;
|
||||
CM17TX m17TX;
|
||||
|
||||
CPOCSAGTX pocsagTX;
|
||||
|
||||
CFM fm;
|
||||
CAX25RX ax25RX;
|
||||
CAX25TX ax25TX;
|
||||
#if defined(MODE_DSTAR)
|
||||
CDStarRX dstarRX;
|
||||
CDStarTX dstarTX;
|
||||
|
||||
CCalDStarRX calDStarRX;
|
||||
CCalDStarTX calDStarTX;
|
||||
CCalDMR calDMR;
|
||||
CCalFM calFM;
|
||||
CCalP25 calP25;
|
||||
CCalNXDN calNXDN;
|
||||
CCalPOCSAG calPOCSAG;
|
||||
CCalRSSI calRSSI;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_DMR)
|
||||
CDMRIdleRX dmrIdleRX;
|
||||
CDMRRX dmrRX;
|
||||
CDMRTX dmrTX;
|
||||
|
||||
CDMRDMORX dmrDMORX;
|
||||
CDMRDMOTX dmrDMOTX;
|
||||
|
||||
CCalDMR calDMR;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
CYSFRX ysfRX;
|
||||
CYSFTX ysfTX;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_P25)
|
||||
CP25RX p25RX;
|
||||
CP25TX p25TX;
|
||||
|
||||
CCalP25 calP25;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_NXDN)
|
||||
CNXDNRX nxdnRX;
|
||||
CNXDNTX nxdnTX;
|
||||
|
||||
CCalNXDN calNXDN;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_M17)
|
||||
CM17RX m17RX;
|
||||
CM17TX m17TX;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
CPOCSAGTX pocsagTX;
|
||||
CCalPOCSAG calPOCSAG;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_FM)
|
||||
CFM fm;
|
||||
CCalFM calFM;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_AX25)
|
||||
CAX25RX ax25RX;
|
||||
CAX25TX ax25TX;
|
||||
#endif
|
||||
|
||||
CCalRSSI calRSSI;
|
||||
|
||||
CCWIdTX cwIdTX;
|
||||
|
||||
|
@ -92,55 +115,86 @@ void loop()
|
|||
io.process();
|
||||
|
||||
// The following is for transmitting
|
||||
#if defined(MODE_DSTAR)
|
||||
if (m_dstarEnable && m_modemState == STATE_DSTAR)
|
||||
dstarTX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_DMR)
|
||||
if (m_dmrEnable && m_modemState == STATE_DMR) {
|
||||
if (m_duplex)
|
||||
dmrTX.process();
|
||||
else
|
||||
dmrDMOTX.process();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
if (m_ysfEnable && m_modemState == STATE_YSF)
|
||||
ysfTX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_P25)
|
||||
if (m_p25Enable && m_modemState == STATE_P25)
|
||||
p25TX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_NXDN)
|
||||
if (m_nxdnEnable && m_modemState == STATE_NXDN)
|
||||
nxdnTX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_M17)
|
||||
if (m_m17Enable && m_modemState == STATE_M17)
|
||||
m17TX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
if (m_pocsagEnable && (m_modemState == STATE_POCSAG || pocsagTX.busy()))
|
||||
pocsagTX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_AX25)
|
||||
if (m_ax25Enable && (m_modemState == STATE_IDLE || m_modemState == STATE_FM))
|
||||
ax25TX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_FM)
|
||||
if (m_fmEnable && m_modemState == STATE_FM)
|
||||
fm.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
if (m_modemState == STATE_DSTARCAL)
|
||||
calDStarTX.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_DMR)
|
||||
if (m_modemState == STATE_DMRCAL || m_modemState == STATE_LFCAL || m_modemState == STATE_DMRCAL1K || m_modemState == STATE_DMRDMO1K)
|
||||
calDMR.process();
|
||||
#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)
|
||||
calFM.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_P25)
|
||||
if (m_modemState == STATE_P25CAL1K)
|
||||
calP25.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_NXDN)
|
||||
if (m_modemState == STATE_NXDNCAL1K)
|
||||
calNXDN.process();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
if (m_modemState == STATE_POCSAGCAL)
|
||||
calPOCSAG.process();
|
||||
#endif
|
||||
|
||||
if (m_modemState == STATE_IDLE)
|
||||
cwIdTX.process();
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,9 @@
|
|||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
|
||||
#include "Globals.h"
|
||||
#include "POCSAGTX.h"
|
||||
|
||||
|
@ -147,3 +150,6 @@ uint8_t CPOCSAGTX::getSpace() const
|
|||
{
|
||||
return m_buffer.getSpace() / POCSAG_FRAME_LENGTH_BYTES;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -16,11 +16,13 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
|
||||
#if !defined(POCSAGTX_H)
|
||||
#define POCSAGTX_H
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#include "RingBuffer.h"
|
||||
|
||||
class CPOCSAGTX {
|
||||
|
@ -51,3 +53,5 @@ private:
|
|||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -195,10 +195,14 @@ void CSerialPort::getStatus()
|
|||
|
||||
reply[4U] |= m_dcd ? 0x40U : 0x00U;
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
if (m_dstarEnable)
|
||||
reply[5U] = dstarTX.getSpace();
|
||||
else
|
||||
reply[5U] = 0U;
|
||||
#else
|
||||
reply[5U] = 0U;
|
||||
#endif
|
||||
|
||||
if (m_dmrEnable) {
|
||||
if (m_duplex) {
|
||||
|
@ -213,10 +217,14 @@ void CSerialPort::getStatus()
|
|||
reply[7U] = 0U;
|
||||
}
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
if (m_ysfEnable)
|
||||
reply[8U] = ysfTX.getSpace();
|
||||
else
|
||||
reply[8U] = 0U;
|
||||
#else
|
||||
reply[8U] = 0U;
|
||||
#endif
|
||||
|
||||
if (m_p25Enable)
|
||||
reply[9U] = p25TX.getSpace();
|
||||
|
@ -228,15 +236,23 @@ void CSerialPort::getStatus()
|
|||
else
|
||||
reply[10U] = 0U;
|
||||
|
||||
#if defined(MODE_M17)
|
||||
if (m_m17Enable)
|
||||
reply[11U] = m17TX.getSpace();
|
||||
else
|
||||
reply[11U] = 0U;
|
||||
#else
|
||||
reply[11U] = 0U;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
if (m_pocsagEnable)
|
||||
reply[12U] = pocsagTX.getSpace();
|
||||
else
|
||||
reply[12U] = 0U;
|
||||
#else
|
||||
reply[12U] = 0U;
|
||||
#endif
|
||||
|
||||
if (m_fmEnable)
|
||||
reply[13U] = fm.getSpace();
|
||||
|
@ -368,13 +384,21 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint16_t length)
|
|||
m_ax25Enable = ax25Enable;
|
||||
m_duplex = !simplex;
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
dstarTX.setTXDelay(txDelay);
|
||||
#endif
|
||||
#if defined(MODE_YSF)
|
||||
ysfTX.setTXDelay(txDelay);
|
||||
#endif
|
||||
p25TX.setTXDelay(txDelay);
|
||||
dmrDMOTX.setTXDelay(txDelay);
|
||||
nxdnTX.setTXDelay(txDelay);
|
||||
#if defined(MODE_M17)
|
||||
m17TX.setTXDelay(txDelay);
|
||||
#endif
|
||||
#if defined(MODE_POCSAG)
|
||||
pocsagTX.setTXDelay(txDelay);
|
||||
#endif
|
||||
ax25TX.setTXDelay(ax25TXDelay);
|
||||
|
||||
dmrTX.setColorCode(colorCode);
|
||||
|
@ -383,10 +407,14 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint16_t length)
|
|||
dmrDMORX.setColorCode(colorCode);
|
||||
dmrIdleRX.setColorCode(colorCode);
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
ysfTX.setParams(ysfLoDev, ysfTXHang);
|
||||
#endif
|
||||
p25TX.setParams(p25TXHang);
|
||||
nxdnTX.setParams(nxdnTXHang);
|
||||
#if defined(MODE_M17)
|
||||
m17TX.setParams(m17TXHang);
|
||||
#endif
|
||||
ax25RX.setParams(ax25RXTwist, ax25SlotTime, ax25PPersist);
|
||||
|
||||
io.setParameters(rxInvert, txInvert, pttInvert, rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, m17TXLevel, pocsagTXLevel, fmTXLevel, ax25TXLevel, txDCOffset, rxDCOffset, useCOSAsLockout);
|
||||
|
@ -396,6 +424,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint16_t length)
|
|||
return 0U;
|
||||
}
|
||||
|
||||
#if defined(MODE_AX25)
|
||||
uint8_t CSerialPort::setFMParams1(const uint8_t* data, uint16_t length)
|
||||
{
|
||||
if (length < 8U)
|
||||
|
@ -489,6 +518,7 @@ uint8_t CSerialPort::setFMParams4(const uint8_t* data, uint16_t length)
|
|||
|
||||
return fm.setExt(ack, audioBoost, speed, frequency, level);
|
||||
}
|
||||
#endif
|
||||
|
||||
uint8_t CSerialPort::setMode(const uint8_t* data, uint16_t length)
|
||||
{
|
||||
|
@ -598,8 +628,10 @@ void CSerialPort::setMode(MMDVM_STATE modemState)
|
|||
break;
|
||||
}
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
if (modemState != STATE_DSTAR)
|
||||
dstarRX.reset();
|
||||
#endif
|
||||
|
||||
if (modemState != STATE_DMR) {
|
||||
dmrIdleRX.reset();
|
||||
|
@ -607,8 +639,10 @@ void CSerialPort::setMode(MMDVM_STATE modemState)
|
|||
dmrRX.reset();
|
||||
}
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
if (modemState != STATE_YSF)
|
||||
ysfRX.reset();
|
||||
#endif
|
||||
|
||||
if (modemState != STATE_P25)
|
||||
p25RX.reset();
|
||||
|
@ -616,8 +650,10 @@ void CSerialPort::setMode(MMDVM_STATE modemState)
|
|||
if (modemState != STATE_NXDN)
|
||||
nxdnRX.reset();
|
||||
|
||||
#if defined(MODE_M17)
|
||||
if (modemState != STATE_M17)
|
||||
m17RX.reset();
|
||||
#endif
|
||||
|
||||
if (modemState != STATE_FM)
|
||||
fm.reset();
|
||||
|
@ -739,6 +775,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
sendACK();
|
||||
break;
|
||||
|
||||
#if defined(MODE_FM)
|
||||
case MMDVM_FM_PARAMS1:
|
||||
err = setFMParams1(buffer, length);
|
||||
if (err == 0U) {
|
||||
|
@ -778,10 +815,13 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
sendNAK(err);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case MMDVM_CAL_DATA:
|
||||
#if defined(MODE_DSTAR)
|
||||
if (m_modemState == STATE_DSTARCAL)
|
||||
err = calDStarTX.write(buffer, length);
|
||||
#endif
|
||||
if (m_modemState == STATE_DMRCAL || m_modemState == STATE_LFCAL || m_modemState == STATE_DMRCAL1K || m_modemState == STATE_DMRDMO1K)
|
||||
err = calDMR.write(buffer, length);
|
||||
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)
|
||||
|
@ -790,8 +830,10 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
err = calP25.write(buffer, length);
|
||||
if (m_modemState == STATE_NXDNCAL1K)
|
||||
err = calNXDN.write(buffer, length);
|
||||
#if defined(MODE_POCSAG)
|
||||
if (m_modemState == STATE_POCSAGCAL)
|
||||
err = calPOCSAG.write(buffer, length);
|
||||
#endif
|
||||
if (err == 0U) {
|
||||
sendACK();
|
||||
} else {
|
||||
|
@ -810,6 +852,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
}
|
||||
break;
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
case MMDVM_DSTAR_HEADER:
|
||||
if (m_dstarEnable) {
|
||||
if (m_modemState == STATE_IDLE || m_modemState == STATE_DSTAR)
|
||||
|
@ -851,6 +894,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
sendNAK(err);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case MMDVM_DMR_DATA1:
|
||||
if (m_dmrEnable) {
|
||||
|
@ -925,6 +969,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
}
|
||||
break;
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
case MMDVM_YSF_DATA:
|
||||
if (m_ysfEnable) {
|
||||
if (m_modemState == STATE_IDLE || m_modemState == STATE_YSF)
|
||||
|
@ -938,6 +983,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
sendNAK(err);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case MMDVM_P25_HDR:
|
||||
if (m_p25Enable) {
|
||||
|
@ -981,6 +1027,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
}
|
||||
break;
|
||||
|
||||
#if defined(MODE_M17)
|
||||
case MMDVM_M17_DATA:
|
||||
if (m_m17Enable) {
|
||||
if (m_modemState == STATE_IDLE || m_modemState == STATE_M17)
|
||||
|
@ -994,7 +1041,9 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
sendNAK(err);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(MODE_POCSAG)
|
||||
case MMDVM_POCSAG_DATA:
|
||||
if (m_pocsagEnable) {
|
||||
if (m_modemState == STATE_IDLE || m_modemState == STATE_POCSAG)
|
||||
|
@ -1008,6 +1057,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
sendNAK(err);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case MMDVM_FM_DATA:
|
||||
if (m_fmEnable) {
|
||||
|
@ -1057,6 +1107,7 @@ void CSerialPort::processMessage(const uint8_t* buffer, uint16_t length)
|
|||
m_len = 0U;
|
||||
}
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
void CSerialPort::writeDStarHeader(const uint8_t* header, uint8_t length)
|
||||
{
|
||||
if (m_modemState != STATE_DSTAR && m_modemState != STATE_IDLE)
|
||||
|
@ -1135,6 +1186,7 @@ void CSerialPort::writeDStarEOT()
|
|||
|
||||
writeInt(1U, reply, 3);
|
||||
}
|
||||
#endif
|
||||
|
||||
void CSerialPort::writeDMRData(bool slot, const uint8_t* data, uint8_t length)
|
||||
{
|
||||
|
@ -1176,6 +1228,7 @@ void CSerialPort::writeDMRLost(bool slot)
|
|||
writeInt(1U, reply, 3);
|
||||
}
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
void CSerialPort::writeYSFData(const uint8_t* data, uint8_t length)
|
||||
{
|
||||
if (m_modemState != STATE_YSF && m_modemState != STATE_IDLE)
|
||||
|
@ -1215,6 +1268,7 @@ void CSerialPort::writeYSFLost()
|
|||
|
||||
writeInt(1U, reply, 3);
|
||||
}
|
||||
#endif
|
||||
|
||||
void CSerialPort::writeP25Hdr(const uint8_t* data, uint8_t length)
|
||||
{
|
||||
|
@ -1319,6 +1373,7 @@ void CSerialPort::writeNXDNLost()
|
|||
writeInt(1U, reply, 3);
|
||||
}
|
||||
|
||||
#if defined(MODE_M17)
|
||||
void CSerialPort::writeM17Data(const uint8_t* data, uint8_t length)
|
||||
{
|
||||
if (m_modemState != STATE_M17 && m_modemState != STATE_IDLE)
|
||||
|
@ -1358,6 +1413,7 @@ void CSerialPort::writeM17Lost()
|
|||
|
||||
writeInt(1U, reply, 3);
|
||||
}
|
||||
#endif
|
||||
|
||||
void CSerialPort::writeFMData(const uint8_t* data, uint16_t length)
|
||||
{
|
||||
|
|
21
SerialPort.h
21
SerialPort.h
|
@ -36,32 +36,48 @@ public:
|
|||
|
||||
void process();
|
||||
|
||||
#if defined(MODE_DSTAR)
|
||||
void writeDStarHeader(const uint8_t* header, uint8_t length);
|
||||
void writeDStarData(const uint8_t* data, uint8_t length);
|
||||
void writeDStarLost();
|
||||
void writeDStarEOT();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_DMR)
|
||||
void writeDMRData(bool slot, const uint8_t* data, uint8_t length);
|
||||
void writeDMRLost(bool slot);
|
||||
#endif
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
void writeYSFData(const uint8_t* data, uint8_t length);
|
||||
void writeYSFLost();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_P25)
|
||||
void writeP25Hdr(const uint8_t* data, uint8_t length);
|
||||
void writeP25Ldu(const uint8_t* data, uint8_t length);
|
||||
void writeP25Lost();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_NXDN)
|
||||
void writeNXDNData(const uint8_t* data, uint8_t length);
|
||||
void writeNXDNLost();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_M17)
|
||||
void writeM17Data(const uint8_t* data, uint8_t length);
|
||||
void writeM17Lost();
|
||||
#endif
|
||||
|
||||
#if defined(MODE_AX25)
|
||||
void writeAX25Data(const uint8_t* data, uint16_t length);
|
||||
#endif
|
||||
|
||||
#if defined(MODE_FM)
|
||||
void writeFMData(const uint8_t* data, uint16_t length);
|
||||
void writeFMStatus(uint8_t status);
|
||||
void writeFMEOT();
|
||||
#endif
|
||||
|
||||
void writeCalData(const uint8_t* data, uint8_t length);
|
||||
void writeRSSIData(const uint8_t* data, uint8_t length);
|
||||
|
@ -86,11 +102,14 @@ private:
|
|||
uint8_t setConfig(const uint8_t* data, uint16_t length);
|
||||
uint8_t setMode(const uint8_t* data, uint16_t length);
|
||||
void setMode(MMDVM_STATE modemState);
|
||||
void processMessage(const uint8_t* data, uint16_t length);
|
||||
|
||||
#if defined(MODE_FM)
|
||||
uint8_t setFMParams1(const uint8_t* data, uint16_t length);
|
||||
uint8_t setFMParams2(const uint8_t* data, uint16_t length);
|
||||
uint8_t setFMParams3(const uint8_t* data, uint16_t length);
|
||||
uint8_t setFMParams4(const uint8_t* data, uint16_t length);
|
||||
void processMessage(const uint8_t* data, uint16_t length);
|
||||
#endif
|
||||
|
||||
// Hardware versions
|
||||
void beginInt(uint8_t n, int speed);
|
||||
|
|
|
@ -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_YSF)
|
||||
|
||||
#include "Globals.h"
|
||||
#include "YSFRX.h"
|
||||
#include "Utils.h"
|
||||
|
@ -402,3 +405,6 @@ void CYSFRX::writeRSSIData(uint8_t* data)
|
|||
m_rssiAccum = 0U;
|
||||
m_rssiCount = 0U;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
9
YSFRX.h
9
YSFRX.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_YSF)
|
||||
|
||||
#if !defined(YSFRX_H)
|
||||
#define YSFRX_H
|
||||
|
||||
#include "Config.h"
|
||||
#include "YSFDefines.h"
|
||||
|
||||
enum YSFRX_STATE {
|
||||
|
@ -67,3 +70,5 @@ private:
|
|||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
*/
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
#if defined(MODE_YSF)
|
||||
|
||||
#include "Globals.h"
|
||||
#include "YSFTX.h"
|
||||
|
||||
|
@ -189,3 +192,6 @@ void CYSFTX::setParams(bool on, uint8_t txHang)
|
|||
m_loDev = on;
|
||||
m_txHang = txHang * 1200U;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue