From 2e3046520c4ada0619108715e9e6a5bf09e16d61 Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Thu, 30 Jan 2025 23:29:21 +0200 Subject: [PATCH 01/13] Fixed issues with print(int)/println(int) hides virtual functions with radix argument for Serial console --- ArduinoCore-Linux/cores/arduino/ArdStdio.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ArduinoCore-Linux/cores/arduino/ArdStdio.h b/ArduinoCore-Linux/cores/arduino/ArdStdio.h index d47a3ea..0378447 100644 --- a/ArduinoCore-Linux/cores/arduino/ArdStdio.h +++ b/ArduinoCore-Linux/cores/arduino/ArdStdio.h @@ -21,7 +21,7 @@ class StdioDevice : public Stream { ~StdioDevice(){ } - + virtual void begin(int speed){ // nothing to be done } @@ -36,13 +36,13 @@ class StdioDevice : public Stream { if (auto_flush) flush(); } - virtual void print(int str){ - std::cout << str; + virtual void print(int val, int radix = DEC){ + if (radix == DEC) { std::cout << val; } else { Stream::print(val, radix); } if (auto_flush) flush(); } - virtual void println(int str){ - std::cout << str << "\n"; + virtual void println(int val, int radix = DEC){ + if (radix == DEC) { std::cout << val << "\n"; } else { Stream::println(val, radix); } if (auto_flush) flush(); } From 3a207e94c9a7855592a001aad003c1f68280249e Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Thu, 30 Jan 2025 23:31:13 +0200 Subject: [PATCH 02/13] Added typecast to bool operator for Serial console emulator (to simulate port ready check) --- ArduinoCore-Linux/cores/arduino/ArdStdio.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ArduinoCore-Linux/cores/arduino/ArdStdio.h b/ArduinoCore-Linux/cores/arduino/ArdStdio.h index 0378447..4849e35 100644 --- a/ArduinoCore-Linux/cores/arduino/ArdStdio.h +++ b/ArduinoCore-Linux/cores/arduino/ArdStdio.h @@ -22,6 +22,8 @@ class StdioDevice : public Stream { ~StdioDevice(){ } + operator bool() const { return true; } // For classic while(!Serial) { ... } pattern for USB ready wait + virtual void begin(int speed){ // nothing to be done } From b511b211c35390a7fad18aef881bfb34e341c5e9 Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Thu, 30 Jan 2025 23:32:20 +0200 Subject: [PATCH 03/13] Added guard code to support empty implementation of GPIO provider --- .../cores/arduino/HardwareGPIO.cpp | 50 ++++++++++++++----- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/ArduinoCore-Linux/cores/arduino/HardwareGPIO.cpp b/ArduinoCore-Linux/cores/arduino/HardwareGPIO.cpp index 68e0e49..f8f24a8 100644 --- a/ArduinoCore-Linux/cores/arduino/HardwareGPIO.cpp +++ b/ArduinoCore-Linux/cores/arduino/HardwareGPIO.cpp @@ -11,50 +11,76 @@ namespace arduino { void pinMode(pin_size_t pinNumber, PinMode pinMode){ - Hardware.gpio->pinMode(pinNumber,pinMode); + if (Hardware.gpio != nullptr) { + Hardware.gpio->pinMode(pinNumber,pinMode); + } } void digitalWrite(pin_size_t pinNumber, PinStatus status){ - Hardware.gpio->digitalWrite(pinNumber, status); + if (Hardware.gpio != nullptr) { + Hardware.gpio->digitalWrite(pinNumber, status); + } } PinStatus digitalRead(pin_size_t pinNumber){ - return Hardware.gpio->digitalRead(pinNumber); + if (Hardware.gpio != nullptr) { + return Hardware.gpio->digitalRead(pinNumber); + } else { + return HIGH; // return high, simulate weak pullup + } } int analogRead(pin_size_t pinNumber){ - return Hardware.gpio->analogRead(pinNumber); + if (Hardware.gpio != nullptr) { + return Hardware.gpio->analogRead(pinNumber); + } else { + return 0; + } } void analogReference(uint8_t mode){ - Hardware.gpio->analogReference(mode); + if (Hardware.gpio != nullptr) { + Hardware.gpio->analogReference(mode); + } } void analogWrite(pin_size_t pinNumber, int value){ - Hardware.gpio->analogWrite(pinNumber, value); + if (Hardware.gpio != nullptr) { + Hardware.gpio->analogWrite(pinNumber, value); + } } // Generates a square wave of the specified frequency (and 50% duty cycle) on a pin void tone(uint8_t pinNumber, unsigned int frequency, unsigned long duration = 0){ - Hardware.gpio->tone(pinNumber, frequency, duration); - + if (Hardware.gpio != nullptr) { + Hardware.gpio->tone(pinNumber, frequency, duration); + } } // Stops the generation of a square wave triggered by tone() void noTone(uint8_t pinNumber){ - Hardware.gpio->noTone(pinNumber); + if (Hardware.gpio != nullptr) { + Hardware.gpio->noTone(pinNumber); + } } /// Reads a pulse (either HIGH or LOW) on a pin unsigned long pulseIn(uint8_t pinNumber, uint8_t state, unsigned long timeout = 1000000L){ - return Hardware.gpio->pulseIn(pinNumber, state, timeout); - + if (Hardware.gpio != nullptr) { + return Hardware.gpio->pulseIn(pinNumber, state, timeout); + } else { + return 0; + } } /// Reads a pulse (either HIGH or LOW) on a pin unsigned long pulseInLong(uint8_t pinNumber, uint8_t state, unsigned long timeout = 1000000L){ - return Hardware.gpio->pulseInLong(pinNumber, state, timeout); + if (Hardware.gpio != nullptr) { + return Hardware.gpio->pulseInLong(pinNumber, state, timeout); + } else { + return 0; + } } From 1800fe0585496f348c42dd67facfe80d225db2b6 Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Thu, 30 Jan 2025 23:37:13 +0200 Subject: [PATCH 04/13] Added guard code to support empty implementation of SPI provider --- .../cores/arduino/HardwareSPI.cpp | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/ArduinoCore-Linux/cores/arduino/HardwareSPI.cpp b/ArduinoCore-Linux/cores/arduino/HardwareSPI.cpp index 1fb605a..34b9a5d 100644 --- a/ArduinoCore-Linux/cores/arduino/HardwareSPI.cpp +++ b/ArduinoCore-Linux/cores/arduino/HardwareSPI.cpp @@ -13,47 +13,73 @@ namespace arduino { //HardwareSPI::~HardwareSPI() {} uint8_t HardwareSPI::transfer(uint8_t data) { - return Hardware.spi->transfer(data); + if (Hardware.spi != nullptr) { + return Hardware.spi->transfer(data); + } else { + return 0; + } } uint16_t HardwareSPI::transfer16(uint16_t data) { - return Hardware.spi->transfer16(data); + if (Hardware.spi != nullptr) { + return Hardware.spi->transfer16(data); + } else { + return 0; + } } void HardwareSPI::transfer(void *data, size_t count) { - Hardware.spi->transfer(data, count); + if (Hardware.spi != nullptr) { + Hardware.spi->transfer(data, count); + } } void HardwareSPI::usingInterrupt(int interruptNumber) { - Hardware.spi->usingInterrupt(interruptNumber); + if (Hardware.spi != nullptr) { + Hardware.spi->usingInterrupt(interruptNumber); + } } void HardwareSPI::notUsingInterrupt(int interruptNumber){ - Hardware.spi->notUsingInterrupt(interruptNumber); + if (Hardware.spi != nullptr) { + Hardware.spi->notUsingInterrupt(interruptNumber); + } } void HardwareSPI::beginTransaction(SPISettings settings){ - Hardware.spi->beginTransaction(settings); + if (Hardware.spi != nullptr) { + Hardware.spi->beginTransaction(settings); + } } void HardwareSPI::endTransaction(void){ - Hardware.spi->endTransaction(); + if (Hardware.spi != nullptr) { + Hardware.spi->endTransaction(); + } } void HardwareSPI::attachInterrupt() { - Hardware.spi->attachInterrupt(); + if (Hardware.spi != nullptr) { + Hardware.spi->attachInterrupt(); + } } void HardwareSPI::detachInterrupt(){ - Hardware.spi->detachInterrupt(); + if (Hardware.spi != nullptr) { + Hardware.spi->detachInterrupt(); + } } void HardwareSPI::begin() { - Hardware.spi->begin(); + if (Hardware.spi != nullptr) { + Hardware.spi->begin(); + } } void HardwareSPI::end() { - Hardware.spi->end(); + if (Hardware.spi != nullptr) { + Hardware.spi->end(); + } } } \ No newline at end of file From d3756a10171375f4399dd8ad9008c8a86bf6267e Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Thu, 30 Jan 2025 23:38:43 +0200 Subject: [PATCH 05/13] Added guard code to support empty implementation of I2C provider --- .../cores/arduino/HardwareI2CEx.cpp | 45 ++++++++++++++----- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/ArduinoCore-Linux/cores/arduino/HardwareI2CEx.cpp b/ArduinoCore-Linux/cores/arduino/HardwareI2CEx.cpp index 8393219..a1a393c 100644 --- a/ArduinoCore-Linux/cores/arduino/HardwareI2CEx.cpp +++ b/ArduinoCore-Linux/cores/arduino/HardwareI2CEx.cpp @@ -9,40 +9,65 @@ namespace arduino { void HardwareI2CEx::begin() { - Hardware.i2c->begin(); + if (Hardware.i2c != nullptr) { + Hardware.i2c->begin(); + } } void HardwareI2CEx::begin(uint8_t address) { - Hardware.i2c->begin(address); + if (Hardware.i2c != nullptr) { + Hardware.i2c->begin(address); + } } void HardwareI2CEx::end(){ - Hardware.i2c->end(); + if (Hardware.i2c != nullptr) { + Hardware.i2c->end(); + } } void HardwareI2CEx::setClock(uint32_t freq){ - Hardware.i2c->setClock(freq); + if (Hardware.i2c != nullptr) { + Hardware.i2c->setClock(freq); + } } void HardwareI2CEx::beginTransmission(uint8_t address){ - Hardware.i2c->beginTransmission(address); + if (Hardware.i2c != nullptr) { + Hardware.i2c->beginTransmission(address); + } } uint8_t HardwareI2CEx::endTransmission(bool stopBit){ - return Hardware.i2c->endTransmission(stopBit); + if (Hardware.i2c != nullptr) { + return Hardware.i2c->endTransmission(stopBit); + } else { + return 0; + } } uint8_t HardwareI2CEx::endTransmission(void){ - return Hardware.i2c->endTransmission(); + if (Hardware.i2c != nullptr) { + return Hardware.i2c->endTransmission(); + } else { + return 0; + } } size_t HardwareI2CEx::requestFrom(uint8_t address, size_t len, bool stopBit){ - return Hardware.i2c->requestFrom(address,len,stopBit); - + if (Hardware.i2c != nullptr) { + return Hardware.i2c->requestFrom(address,len,stopBit); + } else { + return 0; + } } size_t HardwareI2CEx::requestFrom(uint8_t address, size_t len){ - return Hardware.i2c->requestFrom(address,len); + if (Hardware.i2c != nullptr) { + return Hardware.i2c->requestFrom(address,len); + } else { + return 0; + } } From 5bf7fce4e4b40e625f5932d1983aa9e7d6003181 Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Thu, 30 Jan 2025 23:45:30 +0200 Subject: [PATCH 06/13] Added support for MSVC compilation (MSVC implementation without VLA) --- ArduinoCore-Linux/cores/arduino/RemoteSerial.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ArduinoCore-Linux/cores/arduino/RemoteSerial.h b/ArduinoCore-Linux/cores/arduino/RemoteSerial.h index 7d9ee00..c4eaafc 100644 --- a/ArduinoCore-Linux/cores/arduino/RemoteSerial.h +++ b/ArduinoCore-Linux/cores/arduino/RemoteSerial.h @@ -101,12 +101,21 @@ class RemoteSerialImpl : public Stream { } void flush() { + #if defined(_MSC_VER) + int available; + while((available = write_buffer.available()) > 0){ + uint8_t buffer[max_buffer_len]; + write_buffer.read(buffer, min(available, max_buffer_len)); + write(buffer, min(available, max_buffer_len)); + } + #else int available = write_buffer.available(); if (available>0){ uint8_t buffer[available]; write_buffer.read(buffer, available); write(buffer, available); } + #endif service->send(SerialFlush); service->send(no); service->flush(); @@ -116,7 +125,11 @@ class RemoteSerialImpl : public Stream { protected: HardwareService *service; uint8_t no; + #if defined(_MSC_VER) + static constexpr int max_buffer_len = 512; // MSVC does not support VLA + #else int max_buffer_len = 512; + #endif RingBufferExt write_buffer; RingBufferExt read_buffer; From 856cb6cd0f26787fea431b2643663592a297bcb1 Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Thu, 30 Jan 2025 23:47:49 +0200 Subject: [PATCH 07/13] Added guard code to support empty implementation of GPIO provider --- ArduinoCore-Linux/cores/arduino/Arduino.cpp | 49 ++++++++++++++++----- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/ArduinoCore-Linux/cores/arduino/Arduino.cpp b/ArduinoCore-Linux/cores/arduino/Arduino.cpp index 2044225..f6ac181 100644 --- a/ArduinoCore-Linux/cores/arduino/Arduino.cpp +++ b/ArduinoCore-Linux/cores/arduino/Arduino.cpp @@ -77,34 +77,63 @@ unsigned long micros(void){ } void pinMode(pin_size_t pinNumber, PinMode pinMode){ - Hardware.gpio->pinMode(pinNumber,pinMode); + if (Hardware.gpio != nullptr) { + Hardware.gpio->pinMode(pinNumber,pinMode); + } } void digitalWrite(pin_size_t pinNumber, PinStatus status) { - Hardware.gpio->digitalWrite(pinNumber,status); + if (Hardware.gpio != nullptr) { + Hardware.gpio->digitalWrite(pinNumber,status); + } } PinStatus digitalRead(pin_size_t pinNumber) { - return Hardware.gpio->digitalRead(pinNumber); + if (Hardware.gpio != nullptr) { + return Hardware.gpio->digitalRead(pinNumber); + } else { + return HIGH; //sumulate input pullup + } } int analogRead(pin_size_t pinNumber){ - return Hardware.gpio->analogRead(pinNumber); + if (Hardware.gpio != nullptr) { + return Hardware.gpio->analogRead(pinNumber); + } else { + return 0; + } + } void analogReference(uint8_t mode){ - Hardware.gpio->analogReference(mode); + if (Hardware.gpio != nullptr) { + Hardware.gpio->analogReference(mode); + } } void analogWrite(pin_size_t pinNumber, int value) { - Hardware.gpio->analogWrite(pinNumber,value); + if (Hardware.gpio != nullptr) { + Hardware.gpio->analogWrite(pinNumber,value); + } } void tone(uint8_t pinNumber, unsigned int frequency, unsigned long duration) { - Hardware.gpio->tone(pinNumber,frequency,duration); + if (Hardware.gpio != nullptr) { + Hardware.gpio->tone(pinNumber,frequency,duration); + } } void noTone(uint8_t pinNumber) { - Hardware.gpio->noTone(pinNumber); + if (Hardware.gpio != nullptr) { + Hardware.gpio->noTone(pinNumber); + } } unsigned long pulseIn(uint8_t pinNumber, uint8_t state, unsigned long timeout){ - return Hardware.gpio->pulseIn(pinNumber, state, timeout); + if (Hardware.gpio != nullptr) { + return Hardware.gpio->pulseIn(pinNumber, state, timeout); + } else { + return 0; + } } unsigned long pulseInLong(uint8_t pinNumber, uint8_t state, unsigned long timeout){ - return Hardware.gpio->pulseInLong(pinNumber, state, timeout); + if (Hardware.gpio != nullptr) { + return Hardware.gpio->pulseInLong(pinNumber, state, timeout); + } else { + return 0; + } } void yield(){ From fd6e31b3758f59bcc4cd53186e45c618dbdae6db Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Wed, 10 Sep 2025 13:46:44 +0300 Subject: [PATCH 08/13] Added ability to compile and work without WiFiUDP --- ArduinoCore-Linux/cores/arduino/Arduino.cpp | 6 +++++- ArduinoCore-Linux/cores/arduino/WiFiUdp.cpp | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ArduinoCore-Linux/cores/arduino/Arduino.cpp b/ArduinoCore-Linux/cores/arduino/Arduino.cpp index f6ac181..14ad923 100644 --- a/ArduinoCore-Linux/cores/arduino/Arduino.cpp +++ b/ArduinoCore-Linux/cores/arduino/Arduino.cpp @@ -10,9 +10,11 @@ #include "PluggableUSB.h" #include "RemoteSerial.h" #include "Hardware.h" +#if defined(PROVIDE_HARDWARE_AS_WIFI) #include "HardwareSetup.h" #include "WiFi.h" #include "WiFiClient.h" +#endif #include "PluggableUSB.h" #include "deprecated-avr-comp/avr/dtostrf.h" #include "ArduinoLogger.h" @@ -22,10 +24,12 @@ namespace arduino { ArduinoLogger Logger; // Support for logging -WifiMock WiFi; // So that we can use the WiFi StdioDevice Serial; // output to screen HardwareImpl Hardware; // implementation for gpio, spi, i2c +#if defined(PROVIDE_HARDWARE_AS_WIFI) +WifiMock WiFi; // So that we can use the WiFi HardwareSetupImpl HardwareSetup; // setup for implementation +#endif #if PROVIDE_SERIALLIB SerialImpl Serial1("/dev/ttyACM0"); // output to serial port #endif diff --git a/ArduinoCore-Linux/cores/arduino/WiFiUdp.cpp b/ArduinoCore-Linux/cores/arduino/WiFiUdp.cpp index b417eef..6753617 100644 --- a/ArduinoCore-Linux/cores/arduino/WiFiUdp.cpp +++ b/ArduinoCore-Linux/cores/arduino/WiFiUdp.cpp @@ -16,8 +16,8 @@ #include "WiFiUdp.h" //#include //#include -#include -#include +////#include +////#include #include #include From b615f35fe94b122417847b953fd173eda69eeb9c Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Wed, 10 Sep 2025 15:27:47 +0300 Subject: [PATCH 09/13] Reverted changed to WiFiUdp.cpp as it should be excluded completely under Windows --- ArduinoCore-Linux/cores/arduino/WiFiUdp.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ArduinoCore-Linux/cores/arduino/WiFiUdp.cpp b/ArduinoCore-Linux/cores/arduino/WiFiUdp.cpp index 6753617..b417eef 100644 --- a/ArduinoCore-Linux/cores/arduino/WiFiUdp.cpp +++ b/ArduinoCore-Linux/cores/arduino/WiFiUdp.cpp @@ -16,8 +16,8 @@ #include "WiFiUdp.h" //#include //#include -////#include -////#include +#include +#include #include #include From 06539c428eff01595075d555ef64db9398978bb2 Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Wed, 10 Sep 2025 15:29:59 +0300 Subject: [PATCH 10/13] By default, compile path for linux works as before, for windows added some _SKIP defines to skip WiFi --- ArduinoCore-Linux/cores/arduino/Arduino.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ArduinoCore-Linux/cores/arduino/Arduino.cpp b/ArduinoCore-Linux/cores/arduino/Arduino.cpp index 14ad923..323b9e1 100644 --- a/ArduinoCore-Linux/cores/arduino/Arduino.cpp +++ b/ArduinoCore-Linux/cores/arduino/Arduino.cpp @@ -10,8 +10,14 @@ #include "PluggableUSB.h" #include "RemoteSerial.h" #include "Hardware.h" -#if defined(PROVIDE_HARDWARE_AS_WIFI) +#if defined(PROVIDE_HARDWARE_SETUP_SKIP) +// Not available for Windows / MSVC +#else #include "HardwareSetup.h" +#endif +#if defined(PROVIDE_HARDWARE_WIFI_SKIP) +// Not available for Windows / MSVC +#else #include "WiFi.h" #include "WiFiClient.h" #endif @@ -26,8 +32,12 @@ namespace arduino { ArduinoLogger Logger; // Support for logging StdioDevice Serial; // output to screen HardwareImpl Hardware; // implementation for gpio, spi, i2c -#if defined(PROVIDE_HARDWARE_AS_WIFI) +#if defined(PROVIDE_HARDWARE_WIFI_SKIP) +#else WifiMock WiFi; // So that we can use the WiFi +#endif +#if defined(PROVIDE_HARDWARE_SETUP_SKIP) +#else HardwareSetupImpl HardwareSetup; // setup for implementation #endif #if PROVIDE_SERIALLIB From 43900890b99001f82fcf4cb2a4fad5bd4c03f494 Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Wed, 10 Sep 2025 15:39:46 +0300 Subject: [PATCH 11/13] Added _USE_MATH_DEFINES for MSVC compile --- ArduinoCore-API/api/ArduinoAPI.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ArduinoCore-API/api/ArduinoAPI.h b/ArduinoCore-API/api/ArduinoAPI.h index 72bab93..936c995 100644 --- a/ArduinoCore-API/api/ArduinoAPI.h +++ b/ArduinoCore-API/api/ArduinoAPI.h @@ -44,6 +44,11 @@ #include #include #include + +#if defined(_MSC_VER) && !defined(M_PI) && !defined(_USE_MATH_DEFINES) +#define _USE_MATH_DEFINES +#endif + #include #ifdef __cplusplus From da14e0138662c3250f5d519aaca944e570f135d5 Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Wed, 10 Sep 2025 16:04:33 +0300 Subject: [PATCH 12/13] Moved MSVC defined to ArduinoCore-Linux, to keep ArduinoCore-API more "clean" (to make easier to merge in future) --- ArduinoCore-API/api/ArduinoAPI.h | 5 ----- ArduinoCore-Linux/cores/arduino/Arduino.h | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/ArduinoCore-API/api/ArduinoAPI.h b/ArduinoCore-API/api/ArduinoAPI.h index 936c995..72bab93 100644 --- a/ArduinoCore-API/api/ArduinoAPI.h +++ b/ArduinoCore-API/api/ArduinoAPI.h @@ -44,11 +44,6 @@ #include #include #include - -#if defined(_MSC_VER) && !defined(M_PI) && !defined(_USE_MATH_DEFINES) -#define _USE_MATH_DEFINES -#endif - #include #ifdef __cplusplus diff --git a/ArduinoCore-Linux/cores/arduino/Arduino.h b/ArduinoCore-Linux/cores/arduino/Arduino.h index 17b3942..120a1de 100644 --- a/ArduinoCore-Linux/cores/arduino/Arduino.h +++ b/ArduinoCore-Linux/cores/arduino/Arduino.h @@ -20,6 +20,10 @@ # define HOST #endif +#if defined(_MSC_VER) && !defined(M_PI) && !defined(_USE_MATH_DEFINES) +#define _USE_MATH_DEFINES // to provide const like M_PI via +#endif + #include "ArduinoAPI.h" #include "ArdStdio.h" #include "ArduinoLogger.h" From a72872d3371b185bcbff1d818c81a307eb1b07b0 Mon Sep 17 00:00:00 2001 From: Serge Ageyev Date: Wed, 10 Sep 2025 16:05:54 +0300 Subject: [PATCH 13/13] Added final tune to MSVC compilation --- ArduinoCore-Linux/cores/arduino/Arduino.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ArduinoCore-Linux/cores/arduino/Arduino.h b/ArduinoCore-Linux/cores/arduino/Arduino.h index 120a1de..c887ef0 100644 --- a/ArduinoCore-Linux/cores/arduino/Arduino.h +++ b/ArduinoCore-Linux/cores/arduino/Arduino.h @@ -24,6 +24,18 @@ #define _USE_MATH_DEFINES // to provide const like M_PI via #endif +#if defined(_MSC_VER) +// Not available under MSVC +#define __attribute__(x) // nothing +#define __builtin_constant_p(x) (0) // non-constant +#endif + +#if defined(_MSC_VER) +// Temporary unsupported under Win/MSVC +#define PROVIDE_HARDWARE_SETUP_SKIP +#define PROVIDE_HARDWARE_WIFI_SKIP +#endif + #include "ArduinoAPI.h" #include "ArdStdio.h" #include "ArduinoLogger.h"