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 size_t sendToClients(const char *buffer, int sourceId, bool partial=false)=0;
|
||||||
virtual Stream * getStream(bool partialWrites){ return NULL;}
|
virtual Stream * getStream(bool partialWrites){ return NULL;}
|
||||||
virtual String getMode(){return "UNKNOWN";}
|
virtual String getMode(){return "UNKNOWN";}
|
||||||
|
virtual int getType()=0; //return the numeric type
|
||||||
};
|
};
|
||||||
@@ -285,8 +285,8 @@ static ChannelParam channelParameters[]={
|
|||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
GwSerial* createSerial(GwLog *logger, T* s,int id, bool canRead=true){
|
GwSerial* createSerial(GwLog *logger, T* s,int id, int type, bool canRead=true){
|
||||||
return new GwSerialImpl<T>(logger,s,id,canRead);
|
return new GwSerialImpl<T>(logger,s,id,type,canRead);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ChannelParam * findChannelParam(int id){
|
static ChannelParam * findChannelParam(int id){
|
||||||
@@ -300,7 +300,7 @@ static ChannelParam * findChannelParam(int id){
|
|||||||
return param;
|
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",
|
LOG_DEBUG(GwLog::DEBUG,"create serial: channel=%d, rx=%d,tx=%d",
|
||||||
idx,rx,tx);
|
idx,rx,tx);
|
||||||
ChannelParam *param=findChannelParam(idx);
|
ChannelParam *param=findChannelParam(idx);
|
||||||
@@ -312,13 +312,13 @@ static GwSerial * createSerialImpl(GwConfigHandler *config,GwLog *logger, int id
|
|||||||
GwLog *streamLog=setLog?nullptr:logger;
|
GwLog *streamLog=setLog?nullptr:logger;
|
||||||
switch(param->id){
|
switch(param->id){
|
||||||
case USB_CHANNEL_ID:
|
case USB_CHANNEL_ID:
|
||||||
serialStream=createSerial(streamLog,&USBSerial,param->id);
|
serialStream=createSerial(streamLog,&USBSerial,param->id,type);
|
||||||
break;
|
break;
|
||||||
case SERIAL1_CHANNEL_ID:
|
case SERIAL1_CHANNEL_ID:
|
||||||
serialStream=createSerial(streamLog,&Serial1,param->id);
|
serialStream=createSerial(streamLog,&Serial1,param->id,type);
|
||||||
break;
|
break;
|
||||||
case SERIAL2_CHANNEL_ID:
|
case SERIAL2_CHANNEL_ID:
|
||||||
serialStream=createSerial(streamLog,&Serial2,param->id);
|
serialStream=createSerial(streamLog,&Serial2,param->id,type);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (serialStream == nullptr){
|
if (serialStream == nullptr){
|
||||||
@@ -332,12 +332,13 @@ static GwSerial * createSerialImpl(GwConfigHandler *config,GwLog *logger, int id
|
|||||||
}
|
}
|
||||||
return serialStream;
|
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);
|
ChannelParam *param=findChannelParam(id);
|
||||||
if (param == nullptr){
|
if (param == nullptr){
|
||||||
LOG_DEBUG(GwLog::ERROR,"invalid channel id %d",id);
|
LOG_DEBUG(GwLog::ERROR,"invalid channel id %d",id);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
int type=impl->getType();
|
||||||
bool canRead=false;
|
bool canRead=false;
|
||||||
bool canWrite=false;
|
bool canWrite=false;
|
||||||
bool validType=false;
|
bool validType=false;
|
||||||
@@ -425,10 +426,10 @@ void GwChannelList::begin(bool fallbackSerial){
|
|||||||
GwChannel *channel=NULL;
|
GwChannel *channel=NULL;
|
||||||
//usb
|
//usb
|
||||||
if (! fallbackSerial){
|
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){
|
if (usbSerial != nullptr){
|
||||||
usbSerial->enableWriteLock(); //as it is used for logging we need this additionally
|
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){
|
if (usbChannel != nullptr){
|
||||||
addChannel(usbChannel);
|
addChannel(usbChannel);
|
||||||
}
|
}
|
||||||
@@ -445,9 +446,9 @@ void GwChannelList::begin(bool fallbackSerial){
|
|||||||
//new serial config handling
|
//new serial config handling
|
||||||
for (auto &&init:serialInits){
|
for (auto &&init:serialInits){
|
||||||
LOG_INFO("creating serial channel %d, rx=%d,tx=%d,type=%d",init.serial,init.rx,init.tx,init.mode);
|
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){
|
if (ser != nullptr){
|
||||||
channel=createChannel(logger,config,init.serial,ser,init.mode);
|
channel=createChannel(logger,config,init.serial,ser);
|
||||||
if (channel != nullptr){
|
if (channel != nullptr){
|
||||||
addChannel(channel);
|
addChannel(channel);
|
||||||
}
|
}
|
||||||
@@ -466,8 +467,8 @@ void GwChannelList::begin(bool fallbackSerial){
|
|||||||
config->getInt(config->remotePort),
|
config->getInt(config->remotePort),
|
||||||
config->getBool(config->readTCL)
|
config->getBool(config->readTCL)
|
||||||
);
|
);
|
||||||
}
|
|
||||||
addChannel(createChannel(logger,config,TCP_CLIENT_CHANNEL_ID,client));
|
addChannel(createChannel(logger,config,TCP_CLIENT_CHANNEL_ID,client));
|
||||||
|
}
|
||||||
|
|
||||||
//udp writer
|
//udp writer
|
||||||
if (config->getBool(GwConfigDefinitions::udpwEnabled)){
|
if (config->getBool(GwConfigDefinitions::udpwEnabled)){
|
||||||
|
|||||||
@@ -79,6 +79,9 @@ String GwSerial::getMode(){
|
|||||||
}
|
}
|
||||||
return "UNKNOWN";
|
return "UNKNOWN";
|
||||||
}
|
}
|
||||||
|
int GwSerial::getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
bool GwSerial::isInitialized() { return initialized; }
|
bool GwSerial::isInitialized() { return initialized; }
|
||||||
size_t GwSerial::enqueue(const uint8_t *data, size_t len, bool partial)
|
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;}
|
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 void begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1)=0;
|
||||||
virtual String getMode() override;
|
virtual String getMode() override;
|
||||||
|
virtual int getType() override;
|
||||||
friend GwSerialStream;
|
friend GwSerialStream;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -122,6 +123,7 @@ template<typename T>
|
|||||||
setError(serial,logger);
|
setError(serial,logger);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "GwBuffer.h"
|
#include "GwBuffer.h"
|
||||||
#include "GwSocketConnection.h"
|
#include "GwSocketConnection.h"
|
||||||
#include "GwSocketHelper.h"
|
#include "GwSocketHelper.h"
|
||||||
|
#include "GwHardware.h"
|
||||||
|
|
||||||
GwSocketServer::GwSocketServer(const GwConfigHandler *config, GwLog *logger, int minId)
|
GwSocketServer::GwSocketServer(const GwConfigHandler *config, GwLog *logger, int minId)
|
||||||
{
|
{
|
||||||
@@ -186,3 +187,5 @@ int GwSocketServer::numClients()
|
|||||||
GwSocketServer::~GwSocketServer()
|
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);
|
virtual size_t sendToClients(const char *buf,int sourceId, bool partialWrite=false);
|
||||||
int numClients();
|
int numClients();
|
||||||
virtual void readMessages(GwMessageFetcher *writer);
|
virtual void readMessages(GwMessageFetcher *writer);
|
||||||
|
virtual int getType() override;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <ESPmDNS.h>
|
#include <ESPmDNS.h>
|
||||||
#include "GwSocketHelper.h"
|
#include "GwSocketHelper.h"
|
||||||
|
#include "GwHardware.h"
|
||||||
|
|
||||||
class ResolveArgs{
|
class ResolveArgs{
|
||||||
public:
|
public:
|
||||||
@@ -292,3 +293,5 @@ GwTcpClient::ResolvedAddress GwTcpClient::getResolved(){
|
|||||||
GWSYNCHRONIZED(locker);
|
GWSYNCHRONIZED(locker);
|
||||||
return resolvedAddress;
|
return resolvedAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int GwTcpClient::getType(){return GWSERIAL_TYPE_BI;}
|
||||||
@@ -53,4 +53,5 @@ public:
|
|||||||
virtual void readMessages(GwMessageFetcher *writer);
|
virtual void readMessages(GwMessageFetcher *writer);
|
||||||
bool isConnected();
|
bool isConnected();
|
||||||
String getError(){return error;}
|
String getError(){return error;}
|
||||||
|
virtual int getType() override;
|
||||||
};
|
};
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "GwSocketConnection.h"
|
#include "GwSocketConnection.h"
|
||||||
#include "GwSocketHelper.h"
|
#include "GwSocketHelper.h"
|
||||||
#include "GWWifi.h"
|
#include "GWWifi.h"
|
||||||
|
#include "GwHardware.h"
|
||||||
|
|
||||||
|
|
||||||
GwUdpReader::GwUdpReader(const GwConfigHandler *config, GwLog *logger, int minId)
|
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()
|
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 void loop(bool handleRead=true,bool handleWrite=true);
|
||||||
virtual size_t sendToClients(const char *buf,int sourceId, bool partialWrite=false);
|
virtual size_t sendToClients(const char *buf,int sourceId, bool partialWrite=false);
|
||||||
virtual void readMessages(GwMessageFetcher *writer);
|
virtual void readMessages(GwMessageFetcher *writer);
|
||||||
|
virtual int getType() override;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "GwSocketConnection.h"
|
#include "GwSocketConnection.h"
|
||||||
#include "GwSocketHelper.h"
|
#include "GwSocketHelper.h"
|
||||||
#include "GWWifi.h"
|
#include "GWWifi.h"
|
||||||
|
#include "GwHardware.h"
|
||||||
|
|
||||||
GwUdpWriter::WriterSocket::WriterSocket(GwLog *l,int p,const String &src,const String &dst, SourceMode sm) :
|
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)
|
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()
|
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 void loop(bool handleRead=true,bool handleWrite=true);
|
||||||
virtual size_t sendToClients(const char *buf,int sourceId, bool partialWrite=false);
|
virtual size_t sendToClients(const char *buf,int sourceId, bool partialWrite=false);
|
||||||
virtual void readMessages(GwMessageFetcher *writer);
|
virtual void readMessages(GwMessageFetcher *writer);
|
||||||
|
virtual int getType() override;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
Reference in New Issue
Block a user