22#include "ArduinoLogger.h"
23#include "GPIOWrapper.h"
24#include "I2CWrapper.h"
25#include "RemoteGPIO.h"
28#include "SPIWrapper.h"
29#include "WiFiUdpStream.h"
79 Logger.warning(
"GPIO, I2C, SPI set up for Remote");
88 return i2c && spi && gpio;
100 if (p_stream ==
nullptr) {
101 default_stream.begin(port);
102 handShake(&default_stream);
104 int remote_port = default_stream.remotePort();
105 default_stream.setTarget(
ip, remote_port);
106 default_stream.write((
const uint8_t*)
"OK", 2);
107 default_stream.flush();
115 if (is_default_objects_active) {
120 if (p_stream == &default_stream) {
121 default_stream.stop();
125 HardwareGPIO* getGPIO() {
return &gpio; }
126 HardwareI2C* getI2C() {
return &i2c; }
127 HardwareSPI* getSPI() {
return &spi; }
130 WiFiUDPStream default_stream;
131 Stream* p_stream =
nullptr;
136 bool is_default_objects_active =
false;
138 void handShake(Stream* s) {
140 Logger.warning(
"HardwareSetup",
"waiting for device...");
143 if (s->available() >= 16) {
145 int len = s->readBytes(buffer, 18);
147 if (strncmp(buffer,
"Arduino-Emulator", 16)) {
148 Logger.info(
"WiFiUDPStream",
"device found!");
151 Logger.info(
"WiFiUDPStream",
"unknown command", buffer);
155 }
catch (
const std::exception& ex) {
156 Logger.error(
"WiFiUDPStream", ex.what());
162#if !defined(SKIP_HARDWARE_SETUP)
163static HardwareSetupRemote Remote{7000};
Abstract interface for providing GPIO hardware implementations.
Definition Sources.h:66
void setGPIO(HardwareGPIO *gpio)
Set the GPIO implementation directly.
Definition GPIOWrapper.h:153
Configures and manages remote hardware interfaces for Arduino emulation.
Definition HardwareSetupRemote.h:58
void begin(int port, bool asDefault)
start with udp on the indicatd port
Definition HardwareSetupRemote.h:92
HardwareSetupRemote()=default
default constructor: you need to call begin() afterwards
HardwareSetupRemote(Stream &stream)
HardwareSetup uses the indicated stream.
Definition HardwareSetupRemote.h:64
void begin(bool asDefault=true)
start with the default udp stream.
Definition HardwareSetupRemote.h:98
bool begin(Stream *s, bool asDefault=true, bool doHandShake=true)
assigns the different protocols to the stream
Definition HardwareSetupRemote.h:70
HardwareSetupRemote(int port)
HardwareSetup that uses udp.
Definition HardwareSetupRemote.h:67
Abstract interface for providing I2C hardware implementations.
Definition Sources.h:36
void setI2C(HardwareI2C *i2c)
defines the i2c implementation: use nullptr to reset.
Definition I2CWrapper.h:74
Definition IPAddress.h:43
Abstract interface for providing SPI hardware implementations.
Definition Sources.h:51
void setSPI(HardwareSPI *spi)
defines the spi implementation: use nullptr to reset.
Definition SPIWrapper.h:72
We provide the WiFi class to simulate the Arduino WIFI. In in Linux we can expect that networking is ...
Definition CanMsg.cpp:31
I2CWrapper Wire
Global Wire instance used by Arduino API functions and direct access.
Definition I2CWrapper.cpp:24
SPIWrapper SPI
Global SPI instance used by Arduino API and direct access.
Definition SPIWrapper.cpp:27
GPIOWrapper GPIO
Global GPIO instance used by Arduino API functions and direct access.
Definition GPIOWrapper.cpp:35