From 05baf365dcdf109d336fba0fe1911d892c3a25a6 Mon Sep 17 00:00:00 2001 From: Laurent Meunier Date: Thu, 26 May 2016 17:09:30 +0200 Subject: [PATCH] Synchronize host and target for nc serial auto test We're ensuring target and host start-up sync here in 2 ways: 1) adding a delay on host side to make sure the serial initialization can happen before sending a character is sent to target 2) in case of serial_nc_rx_auto.py test, we're sending a first character S which will trigger the move from rx+tx to NC+rx. This should avoid any crossing case due to HSOT being faster than target or vice-versa --- libraries/tests/mbed/serial_nc_rx/main.cpp | 32 +++++++++++-------- .../host_tests/serial_nc_rx_auto.py | 23 +++++++++++++ .../host_tests/serial_nc_tx_auto.py | 3 ++ 3 files changed, 45 insertions(+), 13 deletions(-) diff --git a/libraries/tests/mbed/serial_nc_rx/main.cpp b/libraries/tests/mbed/serial_nc_rx/main.cpp index e5370b4e83..5f1ebc9dd8 100644 --- a/libraries/tests/mbed/serial_nc_rx/main.cpp +++ b/libraries/tests/mbed/serial_nc_rx/main.cpp @@ -11,22 +11,28 @@ int main() { char c = pc->getc(); - delete pc; - // This should be true - if (c == 'E') { - Serial *pc = new Serial(USBTX, NC); + // This should be true, sync the start of test + if (c == 'S') { + pc->printf("RX OK - Start NC test\r\n"); - pc->printf("RX OK - Expected\r\n"); + // disconnect TX and get char + delete pc; + pc = new Serial(NC, USBRX); + c = pc->getc(); + if (c == 'E') { + // ok disconnect Rx and answer to host + delete pc; + pc = new Serial(USBTX, NC); + pc->printf("RX OK - Expected\r\n"); - c = pc->getc(); - - // This should be false/not get here - if (c == 'U') { - pc->printf("RX OK - Unexpected\r\n"); - } - - delete pc; + c = pc->getc(); + // This should be false/not get here + if (c == 'U') { + pc->printf("RX OK - Unexpected\r\n"); + } + } + delete pc; } while (1) { diff --git a/workspace_tools/host_tests/serial_nc_rx_auto.py b/workspace_tools/host_tests/serial_nc_rx_auto.py index cd12ebe611..59975dbeb7 100644 --- a/workspace_tools/host_tests/serial_nc_rx_auto.py +++ b/workspace_tools/host_tests/serial_nc_rx_auto.py @@ -25,6 +25,29 @@ class SerialNCRXTest(): def test(self, selftest): selftest.mbed.flush(); + # Wait 0.5 seconds to ensure mbed is listening + time.sleep(0.5) + + #handshake with target to sync test start + selftest.mbed.serial_write("S"); + + strip_chars = string.whitespace + "\0" + + out_str = selftest.mbed.serial_readline() + + if not out_str: + selftest.notify("HOST: No output detected") + return selftest.RESULT_IO_SERIAL + + out_str_stripped = out_str.strip(strip_chars) + + if out_str_stripped != "RX OK - Start NC test": + selftest.notify("HOST: Unexpected output. Expected 'RX OK - Expected' but received '%s'" % out_str_stripped) + return selftest.RESULT_FAILURE + + # Wait 0.5 seconds to ensure mbed is listening + time.sleep(0.5) + selftest.mbed.serial_write("E"); strip_chars = string.whitespace + "\0" diff --git a/workspace_tools/host_tests/serial_nc_tx_auto.py b/workspace_tools/host_tests/serial_nc_tx_auto.py index 549bbecb3c..707c4763af 100644 --- a/workspace_tools/host_tests/serial_nc_tx_auto.py +++ b/workspace_tools/host_tests/serial_nc_tx_auto.py @@ -25,6 +25,9 @@ class SerialNCTXTest(): def test(self, selftest): selftest.mbed.flush(); + # Wait 0.5 seconds to ensure mbed is listening + time.sleep(0.5) + selftest.mbed.serial_write("S"); strip_chars = string.whitespace + "\0"