Skip to content

Commit d455e61

Browse files
committed
First steps to resolve #797
1 parent 84d0212 commit d455e61

File tree

4 files changed

+262
-9
lines changed

4 files changed

+262
-9
lines changed

Firmware/RTK_Surveyor/Network.ino

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ NetworkClient * networkClient(uint8_t user, bool useSSL)
395395
if (useSSL)
396396
client = new NetworkEthernetSslClient();
397397
else
398-
client = new NetworkEthernetClient;
398+
client = new NetworkEthernetClient();
399399
}
400400
else
401401
#endif // COMPILE_ETHERNET
@@ -412,6 +412,26 @@ NetworkClient * networkClient(uint8_t user, bool useSSL)
412412
return client;
413413
}
414414

415+
//----------------------------------------
416+
// Constructor for NetworkServer - header is in NetworkServer.h
417+
//----------------------------------------
418+
NetworkServer::NetworkServer(uint8_t user, uint16_t port)
419+
{
420+
_friendClass = false;
421+
_networkType = networkGetType(user);
422+
_port = port;
423+
#if defined(COMPILE_ETHERNET)
424+
if (_networkType == NETWORK_TYPE_ETHERNET)
425+
_server = new NetworkEthernetServer(port);
426+
else
427+
#endif // COMPILE_ETHERNET
428+
#if defined(COMPILE_WIFI)
429+
_server = new NetworkWiFiServer(port);
430+
#else // COMPILE_WIFI
431+
_server = nullptr;
432+
#endif // COMPILE_WIFI
433+
};
434+
415435
//----------------------------------------
416436
// Display the IP address
417437
//----------------------------------------
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
#ifndef __NETWORK_SERVER_H__
2+
#define __NETWORK_SERVER_H__
3+
4+
extern uint8_t networkGetType(uint8_t user);
5+
6+
class NetworkServer : public Server
7+
{
8+
protected:
9+
10+
bool _friendClass;
11+
Server * _server; // Ethernet or WiFi server
12+
uint8_t _networkType;
13+
uint16_t _port;
14+
15+
public:
16+
17+
//------------------------------
18+
// Create the network server
19+
//------------------------------
20+
NetworkServer(Server * server, uint8_t networkType, uint16_t port)
21+
{
22+
_friendClass = true;
23+
_server = server;
24+
_networkType = networkType;
25+
_port = port;
26+
}
27+
28+
//------------------------------
29+
// Create the network server - implemented in Network.ino
30+
//------------------------------
31+
NetworkServer(uint8_t user, uint16_t port);
32+
33+
//------------------------------
34+
// Delete the network server
35+
//------------------------------
36+
~NetworkServer()
37+
{
38+
if (_server)
39+
{
40+
#if defined(COMPILE_WIFI)
41+
if (_networkType == NETWORK_TYPE_WIFI)
42+
{
43+
WiFiServer *aWiFiServer = (WiFiServer *)_server;
44+
aWiFiServer->stop();
45+
}
46+
#endif // COMPILE_WIFI
47+
if (!_friendClass)
48+
delete _server;
49+
_server = nullptr;
50+
}
51+
};
52+
53+
//------------------------------
54+
// Begin the network server
55+
//------------------------------
56+
57+
void begin()
58+
{
59+
if (_server)
60+
_server->begin();
61+
}
62+
63+
//------------------------------
64+
// Determine if new client is available
65+
//------------------------------
66+
67+
NetworkClient available()
68+
{
69+
#if defined(COMPILE_ETHERNET)
70+
if (_networkType == NETWORK_TYPE_ETHERNET)
71+
if (_server)
72+
{
73+
EthernetServer *aServer = (EthernetServer *)_server;
74+
return (NetworkClient)aServer->available();
75+
}
76+
#endif // COMPILE_WIFI
77+
#if defined(COMPILE_WIFI)
78+
if (_networkType == NETWORK_TYPE_WIFI)
79+
if (_server)
80+
{
81+
WiFiServer *aServer = (WiFiServer *)_server;
82+
return (NetworkClient)aServer->available();
83+
}
84+
#endif // COMPILE_WIFI
85+
return 0;
86+
}
87+
88+
//------------------------------
89+
// Accept new client
90+
//------------------------------
91+
92+
NetworkClient accept()
93+
{
94+
#if defined(COMPILE_ETHERNET)
95+
if (_networkType == NETWORK_TYPE_ETHERNET)
96+
if (_server)
97+
{
98+
EthernetServer *aServer = (EthernetServer *)_server;
99+
return (NetworkClient)aServer->accept();
100+
}
101+
#endif // COMPILE_WIFI
102+
#if defined(COMPILE_WIFI)
103+
if (_networkType == NETWORK_TYPE_WIFI)
104+
if (_server)
105+
{
106+
WiFiServer *aServer = (WiFiServer *)_server;
107+
return (NetworkClient)aServer->accept();
108+
}
109+
#endif // COMPILE_WIFI
110+
return 0;
111+
}
112+
113+
//------------------------------
114+
// Determine if the network server was allocated
115+
//------------------------------
116+
117+
operator bool()
118+
{
119+
return _server;
120+
}
121+
122+
//------------------------------
123+
// Stop the network server
124+
//------------------------------
125+
126+
void stop()
127+
{
128+
#if defined(COMPILE_WIFI)
129+
if (_networkType == NETWORK_TYPE_WIFI)
130+
if (_server)
131+
{
132+
WiFiServer *aWiFiServer = (WiFiServer *)_server;
133+
aWiFiServer->stop();
134+
}
135+
#endif // COMPILE_WIFI
136+
}
137+
138+
//------------------------------
139+
// Send a data byte to the server
140+
//------------------------------
141+
142+
size_t write(uint8_t b)
143+
{
144+
if (_server)
145+
return _server->write(b);
146+
return 0;
147+
}
148+
149+
//------------------------------
150+
// Send a buffer of data to the server
151+
//------------------------------
152+
153+
size_t write(const uint8_t *buf, size_t size)
154+
{
155+
if (_server)
156+
return _server->write(buf, size);
157+
return 0;
158+
}
159+
160+
protected:
161+
162+
//------------------------------
163+
// Declare the friend classes
164+
//------------------------------
165+
166+
friend class NetworkEthernetServer;
167+
friend class NetworkWiFiServer;
168+
};
169+
170+
#ifdef COMPILE_ETHERNET
171+
class NetworkEthernetServer : public NetworkServer
172+
{
173+
private:
174+
175+
EthernetServer *_ethernetServer;
176+
177+
public:
178+
179+
NetworkEthernetServer(uint16_t port) :
180+
_ethernetServer{new EthernetServer(port)},
181+
NetworkServer(_ethernetServer, NETWORK_TYPE_ETHERNET, port)
182+
{
183+
}
184+
185+
NetworkEthernetServer(EthernetServer& server, uint16_t port) :
186+
_ethernetServer{&server},
187+
NetworkServer(_ethernetServer, NETWORK_TYPE_ETHERNET, port)
188+
{
189+
}
190+
191+
~NetworkEthernetServer()
192+
{
193+
this->~NetworkServer();
194+
}
195+
};
196+
#endif // COMPILE_ETHERNET
197+
198+
#ifdef COMPILE_WIFI
199+
class NetworkWiFiServer : public NetworkServer
200+
{
201+
protected:
202+
203+
WiFiServer _server;
204+
205+
public:
206+
207+
NetworkWiFiServer(uint16_t port) :
208+
NetworkServer(&_server, NETWORK_TYPE_WIFI, port)
209+
{
210+
}
211+
212+
NetworkWiFiServer(WiFiServer& server, uint16_t port) :
213+
_server{server},
214+
NetworkServer(&_server, NETWORK_TYPE_WIFI, port)
215+
{
216+
}
217+
218+
~NetworkWiFiServer()
219+
{
220+
this->~NetworkServer();
221+
}
222+
};
223+
#endif // COMPILE_WIFI
224+
225+
#endif // __NETWORK_SERVER_H__

Firmware/RTK_Surveyor/PvtServer.ino

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pvtServer.ino
3131
3232
*/
3333

34-
#ifdef COMPILE_WIFI
34+
#ifdef COMPILE_NETWORK
3535

3636
//----------------------------------------
3737
// Constants
@@ -68,7 +68,7 @@ const RtkMode_t pvtServerMode = RTK_MODE_BASE_FIXED
6868
//----------------------------------------
6969

7070
// PVT server
71-
static WiFiServer * pvtServer = nullptr;
71+
static NetworkServer * pvtServer = nullptr;
7272
static uint8_t pvtServerState;
7373
static uint32_t pvtServerTimer;
7474

@@ -240,17 +240,22 @@ bool pvtServerStart()
240240
{
241241
IPAddress localIp;
242242

243+
NETWORK_DATA * network;
244+
network = &networkData;
245+
if (network)
246+
localIp = networkGetIpAddress(network->type);
247+
243248
if (settings.debugPvtServer && (!inMainMenu))
244249
systemPrintln("PVT server starting the server");
245250

246251
// Start the PVT server
247-
pvtServer = new WiFiServer(settings.pvtServerPort);
252+
pvtServer = new NetworkServer(NETWORK_USER_PVT_SERVER, settings.pvtServerPort);
248253
if (!pvtServer)
249254
return false;
250255

251256
pvtServer->begin();
252257
online.pvtServer = true;
253-
localIp = wifiGetIpAddress();
258+
254259
systemPrintf("PVT server online, IP address %d.%d.%d.%d:%d\r\n",
255260
localIp[0], localIp[1], localIp[2], localIp[3],
256261
settings.pvtServerPort);
@@ -380,7 +385,9 @@ void pvtServerUpdate()
380385
// Wait until the PVT server is enabled
381386
case PVT_SERVER_STATE_OFF:
382387
// Determine if the PVT server should be running
383-
if (EQ_RTK_MODE(pvtServerMode) && settings.enablePvtServer && (!wifiIsConnected()))
388+
NETWORK_DATA * network;
389+
network = &networkData;
390+
if (EQ_RTK_MODE(pvtServerMode) && settings.enablePvtServer && network && (!networkIsTypeConnected(network->type)))
384391
{
385392
if (networkUserOpen(NETWORK_USER_PVT_SERVER, NETWORK_TYPE_ACTIVE))
386393
{
@@ -468,7 +475,7 @@ void pvtServerUpdate()
468475
// Determine if the client data structure is in use
469476
if (!(pvtServerClientConnected & (1 << index)))
470477
{
471-
WiFiClient client;
478+
NetworkClient client = NetworkClient(NETWORK_USER_PVT_CLIENT);
472479

473480
// Data structure not in use
474481
// Check for another PVT server client
@@ -479,7 +486,7 @@ void pvtServerUpdate()
479486
break;
480487

481488
// Start processing the new PVT server client connection
482-
pvtServerClient[index] = new NetworkWiFiClient(client);
489+
pvtServerClient[index] = new NetworkClient(client);
483490
pvtServerClientIpAddress[index] = pvtServerClient[index]->remoteIP();
484491
pvtServerClientConnected |= 1 << index;
485492
pvtServerClientDataSent |= 1 << index;
@@ -537,4 +544,4 @@ void pvtServerZeroTail()
537544
pvtServerClientTails[index] = 0;
538545
}
539546

540-
#endif // COMPILE_WIFI
547+
#endif // COMPILE_NETWORK

Firmware/RTK_Surveyor/settings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ enum WiFiState
280280
volatile byte wifiState = WIFI_STATE_OFF;
281281

282282
#include "NetworkClient.h" // Built-in - Supports both WiFiClient and EthernetClient
283+
#include "NetworkServer.h" // Built-in - Supports both WiFiServer and EthernetServer
283284
#include "NetworkUDP.h" //Built-in - Supports both WiFiUdp and EthernetUdp
284285

285286
// NTRIP Server data

0 commit comments

Comments
 (0)