diff --git a/lib/channel/GwChannelInterface.h b/lib/channel/GwChannelInterface.h index 68f519b..a028eff 100644 --- a/lib/channel/GwChannelInterface.h +++ b/lib/channel/GwChannelInterface.h @@ -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 }; \ No newline at end of file diff --git a/lib/channel/GwChannelList.cpp b/lib/channel/GwChannelList.cpp index c9db748..87755b4 100644 --- a/lib/channel/GwChannelList.cpp +++ b/lib/channel/GwChannelList.cpp @@ -285,8 +285,8 @@ static ChannelParam channelParameters[]={ }; template -GwSerial* createSerial(GwLog *logger, T* s,int id, bool canRead=true){ - return new GwSerialImpl(logger,s,id,canRead); +GwSerial* createSerial(GwLog *logger, T* s,int id, int type, bool canRead=true){ + return new GwSerialImpl(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)){ diff --git a/lib/serial/GwSerial.cpp b/lib/serial/GwSerial.cpp index b23c52f..e6ec320 100644 --- a/lib/serial/GwSerial.cpp +++ b/lib/serial/GwSerial.cpp @@ -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) diff --git a/lib/serial/GwSerial.h b/lib/serial/GwSerial.h index 1932878..51c9100 100644 --- a/lib/serial/GwSerial.h +++ b/lib/serial/GwSerial.h @@ -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 setError(serial,logger); }; + }; diff --git a/lib/socketserver/GwSocketServer.cpp b/lib/socketserver/GwSocketServer.cpp index 185e3a4..53ccb82 100644 --- a/lib/socketserver/GwSocketServer.cpp +++ b/lib/socketserver/GwSocketServer.cpp @@ -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) { @@ -185,4 +186,6 @@ int GwSocketServer::numClients() } GwSocketServer::~GwSocketServer() { -} \ No newline at end of file +} + +int GwSocketServer::getType() {return GWSERIAL_TYPE_BI;} \ No newline at end of file diff --git a/lib/socketserver/GwSocketServer.h b/lib/socketserver/GwSocketServer.h index 248fc95..dcee8fc 100644 --- a/lib/socketserver/GwSocketServer.h +++ b/lib/socketserver/GwSocketServer.h @@ -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 \ No newline at end of file diff --git a/lib/socketserver/GwTcpClient.cpp b/lib/socketserver/GwTcpClient.cpp index 2792300..f3761db 100644 --- a/lib/socketserver/GwTcpClient.cpp +++ b/lib/socketserver/GwTcpClient.cpp @@ -2,6 +2,7 @@ #include #include #include "GwSocketHelper.h" +#include "GwHardware.h" class ResolveArgs{ public: @@ -291,4 +292,6 @@ void GwTcpClient::setResolved(IPAddress addr, bool valid){ GwTcpClient::ResolvedAddress GwTcpClient::getResolved(){ GWSYNCHRONIZED(locker); return resolvedAddress; -} \ No newline at end of file +} + +int GwTcpClient::getType(){return GWSERIAL_TYPE_BI;} \ No newline at end of file diff --git a/lib/socketserver/GwTcpClient.h b/lib/socketserver/GwTcpClient.h index 25cc654..8665e04 100644 --- a/lib/socketserver/GwTcpClient.h +++ b/lib/socketserver/GwTcpClient.h @@ -53,4 +53,5 @@ public: virtual void readMessages(GwMessageFetcher *writer); bool isConnected(); String getError(){return error;} + virtual int getType() override; }; \ No newline at end of file diff --git a/lib/socketserver/GwUdpReader.cpp b/lib/socketserver/GwUdpReader.cpp index 612eb10..f5927be 100644 --- a/lib/socketserver/GwUdpReader.cpp +++ b/lib/socketserver/GwUdpReader.cpp @@ -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) @@ -164,4 +165,5 @@ size_t GwUdpReader::sendToClients(const char *buf, int source,bool partial) GwUdpReader::~GwUdpReader() { -} \ No newline at end of file +} +int GwUdpReader::getType(){return GWSERIAL_TYPE_BI;} \ No newline at end of file diff --git a/lib/socketserver/GwUdpReader.h b/lib/socketserver/GwUdpReader.h index 08c56bb..199096d 100644 --- a/lib/socketserver/GwUdpReader.h +++ b/lib/socketserver/GwUdpReader.h @@ -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 \ No newline at end of file diff --git a/lib/socketserver/GwUdpWriter.cpp b/lib/socketserver/GwUdpWriter.cpp index c91880e..3ab9236 100644 --- a/lib/socketserver/GwUdpWriter.cpp +++ b/lib/socketserver/GwUdpWriter.cpp @@ -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) @@ -200,4 +201,6 @@ size_t GwUdpWriter::sendToClients(const char *buf, int source,bool partial) GwUdpWriter::~GwUdpWriter() { -} \ No newline at end of file +} + +int GwUdpWriter::getType() {return GWSERIAL_TYPE_BI;} \ No newline at end of file diff --git a/lib/socketserver/GwUdpWriter.h b/lib/socketserver/GwUdpWriter.h index e17a17e..3299cde 100644 --- a/lib/socketserver/GwUdpWriter.h +++ b/lib/socketserver/GwUdpWriter.h @@ -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 \ No newline at end of file