diff options
author | Farouk Bouabid <farouk.bouabid@theobroma-systems.com> | 2024-01-23 15:35:56 +0100 |
---|---|---|
committer | Farouk Bouabid <farouk.bouabid@theobroma-systems.com> | 2024-01-29 16:03:22 +0100 |
commit | cf5e3c6170d1e5ab5b9f8bb9db3538e16c6e1414 (patch) | |
tree | bfa6f56fbcea3cf05e14fd2e25a6274d0f1dd6bf | |
parent | d1a118d20907ab5d1dd00cbf073241e062152a2b (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-x | testing/serial/test-serial.py | 28 |
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 |