From 55d8a24f55a08602463d96a539ebf2f8e93ea5a6 Mon Sep 17 00:00:00 2001 From: Jonny Date: Wed, 6 Aug 2025 20:28:55 +0100 Subject: [PATCH] Add more Arduino/FreeRTOS test stubs so that eModbus builds in ESP32 mode. --- test/CMakeLists.txt | 10 +++++++--- test/emul/Arduino.cpp | 11 +++++++++++ test/emul/Arduino.h | 9 +++++++++ test/emul/HardwareSerial.h | 11 ++++++++++- test/emul/Print.h | 9 ++++++++- test/emul/Stream.h | 8 +++++++- test/emul/freertos/FreeRTOS.cpp | 10 ++++++++++ test/emul/freertos/FreeRTOS.h | 21 +++++++++++++++++++++ test/emul/freertos/task.h | 2 ++ test/emul/serial.cpp | 2 +- test/safety_tests.cpp | 1 - test/tests.cpp | 3 --- 12 files changed, 86 insertions(+), 11 deletions(-) create mode 100644 test/emul/freertos/FreeRTOS.cpp create mode 100644 test/emul/freertos/FreeRTOS.h create mode 100644 test/emul/freertos/task.h diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5aa74ad9..d945a8c0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -62,7 +62,7 @@ include_directories("${source_dir}/googletest/include" include_directories(emul) # For eModBus -add_compile_definitions(__linux__ HW_LILYGO NISSAN_LEAF_BATTERY) +add_compile_definitions(ESP32 HW_LILYGO NISSAN_LEAF_BATTERY) # add the executable add_executable(tests @@ -74,9 +74,12 @@ add_executable(tests ../Software/src/devboard/utils/events.cpp ../Software/src/datalayer/datalayer.cpp ../Software/src/datalayer/datalayer_extended.cpp - ../Software/src/lib/eModbus-eModbus/ModbusMessage.cpp - ../Software/src/lib/eModbus-eModbus/ModbusTypeDefs.cpp ../Software/src/lib/eModbus-eModbus/Logging.cpp + ../Software/src/lib/eModbus-eModbus/ModbusMessage.cpp + ../Software/src/lib/eModbus-eModbus/ModbusServer.cpp + ../Software/src/lib/eModbus-eModbus/ModbusServerRTU.cpp + ../Software/src/lib/eModbus-eModbus/ModbusTypeDefs.cpp + ../Software/src/lib/eModbus-eModbus/RTUutils.cpp # ../Software/src/lib/eModbus-eModbus/scripts/mbServerFCs.cpp ../Software/USER_SETTINGS.cpp ../Software/src/battery/BATTERIES.cpp @@ -90,6 +93,7 @@ add_executable(tests emul/time.cpp emul/serial.cpp emul/Arduino.cpp + emul/freertos/FreeRTOS.cpp ) target_link_libraries(tests diff --git a/test/emul/Arduino.cpp b/test/emul/Arduino.cpp index b2b85522..1f6940df 100644 --- a/test/emul/Arduino.cpp +++ b/test/emul/Arduino.cpp @@ -1,5 +1,16 @@ #include "Arduino.h" +void delay(unsigned long ms) {} +void delayMicroseconds(unsigned long us) {} +int digitalRead(uint8_t pin) { + return 0; +} +void digitalWrite(uint8_t pin, uint8_t val) {} +unsigned long micros() { + return 0; +} +void pinMode(uint8_t pin, uint8_t mode) {} + int max(int a, int b) { return (a > b) ? a : b; } diff --git a/test/emul/Arduino.h b/test/emul/Arduino.h index c3ae2da7..8024518d 100644 --- a/test/emul/Arduino.h +++ b/test/emul/Arduino.h @@ -1,7 +1,13 @@ #ifndef ARDUINO_H #define ARDUINO_H +#include #include +#include +#include + +#include "HardwareSerial.h" +#include "Print.h" #include "esp-hal-gpio.h" @@ -9,10 +15,13 @@ void pinMode(uint8_t pin, uint8_t mode); void digitalWrite(uint8_t pin, uint8_t val); int digitalRead(uint8_t pin); +unsigned long micros(); // Can be previously declared as a macro in stupid eModbus #undef millis unsigned long millis(); +void delay(unsigned long ms); +void delayMicroseconds(unsigned long us); int max(int a, int b); #endif diff --git a/test/emul/HardwareSerial.h b/test/emul/HardwareSerial.h index 3145d322..e20000a2 100644 --- a/test/emul/HardwareSerial.h +++ b/test/emul/HardwareSerial.h @@ -2,6 +2,8 @@ #define HARDWARESERIAL_H #include +#include +#include "Print.h" #include "Stream.h" enum SerialConfig { @@ -33,11 +35,18 @@ enum SerialConfig { class HardwareSerial : public Stream { public: + int available() { return 0; } + uint32_t baudRate() { return 9600; } void begin(unsigned long baud, uint32_t config = SERIAL_8N1, int8_t rxPin = -1, int8_t txPin = -1, bool invert = false, unsigned long timeout_ms = 20000UL, uint8_t rxfifo_full_thrhd = 120) {} + int read() { return 0; } + void setTxBufferSize(uint16_t size) {} + void setRxBufferSize(uint16_t size) {} + bool setRxFIFOFull(uint8_t fifoBytes) { return false; } + size_t write(uint8_t) { return 0; } }; -extern HardwareSerial Serial0; +extern HardwareSerial Serial; extern HardwareSerial Serial1; extern HardwareSerial Serial2; diff --git a/test/emul/Print.h b/test/emul/Print.h index 4a4d7edc..eb715272 100644 --- a/test/emul/Print.h +++ b/test/emul/Print.h @@ -1,6 +1,13 @@ #ifndef PRINT_H #define PRINT_H -class Print {}; +class Print { + public: + virtual void flush() {} + void printf(const char* format, ...) {} + virtual size_t write(uint8_t) = 0; + virtual size_t write(const char* s) { return 0; } + virtual size_t write(const uint8_t* buffer, size_t size) { return 0; } +}; #endif diff --git a/test/emul/Stream.h b/test/emul/Stream.h index bd9b3b5f..c1847603 100644 --- a/test/emul/Stream.h +++ b/test/emul/Stream.h @@ -1,6 +1,12 @@ #ifndef STREAM_H #define STREAM_H -class Stream {}; +#include "Print.h" + +class Stream : public Print { + public: + virtual int available() = 0; + virtual int read() = 0; +}; #endif diff --git a/test/emul/freertos/FreeRTOS.cpp b/test/emul/freertos/FreeRTOS.cpp new file mode 100644 index 00000000..6c5e9e58 --- /dev/null +++ b/test/emul/freertos/FreeRTOS.cpp @@ -0,0 +1,10 @@ +#include "FreeRTOS.h" + +extern "C" { +BaseType_t xTaskCreatePinnedToCore(TaskFunction_t pxTaskCode, const char* const pcName, const uint32_t ulStackDepth, + void* const pvParameters, UBaseType_t uxPriority, TaskHandle_t* const pxCreatedTask, + const BaseType_t xCoreID) { + return 0; +} +void vTaskDelete(TaskHandle_t xTaskToDelete) {} +} diff --git a/test/emul/freertos/FreeRTOS.h b/test/emul/freertos/FreeRTOS.h new file mode 100644 index 00000000..9cd492ef --- /dev/null +++ b/test/emul/freertos/FreeRTOS.h @@ -0,0 +1,21 @@ +#ifndef _FREERTOS_H_ +#define _FREERTOS_H_ + +#include "task.h" + +#include + +typedef int BaseType_t; +typedef unsigned int UBaseType_t; + +const BaseType_t tskNO_AFFINITY = -1; + +extern "C" { +BaseType_t xTaskCreatePinnedToCore(TaskFunction_t pxTaskCode, const char* const pcName, const uint32_t ulStackDepth, + void* const pvParameters, UBaseType_t uxPriority, TaskHandle_t* const pxCreatedTask, + const BaseType_t xCoreID); + +void vTaskDelete(TaskHandle_t xTaskToDelete); +} + +#endif diff --git a/test/emul/freertos/task.h b/test/emul/freertos/task.h new file mode 100644 index 00000000..7462b68d --- /dev/null +++ b/test/emul/freertos/task.h @@ -0,0 +1,2 @@ +typedef void* TaskHandle_t; +typedef void (*TaskFunction_t)(void*); diff --git a/test/emul/serial.cpp b/test/emul/serial.cpp index 254416a4..4a551ba6 100644 --- a/test/emul/serial.cpp +++ b/test/emul/serial.cpp @@ -1,5 +1,5 @@ #include "HardwareSerial.h" -HardwareSerial Serial0; +HardwareSerial Serial; HardwareSerial Serial1; HardwareSerial Serial2; diff --git a/test/safety_tests.cpp b/test/safety_tests.cpp index d79d80a7..d6f5b55f 100644 --- a/test/safety_tests.cpp +++ b/test/safety_tests.cpp @@ -3,7 +3,6 @@ #include "../Software/src/datalayer/datalayer.h" #include "../Software/src/devboard/safety/safety.h" #include "../Software/src/devboard/utils/events.h" -#include "../Software/src/inverter/ModbusInverterProtocol.h" TEST(SafetyTests, ShouldSetEventWhenTemperatureTooHigh) { init_events(); diff --git a/test/tests.cpp b/test/tests.cpp index c37b1b55..29cf7241 100644 --- a/test/tests.cpp +++ b/test/tests.cpp @@ -4,7 +4,6 @@ #include "../Software/src/datalayer/datalayer.h" #include "../Software/src/devboard/safety/safety.h" #include "../Software/src/devboard/utils/events.h" -#include "../Software/src/inverter/ModbusInverterProtocol.h" int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); @@ -12,5 +11,3 @@ int main(int argc, char** argv) { } void store_settings_equipment_stop(void) {} - -ModbusInverterProtocol::ModbusInverterProtocol() {}