From 10edae2b75d5599003938657ef42b7d684eb3c01 Mon Sep 17 00:00:00 2001 From: sh123 Date: Wed, 9 Dec 2020 12:05:48 +0200 Subject: [PATCH] Add support for KISS tnc SlotTime command --- loraprs_service.cpp | 11 ++++++++++- loraprs_service.h | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/loraprs_service.cpp b/loraprs_service.cpp index cb4b8ec..a316780 100644 --- a/loraprs_service.cpp +++ b/loraprs_service.cpp @@ -6,6 +6,7 @@ Service::Service() : kissState_(KissState::Void) , kissCmd_(KissCmd::NoCmd) , csmaP_(CfgCsmaPersistence) + , csmaSlotTime_(CfgCsmaSlotTimeMs) , serialBt_() { } @@ -162,7 +163,7 @@ void Service::loop() } } else { - delay(CfgCsmaSlotTimeMs); + delay(csmaSlotTime_); } } delay(CfgPollDelayMs); @@ -359,6 +360,10 @@ void Service::onBtDataAvailable() kissCmd_ = (KissCmd)rxByte; kissState_ = KissState::GetP; } + else if (rxByte == KissCmd::SlotTime) { + kissCmd_ = (KissCmd)rxByte; + kissState_ = KissState::GetSlotTime; + } else { kissResetState(); } @@ -368,6 +373,10 @@ void Service::onBtDataAvailable() csmaP_ = rxByte; kissState_ = KissState::GetData; break; + case KissState::GetSlotTime: + csmaSlotTime_ = (long)rxByte * 10; + kissState_ = KissState::GetData; + break; case KissState::GetData: if (rxByte == KissMarker::Fesc) { kissState_ = KissState::Escape; diff --git a/loraprs_service.h b/loraprs_service.h index 883caaa..b599299 100644 --- a/loraprs_service.h +++ b/loraprs_service.h @@ -58,12 +58,14 @@ private: GetCmd, GetData, GetP, + GetSlotTime, Escape }; enum KissCmd { Data = 0x00, P = 0x02, + SlotTime = 0x03, NoCmd = 0x80 }; @@ -107,6 +109,7 @@ private: KissCmd kissCmd_; long previousBeaconMs_; byte csmaP_; + long csmaSlotTime_; // peripherals BluetoothSerial serialBt_;