Podłącz do odpowiedniego portu szeregowego w Uniksie

0

tło

Próbuję połączyć się z urządzeniem za UARTpomocą kabla micro-USB oraz GNU screenz systemu Ubuntu i OSX .

Zarówno w systemie Ubuntu, jak i OSX mogę uzyskać najnowsze połączenie szeregowe za pomocą następującego polecenia, które uruchomiłem zaraz po podłączeniu urządzenia i włączeniu go.

ls -t /dev/tty* | head -n 1

Na Ubuntu dostaję (tak naprawdę jest to wyjście lli -n 3dzięki temu mogę lepiej zobaczyć, co pokazano)

crw-rw---- 1 root dialout 166,  0 Jan 29 10:51 /dev/ttyACM0
crw-rw-rw- 1 root tty       5,  0 Jan 29 10:14 /dev/tty
crw-rw---- 1 root dialout   4, 68 Jan 21 16:19 /dev/ttyS4

a pierwszy element jest poprawny (tzn. mogę screen /dev/ttyACM0 115200).

Na Mac , zamiast, mam to

crw--w----  1 atcold  tty     16,   4 29 Jan 10:56 /dev/ttys004
crw-rw-rw-  1 root    wheel   19,  44 29 Jan 10:56 /dev/tty.usbmodemfd121
crw--w----  1 atcold  tty     16,   6 28 Jan 16:21 /dev/ttys006

a pierwszy element jest nieprawidłowy (nie mogę się z nim połączyć), podczas gdy działający jest drugi (i musiałem dwukrotnie wyłączyć i włączyć urządzenie, ponieważ po raz pierwszy nie było żadnego /dev/tty.usbmodemfd121).

Pytanie

Moje pytanie jest łatwe. Jak uzyskać automatyczny dostęp do prawidłowego połączenia szeregowego? Staram się unikać sprawiania zbyt wielu kłopotów końcowemu użytkownikowi próbującemu rozwiązać ten problem automatycznie.

Odpowiedź

To jest mój ostatni skrypt :)

read -p "Connect the switched off board, then press <Enter>" temp
ls /dev/tty* > /tmp/old_tty
read -p "Turn on the board and press <Enter>" temp
ls /dev/tty* > /tmp/new_tty
screen $(comm -13 /tmp/old_tty /tmp/new_tty) 115200
Atcold
źródło

Odpowiedzi:

0

Rozwiązaniem może być wykrycie aktywnego połączenia szeregowego przed i po podłączeniu micro-usb, a następnie połączenie z obecnym dopiero po podłączeniu micro-usb. Można to zrobić na przykład za pomocą skryptu sh

#!/bin/sh
PATH_SUFFIX="/dev/tty"

read -p "Be sure the mini usb adapter is unplugged then press ENTER" temp
BEFORE=`ls -1 ${PATH_SUFFIX}* `
read -p "Now plug device and then press ENTER" temp
# sleep 2 seconds to be sure the filedevise is created
sleep 2
AFTER=`ls -1 ${PATH_SUFFIX}*`

OLD_IFS=$IFS

IFS='
'

for file in $AFTER ; do
    if case ${BEFORE} in *"${file}"*) false;; *) true;; esac; then
        FOUND=$file
    fi
done

IFS=$OLD_IFS

#Now do whatever with FOUND device
echo $FOUND
Alepac
źródło
LOL, nie mogę uwierzyć, że miałem /dev/ttys004także przed podłączeniem urządzenia (od czasu, kiedy byłem pewien, byłem pewien, że zostało wygenerowane przez podłączenie urządzenia)! Czy masz jakieś sugestie ( shfragment kodu) dotyczące wykrycia nowego aktywnego połączenia szeregowego?
Atcold
@Atcold Dodałem przykładowy skrypt sh
Alepac
NIESAMOWITE-!-!-!
Atcold