aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFarouk Bouabid <farouk.bouabid@theobroma-systems.com>2024-01-23 15:35:56 +0100
committerFarouk Bouabid <farouk.bouabid@theobroma-systems.com>2024-01-29 16:03:22 +0100
commitcf5e3c6170d1e5ab5b9f8bb9db3538e16c6e1414 (patch)
treebfa6f56fbcea3cf05e14fd2e25a6274d0f1dd6bf
parentd1a118d20907ab5d1dd00cbf073241e062152a2b (diff)
testing: serial: test-serial: use ioctls to enable/disable rs485
Using "serial.rs485" api, the "_set_rs485_mode" callback of serialposix is not triggered when "rs485_mode" property is updated since its setter is overridden, making the "serial.rs485" a self-standing emulation for rs485. Since we already have a kernel emulation for half duplex rs485, we should make use of it by calling the respective ioctls to enable/disable it when required. Explicitly call "_set_rs485_mode" by passing "serial.rs485.RS485Settings" (enable) or None (disable) instead of setting this property. Signed-off-by: Farouk Bouabid <farouk.bouabid@theobroma-systems.com>
-rwxr-xr-xtesting/serial/test-serial.py28
1 files changed, 20 insertions, 8 deletions
diff --git a/testing/serial/test-serial.py b/testing/serial/test-serial.py
index a36d5b6..8287e9c 100755
--- a/testing/serial/test-serial.py
+++ b/testing/serial/test-serial.py
@@ -18,6 +18,16 @@ def randomword(length):
return "".join(random.choice(letters) for i in range(length))
+def set_rs485_mode(port, enable):
+ try:
+ port._set_rs485_mode(serial.rs485.RS485Settings() if enable else None)
+ except ValueError:
+ print(f"Port {port.port} does not support ioctl to enable/disable rs485")
+ # Continue as the serial port is assumed to be already prepared
+ # eg. using an USB to RS485 converter.
+ pass
+
+
def transfer(tx, rx, size):
# tx.reset_output_buffer()
# rx.reset_input_buffer()
@@ -50,7 +60,11 @@ def update_serial_settings(tx, rx, baudrate, size):
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-b", "--baudrate", type=int, default=115200)
- parser.add_argument("--rs485", action="store_true")
+ parser.add_argument(
+ "--rs485",
+ action="store_true",
+ help="Enable rs485 software emulation for half duplex rs485",
+ )
parser.add_argument(
"-s",
"--size",
@@ -119,13 +133,11 @@ if __name__ == "__main__":
args = parser.parse_args()
- if args.rs485:
- rx = serial.rs485.RS485(args.TX if args.reverse else args.RX)
- tx = serial.rs485.RS485(args.RX if args.reverse else args.TX)
- tx.rs485_mode = rx.rs485_mode = serial.rs485.RS485Settings()
- else:
- rx = serial.Serial(args.TX if args.reverse else args.RX)
- tx = serial.Serial(args.RX if args.reverse else args.TX)
+ rx = serial.Serial(args.TX if args.reverse else args.RX)
+ tx = serial.Serial(args.RX if args.reverse else args.TX)
+
+ set_rs485_mode(tx, args.rs485)
+ set_rs485_mode(rx, args.rs485)
size = args.size
baudrate = args.baudrate