diff --git a/boards/cc2538dk/Makefile.include b/boards/cc2538dk/Makefile.include index 6f0afa72e3f041af966ba9523480d5629d87ca1a..e8862167418928d0e5970c98665cfd50fe45d6e3 100644 --- a/boards/cc2538dk/Makefile.include +++ b/boards/cc2538dk/Makefile.include @@ -2,8 +2,12 @@ export CPU = cc2538 export CPU_MODEL ?= cc2538nf53 +# the SmartRF06 Evaluation Board serial numbers all begin with "06EB": +export PROGRAMMER_SERIAL ?= 06EB + # setup serial terminal -PORT_LINUX ?= $(firstword $(wildcard /dev/serial/by-id/*XDS100v3*if01* /dev/ttyUSB1)) +# the debug UART is always the second tty with the matching serial number: +PORT_LINUX ?= $(word 2,$(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh '^$(PROGRAMMER_SERIAL)')) PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbserial*))) include $(RIOTBOARD)/Makefile.include.serial diff --git a/boards/mulle/Makefile.include b/boards/mulle/Makefile.include index abfaf433a07b96ea1b229e338795c2695cbfb65d..6408f6195252c7e9c50501d3c7fdf984dc12dc45 100644 --- a/boards/mulle/Makefile.include +++ b/boards/mulle/Makefile.include @@ -76,10 +76,10 @@ ifeq ($(PORT),) # try to find tty name by serial number, only works on Linux currently. ifeq ($(OS),Linux) ifneq ($(PROGRAMMER_SERIAL),) - PORT := $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh '^$(PROGRAMMER_SERIAL)$$') + PORT := $(firstword $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh '^$(PROGRAMMER_SERIAL)$$')) else # find-tty.sh will return the first USB tty if no serial is given. - PORT := $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh) + PORT := $(firstword $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh)) endif else ifeq ($(OS),Darwin) ifneq ($(PROGRAMMER_SERIAL),) diff --git a/boards/pba-d-01-kw2x/Makefile.include b/boards/pba-d-01-kw2x/Makefile.include index caedbab8e1653467064fc18cff614602a3945bab..aeba7c17ed2e496c9c72c64f90c0733ca1f3982d 100644 --- a/boards/pba-d-01-kw2x/Makefile.include +++ b/boards/pba-d-01-kw2x/Makefile.include @@ -34,7 +34,7 @@ include $(RIOTBOARD)/$(BOARD)/Makefile.dep # Usage: SERIAL="0200..." BOARD="pba-d-01-kw2x" make flash ifneq (,$(SERIAL)) export OPENOCD_EXTRA_INIT += "-c cmsis_dap_serial $(SERIAL)" - SERIAL_TTY = $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh $(SERIAL)) + SERIAL_TTY = $(firstword $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh $(SERIAL))) ifeq (,$(SERIAL_TTY)) $(error Did not find a device with serial $(SERIAL)) endif diff --git a/boards/samr21-xpro/Makefile.include b/boards/samr21-xpro/Makefile.include index 134299f616025fc10d59938639ed286b191f2542..d2b83471d759d2f0af5978080127f5d612766843 100644 --- a/boards/samr21-xpro/Makefile.include +++ b/boards/samr21-xpro/Makefile.include @@ -17,7 +17,7 @@ include $(RIOTBOARD)/Makefile.include.serial # Usage: SERIAL="ATML..." BOARD="samr21-xpro" make flash ifneq (,$(SERIAL)) export OPENOCD_EXTRA_INIT += "-c cmsis_dap_serial $(SERIAL)" - SERIAL_TTY = $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh $(SERIAL)) + SERIAL_TTY = $(firstword $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh $(SERIAL))) ifeq (,$(SERIAL_TTY)) $(error Did not find a device with serial $(SERIAL)) endif diff --git a/dist/tools/usb-serial/README.md b/dist/tools/usb-serial/README.md index d2deeb4eba135fea619da659cddc916d35c95b73..15463573d7b12cb095a43d0ab3c5c881ef036624 100644 --- a/dist/tools/usb-serial/README.md +++ b/dist/tools/usb-serial/README.md @@ -13,15 +13,15 @@ List all currently connected USB to serial adapters by searching through ./find-tty.sh [serial_regex1] [serial_regex2] ... [serial_regexZ] -Write to `stdout` the first tty connected to the chosen programmer. +Write to `stdout` all ttys connected to the chosen programmer. `serial_regexN` are extended regular expressions (as understood by `egrep`) containing a pattern matched against the USB device serial number. Each of the -given expressions are tested, against each serial number until a match has been -found. +given expressions are tested, against each serial number, and matching ttys are +output (one tty per line). In order to search for an exact match against the device serial, use '^serialnumber$' as the pattern. If no pattern is given, `find-tty.sh` returns -the first found USB tty (in an arbitrary order, this is not guaranteed to be +all found USB ttys (in an arbitrary order, this is not guaranteed to be the `/dev/ttyUSBX` with the lowest number). Serial strings from all connected USB ttys can be found from the list generated @@ -45,7 +45,7 @@ solution): ifeq ($(PORT),) # try to find tty name by serial number, only works on Linux currently. ifeq ($(OS),Linux) - PORT := $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh "^$(PROGRAMMER_SERIAL)$$") + PORT := $(firstword $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh "^$(PROGRAMMER_SERIAL)$$")) endif endif endif @@ -53,7 +53,7 @@ solution): # Fallback PORT if no serial was specified or if the specified serial was not found ifeq ($(PORT),) ifeq ($(OS),Linux) - PORT := $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh) + PORT := $(firstword $(shell $(RIOTBASE)/dist/tools/usb-serial/find-tty.sh)) else ifeq ($(OS),Darwin) PORT := $(shell ls -1 /dev/tty.SLAB_USBtoUART* | head -n 1) endif diff --git a/dist/tools/usb-serial/find-tty.sh b/dist/tools/usb-serial/find-tty.sh index ee02c22b5f562a9cdba80ecad1ed07cc10fd48f5..1a896afa292b178f4d96a4a6f0c198c3984c763b 100755 --- a/dist/tools/usb-serial/find-tty.sh +++ b/dist/tools/usb-serial/find-tty.sh @@ -9,35 +9,38 @@ # # Find all USB to serial devices + +# default error status code +status=1 + # iterate over usb-tty devices: for basedev in $(find /sys/bus/usb/devices/ -regex "/sys/bus/usb/devices/[0-9]+[^:/]*" -maxdepth 2 -follow 2>/dev/null); do ttydirs=$(find ${basedev} -regex "${basedev}/[^/]*:.*" -mindepth 2 -maxdepth 3 -name tty -follow 2>/dev/null) if [ -z "${ttydirs}" ]; then continue fi - # See if the device has any tty devices assigned to it, get the first match - tty=$(find ${ttydirs} -maxdepth 1 -mindepth 1 -printf '%f\n' | head -n 1 2>/dev/null) - if [ -z "${tty}" ]; then - continue - fi - parent=$(echo ${basedev} | sed -e 's%\(/sys/bus/usb/devices/[^/]*\)/.*%\1%') - serial=$(cat "${parent}/serial" 2>/dev/null) - # split results into array + # See if the device has any tty devices assigned to it + for tty in $(find ${ttydirs} -maxdepth 1 -mindepth 1 -printf '%f\n' 2>/dev/null); do + parent=$(echo ${basedev} | sed -e 's%\(/sys/bus/usb/devices/[^/]*\)/.*%\1%') + serial=$(cat "${parent}/serial" 2>/dev/null) + # split results into array - if [ $# -lt 1 ]; then - # No arguments given, return first found tty - echo "/dev/${tty}" - exit 0 - fi - # else: Match any of the given serials - for s in "${@}"; do - echo "${serial}" | egrep -e "${s}" -q - if [ $? -eq 0 ]; then - # return first tty + if [ $# -lt 1 ]; then + # No arguments given, return all ttys echo "/dev/${tty}" - exit 0 + status=0 + continue fi + # else: Match any of the given serials + for s in "${@}"; do + echo "${serial}" | egrep -e "${s}" -q + if [ $? -eq 0 ]; then + # return tty + echo "/dev/${tty}" + status=0 + fi + done done done -# not found -exit 1; + +exit $status;