From f014e8825de8faefc325ee0bc7739a5f314b7be2 Mon Sep 17 00:00:00 2001 From: Richard Harrison <rjh@zaretto.com> Date: Wed, 27 Mar 2019 00:28:20 +0100 Subject: [PATCH] FGComm: added listener for comm volume Without this listen volume only changed on comm retune / PTT release --- src/Network/fgcom.cxx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Network/fgcom.cxx b/src/Network/fgcom.cxx index 4bf30c2cb..40f24e458 100644 --- a/src/Network/fgcom.cxx +++ b/src/Network/fgcom.cxx @@ -359,6 +359,8 @@ void FGCom::setupCommFrequency(int channel) { SGPropertyNode *commRadioNode = fgGetNode("/instrumentation/")->getChild("comm", channel, false); if (commRadioNode) { SGPropertyNode *frequencyNode = commRadioNode->getChild("frequencies"); + if (_commVolumeNode) + _commVolumeNode->removeChangeListener(this); _commVolumeNode = commRadioNode->getChild("volume"); if (frequencyNode) { frequencyNode = frequencyNode->getChild("selected-mhz"); @@ -368,6 +370,7 @@ void FGCom::setupCommFrequency(int channel) { _commFrequencyNode->removeChangeListener(this); _commFrequencyNode = frequencyNode; _commFrequencyNode->addChangeListener(this); + _commVolumeNode->addChangeListener(this); } _currentCommFrequency = frequencyNode->getDoubleValue(); return; @@ -493,6 +496,18 @@ void FGCom::valueChanged(SGPropertyNode *prop) return; } + if (prop == _commVolumeNode && _enabled) { + if (_ptt_node->getIntValue()) { + SG_LOG(SG_IO, SG_INFO, "FGCom: ignoring change comm volume as PTT pressed"); + } + else + { + iaxc_input_level_set(0.0); + iaxc_output_level_set(getCurrentCommVolume()); + SG_LOG(SG_IO, SG_INFO, "FGCom: change comm volume=" << _commVolumeNode->getFloatValue()); + } + } + if (prop == _selected_comm_node && _enabled) { setupCommFrequency(); SG_LOG(SG_IO, SG_INFO, "FGCom: change comm frequency (selected node): set to " << _currentCommFrequency); @@ -516,7 +531,7 @@ void FGCom::valueChanged(SGPropertyNode *prop) else { iaxc_output_level_set(getCurrentCommVolume()); iaxc_input_level_set(0.0); - SG_LOG(SG_IO, SG_INFO, "FGCom: PTT release: " << _currentCallFrequency); + SG_LOG(SG_IO, SG_INFO, "FGCom: PTT release: " << _currentCallFrequency << " vol=" << getCurrentCommVolume()); _mpTransmitFrequencyNode->setValue(0); _mpTransmitPowerNode->setValue(0); }