mirror of https://github.com/g4klx/MMDVM.git
Update
This commit is contained in:
parent
8d59210846
commit
4655e33575
4
Config.h
4
Config.h
|
@ -67,10 +67,12 @@
|
||||||
// #define SERIAL_REPEATER
|
// #define SERIAL_REPEATER
|
||||||
|
|
||||||
// To reduce CPU load, you can remove the DC blocker by commenting out the next line
|
// To reduce CPU load, you can remove the DC blocker by commenting out the next line
|
||||||
// #define USE_DCBLOCKER
|
#define USE_DCBLOCKER
|
||||||
|
|
||||||
// Constant Service LED once repeater is running
|
// Constant Service LED once repeater is running
|
||||||
// Do not use if employing an external hardware watchdog
|
// Do not use if employing an external hardware watchdog
|
||||||
// #define CONSTANT_SRV_LED
|
// #define CONSTANT_SRV_LED
|
||||||
|
|
||||||
|
// #define DSTARBOXCAR
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -166,4 +166,3 @@ void CDMRDMOTX::setTXDelay(uint8_t delay)
|
||||||
if (m_txDelay > 1200U)
|
if (m_txDelay > 1200U)
|
||||||
m_txDelay = 1200U;
|
m_txDelay = 1200U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2009-2017 by Jonathan Naylor G4KLX
|
* Copyright (C) 2009-2017 by Jonathan Naylor G4KLX
|
||||||
* Copyright (C) 2017 by Andy Uribe CA6JAU
|
* Copyright (C) 2017 by Andy Uribe CA6JAU
|
||||||
|
|
64
IO.cpp
64
IO.cpp
|
@ -49,10 +49,11 @@ static q15_t NXDN_ISINC_FILTER[] = {7616, -1333, -1856, -2611, -3399, -4006, -42
|
||||||
9665, 8832, 7276, 5200, 2867, 561, -1458, -2988, -3918, -4230, -4006, -3399, -2611, -1856, -1333, 7616};
|
9665, 8832, 7276, 5200, 2867, 561, -1458, -2988, -3918, -4230, -4006, -3399, -2611, -1856, -1333, 7616};
|
||||||
const uint16_t NXDN_ISINC_FILTER_LEN = 32U;
|
const uint16_t NXDN_ISINC_FILTER_LEN = 32U;
|
||||||
|
|
||||||
|
#if !defined (DSTARBOXCAR)
|
||||||
// Generated using gaussfir(0.5, 4, 10) in MATLAB
|
// Generated using gaussfir(0.5, 4, 10) in MATLAB
|
||||||
//static q15_t GAUSSIAN_0_5_FILTER[] = {1, 4, 15, 52, 151, 380, 832, 1579, 2599, 3710, 4594, 4933, 4594, 3710, 2599, 1579, 832, 380, 151, 52, 15, 4, 1, 0};
|
static q15_t GAUSSIAN_0_5_FILTER[] = {1, 4, 15, 52, 151, 380, 832, 1579, 2599, 3710, 4594, 4933, 4594, 3710, 2599, 1579, 832, 380, 151, 52, 15, 4, 1, 0};
|
||||||
//const uint16_t GAUSSIAN_0_5_FILTER_LEN = 24U;
|
const uint16_t GAUSSIAN_0_5_FILTER_LEN = 24U;
|
||||||
|
#endif
|
||||||
// One symbol boxcar filter
|
// One symbol boxcar filter
|
||||||
static q15_t BOXCAR_FILTER[] = {6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 0, 0};
|
static q15_t BOXCAR_FILTER[] = {6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 0, 0};
|
||||||
const uint16_t BOXCAR_FILTER_LEN = 12U;
|
const uint16_t BOXCAR_FILTER_LEN = 12U;
|
||||||
|
@ -67,12 +68,16 @@ m_rssiBuffer(RX_RINGBUFFER_SIZE),
|
||||||
m_dcFilter(),
|
m_dcFilter(),
|
||||||
m_dcState(),
|
m_dcState(),
|
||||||
m_rrcFilter(),
|
m_rrcFilter(),
|
||||||
//m_gaussianFilter(),
|
#if !defined (DSTARBOXCAR)
|
||||||
|
m_gaussianFilter(),
|
||||||
|
#endif
|
||||||
m_boxcarFilter(),
|
m_boxcarFilter(),
|
||||||
m_nxdnFilter(),
|
m_nxdnFilter(),
|
||||||
m_nxdnISincFilter(),
|
m_nxdnISincFilter(),
|
||||||
m_rrcState(),
|
m_rrcState(),
|
||||||
//m_gaussianState(),
|
#if !defined (DSTARBOXCAR)
|
||||||
|
m_gaussianState(),
|
||||||
|
#endif
|
||||||
m_boxcarState(),
|
m_boxcarState(),
|
||||||
m_nxdnState(),
|
m_nxdnState(),
|
||||||
m_nxdnISincState(),
|
m_nxdnISincState(),
|
||||||
|
@ -95,7 +100,9 @@ m_watchdog(0U),
|
||||||
m_lockout(false)
|
m_lockout(false)
|
||||||
{
|
{
|
||||||
::memset(m_rrcState, 0x00U, 140U * sizeof(q15_t));
|
::memset(m_rrcState, 0x00U, 140U * sizeof(q15_t));
|
||||||
// ::memset(m_gaussianState, 0x00U, 80U * sizeof(q15_t));
|
#if !defined (DSTARBOXCAR)
|
||||||
|
::memset(m_gaussianState, 0x00U, 80U * sizeof(q15_t));
|
||||||
|
#endif
|
||||||
::memset(m_boxcarState, 0x00U, 60U * sizeof(q15_t));
|
::memset(m_boxcarState, 0x00U, 60U * sizeof(q15_t));
|
||||||
::memset(m_nxdnState, 0x00U, 220U * sizeof(q15_t));
|
::memset(m_nxdnState, 0x00U, 220U * sizeof(q15_t));
|
||||||
::memset(m_nxdnISincState, 0x00U, 60U * sizeof(q15_t));
|
::memset(m_nxdnISincState, 0x00U, 60U * sizeof(q15_t));
|
||||||
|
@ -109,11 +116,11 @@ m_lockout(false)
|
||||||
m_rrcFilter.numTaps = RRC_0_2_FILTER_LEN;
|
m_rrcFilter.numTaps = RRC_0_2_FILTER_LEN;
|
||||||
m_rrcFilter.pState = m_rrcState;
|
m_rrcFilter.pState = m_rrcState;
|
||||||
m_rrcFilter.pCoeffs = RRC_0_2_FILTER;
|
m_rrcFilter.pCoeffs = RRC_0_2_FILTER;
|
||||||
|
#if !defined (DSTARBOXCAR)
|
||||||
// m_gaussianFilter.numTaps = GAUSSIAN_0_5_FILTER_LEN;
|
m_gaussianFilter.numTaps = GAUSSIAN_0_5_FILTER_LEN;
|
||||||
// m_gaussianFilter.pState = m_gaussianState;
|
m_gaussianFilter.pState = m_gaussianState;
|
||||||
// m_gaussianFilter.pCoeffs = GAUSSIAN_0_5_FILTER;
|
m_gaussianFilter.pCoeffs = GAUSSIAN_0_5_FILTER;
|
||||||
|
#endif
|
||||||
m_boxcarFilter.numTaps = BOXCAR_FILTER_LEN;
|
m_boxcarFilter.numTaps = BOXCAR_FILTER_LEN;
|
||||||
m_boxcarFilter.pState = m_boxcarState;
|
m_boxcarFilter.pState = m_boxcarState;
|
||||||
m_boxcarFilter.pCoeffs = BOXCAR_FILTER;
|
m_boxcarFilter.pCoeffs = BOXCAR_FILTER;
|
||||||
|
@ -333,9 +340,17 @@ void CIO::process()
|
||||||
if (m_dstarEnable) {
|
if (m_dstarEnable) {
|
||||||
q15_t GMSKVals[RX_BLOCK_SIZE];
|
q15_t GMSKVals[RX_BLOCK_SIZE];
|
||||||
#if defined(USE_DCBLOCKER)
|
#if defined(USE_DCBLOCKER)
|
||||||
|
#if !defined (DSTARBOXCAR)
|
||||||
|
::arm_fir_fast_q15(&m_gaussianFilter, dcSamples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#else
|
||||||
::arm_fir_fast_q15(&m_boxcarFilter, dcSamples, GMSKVals, RX_BLOCK_SIZE);
|
::arm_fir_fast_q15(&m_boxcarFilter, dcSamples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
::arm_fir_fast_q15(&m_boxcarFilter, samples, GMSKVals, RX_BLOCK_SIZE);
|
#if !defined (DSTARBOXCAR)
|
||||||
|
::arm_fir_fast_q15(&m_gaussianFilter, samples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#else
|
||||||
|
::arm_fir_fast_q15(&m_boxcarFilter, samples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
dstarRX.samples(GMSKVals, rssi, RX_BLOCK_SIZE);
|
dstarRX.samples(GMSKVals, rssi, RX_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
|
@ -381,9 +396,17 @@ void CIO::process()
|
||||||
if (m_dstarEnable) {
|
if (m_dstarEnable) {
|
||||||
q15_t GMSKVals[RX_BLOCK_SIZE];
|
q15_t GMSKVals[RX_BLOCK_SIZE];
|
||||||
#if defined(USE_DCBLOCKER)
|
#if defined(USE_DCBLOCKER)
|
||||||
|
#if !defined (DSTARBOXCAR)
|
||||||
|
::arm_fir_fast_q15(&m_gaussianFilter, dcSamples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#else
|
||||||
::arm_fir_fast_q15(&m_boxcarFilter, dcSamples, GMSKVals, RX_BLOCK_SIZE);
|
::arm_fir_fast_q15(&m_boxcarFilter, dcSamples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
::arm_fir_fast_q15(&m_boxcarFilter, samples, GMSKVals, RX_BLOCK_SIZE);
|
#if !defined (DSTARBOXCAR)
|
||||||
|
::arm_fir_fast_q15(&m_gaussianFilter, samples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#else
|
||||||
|
::arm_fir_fast_q15(&m_boxcarFilter, samples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
dstarRX.samples(GMSKVals, rssi, RX_BLOCK_SIZE);
|
dstarRX.samples(GMSKVals, rssi, RX_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
|
@ -437,8 +460,19 @@ void CIO::process()
|
||||||
}
|
}
|
||||||
} else if (m_modemState == STATE_DSTARCAL) {
|
} else if (m_modemState == STATE_DSTARCAL) {
|
||||||
q15_t GMSKVals[RX_BLOCK_SIZE];
|
q15_t GMSKVals[RX_BLOCK_SIZE];
|
||||||
::arm_fir_fast_q15(&m_boxcarFilter, samples, GMSKVals, RX_BLOCK_SIZE);
|
#if defined(USE_DCBLOCKER)
|
||||||
|
#if !defined (DSTARBOXCAR)
|
||||||
|
::arm_fir_fast_q15(&m_gaussianFilter, dcSamples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#else
|
||||||
|
::arm_fir_fast_q15(&m_boxcarFilter, dcSamples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#if !defined (DSTARBOXCAR)
|
||||||
|
::arm_fir_fast_q15(&m_gaussianFilter, samples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#else
|
||||||
|
::arm_fir_fast_q15(&m_boxcarFilter, samples, GMSKVals, RX_BLOCK_SIZE);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
calDStarRX.samples(GMSKVals, RX_BLOCK_SIZE);
|
calDStarRX.samples(GMSKVals, RX_BLOCK_SIZE);
|
||||||
} else if (m_modemState == STATE_RSSICAL) {
|
} else if (m_modemState == STATE_RSSICAL) {
|
||||||
calRSSI.samples(rssi, RX_BLOCK_SIZE);
|
calRSSI.samples(rssi, RX_BLOCK_SIZE);
|
||||||
|
|
8
IO.h
8
IO.h
|
@ -67,12 +67,16 @@ private:
|
||||||
q31_t m_dcState[4];
|
q31_t m_dcState[4];
|
||||||
|
|
||||||
arm_fir_instance_q15 m_rrcFilter;
|
arm_fir_instance_q15 m_rrcFilter;
|
||||||
//arm_fir_instance_q15 m_gaussianFilter;
|
#if !defined (DSTARBOXCAR)
|
||||||
|
arm_fir_instance_q15 m_gaussianFilter;
|
||||||
|
#endif
|
||||||
arm_fir_instance_q15 m_boxcarFilter;
|
arm_fir_instance_q15 m_boxcarFilter;
|
||||||
arm_fir_instance_q15 m_nxdnFilter;
|
arm_fir_instance_q15 m_nxdnFilter;
|
||||||
arm_fir_instance_q15 m_nxdnISincFilter;
|
arm_fir_instance_q15 m_nxdnISincFilter;
|
||||||
q15_t m_rrcState[140U]; // NoTaps + BlockSize - 1, 82 + 20 - 1 plus some spare
|
q15_t m_rrcState[140U]; // NoTaps + BlockSize - 1, 82 + 20 - 1 plus some spare
|
||||||
//q15_t m_gaussianState[80U]; // NoTaps + BlockSize - 1, 24 + 20 - 1 plus some spare
|
#if !defined (DSTARBOXCAR)
|
||||||
|
q15_t m_gaussianState[80U]; // NoTaps + BlockSize - 1, 24 + 20 - 1 plus some spare
|
||||||
|
#endif
|
||||||
q15_t m_boxcarState[60U]; // NoTaps + BlockSize - 1, 12 + 20 - 1 plus some spare
|
q15_t m_boxcarState[60U]; // NoTaps + BlockSize - 1, 12 + 20 - 1 plus some spare
|
||||||
q15_t m_nxdnState[220U]; // NoTaps + BlockSize - 1, 162 + 20 - 1 plus some spare
|
q15_t m_nxdnState[220U]; // NoTaps + BlockSize - 1, 162 + 20 - 1 plus some spare
|
||||||
q15_t m_nxdnISincState[60U]; // NoTaps + BlockSize - 1, 32 + 20 - 1 plus some spare
|
q15_t m_nxdnISincState[60U]; // NoTaps + BlockSize - 1, 32 + 20 - 1 plus some spare
|
||||||
|
|
|
@ -275,8 +275,8 @@
|
||||||
<File name="DMRDMORX.h" path="DMRDMORX.h" type="1"/>
|
<File name="DMRDMORX.h" path="DMRDMORX.h" type="1"/>
|
||||||
<File name="SerialPort.h" path="SerialPort.h" type="1"/>
|
<File name="SerialPort.h" path="SerialPort.h" type="1"/>
|
||||||
<File name="STM32F4XX_Lib/STM32F4xx_StdPeriph_Driver/include/stm32f4xx_dac.h" path="STM32F4XX_Lib/STM32F4xx_StdPeriph_Driver/include/stm32f4xx_dac.h" type="1"/>
|
<File name="STM32F4XX_Lib/STM32F4xx_StdPeriph_Driver/include/stm32f4xx_dac.h" path="STM32F4XX_Lib/STM32F4xx_StdPeriph_Driver/include/stm32f4xx_dac.h" type="1"/>
|
||||||
<File name="STM32F4XX_Lib/CMSIS/Include/core_cmFunc.h" path="STM32F4XX_Lib/CMSIS/Include/core_cmFunc.h" type="1"/>
|
|
||||||
<File name="STM32F4XX_Lib/Device/system_stm32f4xx.h" path="STM32F4XX_Lib/Device/system_stm32f4xx.h" type="1"/>
|
<File name="STM32F4XX_Lib/Device/system_stm32f4xx.h" path="STM32F4XX_Lib/Device/system_stm32f4xx.h" type="1"/>
|
||||||
|
<File name="STM32F4XX_Lib/CMSIS/Include/core_cmFunc.h" path="STM32F4XX_Lib/CMSIS/Include/core_cmFunc.h" type="1"/>
|
||||||
<File name="CWIdTX.h" path="CWIdTX.h" type="1"/>
|
<File name="CWIdTX.h" path="CWIdTX.h" type="1"/>
|
||||||
<File name="CalDStarTX.cpp" path="CalDStarTX.cpp" type="1"/>
|
<File name="CalDStarTX.cpp" path="CalDStarTX.cpp" type="1"/>
|
||||||
<File name="STM32F4XX_Lib/STM32F4xx_StdPeriph_Driver/source" path="" type="2"/>
|
<File name="STM32F4XX_Lib/STM32F4xx_StdPeriph_Driver/source" path="" type="2"/>
|
||||||
|
@ -284,15 +284,15 @@
|
||||||
<File name="IODue.cpp" path="IODue.cpp" type="1"/>
|
<File name="IODue.cpp" path="IODue.cpp" type="1"/>
|
||||||
<File name="CalDMR.h" path="CalDMR.h" type="1"/>
|
<File name="CalDMR.h" path="CalDMR.h" type="1"/>
|
||||||
<File name="DMRTX.cpp" path="DMRTX.cpp" type="1"/>
|
<File name="DMRTX.cpp" path="DMRTX.cpp" type="1"/>
|
||||||
<File name="P25RX.cpp" path="P25RX.cpp" type="1"/>
|
|
||||||
<File name="CalRSSI.h" path="CalRSSI.h" type="1"/>
|
<File name="CalRSSI.h" path="CalRSSI.h" type="1"/>
|
||||||
|
<File name="P25RX.cpp" path="P25RX.cpp" type="1"/>
|
||||||
<File name="STM32F4XX_Lib/CMSIS/Lib/GCC" path="" type="2"/>
|
<File name="STM32F4XX_Lib/CMSIS/Lib/GCC" path="" type="2"/>
|
||||||
<File name="STM32F4XX_Lib" path="" type="2"/>
|
<File name="STM32F4XX_Lib" path="" type="2"/>
|
||||||
<File name="STM32F4XX_Lib/CMSIS/Include/core_cmInstr.h" path="STM32F4XX_Lib/CMSIS/Include/core_cmInstr.h" type="1"/>
|
<File name="STM32F4XX_Lib/CMSIS/Include/core_cmInstr.h" path="STM32F4XX_Lib/CMSIS/Include/core_cmInstr.h" type="1"/>
|
||||||
<File name="DMRTX.h" path="DMRTX.h" type="1"/>
|
<File name="DMRTX.h" path="DMRTX.h" type="1"/>
|
||||||
<File name="STM32F4XX_Lib/Device/system_stm32f4xx.c" path="STM32F4XX_Lib/Device/system_stm32f4xx.c" type="1"/>
|
<File name="STM32F4XX_Lib/Device/system_stm32f4xx.c" path="STM32F4XX_Lib/Device/system_stm32f4xx.c" type="1"/>
|
||||||
<File name="STM32F4XX_Lib/Device/startup/startup_stm32f4xx.c" path="STM32F4XX_Lib/Device/startup/startup_stm32f4xx.c" type="1"/>
|
|
||||||
<File name="RSSIRB.h" path="RSSIRB.h" type="1"/>
|
<File name="RSSIRB.h" path="RSSIRB.h" type="1"/>
|
||||||
|
<File name="STM32F4XX_Lib/Device/startup/startup_stm32f4xx.c" path="STM32F4XX_Lib/Device/startup/startup_stm32f4xx.c" type="1"/>
|
||||||
<File name="STM32F4XX_Lib/Device/startup" path="" type="2"/>
|
<File name="STM32F4XX_Lib/Device/startup" path="" type="2"/>
|
||||||
<File name="SerialRB.h" path="SerialRB.h" type="1"/>
|
<File name="SerialRB.h" path="SerialRB.h" type="1"/>
|
||||||
<File name="NXDNDefines.h" path="NXDNDefines.h" type="1"/>
|
<File name="NXDNDefines.h" path="NXDNDefines.h" type="1"/>
|
||||||
|
@ -340,8 +340,8 @@
|
||||||
<File name="P25TX.h" path="P25TX.h" type="1"/>
|
<File name="P25TX.h" path="P25TX.h" type="1"/>
|
||||||
<File name="RSSIRB.cpp" path="RSSIRB.cpp" type="1"/>
|
<File name="RSSIRB.cpp" path="RSSIRB.cpp" type="1"/>
|
||||||
<File name="DStarRX.cpp" path="DStarRX.cpp" type="1"/>
|
<File name="DStarRX.cpp" path="DStarRX.cpp" type="1"/>
|
||||||
<File name="DMRSlotRX.cpp" path="DMRSlotRX.cpp" type="1"/>
|
|
||||||
<File name="IOSTM.cpp" path="IOSTM.cpp" type="1"/>
|
<File name="IOSTM.cpp" path="IOSTM.cpp" type="1"/>
|
||||||
|
<File name="DMRSlotRX.cpp" path="DMRSlotRX.cpp" type="1"/>
|
||||||
<File name="P25TX.cpp" path="P25TX.cpp" type="1"/>
|
<File name="P25TX.cpp" path="P25TX.cpp" type="1"/>
|
||||||
<File name="SerialRB.cpp" path="SerialRB.cpp" type="1"/>
|
<File name="SerialRB.cpp" path="SerialRB.cpp" type="1"/>
|
||||||
<File name="CWIdTX.cpp" path="CWIdTX.cpp" type="1"/>
|
<File name="CWIdTX.cpp" path="CWIdTX.cpp" type="1"/>
|
||||||
|
|
|
@ -77,23 +77,25 @@ const uint8_t MMDVM_DEBUG4 = 0xF4U;
|
||||||
const uint8_t MMDVM_DEBUG5 = 0xF5U;
|
const uint8_t MMDVM_DEBUG5 = 0xF5U;
|
||||||
|
|
||||||
#if EXTERNAL_OSC == 12000000
|
#if EXTERNAL_OSC == 12000000
|
||||||
#define TCXO "12.0000"
|
#define TCXO "12.0000 MHz"
|
||||||
#elif EXTERNAL_OSC == 12288000
|
#elif EXTERNAL_OSC == 12288000
|
||||||
#define TCXO "12.2880"
|
#define TCXO "12.2880 MHz"
|
||||||
#elif EXTERNAL_OSC == 14400000
|
#elif EXTERNAL_OSC == 14400000
|
||||||
#define TCXO "14.4000"
|
#define TCXO "14.4000 MHz"
|
||||||
#elif EXTERNAL_OSC == 19200000
|
#elif EXTERNAL_OSC == 19200000
|
||||||
#define TCXO "19.2000"
|
#define TCXO "19.2000 Mhz"
|
||||||
|
#else
|
||||||
|
#define TCXO "NO TCXO"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DESCRIPTION "MMDVM 20180607 48Khz(D-Star/DMR/System Fusion/P25/NXDN)"
|
#define DESCRIPTION "MMDVM 20180615 48Khz(D-Star/DMR/System Fusion/P25/NXDN)"
|
||||||
|
|
||||||
#if defined(GITVERSION)
|
#if defined(GITVERSION)
|
||||||
#define concat(a, b, c) a " " b "MHz GitID #" c ""
|
#define concat(a, b, c) a " " b " GitID #" c ""
|
||||||
const char HARDWARE[] = concat(DESCRIPTION, TCXO, GITVERSION);
|
const char HARDWARE[] = concat(DESCRIPTION, TCXO, GITVERSION);
|
||||||
#else
|
#else
|
||||||
#define concat(a, b, c, d) a " " b "MHz (Build: " c " " d ")"
|
#define concat(a, b, c, d) a " " b " (Build: " c " " d ")"
|
||||||
const char HARDWARE[] = concat(DESCRIPTION, TCXO, __TIME__, __DATE__);
|
const char HARDWARE[] = concat(DESCRIPTION, TCXO, __TIME__, __DATE__);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const uint8_t PROTOCOL_VERSION = 1U;
|
const uint8_t PROTOCOL_VERSION = 1U;
|
||||||
|
|
Loading…
Reference in New Issue