Conéctese al puerto serie correcto en Unix

0

Fondo

Estoy intentando conectarse a un dispositivo que utiliza UARTa través de un cable micro-USB y GNU screendesde Ubuntu y OSX .

Tanto en Ubuntu como en OSX puedo obtener la conexión en serie más reciente con el siguiente comando, que ejecuté justo después de conectar mi dispositivo y encenderlo.

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

En Ubuntu obtengo (esto es en realidad la salida de lly -n 3así puedo ver mejor lo que se muestra)

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

y el primer elemento es correcto (es decir, puedo screen /dev/ttyACM0 115200).

En Mac , en cambio, obtengo esto

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

y el primer elemento está mal (no puedo conectarme a él) mientras que el que funciona es el segundo (y tuve que apagar y encender mi dispositivo dos veces, ya que la primera vez no había ninguno /dev/tty.usbmodemfd121).

Pregunta

Mi pregunta es facil ¿Cómo puedo acceder automáticamente a la conexión en serie correcta ? Estoy tratando de evitar dar demasiados problemas al usuario final que intenta solucionar este problema automáticamente.

Responder

Este es mi guión final :)

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
fuente

Respuestas:

0

Una solución podría ser detectar la conexión en serie activa antes y después de enchufar el micro-usb, y luego conectarse al que está presente solo después de enchufar el micro-usb. Esto se puede hacer, por ejemplo, con un script 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
fuente
LOL, ¡no puedo creer que lo hubiera /dev/ttys004hecho antes de conectar mi dispositivo (desde su marca de tiempo, estaba seguro de que se generó conectando mi dispositivo)! ¿Tiene alguna sugerencia ( shfragmento de código) sobre la detección de la nueva conexión en serie activa?
Atcold
@Atcold agregué un script sh de muestra
Alepac,
INCREÍBLE-!-!-!
Atcold