mirror of
https://github.com/g4klx/MMDVM_HS.git
synced 2026-01-07 09:09:56 +01:00
Adding mode detection, using scanning mode
This commit is contained in:
parent
7908b0f958
commit
992249dce4
|
|
@ -144,6 +144,8 @@ void CIO::ifConf(MMDVM_STATE modemState, bool reset)
|
|||
uint32_t ADF7021_REG13 = 0;
|
||||
uint32_t AFC_OFFSET = 0;
|
||||
|
||||
m_modemState_prev = modemState;
|
||||
|
||||
// Toggle CE pin for ADF7021 reset
|
||||
if(reset) {
|
||||
CE_pin(LOW);
|
||||
|
|
@ -381,8 +383,7 @@ void CIO::ifConf(MMDVM_STATE modemState, bool reset)
|
|||
// 3FSK/4FSK DEMOD (13)
|
||||
AD7021_control_word = ADF7021_REG13;
|
||||
Send_AD7021_control();
|
||||
|
||||
m_modemState_prev = modemState;
|
||||
|
||||
}
|
||||
|
||||
//======================================================================================================================
|
||||
|
|
|
|||
3
Config.h
3
Config.h
|
|
@ -55,6 +55,9 @@
|
|||
// #define STM32_USART1_HOST
|
||||
#define STM32_USB_HOST
|
||||
|
||||
// Enable mode detection
|
||||
#define ENABLE_SCAN_MODE
|
||||
|
||||
// Send RSSI value:
|
||||
// #define SEND_RSSI_DATA
|
||||
|
||||
|
|
|
|||
90
IO.cpp
90
IO.cpp
|
|
@ -33,13 +33,17 @@ CIO::CIO():
|
|||
m_started(false),
|
||||
m_rxBuffer(RX_RINGBUFFER_SIZE),
|
||||
m_txBuffer(TX_RINGBUFFER_SIZE),
|
||||
m_LoDevYSF(false),
|
||||
m_ledCount(0U),
|
||||
m_scanEnable(false),
|
||||
m_modeTimerCnt(0U),
|
||||
m_scanPauseCnt(0U),
|
||||
m_scanPos(0U),
|
||||
m_ledValue(true),
|
||||
m_watchdog(0U),
|
||||
m_LoDevYSF(false)
|
||||
m_watchdog(0U)
|
||||
{
|
||||
Init();
|
||||
|
||||
|
||||
CE_pin(HIGH);
|
||||
LED_pin(HIGH);
|
||||
PTT_pin(LOW);
|
||||
|
|
@ -62,6 +66,7 @@ m_LoDevYSF(false)
|
|||
void CIO::process()
|
||||
{
|
||||
uint8_t bit;
|
||||
uint32_t scantime;
|
||||
|
||||
m_ledCount++;
|
||||
|
||||
|
|
@ -70,7 +75,7 @@ void CIO::process()
|
|||
if (m_watchdog >= 19200U) {
|
||||
if (m_modemState == STATE_DSTAR || m_modemState == STATE_DMR || m_modemState == STATE_YSF || m_modemState == STATE_P25) {
|
||||
m_modemState = STATE_IDLE;
|
||||
setMode();
|
||||
setMode(m_modemState);
|
||||
}
|
||||
|
||||
m_watchdog = 0U;
|
||||
|
|
@ -95,6 +100,26 @@ void CIO::process()
|
|||
setRX();
|
||||
m_tx = false;
|
||||
}
|
||||
|
||||
if(m_modemState_prev == STATE_DSTAR)
|
||||
scantime = SCAN_TIME;
|
||||
else if(m_modemState_prev == STATE_DMR)
|
||||
scantime = SCAN_TIME*2;
|
||||
else if(m_modemState_prev == STATE_YSF)
|
||||
scantime = SCAN_TIME;
|
||||
else if(m_modemState_prev == STATE_P25)
|
||||
scantime = SCAN_TIME;
|
||||
else
|
||||
scantime = SCAN_TIME;
|
||||
|
||||
if(m_modeTimerCnt >= scantime) {
|
||||
m_modeTimerCnt = 0;
|
||||
if( (m_modemState == STATE_IDLE) && (m_scanPauseCnt == 0) && m_scanEnable) {
|
||||
m_scanPos = (m_scanPos + 1) % m_TotalModes;
|
||||
setMode(m_Modes[m_scanPos]);
|
||||
io.ifConf(m_Modes[m_scanPos], true);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_rxBuffer.getData() >= 1U) {
|
||||
m_rxBuffer.get(bit);
|
||||
|
|
@ -152,18 +177,56 @@ void CIO::interrupt()
|
|||
}
|
||||
|
||||
m_watchdog++;
|
||||
m_modeTimerCnt++;
|
||||
|
||||
if(m_scanPauseCnt >= SCAN_PAUSE)
|
||||
m_scanPauseCnt = 0;
|
||||
|
||||
if(m_scanPauseCnt != 0)
|
||||
m_scanPauseCnt++;
|
||||
|
||||
}
|
||||
|
||||
void CIO::start()
|
||||
{
|
||||
m_TotalModes = 0;
|
||||
|
||||
if(m_dstarEnable) {
|
||||
m_Modes[m_TotalModes] = STATE_DSTAR;
|
||||
m_TotalModes++;
|
||||
}
|
||||
if(m_dmrEnable) {
|
||||
m_Modes[m_TotalModes] = STATE_DMR;
|
||||
m_TotalModes++;
|
||||
}
|
||||
if(m_ysfEnable) {
|
||||
m_Modes[m_TotalModes] = STATE_YSF;
|
||||
m_TotalModes++;
|
||||
}
|
||||
if(m_p25Enable) {
|
||||
m_Modes[m_TotalModes] = STATE_P25;
|
||||
m_TotalModes++;
|
||||
}
|
||||
|
||||
#if defined(ENABLE_SCAN_MODE)
|
||||
if(m_TotalModes > 1)
|
||||
m_scanEnable = true;
|
||||
else {
|
||||
m_scanEnable = false;
|
||||
setMode(m_modemState);
|
||||
}
|
||||
#else
|
||||
m_scanEnable = false;
|
||||
setMode(m_modemState);
|
||||
#endif
|
||||
|
||||
if (m_started)
|
||||
return;
|
||||
|
||||
|
||||
startInt();
|
||||
|
||||
m_started = true;
|
||||
|
||||
setMode();
|
||||
}
|
||||
|
||||
void CIO::write(uint8_t* data, uint16_t length)
|
||||
|
|
@ -214,18 +277,20 @@ uint8_t CIO::setFreq(uint32_t frequency_rx, uint32_t frequency_tx)
|
|||
return 0U;
|
||||
}
|
||||
|
||||
void CIO::setMode()
|
||||
void CIO::setMode(MMDVM_STATE modemState)
|
||||
{
|
||||
DSTAR_pin(m_modemState == STATE_DSTAR);
|
||||
DMR_pin(m_modemState == STATE_DMR);
|
||||
YSF_pin(m_modemState == STATE_YSF);
|
||||
P25_pin(m_modemState == STATE_P25);
|
||||
DSTAR_pin(modemState == STATE_DSTAR);
|
||||
DMR_pin(modemState == STATE_DMR);
|
||||
YSF_pin(modemState == STATE_YSF);
|
||||
P25_pin(modemState == STATE_P25);
|
||||
}
|
||||
|
||||
void CIO::setDecode(bool dcd)
|
||||
{
|
||||
if (dcd != m_dcd)
|
||||
if (dcd != m_dcd) {
|
||||
m_scanPauseCnt = 1;
|
||||
COS_pin(dcd ? true : false);
|
||||
}
|
||||
|
||||
m_dcd = dcd;
|
||||
}
|
||||
|
|
@ -234,3 +299,4 @@ void CIO::resetWatchdog()
|
|||
{
|
||||
m_watchdog = 0U;
|
||||
}
|
||||
|
||||
|
|
|
|||
25
IO.h
25
IO.h
|
|
@ -35,6 +35,9 @@
|
|||
#define UHF2_MIN 842000000
|
||||
#define UHF2_MAX 950000000
|
||||
|
||||
#define SCAN_TIME 960
|
||||
#define SCAN_PAUSE 10000
|
||||
|
||||
extern uint32_t m_frequency_rx;
|
||||
extern uint32_t m_frequency_tx;
|
||||
extern uint8_t m_power;
|
||||
|
|
@ -80,7 +83,7 @@ public:
|
|||
bool hasTXOverflow(void);
|
||||
bool hasRXOverflow(void);
|
||||
uint8_t setFreq(uint32_t frequency_rx, uint32_t frequency_tx);
|
||||
void setMode(void);
|
||||
void setMode(MMDVM_STATE modemState);
|
||||
void setDecode(bool dcd);
|
||||
void setLoDevYSF(bool ysfLoDev);
|
||||
|
||||
|
|
@ -100,14 +103,20 @@ public:
|
|||
void delay_rx(void);
|
||||
|
||||
private:
|
||||
bool m_started;
|
||||
CBitRB m_rxBuffer;
|
||||
CBitRB m_txBuffer;
|
||||
bool m_LoDevYSF;
|
||||
|
||||
uint32_t m_ledCount;
|
||||
bool m_ledValue;
|
||||
volatile uint32_t m_watchdog;
|
||||
bool m_started;
|
||||
CBitRB m_rxBuffer;
|
||||
CBitRB m_txBuffer;
|
||||
bool m_LoDevYSF;
|
||||
uint32_t m_ledCount;
|
||||
bool m_scanEnable;
|
||||
uint32_t m_modeTimerCnt;
|
||||
uint32_t m_scanPauseCnt;
|
||||
uint8_t m_scanPos;
|
||||
uint8_t m_TotalModes;
|
||||
MMDVM_STATE m_Modes[4];
|
||||
bool m_ledValue;
|
||||
volatile uint32_t m_watchdog;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -339,7 +339,7 @@ void CSerialPort::setMode(MMDVM_STATE modemState)
|
|||
io.ifConf(modemState, true);
|
||||
}
|
||||
|
||||
io.setMode();
|
||||
io.setMode(m_modemState);
|
||||
}
|
||||
|
||||
void CSerialPort::start()
|
||||
|
|
|
|||
Loading…
Reference in a new issue