Support for controlling RF power level

pull/27/head
Andy CA6JAU 8 years ago
parent 49e9377474
commit 97b4436796

@ -867,6 +867,7 @@ void CIO::printConf()
DEBUG1("MMDVM_HS FW configuration:"); DEBUG1("MMDVM_HS FW configuration:");
DEBUG2I("TX freq (Hz):", TXfreq()); DEBUG2I("TX freq (Hz):", TXfreq());
DEBUG2I("RX freq (Hz):", RXfreq()); DEBUG2I("RX freq (Hz):", RXfreq());
DEBUG2("Power set:", m_power);
DEBUG2("D-Star dev (Hz):", devDSTAR()); DEBUG2("D-Star dev (Hz):", devDSTAR());
DEBUG2("DMR +1 sym dev (Hz):", devDMR()); DEBUG2("DMR +1 sym dev (Hz):", devDMR());
DEBUG2("YSF_H +1 sym dev (Hz):", devYSF_H()); DEBUG2("YSF_H +1 sym dev (Hz):", devYSF_H());

@ -266,17 +266,19 @@ bool CIO::hasRXOverflow()
return m_rxBuffer.hasOverflowed(); return m_rxBuffer.hasOverflowed();
} }
uint8_t CIO::setFreq(uint32_t frequency_rx, uint32_t frequency_tx) uint8_t CIO::setFreq(uint32_t frequency_rx, uint32_t frequency_tx, uint8_t rf_power)
{ {
// power level // Configure power level
m_power = 0xFF; m_power = rf_power;
// Check frequency ranges
if( !( ((frequency_rx >= VHF1_MIN)&&(frequency_rx < VHF1_MAX)) || ((frequency_tx >= VHF1_MIN)&&(frequency_tx < VHF1_MAX)) || \ if( !( ((frequency_rx >= VHF1_MIN)&&(frequency_rx < VHF1_MAX)) || ((frequency_tx >= VHF1_MIN)&&(frequency_tx < VHF1_MAX)) || \
((frequency_rx >= UHF1_MIN)&&(frequency_rx < UHF1_MAX)) || ((frequency_tx >= UHF1_MIN)&&(frequency_tx < UHF1_MAX)) || \ ((frequency_rx >= UHF1_MIN)&&(frequency_rx < UHF1_MAX)) || ((frequency_tx >= UHF1_MIN)&&(frequency_tx < UHF1_MAX)) || \
((frequency_rx >= VHF2_MIN)&&(frequency_rx < VHF2_MAX)) || ((frequency_tx >= VHF2_MIN)&&(frequency_tx < VHF2_MAX)) || \ ((frequency_rx >= VHF2_MIN)&&(frequency_rx < VHF2_MAX)) || ((frequency_tx >= VHF2_MIN)&&(frequency_tx < VHF2_MAX)) || \
((frequency_rx >= UHF2_MIN)&&(frequency_rx < UHF2_MAX)) || ((frequency_tx >= UHF2_MIN)&&(frequency_tx < UHF2_MAX)) ) ) ((frequency_rx >= UHF2_MIN)&&(frequency_rx < UHF2_MAX)) || ((frequency_tx >= UHF2_MIN)&&(frequency_tx < UHF2_MAX)) ) )
return 4U; return 4U;
// Configure frequency
m_frequency_rx = frequency_rx; m_frequency_rx = frequency_rx;
m_frequency_tx = frequency_tx; m_frequency_tx = frequency_tx;

@ -91,7 +91,7 @@ public:
void process(void); void process(void);
bool hasTXOverflow(void); bool hasTXOverflow(void);
bool hasRXOverflow(void); bool hasRXOverflow(void);
uint8_t setFreq(uint32_t frequency_rx, uint32_t frequency_tx); uint8_t setFreq(uint32_t frequency_rx, uint32_t frequency_tx, uint8_t rf_power);
void setMode(MMDVM_STATE modemState); void setMode(MMDVM_STATE modemState);
void setDecode(bool dcd); void setDecode(bool dcd);
void setLoDevYSF(bool ysfLoDev); void setLoDevYSF(bool ysfLoDev);

@ -298,10 +298,19 @@ uint8_t CSerialPort::setMode(const uint8_t* data, uint8_t length)
uint8_t CSerialPort::setFreq(const uint8_t* data, uint8_t length) uint8_t CSerialPort::setFreq(const uint8_t* data, uint8_t length)
{ {
uint32_t freq_rx, freq_tx; uint32_t freq_rx, freq_tx;
uint8_t rf_power;
if (length < 9U) if (length < 9U)
return 4U; return 4U;
// Old MMDVMHost, set full power
if (length == 9U)
rf_power = 255U;
// New MMDVMHost, set power from MMDVM.ini
if (length == 10U)
rf_power = data[9];
freq_rx = data[1] * 1; freq_rx = data[1] * 1;
freq_rx += data[2] * 256; freq_rx += data[2] * 256;
freq_rx += data[3] * 65536; freq_rx += data[3] * 65536;
@ -312,7 +321,7 @@ uint8_t CSerialPort::setFreq(const uint8_t* data, uint8_t length)
freq_tx += data[7] * 65536; freq_tx += data[7] * 65536;
freq_tx += data[8] * 16777216; freq_tx += data[8] * 16777216;
return io.setFreq(freq_rx, freq_tx); return io.setFreq(freq_rx, freq_tx, rf_power);
} }
void CSerialPort::setMode(MMDVM_STATE modemState) void CSerialPort::setMode(MMDVM_STATE modemState)

Loading…
Cancel
Save

Powered by TurnKey Linux.