22
33#include < exception>
44
5+ #include " ArduinoLogger.h"
56#include " Hardware.h"
67#include " RemoteGPIO.h"
78#include " RemoteI2C.h"
89#include " RemoteSPI.h"
910#include " WiFiUdpStream.h"
1011
11- // #include "RemoteI2S.h"
12-
1312namespace arduino {
1413
1514/* *
@@ -18,21 +17,22 @@ namespace arduino {
1817
1918class HardwareSetupRemoteClass {
2019 public:
21- // as a default we use udp
22- HardwareSetupRemoteClass (int port = 7000 ) {
23- this ->port = port;
24- default_stream = new WiFiUDPStream ();
25- default_stream->begin (port);
20+ // / default constructor: you need to call begin() afterwards
21+ HardwareSetupRemoteClass () = default ;
22+
23+ // / HardwareSetup uses the indicated stream
24+ HardwareSetupRemoteClass (Stream& stream) {
25+ begin (&stream, false );
2626 }
2727
28- ~HardwareSetupRemoteClass () { cleanup (); }
28+ // / HardwareSetup that uses udp
29+ HardwareSetupRemoteClass (int port) {
30+ this ->port = port;
31+ }
2932
30- // assigns the different protocols to the stream
33+ // / assigns the different protocols to the stream
3134 void begin (Stream* s, bool doHandShake = true ) {
32- cleanup ();
33- if (doHandShake) {
34- handShake (s);
35- }
35+ p_stream = s;
3636
3737 Hardware.i2c = &i2c;
3838 Hardware.spi = &spi;
@@ -41,45 +41,56 @@ class HardwareSetupRemoteClass {
4141 i2c.setStream (s);
4242 spi.setStream (s);
4343 gpio.setStream (s);
44+
45+ if (doHandShake) {
46+ handShake (s);
47+ }
4448 }
4549
46- // start with the default udp stream.
50+ // / start with udp on the indicatd port
51+ void begin (int port){
52+ this ->port = port;
53+ begin ();
54+ }
55+
56+ // / start with the default udp stream.
4757 void begin () {
48- if (default_stream == nullptr ) {
49- default_stream = new WiFiUDPStream ();
50- handShake (default_stream);
51- IPAddress ip = default_stream->remoteIP ();
52- int port = default_stream->remotePort ();
53- default_stream->setTarget (ip, port);
54- default_stream->write ((const uint8_t *)" OK" , 2 );
55- default_stream->flush ();
58+ if (p_stream == nullptr ) {
59+ default_stream.begin (port);
60+ handShake (&default_stream);
61+ IPAddress ip = default_stream.remoteIP ();
62+ int port = default_stream.remotePort ();
63+ default_stream.setTarget (ip, port);
64+ default_stream.write ((const uint8_t *)" OK" , 2 );
65+ default_stream.flush ();
66+ p_stream = &default_stream;
5667 }
5768 }
5869
5970 void end () {
60- cleanup ();
71+ if (p_stream == &default_stream) {
72+ default_stream.stop ();
73+ }
6174 Hardware.i2c = nullptr ;
6275 Hardware.spi = nullptr ;
6376 Hardware.gpio = nullptr ;
6477 }
6578
79+ auto & get_gpio () { return gpio; }
80+ auto & get_i2c () { return i2c; }
81+ auto & get_spi () { return spi; }
82+
6683 protected:
67- WiFiUDPStream* default_stream;
84+ WiFiUDPStream default_stream;
85+ Stream *p_stream = nullptr ;
6886 RemoteI2C i2c;
6987 RemoteSPI spi;
7088 RemoteGPIO gpio;
7189 int port;
7290
73- void cleanup () {
74- if (default_stream != nullptr ) {
75- delete default_stream;
76- default_stream = nullptr ;
77- }
78- }
79-
8091 void handShake (Stream* s) {
8192 while (true ) {
82- Logger.info (" HardwareSetup" , " waiting for device..." );
93+ Logger.warning (" HardwareSetup" , " waiting for device..." );
8394 try {
8495 // we wait for the Arduino to send us the Arduino-Emulator string
8596 if (s->available () >= 16 ) {
@@ -101,6 +112,11 @@ class HardwareSetupRemoteClass {
101112 }
102113};
103114
104- extern HardwareSetupRemoteClass HardwareSetup;
105-
115+ #if !defined(SKIP_HARDWARE_SETUP)
116+ static HardwareSetupRemoteClass HardwareSetupRemote{7000 };
117+ #if !defined(USE_RPI)
118+ static auto & Wire = *Hardware.i2c;
119+ static auto & SPI = *Hardware.spi;
120+ #endif
121+ #endif
106122} // namespace arduino
0 commit comments