diff --git a/ADF7021.cpp b/ADF7021.cpp index 3bd478e..647c4a4 100644 --- a/ADF7021.cpp +++ b/ADF7021.cpp @@ -867,6 +867,7 @@ void CIO::printConf() DEBUG1("MMDVM_HS FW configuration:"); DEBUG2I("TX freq (Hz):", TXfreq()); DEBUG2I("RX freq (Hz):", RXfreq()); + DEBUG2("Power set:", m_power); DEBUG2("D-Star dev (Hz):", devDSTAR()); DEBUG2("DMR +1 sym dev (Hz):", devDMR()); DEBUG2("YSF_H +1 sym dev (Hz):", devYSF_H()); diff --git a/IO.cpp b/IO.cpp index 4584f59..c04b7bc 100644 --- a/IO.cpp +++ b/IO.cpp @@ -266,17 +266,19 @@ bool CIO::hasRXOverflow() 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 - m_power = 0xFF; + // Configure power level + m_power = rf_power; + // Check frequency ranges 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 >= 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)) ) ) return 4U; + // Configure frequency m_frequency_rx = frequency_rx; m_frequency_tx = frequency_tx; diff --git a/IO.h b/IO.h index 69ce3a5..e366c36 100644 --- a/IO.h +++ b/IO.h @@ -91,7 +91,7 @@ public: void process(void); bool hasTXOverflow(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 setDecode(bool dcd); void setLoDevYSF(bool ysfLoDev); diff --git a/SerialPort.cpp b/SerialPort.cpp index e6edfcf..2c87a49 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -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) { uint32_t freq_rx, freq_tx; + uint8_t rf_power; if (length < 9U) 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[2] * 256; 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[8] * 16777216; - return io.setFreq(freq_rx, freq_tx); + return io.setFreq(freq_rx, freq_tx, rf_power); } void CSerialPort::setMode(MMDVM_STATE modemState)