From d1060785fb4cd9054e9f76602c091940cf8d40f4 Mon Sep 17 00:00:00 2001 From: bernatalbet <30940179+bernatalbet@users.noreply.github.com> Date: Sat, 13 Apr 2024 18:36:42 +0200 Subject: [PATCH 1/3] Update ModbusMaster.cpp I created a class which inherits and extends the current functionality, so that now I can do this: void preTransmission() override { digitalWrite(mEnablePin, HIGH); // Enable Modbus communication } void postTransmission() override { digitalWrite(mEnablePin, LOW); // Disable Modbus communication } Where "mEnablePin" is passed as part of the constructor. In the current implementation, I tried to implement a solution to use different Enable pins in different instantiated objects, but then I must set static functions externally to the class, so I can't encapsulate the functionality to my inherited class. --- src/ModbusMaster.cpp | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/ModbusMaster.cpp b/src/ModbusMaster.cpp index 4169e58..ee9f13d 100644 --- a/src/ModbusMaster.cpp +++ b/src/ModbusMaster.cpp @@ -216,6 +216,29 @@ void ModbusMaster::postTransmission(void (*postTransmission)()) _postTransmission = postTransmission; } +/** +Function extends the preTransmission functionality, and we can now +inherit the class and override this method. + +@see ModbusMaster::ModbusMasterTransaction() +@see ModbusMaster::preTransmission() +*/ +void ModbusMaster::preTransmission() { + if (_preTransmission) + _preTransmission(); +} + +/** +Function extends the preTransmission functionality, and we can now +inherit the class and override this method. + +@see ModbusMaster::ModbusMasterTransaction() +@see ModbusMaster::preTransmission() +*/ +void ModbusMaster::postTransmission() { + if (_postTransmission) + _postTransmission(); +} /** Retrieve data from response buffer. @@ -705,10 +728,7 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction) while (_serial->read() != -1); // transmit request - if (_preTransmission) - { - _preTransmission(); - } + preTransmission(); for (i = 0; i < u8ModbusADUSize; i++) { _serial->write(u8ModbusADU[i]); @@ -716,10 +736,7 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction) u8ModbusADUSize = 0; _serial->flush(); // flush transmit buffer - if (_postTransmission) - { - _postTransmission(); - } + postTransmission(); // loop until we run out of time or bytes, or an error occurs u32StartTime = millis(); From 68e531907cc4593aed7df65b464c7ba038da5f41 Mon Sep 17 00:00:00 2001 From: bernatalbet <30940179+bernatalbet@users.noreply.github.com> Date: Sat, 13 Apr 2024 18:43:16 +0200 Subject: [PATCH 2/3] Small fix in the comment --- src/ModbusMaster.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ModbusMaster.cpp b/src/ModbusMaster.cpp index ee9f13d..0558353 100644 --- a/src/ModbusMaster.cpp +++ b/src/ModbusMaster.cpp @@ -229,11 +229,11 @@ void ModbusMaster::preTransmission() { } /** -Function extends the preTransmission functionality, and we can now +Function extends the postTransmission functionality, and we can now inherit the class and override this method. @see ModbusMaster::ModbusMasterTransaction() -@see ModbusMaster::preTransmission() +@see ModbusMaster::postTransmission() */ void ModbusMaster::postTransmission() { if (_postTransmission) From 6f810ac5d7214142500d861ecc2cb44632f7b2ba Mon Sep 17 00:00:00 2001 From: bernatalbet <30940179+bernatalbet@users.noreply.github.com> Date: Sat, 13 Apr 2024 18:45:05 +0200 Subject: [PATCH 3/3] Virtual functions added to the .h file --- src/ModbusMaster.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ModbusMaster.h b/src/ModbusMaster.h index 8c433e6..0d50e4a 100644 --- a/src/ModbusMaster.h +++ b/src/ModbusMaster.h @@ -75,6 +75,8 @@ class ModbusMaster void idle(void (*)()); void preTransmission(void (*)()); void postTransmission(void (*)()); + virtual void preTransmission(); + virtual void postTransmission(); // Modbus exception codes /**