2020-09-26 13:01:00 +02:00
/*
2024-09-28 13:48:11 +02:00
* © 2023 - 2024 Paul M . Antoine
2022-01-07 02:28:35 +01:00
* © 2021 Neil McKechnie
* © 2021 Mike S
* © 2021 Fred Decker
2024-11-27 12:59:15 +01:00
* © 2020 - 2024 Harald Barth
2024-09-28 13:48:11 +02:00
* © 2020 - 2024 Chris Harlow
2022-01-07 02:28:35 +01:00
* © 2020 Gregor Baues
* All rights reserved .
2020-09-26 13:01:00 +02:00
*
* This file is part of DCC - EX / CommandStation - EX
*
*
* This is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* It is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with CommandStation . If not , see < https : //www.gnu.org/licenses/>.
*
* Ethernet Interface added by Gregor Baues
*/
# ifndef EthernetInterface_h
# define EthernetInterface_h
2021-08-23 12:55:42 +02:00
2021-11-12 00:59:50 +01:00
# include "defines.h"
2024-11-10 21:11:40 +01:00
# if ETHERNET_ON == true
2020-09-26 13:01:00 +02:00
# include "DCCEXParser.h"
# include <Arduino.h>
2022-03-04 23:37:27 +01:00
//#include <avr/pgmspace.h>
2021-03-25 18:16:12 +01:00
# if defined (ARDUINO_TEENSY41)
# include <NativeEthernet.h> //TEENSY Ethernet Treiber
# include <NativeEthernetUdp.h>
2024-11-10 21:11:40 +01:00
# ifndef MAX_SOCK_NUM
2024-09-28 13:48:11 +02:00
# define MAX_SOCK_NUM 4
2024-11-10 21:11:40 +01:00
# endif
2024-11-27 12:59:15 +01:00
// can't use our MDNS because of a namespace clash with Teensy's NativeEthernet library!
// #define DO_MDNS
2024-08-25 18:26:33 +02:00
# elif defined (ARDUINO_NUCLEO_F429ZI) || defined (ARDUINO_NUCLEO_F439ZI) || defined (ARDUINO_NUCLEO_F4X9ZI)
# include <LwIP.h>
# include <STM32Ethernet.h>
# include <lwip/netif.h>
extern " C " struct netif gnetif ;
# define STM32_ETHERNET
2024-11-04 17:28:51 +01:00
# define MAX_SOCK_NUM MAX_NUM_TCP_CLIENTS
2024-11-10 21:11:40 +01:00
# define DO_MDNS
2021-03-25 18:16:12 +01:00
# else
# include "Ethernet.h"
2024-11-27 12:59:15 +01:00
# define DO_MDNS
2021-03-31 00:11:22 +02:00
# endif
2024-11-27 12:59:15 +01:00
2021-03-31 00:11:22 +02:00
# include "RingStream.h"
2020-09-26 13:01:00 +02:00
/**
* @ brief Network Configuration
*
*/
2020-12-28 00:06:31 +01:00
2024-08-25 17:29:59 +02:00
# define MAX_ETH_BUFFER 128
2020-10-30 14:00:02 +01:00
# define OUTBOUND_RING_SIZE 2048
2020-09-26 13:01:00 +02:00
class EthernetInterface {
public :
2020-10-30 14:00:02 +01:00
static void setup ( ) ;
static void loop ( ) ;
private :
2024-08-18 21:32:05 +02:00
static bool connected ;
static EthernetServer * server ;
static EthernetClient clients [ MAX_SOCK_NUM ] ; // accept up to MAX_SOCK_NUM client connections at the same time; This depends on the chipset used on the Shield
2024-09-28 13:48:11 +02:00
static bool inUse [ MAX_SOCK_NUM ] ; // accept up to MAX_SOCK_NUM client connections at the same time; This depends on the chipset used on the Shield
2024-08-18 21:32:05 +02:00
static uint8_t buffer [ MAX_ETH_BUFFER + 1 ] ; // buffer used by TCP for the recv
static RingStream * outboundRing ;
2024-09-28 13:48:11 +02:00
static void acceptClient ( ) ;
static void dropClient ( byte socketnum ) ;
2020-09-26 13:01:00 +02:00
} ;
2024-11-10 21:11:40 +01:00
# endif // ETHERNET_ON
2020-09-26 13:01:00 +02:00
# endif