Add experimental external PTT control

pull/15/head
sh123 2021-05-26 19:11:33 +03:00
rodzic 96a6547710
commit fc0ad84b4b
5 zmienionych plików z 45 dodań i 2 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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;

Wyświetl plik

@ -31,8 +31,10 @@ protected:
enum Cmd {
Data = 0x00,
TxDelay = 0x01,
P = 0x02,
SlotTime = 0x03,
TxTail = 0x04,
SetHardware = 0x06,
SignalReport = 0x07,
NoCmd = 0x80

Wyświetl plik

@ -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

Wyświetl plik

@ -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;
}