Cleaning up the PTT logic to make it easier to reason about

This commit is contained in:
Jordan Sherer 2019-05-19 11:17:08 -04:00
parent ae640ed40c
commit 56a2b13615

View File

@ -5302,27 +5302,21 @@ void MainWindow::stopTx()
statusUpdate ();
}
/* Original stopTx2
/**
* stopTx2 is called from stopTx to open the PTT
*/
void MainWindow::stopTx2(){
emitPTT(false);
}
*/
/* GM8JCF
* StopTx2 is called to stop transmission, eg Open PTT
*/
void MainWindow::stopTx2(){
qDebug() << "**** GM8JCF **** MainWindow::stopTx2 m_txFrameCount : " << m_txFrameCount;
// m_txFrameCount is set to the number of frames to be transmitted when the send button is pressed
// GM8JCF: m_txFrameCount is set to the number of frames to be transmitted when the send button is pressed
// and remains at that count until the last frame is transmitted.
// So, we keep the PTT ON so long as m_txFrameCount is non-zero
// If frames to be transmitted has hit zero then open PTT
if (m_txFrameCount == 0){
emitPTT(false);
// If we're holding the PTT and there are more frames to transmit, do not emit the PTT signal
if(m_config.hold_ptt() && m_txFrameCount > 0){
return;
}
// Otherwise, emit the PTT signal
emitPTT(false);
}
void MainWindow::ba2msg(QByteArray ba, char message[]) //ba2msg()
@ -8640,23 +8634,17 @@ void MainWindow::handle_transceiver_update (Transceiver::TransceiverState const&
{
//qDebug () << "MainWindow::handle_transceiver_update:" << s;
Transceiver::TransceiverState old_state {m_rigState};
//transmitDisplay (s.ptt ());
// GM8JCF
// in stopTx2 we maintain PTT if there are still untransmitted JS8 frames
// so we need to remove the check which prevents modulation generation when PTT is closed
// If the check is left inline, then PTT will stay closed, but no modulation will occur
// if PTT is closed. Hence we comment out the test below
//if (s.ptt () && !m_rigState.ptt ()) // safe to start audio
// (caveat - DX Lab Suite Commander)
{
// GM8JCF: in stopTx2 we maintain PTT if there are still untransmitted JS8 frames and we are holding the PTT
// KN4CRD: if we're not holding the PTT we need to check to ensure it's safe to transmit
if (m_config.hold_ptt() || (s.ptt () && !m_rigState.ptt())) // safe to start audio (caveat - DX Lab Suite Commander)
{
if (m_tx_when_ready && g_iptt) // waiting to Tx and still needed
{
{
ptt1Timer.start(1000 * m_config.txDelay ()); //Start-of-transmission sequencer delay
}
}
m_tx_when_ready = false;
}
}
m_rigState = s;
auto old_freqNominal = m_freqNominal;
if (!old_freqNominal)
@ -11682,6 +11670,8 @@ void MainWindow::postWSPRDecode (bool is_new, QStringList parts)
}
void MainWindow::emitPTT(bool on){
qDebug() << "PTT:" << on;
Q_EMIT m_config.transceiver_ptt(on);
// emit to network