1
0
mirror of https://github.com/thooge/esp32-nmea2000-obp60.git synced 2026-02-11 07:03:07 +01:00

correctly set the mode/type for serial channels

This commit is contained in:
wellenvogel
2025-09-17 17:40:28 +02:00
parent 7ebd582ca0
commit 3d131c7d98
12 changed files with 38 additions and 16 deletions

View File

@@ -7,4 +7,5 @@ class GwChannelInterface{
virtual size_t sendToClients(const char *buffer, int sourceId, bool partial=false)=0;
virtual Stream * getStream(bool partialWrites){ return NULL;}
virtual String getMode(){return "UNKNOWN";}
virtual int getType()=0; //return the numeric type
};

View File

@@ -285,8 +285,8 @@ static ChannelParam channelParameters[]={
};
template<typename T>
GwSerial* createSerial(GwLog *logger, T* s,int id, bool canRead=true){
return new GwSerialImpl<T>(logger,s,id,canRead);
GwSerial* createSerial(GwLog *logger, T* s,int id, int type, bool canRead=true){
return new GwSerialImpl<T>(logger,s,id,type,canRead);
}
static ChannelParam * findChannelParam(int id){
@@ -300,7 +300,7 @@ static ChannelParam * findChannelParam(int id){
return param;
}
static GwSerial * createSerialImpl(GwConfigHandler *config,GwLog *logger, int idx,int rx,int tx, bool setLog=false){
static GwSerial * createSerialImpl(GwConfigHandler *config,GwLog *logger, int idx,int type,int rx,int tx, bool setLog){
LOG_DEBUG(GwLog::DEBUG,"create serial: channel=%d, rx=%d,tx=%d",
idx,rx,tx);
ChannelParam *param=findChannelParam(idx);
@@ -312,13 +312,13 @@ static GwSerial * createSerialImpl(GwConfigHandler *config,GwLog *logger, int id
GwLog *streamLog=setLog?nullptr:logger;
switch(param->id){
case USB_CHANNEL_ID:
serialStream=createSerial(streamLog,&USBSerial,param->id);
serialStream=createSerial(streamLog,&USBSerial,param->id,type);
break;
case SERIAL1_CHANNEL_ID:
serialStream=createSerial(streamLog,&Serial1,param->id);
serialStream=createSerial(streamLog,&Serial1,param->id,type);
break;
case SERIAL2_CHANNEL_ID:
serialStream=createSerial(streamLog,&Serial2,param->id);
serialStream=createSerial(streamLog,&Serial2,param->id,type);
break;
}
if (serialStream == nullptr){
@@ -332,12 +332,13 @@ static GwSerial * createSerialImpl(GwConfigHandler *config,GwLog *logger, int id
}
return serialStream;
}
static GwChannel * createChannel(GwLog *logger, GwConfigHandler *config, int id,GwChannelInterface *impl, int type=GWSERIAL_TYPE_BI){
static GwChannel * createChannel(GwLog *logger, GwConfigHandler *config, int id,GwChannelInterface *impl){
ChannelParam *param=findChannelParam(id);
if (param == nullptr){
LOG_DEBUG(GwLog::ERROR,"invalid channel id %d",id);
return nullptr;
}
int type=impl->getType();
bool canRead=false;
bool canWrite=false;
bool validType=false;
@@ -425,10 +426,10 @@ void GwChannelList::begin(bool fallbackSerial){
GwChannel *channel=NULL;
//usb
if (! fallbackSerial){
GwSerial *usbSerial=createSerialImpl(config, logger,USB_CHANNEL_ID,GWUSB_RX,GWUSB_TX,true);
GwSerial *usbSerial=createSerialImpl(config, logger,USB_CHANNEL_ID,GWSERIAL_TYPE_BI,GWUSB_RX,GWUSB_TX,true);
if (usbSerial != nullptr){
usbSerial->enableWriteLock(); //as it is used for logging we need this additionally
GwChannel *usbChannel=createChannel(logger,config,USB_CHANNEL_ID,usbSerial,GWSERIAL_TYPE_BI);
GwChannel *usbChannel=createChannel(logger,config,USB_CHANNEL_ID,usbSerial);
if (usbChannel != nullptr){
addChannel(usbChannel);
}
@@ -445,9 +446,9 @@ void GwChannelList::begin(bool fallbackSerial){
//new serial config handling
for (auto &&init:serialInits){
LOG_INFO("creating serial channel %d, rx=%d,tx=%d,type=%d",init.serial,init.rx,init.tx,init.mode);
GwSerial *ser=createSerialImpl(config,logger,init.serial,init.rx,init.tx);
GwSerial *ser=createSerialImpl(config,logger,init.serial,init.mode,init.rx,init.tx,false);
if (ser != nullptr){
channel=createChannel(logger,config,init.serial,ser,init.mode);
channel=createChannel(logger,config,init.serial,ser);
if (channel != nullptr){
addChannel(channel);
}
@@ -466,8 +467,8 @@ void GwChannelList::begin(bool fallbackSerial){
config->getInt(config->remotePort),
config->getBool(config->readTCL)
);
addChannel(createChannel(logger,config,TCP_CLIENT_CHANNEL_ID,client));
}
addChannel(createChannel(logger,config,TCP_CLIENT_CHANNEL_ID,client));
//udp writer
if (config->getBool(GwConfigDefinitions::udpwEnabled)){

View File

@@ -79,6 +79,9 @@ String GwSerial::getMode(){
}
return "UNKNOWN";
}
int GwSerial::getType() {
return type;
}
bool GwSerial::isInitialized() { return initialized; }
size_t GwSerial::enqueue(const uint8_t *data, size_t len, bool partial)

View File

@@ -43,6 +43,7 @@ class GwSerial : public GwChannelInterface{
bool getAvailableWrite(){return availableWrite;}
virtual void begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1)=0;
virtual String getMode() override;
virtual int getType() override;
friend GwSerialStream;
};
@@ -122,6 +123,7 @@ template<typename T>
setError(serial,logger);
};
};

View File

@@ -4,6 +4,7 @@
#include "GwBuffer.h"
#include "GwSocketConnection.h"
#include "GwSocketHelper.h"
#include "GwHardware.h"
GwSocketServer::GwSocketServer(const GwConfigHandler *config, GwLog *logger, int minId)
{
@@ -186,3 +187,5 @@ int GwSocketServer::numClients()
GwSocketServer::~GwSocketServer()
{
}
int GwSocketServer::getType() {return GWSERIAL_TYPE_BI;}

View File

@@ -27,5 +27,6 @@ class GwSocketServer: public GwChannelInterface{
virtual size_t sendToClients(const char *buf,int sourceId, bool partialWrite=false);
int numClients();
virtual void readMessages(GwMessageFetcher *writer);
virtual int getType() override;
};
#endif

View File

@@ -2,6 +2,7 @@
#include <functional>
#include <ESPmDNS.h>
#include "GwSocketHelper.h"
#include "GwHardware.h"
class ResolveArgs{
public:
@@ -292,3 +293,5 @@ GwTcpClient::ResolvedAddress GwTcpClient::getResolved(){
GWSYNCHRONIZED(locker);
return resolvedAddress;
}
int GwTcpClient::getType(){return GWSERIAL_TYPE_BI;}

View File

@@ -53,4 +53,5 @@ public:
virtual void readMessages(GwMessageFetcher *writer);
bool isConnected();
String getError(){return error;}
virtual int getType() override;
};

View File

@@ -5,6 +5,7 @@
#include "GwSocketConnection.h"
#include "GwSocketHelper.h"
#include "GWWifi.h"
#include "GwHardware.h"
GwUdpReader::GwUdpReader(const GwConfigHandler *config, GwLog *logger, int minId)
@@ -165,3 +166,4 @@ size_t GwUdpReader::sendToClients(const char *buf, int source,bool partial)
GwUdpReader::~GwUdpReader()
{
}
int GwUdpReader::getType(){return GWSERIAL_TYPE_BI;}

View File

@@ -41,5 +41,6 @@ class GwUdpReader: public GwChannelInterface{
virtual void loop(bool handleRead=true,bool handleWrite=true);
virtual size_t sendToClients(const char *buf,int sourceId, bool partialWrite=false);
virtual void readMessages(GwMessageFetcher *writer);
virtual int getType() override;
};
#endif

View File

@@ -5,6 +5,7 @@
#include "GwSocketConnection.h"
#include "GwSocketHelper.h"
#include "GWWifi.h"
#include "GwHardware.h"
GwUdpWriter::WriterSocket::WriterSocket(GwLog *l,int p,const String &src,const String &dst, SourceMode sm) :
sourceMode(sm), source(src), destination(dst), port(p),logger(l)
@@ -201,3 +202,5 @@ size_t GwUdpWriter::sendToClients(const char *buf, int source,bool partial)
GwUdpWriter::~GwUdpWriter()
{
}
int GwUdpWriter::getType() {return GWSERIAL_TYPE_BI;}

View File

@@ -69,5 +69,6 @@ class GwUdpWriter: public GwChannelInterface{
virtual void loop(bool handleRead=true,bool handleWrite=true);
virtual size_t sendToClients(const char *buf,int sourceId, bool partialWrite=false);
virtual void readMessages(GwMessageFetcher *writer);
virtual int getType() override;
};
#endif