From 9349cd9fc1c0900ba1fc417b4657a3dbfaccd62c Mon Sep 17 00:00:00 2001 From: sh123 Date: Thu, 22 Dec 2022 15:14:37 +0200 Subject: [PATCH] Improve half duplex operation --- include/loraprs_service.h | 2 +- src/loraprs_service.cpp | 33 ++++++++++++++++----------------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/include/loraprs_service.h b/include/loraprs_service.h index ef903e4..1463e36 100644 --- a/include/loraprs_service.h +++ b/include/loraprs_service.h @@ -80,7 +80,7 @@ private: return !config_.IsClientMode // beaconing only in apris gate / server mode && config_.EnableBeacon; // beacon must be explicitly enabled } - inline bool splitEnabled() const { + inline bool isHalfDuplex() const { return config_.LoraFreqRx != config_.LoraFreqTx; } diff --git a/src/loraprs_service.cpp b/src/loraprs_service.cpp index beb1a3c..f8c6c56 100644 --- a/src/loraprs_service.cpp +++ b/src/loraprs_service.cpp @@ -364,6 +364,14 @@ void Service::onRigTaskRxPacket() { } void Service::onRigTaskTxPacket() { + rigIsRxIsrEnabled_ = false; + if (isHalfDuplex()) { + setFreq(config_.LoraFreqTx); + } + if (config_.PttEnable) { + digitalWrite(config_.PttPin, HIGH); + delay(config_.PttTxDelayMs); + } while (rigTxQueueIndex_.size() > 0) { int txPacketSize = rigTxQueueIndex_.shift(); LOG_TRACE("onRigTaskTxPacket", txPacketSize); @@ -373,25 +381,24 @@ void Service::onRigTaskTxPacket() { txBuf[i] = rigTxQueue_.shift(); } - rigIsRxIsrEnabled_ = false; int state = rig_->transmit(txBuf, txPacketSize); if (state != RADIOLIB_ERR_NONE) { LOG_ERROR("TX error: ", state); } vTaskDelay(1); } + if (config_.PttEnable) { + delay(config_.PttTxTailMs); + digitalWrite(config_.PttPin, LOW); + } + if (isHalfDuplex()) { + setFreq(config_.LoraFreqRx); + } int state = rig_->startReceive(); if (state != RADIOLIB_ERR_NONE) { LOG_ERROR("Start receive error: ", state); } rigIsRxIsrEnabled_ = true; - if (config_.PttEnable) { - delay(config_.PttTxTailMs); - digitalWrite(config_.PttPin, LOW); - } - if (splitEnabled()) { - setFreq(config_.LoraFreqRx); - } } void Service::sendPeriodicBeacon() @@ -595,13 +602,6 @@ bool Service::onRigTxBegin() { LOG_TRACE("onRigTxBegin"); rigCurrentTxPacketSize_ = 0; - if (splitEnabled()) { - setFreq(config_.LoraFreqTx); - } - if (config_.PttEnable) { - digitalWrite(config_.PttPin, HIGH); - delay(config_.PttTxDelayMs); - } return true; } @@ -616,8 +616,7 @@ void Service::onRigTxEnd() { LOG_TRACE("onRigTxEnd", rigCurrentTxPacketSize_); rigTxQueueIndex_.push(rigCurrentTxPacketSize_); - uint32_t radioTransmitBit = RadioTaskBits::Transmit; - xTaskNotify(rigTaskHandle_, radioTransmitBit, eSetBits); + xTaskNotify(rigTaskHandle_, RadioTaskBits::Transmit, eSetBits); } void Service::attachKissNetworkClient()