diff --git a/.gitignore b/.gitignore index 282b9af5..dc1ca01e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ # PlatformIO specific files test/README examples/platformio/cfa_code_test.cpp +examples/platformio/hac_driver_test.cpp +examples/platformio/hw_multi_mutex_test.cpp +examples/platformio/hw_mutex_test.cpp # Template files for CRSF for Arduino templates/ diff --git a/src/CFA_Config.hpp b/src/CFA_Config.hpp index 036101c2..c7f17c50 100644 --- a/src/CFA_Config.hpp +++ b/src/CFA_Config.hpp @@ -39,8 +39,8 @@ See https://semver.org/ for more information. */ #define CRSFFORARDUINO_VERSION "1.1.0" #define CRSFFORARDUINO_VERSION_DATE "2024-3-8" #define CRSFFORARDUINO_VERSION_MAJOR 1 -#define CRSFFORARDUINO_VERSION_MINOR 0 -#define CRSFFORARDUINO_VERSION_PATCH 1 +#define CRSFFORARDUINO_VERSION_MINOR 1 +#define CRSFFORARDUINO_VERSION_PATCH 0 /* Failsafe Options - CRSF_FAILSAFE_LQI_THRESHOLD: The minimum LQI value for the receiver to be considered connected. diff --git a/src/CRSFforArduino.cpp b/src/CRSFforArduino.cpp index 2f6d3a66..8651480b 100644 --- a/src/CRSFforArduino.cpp +++ b/src/CRSFforArduino.cpp @@ -34,7 +34,16 @@ namespace sketchLayer * @brief Construct a new CRSFforArduino object. * */ - CRSFforArduino::CRSFforArduino() + CRSFforArduino::CRSFforArduino() : SerialReceiver() + { + } + + /** + * @brief Construct a new CRSFforArduino object with the specified serial port. + * + * @param serialPort + */ + CRSFforArduino::CRSFforArduino(HardwareSerial *serialPort) : SerialReceiver(serialPort) { } @@ -44,7 +53,7 @@ namespace sketchLayer * @param rxPin * @param txPin */ - CRSFforArduino::CRSFforArduino(HardwareSerial *serialPort) + CRSFforArduino::CRSFforArduino(HardwareSerial *serialPort, int rxPin, int txPin) : SerialReceiver(serialPort, rxPin, txPin) { } diff --git a/src/CRSFforArduino.hpp b/src/CRSFforArduino.hpp index 211aad6e..606f6713 100644 --- a/src/CRSFforArduino.hpp +++ b/src/CRSFforArduino.hpp @@ -37,6 +37,7 @@ namespace sketchLayer public: CRSFforArduino(); CRSFforArduino(HardwareSerial *serialPort); + CRSFforArduino(HardwareSerial *serialPort, int rxPin, int txPin); ~CRSFforArduino(); bool begin(); void end(); diff --git a/src/SerialReceiver/SerialReceiver.cpp b/src/SerialReceiver/SerialReceiver.cpp index b8f931dd..81dc96ca 100644 --- a/src/SerialReceiver/SerialReceiver.cpp +++ b/src/SerialReceiver/SerialReceiver.cpp @@ -43,6 +43,20 @@ namespace serialReceiverLayer #elif defined(HAVE_HWSERIAL3) _uart = &Serial3; #endif +#elif defined(ARDUINO_ARCH_ESP32) + _uart = &Serial1; + +#if defined(D0) + _rxPin = D0; +#else + _rxPin = 0; +#endif + +#if defined(D1) + _txPin = D1; +#else + _txPin = 1; +#endif #else _uart = &Serial1; #endif @@ -62,6 +76,43 @@ namespace serialReceiverLayer { _uart = hwUartPort; +#if defined(ARDUINO_ARCH_ESP32) + #if defined(D0) + _rxPin = D0; +#else + _rxPin = 0; +#endif + +#if defined(D1) + _txPin = D1; +#else + _txPin = 1; +#endif +#endif + +#if CRSF_RC_ENABLED > 0 + _rcChannels = new rcChannels_t; + _rcChannels->valid = false; + _rcChannels->failsafe = false; + memset(_rcChannels->value, 0, sizeof(_rcChannels->value)); +#if CRSF_FLIGHTMODES_ENABLED > 0 + _flightModes = new flightMode_t[FLIGHT_MODE_COUNT]; +#endif +#endif + } + + SerialReceiver::SerialReceiver(HardwareSerial *hwUartPort, int8_t rxPin, int8_t txPin) + { + _uart = hwUartPort; + +#if defined(ARDUINO_ARCH_ESP32) + _rxPin = rxPin; + _txPin = txPin; +#else + (void)rxPin; + (void)txPin; +#endif + #if CRSF_RC_ENABLED > 0 _rcChannels = new rcChannels_t; _rcChannels->valid = false; @@ -77,6 +128,9 @@ namespace serialReceiverLayer { _uart = nullptr; + _rxPin = -1; + _txPin = -1; + #if CRSF_RC_ENABLED > 0 delete _rcChannels; _rcChannels = nullptr; @@ -155,7 +209,11 @@ namespace serialReceiverLayer crsf = new CRSF(); crsf->begin(); crsf->setFrameTime(BAUD_RATE, 10); +#if defined(ARDUINO_ARCH_ESP32) + _uart->begin(BAUD_RATE, SERIAL_8N1, _rxPin, _txPin); +#else _uart->begin(BAUD_RATE); +#endif #if CRSF_TELEMETRY_ENABLED > 0 telemetry = new Telemetry(); diff --git a/src/SerialReceiver/SerialReceiver.hpp b/src/SerialReceiver/SerialReceiver.hpp index 106d1a1e..41814075 100644 --- a/src/SerialReceiver/SerialReceiver.hpp +++ b/src/SerialReceiver/SerialReceiver.hpp @@ -75,6 +75,7 @@ namespace serialReceiverLayer public: SerialReceiver(); SerialReceiver(HardwareSerial *hwUartPort); + SerialReceiver(HardwareSerial *hwUartPort, int8_t rxPin, int8_t txPin); virtual ~SerialReceiver(); bool begin(); @@ -116,6 +117,9 @@ namespace serialReceiverLayer CRSF *crsf; HardwareSerial *_uart; + int8_t _rxPin = -1; + int8_t _txPin = -1; + #if CRSF_TELEMETRY_ENABLED > 0 Telemetry *telemetry; #endif