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:
@@ -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
|
||||
};
|
||||
@@ -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)){
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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;}
|
||||
@@ -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
|
||||
@@ -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;}
|
||||
@@ -53,4 +53,5 @@ public:
|
||||
virtual void readMessages(GwMessageFetcher *writer);
|
||||
bool isConnected();
|
||||
String getError(){return error;}
|
||||
virtual int getType() override;
|
||||
};
|
||||
@@ -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;}
|
||||
@@ -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
|
||||
@@ -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;}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user