Problem with test connecting to ttyACM0

Hi,

My setup is more or less correct. When I do $ BOARD=sodaq-sara-sff make -C tests/evtimer_msg flash term ... 2020-05-26 21:50:39,186 # Are the reception times of all 4 msgs close to the supposed values? 2020-05-26 21:50:39,187 # At 2361 ms received msg 0: "#2 supposed to be 2361" 2020-05-26 21:50:39,187 # At 2702 ms received msg 1: "#0 supposed to be 2701" 2020-05-26 21:50:39,670 # At 3202 ms received msg 2: "#1 supposed to be 3202" 2020-05-26 21:50:42,116 # At 5656 ms received msg 3: "#3 supposed to be 5656" 2020-05-26 21:50:42,127 # By now all msgs should have been received 2020-05-26 21:50:42,127 # If yes, the tests were successful

It connects nicely to the /dev/ttyACM0 with all the expected output.

However, when I make the "test" target it fails to find /dev/ttyACM0

$ BOARD=sodaq-sara-sff make RIOT_CI_BUILD=1 CC_NOCOLOR=1 --no-print-directory -C /home/kees/src/RIOT/tests/evtimer_msg test r /home/kees/src/RIOT/dist/tools/pyterm/pyterm -p "/dev/ttyACM0" -b "115200" --no-reconnect --noprefix --no-repeat-command-on-empty-line Connect to serial port /dev/ttyACM0 could not open port /dev/ttyACM0: [Errno 2] No such file or directory: '/dev/ttyACM0' make[1]: *** [/home/kees/src/RIOT/Makefile.include:726: cleanterm] Error 2 Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pexpect/spawnbase.py", line 166, in read_nonblocking s = os.read(self.child_fd, size) OSError: [Errno 5] Input/output error

In fact, I'm trying to run compile_and_test_for_board.py, but that fails on the "make test" command.

Is there a timeout value somewhere that needs to be increased?

Alexandre, do you have a suggestion? Anyone?

Found it.

There is a MAKE_TERM_CONNECT_DELAY that defaults to 0. This is the time between "make reset" and "make cleanterm".

In my case (and I'm guessing, all boards with Arduino bootloader) you need a brief delay, for example 2 seconds.

The default of MAKE_TERM_CONNECT_DELAY can be overruled by setting envvar TESTRUNNER_CONNECT_DELAY.

Hurray, my first successful test

$ TESTRUNNER_CONNECT_DELAY=3 ~/src/RIOT/dist/tools/compile_and_test_for_board/compile_and_test_for_board.py ~/src/RIOT sodaq-sara-sff ~/src/RIOT/results --applications tests/evtimer_msg INFO:sodaq-sara-sff:Saving toolchain INFO:sodaq-sara-sff.tests/evtimer_msg:Board supported: True INFO:sodaq-sara-sff.tests/evtimer_msg:Board has enough memory: True INFO:sodaq-sara-sff.tests/evtimer_msg:Application has test: True INFO:sodaq-sara-sff.tests/evtimer_msg:Run compilation INFO:sodaq-sara-sff.tests/evtimer_msg:Run test INFO:sodaq-sara-sff.tests/evtimer_msg:Run test.flash INFO:sodaq-sara-sff.tests/evtimer_msg:Success INFO:sodaq-sara-sff:Tests successful

Hi,

There's the TESTRUNNER_CONNECT_DELAY environnement variable that can be set for this purpose from the board Makefile.include file. This is normally used for any samd21 based board with an Arduino bootloader. Maybe increase the TERM_DELAY variable from the command line or in the Makefile.include here [1].

Alex

[1] https://github.com/RIOT-OS/RIOT/blob/master/boards/common/samd21-arduino-bootloader/Makefile.include#L27

Ok, I replied in the meantime :slight_smile:

Good to know that you solved your issue!

I was wondering why TERM_DELAY is only defined if

ifeq ($(PROGRAMMER),bossa) ... ifneq (,$(filter reset flash flash-only, $(MAKECMDGOALS))) ... TERM_DELAY ?= 2

Because now we have to set an envvar to do a "make test"