KISS TCP/IP server fixes

pull/25/head
sh123 2021-10-21 21:25:35 +03:00
rodzic 46833d732b
commit 32b68cc237
3 zmienionych plików z 30 dodań i 19 usunięć

Wyświetl plik

@ -20,7 +20,7 @@
// different module then update loraprs_service.h and loraprs_service.cpp // different module then update loraprs_service.h and loraprs_service.cpp
// search for SX1278 and replace with your module name // search for SX1278 and replace with your module name
#define USE_RADIOLIB //#define USE_RADIOLIB
#include "loraprs_service.h" #include "loraprs_service.h"
void initializeConfig(LoraPrs::Config &cfg) { void initializeConfig(LoraPrs::Config &cfg) {

Wyświetl plik

@ -17,6 +17,7 @@ Service::Service()
, serialBt_() , serialBt_()
, serialBLE_() , serialBLE_()
, kissServer_(new WiFiServer(CfgKissPort)) , kissServer_(new WiFiServer(CfgKissPort))
, isKissConn_(false)
{ {
#ifdef USE_RADIOLIB #ifdef USE_RADIOLIB
interruptEnabled_ = true; interruptEnabled_ = true;
@ -87,6 +88,7 @@ void Service::setupWifi(const String &wifiName, const String &wifiKey)
Serial.println(WiFi.localIP()); Serial.println(WiFi.localIP());
} }
if (config_.KissEnableTcpIp) { if (config_.KissEnableTcpIp) {
Serial.print("KISS TCP/IP server started on port "); Serial.println(CfgKissPort);
kissServer_->begin(); kissServer_->begin();
} }
} }
@ -219,6 +221,9 @@ void Service::loop()
if (needsAprsis() && !aprsisConn_.connected() && config_.EnablePersistentAprsConnection) { if (needsAprsis() && !aprsisConn_.connected() && config_.EnablePersistentAprsConnection) {
reconnectAprsis(); reconnectAprsis();
} }
if (config_.KissEnableTcpIp) {
attachKissNetworkClient();
}
// RX path, Rig -> Serial // RX path, Rig -> Serial
bool isRigToSerialProcessed = false; bool isRigToSerialProcessed = false;
@ -544,23 +549,30 @@ void Service::onRigTxEnd()
} }
} }
bool Service::getClient(WiFiClient &activeClient) void Service::attachKissNetworkClient()
{ {
if (config_.KissEnableTcpIp) { // connected, client dropped off
if (isKissConn_) {
if (!kissConn_.connected()) {
Serial.println("KISS TCP/IP client disconnected");
isKissConn_ = false;
kissConn_.stop();
}
// not connected, new client connected
} else {
WiFiClient wifiClient = kissServer_->available(); WiFiClient wifiClient = kissServer_->available();
if (wifiClient && wifiClient.connected()) { if (wifiClient && wifiClient.connected()) {
activeClient = wifiClient; Serial.println("New KISS TCP/IP client connected");
return true; kissConn_ = wifiClient;
isKissConn_ = true;
} }
} }
return false;
} }
void Service::onSerialTx(byte b) void Service::onSerialTx(byte b)
{ {
WiFiClient wifiClient; if (isKissConn_) {
if (getClient(wifiClient)) { kissConn_.write(b);
wifiClient.write(b);
} }
else if (config_.BtEnableBle) { else if (config_.BtEnableBle) {
serialBLE_.write(b); serialBLE_.write(b);
@ -572,10 +584,8 @@ void Service::onSerialTx(byte b)
bool Service::onSerialRxHasData() bool Service::onSerialRxHasData()
{ {
WiFiClient wifiClient; if (isKissConn_) {
if (getClient(wifiClient)) { return kissConn_.available();
Serial.println("!!!");
return wifiClient.available();
} }
else if (config_.BtEnableBle) { else if (config_.BtEnableBle) {
return serialBLE_.available(); return serialBLE_.available();
@ -589,9 +599,8 @@ bool Service::onSerialRx(byte *b)
{ {
int rxResult; int rxResult;
WiFiClient wifiClient; if (isKissConn_) {
if (getClient(wifiClient)) { rxResult = kissConn_.read();
rxResult = wifiClient.read();
} }
else { else {
rxResult = config_.BtEnableBle rxResult = config_.BtEnableBle

Wyświetl plik

@ -38,6 +38,7 @@ private:
void reconnectWifi() const; void reconnectWifi() const;
bool reconnectAprsis(); bool reconnectAprsis();
void attachKissNetworkClient();
bool isLoraRxBusy(); bool isLoraRxBusy();
#ifdef USE_RADIOLIB #ifdef USE_RADIOLIB
@ -48,8 +49,6 @@ private:
void loraReceive(int packetSize); void loraReceive(int packetSize);
#endif #endif
void onAprsisDataAvailable(); void onAprsisDataAvailable();
bool getClient(WiFiClient &activeClient);
void sendSignalReportEvent(int rssi, float snr); void sendSignalReportEvent(int rssi, float snr);
void sendPeriodicBeacon(); void sendPeriodicBeacon();
@ -114,7 +113,7 @@ private:
const long CfgCsmaSlotTimeMs = 500; // 0 for real time, otherwise set to average tx duration const long CfgCsmaSlotTimeMs = 500; // 0 for real time, otherwise set to average tx duration
// kiss static parameters // kiss static parameters
const int CfgKissPort = 8081; // kiss tcp/ip server port const int CfgKissPort = 8001; // kiss tcp/ip server port
private: private:
// config // config
Config config_; Config config_;
@ -140,7 +139,10 @@ private:
BluetoothSerial serialBt_; BluetoothSerial serialBt_;
BLESerial serialBLE_; BLESerial serialBLE_;
WiFiClient aprsisConn_; WiFiClient aprsisConn_;
std::shared_ptr<WiFiServer> kissServer_; std::shared_ptr<WiFiServer> kissServer_;
WiFiClient kissConn_;
bool isKissConn_;
}; };
} // LoraPrs } // LoraPrs