From fc0ad84b4bcf6181081885dc483939152f064d3d Mon Sep 17 00:00:00 2001 From: sh123 Date: Wed, 26 May 2021 19:11:33 +0300 Subject: [PATCH] Add experimental external PTT control --- config.h | 5 +++++ esp32_loraprs.ino | 6 ++++++ kiss_processor.h | 2 ++ loraprs_config.h | 6 ++++++ loraprs_service.cpp | 28 ++++++++++++++++++++++++++-- 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/config.h b/config.h index 9445f71..5580f4e 100644 --- a/config.h +++ b/config.h @@ -47,3 +47,8 @@ #define CFG_IS_TO_RF false #define CFG_BEACON false #define CFG_KISS_EXTENSIONS false + +#define CFG_PTT_ENABLE false +#define CFG_PTT_PIN 12 +#define CFG_PTT_TX_DELAY_MS 50 +#define CFG_PTT_TX_TAIL_MS 10 diff --git a/esp32_loraprs.ino b/esp32_loraprs.ino index 7c5c289..0342868 100644 --- a/esp32_loraprs.ino +++ b/esp32_loraprs.ino @@ -64,6 +64,12 @@ void initializeConfig(LoraPrs::Config &cfg) { cfg.EnableRepeater = CFG_DIGIREPEAT; // digirepeat incoming packets cfg.EnableBeacon = CFG_BEACON; // enable periodic AprsRawBeacon beacon to rf and aprsis if rf to aprsis is enabled cfg.EnableKissExtensions = CFG_KISS_EXTENSIONS; // radio control and signal reports + + // external ptt control + cfg.PttEnable = CFG_PTT_ENABLE; + cfg.PttPin = CFG_PTT_PIN; + cfg.PttTxDelayMs = CFG_PTT_TX_DELAY_MS; + cfg.PttTxTailMs = CFG_PTT_TX_TAIL_MS; } LoraPrs::Service loraPrsService; diff --git a/kiss_processor.h b/kiss_processor.h index de99ff4..cb90619 100644 --- a/kiss_processor.h +++ b/kiss_processor.h @@ -31,8 +31,10 @@ protected: enum Cmd { Data = 0x00, + TxDelay = 0x01, P = 0x02, SlotTime = 0x03, + TxTail = 0x04, SetHardware = 0x06, SignalReport = 0x07, NoCmd = 0x80 diff --git a/loraprs_config.h b/loraprs_config.h index d575011..bff3aba 100644 --- a/loraprs_config.h +++ b/loraprs_config.h @@ -54,6 +54,12 @@ struct Config bool EnableIsToRf; // true - enable APRS-IS to RF submission bool EnableRepeater; // true - digirepeat incoming packets based on WIDEn-n paths bool EnableBeacon; // true - send AprsRawBeacon to RF and APRS-IS if EnableRfToIs is true + + // external ptt tx control + bool PttEnable; // true - enable external ptt control + int PttPin; // esp pin to set high on transmit + int PttTxDelayMs; // ptt tx delay + int PttTxTailMs; // ptt tx tail }; } // LoraPrs diff --git a/loraprs_service.cpp b/loraprs_service.cpp index 268d7f3..123fa36 100644 --- a/loraprs_service.cpp +++ b/loraprs_service.cpp @@ -43,6 +43,11 @@ void Service::setup(const Config &conf) if (needsAprsis() && config_.EnablePersistentAprsConnection) { reconnectAprsis(); } + + if (config_.PttEnable) { + Serial.println("External PTT is enabled"); + pinMode(config_.PttPin, OUTPUT); + } } void Service::setupWifi(const String &wifiName, const String &wifiKey) @@ -357,7 +362,12 @@ void Service::processIncomingRawPacketAsServer(const byte *packet, int packetLen bool Service::onRigTxBegin() { - delay(CfgPollDelayMs); + if (config_.PttEnable) { + digitalWrite(config_.PttPin, HIGH); + delay(config_.PttTxDelayMs); + } else { + delay(CfgPollDelayMs); + } return (LoRa.beginPacket() == 1); } @@ -368,7 +378,13 @@ void Service::onRigTx(byte b) void Service::onRigTxEnd() { - LoRa.endPacket(true); + if (config_.PttEnable) { + LoRa.endPacket(false); + delay(config_.PttTxTailMs); + digitalWrite(config_.PttPin, LOW); + } else { + LoRa.endPacket(true); + } } void Service::onSerialTx(byte b) @@ -402,6 +418,14 @@ void Service::onControlCommand(Cmd cmd, byte value) Serial.print("CSMA SlotTime: "); Serial.println(value); csmaSlotTime_ = (long)value * 10; break; + case Cmd::TxDelay: + Serial.print("TX delay: "); Serial.println(value); + config_.PttTxDelayMs = (long)value * 10; + break; + case Cmd::TxTail: + Serial.print("TX tail: "); Serial.println(value); + config_.PttTxTailMs = (long)value * 10; + break; default: break; }