diff --git a/MyConfig.h b/MyConfig.h index 915d39490..e164f2063 100644 --- a/MyConfig.h +++ b/MyConfig.h @@ -249,6 +249,12 @@ */ //#define MY_RS485_DE_PIN (2) +/** + * @def MY_RS485_DE_INVERSE + * @brief Define this if RS485 driver enable pin polarity is inverted (low-active). + */ +//#define MY_RS485_DE_INVERSE + /** * @def MY_RS485_HWSERIAL * @brief Define this if RS485 is connected to a hardware serial port. @@ -2317,6 +2323,8 @@ #define MY_OTA_USE_I2C_EEPROM // RS485 #define MY_RS485 +#define MY_RS485_DE_PIN +#define MY_RS485_DE_INVERSE #define MY_RS485_HWSERIAL // RF24 #define MY_RADIO_RF24 diff --git a/hal/transport/RS485/MyTransportRS485.cpp b/hal/transport/RS485/MyTransportRS485.cpp index c774994a1..e0f3a8335 100644 --- a/hal/transport/RS485/MyTransportRS485.cpp +++ b/hal/transport/RS485/MyTransportRS485.cpp @@ -57,9 +57,13 @@ #endif #if defined(MY_RS485_DE_PIN) +#if !defined(MY_RS485_DE_INVERSE) #define assertDE() hwDigitalWrite(MY_RS485_DE_PIN, HIGH); delayMicroseconds(5) #define deassertDE() hwDigitalWrite(MY_RS485_DE_PIN, LOW) - +#else +#define assertDE() hwDigitalWrite(MY_RS485_DE_PIN, LOW); delayMicroseconds(5) +#define deassertDE() hwDigitalWrite(MY_RS485_DE_PIN, HIG) +#endif #else #define assertDE() #define deassertDE() @@ -264,7 +268,11 @@ bool transportSend(const uint8_t to, const void* data, const uint8_t len, const } #if defined(MY_RS485_DE_PIN) +#if !defined(MY_RS485_DE_INVERSE) hwDigitalWrite(MY_RS485_DE_PIN, HIGH); +#else + hwDigitalWrite(MY_RS485_DE_PIN, LOW); +#endif delayMicroseconds(5); #endif @@ -310,7 +318,11 @@ bool transportSend(const uint8_t to, const void* data, const uint8_t len, const _dev.flush(); #endif #endif +#if !defined(MY_RS485_DE_INVERSE) hwDigitalWrite(MY_RS485_DE_PIN, LOW); +#else + hwDigitalWrite(MY_RS485_DE_PIN, HIGH); +#endif #endif return true; } @@ -324,7 +336,11 @@ bool transportInit(void) _serialReset(); #if defined(MY_RS485_DE_PIN) hwPinMode(MY_RS485_DE_PIN, OUTPUT); +#if !defined(MY_RS485_DE_INVERSE) hwDigitalWrite(MY_RS485_DE_PIN, LOW); +#else + hwDigitalWrite(MY_RS485_DE_PIN, HIGH); +#endif #endif return true; } diff --git a/keywords.txt b/keywords.txt index feb2e6aaf..f245dbb54 100644 --- a/keywords.txt +++ b/keywords.txt @@ -233,6 +233,7 @@ MY_RFM69_TX_POWER_DBM LITERAL1 MY_RS485 LITERAL1 MY_RS485_BAUD_RATE LITERAL1 MY_RS485_DE_PIN LITERAL1 +MY_RS485_DE_INVERSE LITERAL1 MY_RS485_HWSERIAL LITERAL1 MY_RS485_MAX_MESSAGE_LENGTH LITERAL1 MY_RS485_SOH_COUNT LITERAL1