mirror of
https://github.com/thooge/esp32-nmea2000-obp60.git
synced 2025-12-16 07:23:07 +01:00
different modes for UDP writer, allow to select network
This commit is contained in:
@@ -9,14 +9,59 @@
|
||||
#include <arpa/inet.h>
|
||||
|
||||
class GwUdpWriter: public GwChannelInterface{
|
||||
public:
|
||||
using UType=enum{
|
||||
T_BCALL=0,
|
||||
T_BCAP=1,
|
||||
T_BCSTA=2,
|
||||
T_NORM=3,
|
||||
T_MCALL=4,
|
||||
T_MCAP=5,
|
||||
T_MCSTA=6,
|
||||
T_UNKNOWN=-1
|
||||
};
|
||||
private:
|
||||
class WriterSocket{
|
||||
public:
|
||||
int fd=-1;
|
||||
struct in_addr srcA;
|
||||
struct sockaddr_in dstA;
|
||||
String source;
|
||||
String destination;
|
||||
int port;
|
||||
GwLog *logger;
|
||||
using SourceMode=enum {
|
||||
S_UNBOUND=0,
|
||||
S_MC,
|
||||
S_SRC
|
||||
};
|
||||
SourceMode sourceMode;
|
||||
WriterSocket(GwLog *logger,int p,const String &src,const String &dst, SourceMode sm);
|
||||
void close(){
|
||||
if (fd > 0){
|
||||
::close(fd);
|
||||
}
|
||||
fd=-1;
|
||||
}
|
||||
~WriterSocket(){
|
||||
close();
|
||||
}
|
||||
bool changed(const String &newSrc, const String &newDst);
|
||||
size_t send(const char *buf,size_t len);
|
||||
};
|
||||
const GwConfigHandler *config;
|
||||
GwLog *logger;
|
||||
int fd=-1;
|
||||
/**
|
||||
* we use fd/address to send to the AP network
|
||||
* and fd2,address2 to send to the station network
|
||||
* for type "normal" we only use fd
|
||||
*/
|
||||
WriterSocket *apSocket=nullptr; //also for T_NORM
|
||||
WriterSocket *staSocket=nullptr;
|
||||
int minId;
|
||||
int port;
|
||||
String address;
|
||||
struct sockaddr_in destination;
|
||||
UType type=T_UNKNOWN;
|
||||
void checkStaSocket();
|
||||
public:
|
||||
GwUdpWriter(const GwConfigHandler *config,GwLog *logger,int minId);
|
||||
~GwUdpWriter();
|
||||
|
||||
Reference in New Issue
Block a user