mirror of
https://github.com/g4klx/MMDVM_HS.git
synced 2026-01-25 01:40:16 +01:00
Add support for separated POCSAG frequency
This commit is contained in:
parent
d4dec3d76d
commit
707157a777
20
ADF7021.cpp
20
ADF7021.cpp
|
|
@ -187,9 +187,19 @@ void CIO::ifConf(MMDVM_STATE modemState, bool reset)
|
|||
uint32_t ADF7021_REG13 = 0U;
|
||||
int32_t AFC_OFFSET = 0;
|
||||
|
||||
if(modemState != STATE_CWID && modemState != STATE_POCSAG)
|
||||
uint32_t frequency_tx_tmp, frequency_rx_tmp;
|
||||
|
||||
if (modemState != STATE_CWID && modemState != STATE_POCSAG)
|
||||
m_modemState_prev = modemState;
|
||||
|
||||
// Change frequency for POCSAG mode, store a backup of DV frequencies
|
||||
if (modemState == STATE_POCSAG) {
|
||||
frequency_tx_tmp = m_frequency_tx;
|
||||
frequency_rx_tmp = m_frequency_rx;
|
||||
m_frequency_tx = m_pocsag_freq_tx;
|
||||
m_frequency_rx = m_pocsag_freq_tx;
|
||||
}
|
||||
|
||||
// Toggle CE pin for ADF7021 reset
|
||||
if(reset) {
|
||||
CE_pin(LOW);
|
||||
|
|
@ -545,7 +555,13 @@ void CIO::ifConf(MMDVM_STATE modemState, bool reset)
|
|||
AD7021_control_word = 0x000E000F;
|
||||
#endif
|
||||
Send_AD7021_control();
|
||||
|
||||
|
||||
// Restore normal DV frequencies
|
||||
if (modemState == STATE_POCSAG) {
|
||||
m_frequency_tx = frequency_tx_tmp;
|
||||
m_frequency_rx = frequency_rx_tmp;
|
||||
}
|
||||
|
||||
#if defined(DUPLEX)
|
||||
if(m_duplex && (modemState != STATE_CWID && modemState != STATE_POCSAG))
|
||||
ifConf2(modemState);
|
||||
|
|
|
|||
10
IO.cpp
10
IO.cpp
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
uint32_t m_frequency_rx;
|
||||
uint32_t m_frequency_tx;
|
||||
uint32_t m_pocsag_freq_tx;
|
||||
uint8_t m_power;
|
||||
|
||||
CIO::CIO():
|
||||
|
|
@ -288,7 +289,7 @@ bool CIO::hasRXOverflow()
|
|||
return m_rxBuffer.hasOverflowed();
|
||||
}
|
||||
|
||||
uint8_t CIO::setFreq(uint32_t frequency_rx, uint32_t frequency_tx, uint8_t rf_power)
|
||||
uint8_t CIO::setFreq(uint32_t frequency_rx, uint32_t frequency_tx, uint8_t rf_power, uint32_t pocsag_freq_tx)
|
||||
{
|
||||
// Configure power level
|
||||
setPower(rf_power);
|
||||
|
|
@ -300,9 +301,16 @@ uint8_t CIO::setFreq(uint32_t frequency_rx, uint32_t frequency_tx, uint8_t rf_po
|
|||
((frequency_rx >= UHF2_MIN)&&(frequency_rx < UHF2_MAX)) || ((frequency_tx >= UHF2_MIN)&&(frequency_tx < UHF2_MAX)) ) )
|
||||
return 4U;
|
||||
|
||||
if( !( ((pocsag_freq_tx >= VHF1_MIN)&&(pocsag_freq_tx < VHF1_MAX)) || \
|
||||
((pocsag_freq_tx >= UHF1_MIN)&&(pocsag_freq_tx < UHF1_MAX)) || \
|
||||
((pocsag_freq_tx >= VHF2_MIN)&&(pocsag_freq_tx < VHF2_MAX)) || \
|
||||
((pocsag_freq_tx >= UHF2_MIN)&&(pocsag_freq_tx < UHF2_MAX)) ) )
|
||||
return 4U;
|
||||
|
||||
// Configure frequency
|
||||
m_frequency_rx = frequency_rx;
|
||||
m_frequency_tx = frequency_tx;
|
||||
m_pocsag_freq_tx = pocsag_freq_tx;
|
||||
|
||||
return 0U;
|
||||
}
|
||||
|
|
|
|||
3
IO.h
3
IO.h
|
|
@ -42,6 +42,7 @@
|
|||
|
||||
extern uint32_t m_frequency_rx;
|
||||
extern uint32_t m_frequency_tx;
|
||||
extern uint32_t m_pocsag_freq_tx;
|
||||
extern uint8_t m_power;
|
||||
|
||||
class CIO {
|
||||
|
|
@ -93,7 +94,7 @@ public:
|
|||
void process(void);
|
||||
bool hasTXOverflow(void);
|
||||
bool hasRXOverflow(void);
|
||||
uint8_t setFreq(uint32_t frequency_rx, uint32_t frequency_tx, uint8_t rf_power);
|
||||
uint8_t setFreq(uint32_t frequency_rx, uint32_t frequency_tx, uint8_t rf_power, uint32_t pocsag_freq_tx);
|
||||
void setPower(uint8_t power);
|
||||
void setMode(MMDVM_STATE modemState);
|
||||
void setDecode(bool dcd);
|
||||
|
|
|
|||
|
|
@ -388,31 +388,41 @@ uint8_t CSerialPort::setMode(const uint8_t* data, uint8_t length)
|
|||
|
||||
uint8_t CSerialPort::setFreq(const uint8_t* data, uint8_t length)
|
||||
{
|
||||
uint32_t freq_rx, freq_tx;
|
||||
uint8_t rf_power;
|
||||
uint32_t freq_rx, freq_tx, pocsag_freq_tx;
|
||||
uint8_t rf_power;
|
||||
|
||||
if (length < 9U)
|
||||
return 4U;
|
||||
if (length < 9U)
|
||||
return 4U;
|
||||
|
||||
// Old MMDVMHost, set full power
|
||||
if (length == 9U)
|
||||
rf_power = 255U;
|
||||
// Very old MMDVMHost, set full power
|
||||
if (length == 9U)
|
||||
rf_power = 255U;
|
||||
|
||||
// New MMDVMHost, set power from MMDVM.ini
|
||||
if (length == 10U)
|
||||
rf_power = data[9U];
|
||||
// Current MMDVMHost, set power from MMDVM.ini
|
||||
if (length >= 10U)
|
||||
rf_power = data[9U];
|
||||
|
||||
freq_rx = data[1U] * 1U;
|
||||
freq_rx += data[2U] * 256U;
|
||||
freq_rx += data[3U] * 65536U;
|
||||
freq_rx += data[4U] * 16777216U;
|
||||
|
||||
freq_tx = data[5U] * 1U;
|
||||
freq_tx += data[6U] * 256U;
|
||||
freq_tx += data[7U] * 65536U;
|
||||
freq_tx += data[8U] * 16777216U;
|
||||
|
||||
return io.setFreq(freq_rx, freq_tx, rf_power);
|
||||
freq_rx = data[1U] << 0;
|
||||
freq_rx |= data[2U] << 8;
|
||||
freq_rx |= data[3U] << 16;
|
||||
freq_rx |= data[4U] << 24;
|
||||
|
||||
freq_tx = data[5U] << 0;
|
||||
freq_tx |= data[6U] << 8;
|
||||
freq_tx |= data[7U] << 16;
|
||||
freq_tx |= data[8U] << 24;
|
||||
|
||||
// New MMDVMHost, set POCSAG TX frequency
|
||||
if (length >= 14U) {
|
||||
pocsag_freq_tx = data[10U] << 0;
|
||||
pocsag_freq_tx |= data[11U] << 8;
|
||||
pocsag_freq_tx |= data[12U] << 16;
|
||||
pocsag_freq_tx |= data[13U] << 24;
|
||||
}
|
||||
else
|
||||
pocsag_freq_tx = freq_tx;
|
||||
|
||||
return io.setFreq(freq_rx, freq_tx, rf_power, pocsag_freq_tx);
|
||||
}
|
||||
|
||||
void CSerialPort::setMode(MMDVM_STATE modemState)
|
||||
|
|
|
|||
Loading…
Reference in a new issue