kopia lustrzana https://github.com/sh123/esp32_loraprs
Improve half duplex operation
rodzic
e3196d4736
commit
9349cd9fc1
|
@ -80,7 +80,7 @@ private:
|
||||||
return !config_.IsClientMode // beaconing only in apris gate / server mode
|
return !config_.IsClientMode // beaconing only in apris gate / server mode
|
||||||
&& config_.EnableBeacon; // beacon must be explicitly enabled
|
&& config_.EnableBeacon; // beacon must be explicitly enabled
|
||||||
}
|
}
|
||||||
inline bool splitEnabled() const {
|
inline bool isHalfDuplex() const {
|
||||||
return config_.LoraFreqRx != config_.LoraFreqTx;
|
return config_.LoraFreqRx != config_.LoraFreqTx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -364,6 +364,14 @@ void Service::onRigTaskRxPacket() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Service::onRigTaskTxPacket() {
|
void Service::onRigTaskTxPacket() {
|
||||||
|
rigIsRxIsrEnabled_ = false;
|
||||||
|
if (isHalfDuplex()) {
|
||||||
|
setFreq(config_.LoraFreqTx);
|
||||||
|
}
|
||||||
|
if (config_.PttEnable) {
|
||||||
|
digitalWrite(config_.PttPin, HIGH);
|
||||||
|
delay(config_.PttTxDelayMs);
|
||||||
|
}
|
||||||
while (rigTxQueueIndex_.size() > 0) {
|
while (rigTxQueueIndex_.size() > 0) {
|
||||||
int txPacketSize = rigTxQueueIndex_.shift();
|
int txPacketSize = rigTxQueueIndex_.shift();
|
||||||
LOG_TRACE("onRigTaskTxPacket", txPacketSize);
|
LOG_TRACE("onRigTaskTxPacket", txPacketSize);
|
||||||
|
@ -373,25 +381,24 @@ void Service::onRigTaskTxPacket() {
|
||||||
txBuf[i] = rigTxQueue_.shift();
|
txBuf[i] = rigTxQueue_.shift();
|
||||||
}
|
}
|
||||||
|
|
||||||
rigIsRxIsrEnabled_ = false;
|
|
||||||
int state = rig_->transmit(txBuf, txPacketSize);
|
int state = rig_->transmit(txBuf, txPacketSize);
|
||||||
if (state != RADIOLIB_ERR_NONE) {
|
if (state != RADIOLIB_ERR_NONE) {
|
||||||
LOG_ERROR("TX error: ", state);
|
LOG_ERROR("TX error: ", state);
|
||||||
}
|
}
|
||||||
vTaskDelay(1);
|
vTaskDelay(1);
|
||||||
}
|
}
|
||||||
|
if (config_.PttEnable) {
|
||||||
|
delay(config_.PttTxTailMs);
|
||||||
|
digitalWrite(config_.PttPin, LOW);
|
||||||
|
}
|
||||||
|
if (isHalfDuplex()) {
|
||||||
|
setFreq(config_.LoraFreqRx);
|
||||||
|
}
|
||||||
int state = rig_->startReceive();
|
int state = rig_->startReceive();
|
||||||
if (state != RADIOLIB_ERR_NONE) {
|
if (state != RADIOLIB_ERR_NONE) {
|
||||||
LOG_ERROR("Start receive error: ", state);
|
LOG_ERROR("Start receive error: ", state);
|
||||||
}
|
}
|
||||||
rigIsRxIsrEnabled_ = true;
|
rigIsRxIsrEnabled_ = true;
|
||||||
if (config_.PttEnable) {
|
|
||||||
delay(config_.PttTxTailMs);
|
|
||||||
digitalWrite(config_.PttPin, LOW);
|
|
||||||
}
|
|
||||||
if (splitEnabled()) {
|
|
||||||
setFreq(config_.LoraFreqRx);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Service::sendPeriodicBeacon()
|
void Service::sendPeriodicBeacon()
|
||||||
|
@ -595,13 +602,6 @@ bool Service::onRigTxBegin()
|
||||||
{
|
{
|
||||||
LOG_TRACE("onRigTxBegin");
|
LOG_TRACE("onRigTxBegin");
|
||||||
rigCurrentTxPacketSize_ = 0;
|
rigCurrentTxPacketSize_ = 0;
|
||||||
if (splitEnabled()) {
|
|
||||||
setFreq(config_.LoraFreqTx);
|
|
||||||
}
|
|
||||||
if (config_.PttEnable) {
|
|
||||||
digitalWrite(config_.PttPin, HIGH);
|
|
||||||
delay(config_.PttTxDelayMs);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -616,8 +616,7 @@ void Service::onRigTxEnd()
|
||||||
{
|
{
|
||||||
LOG_TRACE("onRigTxEnd", rigCurrentTxPacketSize_);
|
LOG_TRACE("onRigTxEnd", rigCurrentTxPacketSize_);
|
||||||
rigTxQueueIndex_.push(rigCurrentTxPacketSize_);
|
rigTxQueueIndex_.push(rigCurrentTxPacketSize_);
|
||||||
uint32_t radioTransmitBit = RadioTaskBits::Transmit;
|
xTaskNotify(rigTaskHandle_, RadioTaskBits::Transmit, eSetBits);
|
||||||
xTaskNotify(rigTaskHandle_, radioTransmitBit, eSetBits);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Service::attachKissNetworkClient()
|
void Service::attachKissNetworkClient()
|
||||||
|
|
Ładowanie…
Reference in New Issue