¿Cómo enviar bytes hexadecimales a un puerto serie en Debian?

¿Cómo enviar bytes hexadecimales a un puerto serie en Debian?

Tengo un dispositivo conectado en mi raspi3

pi@raspberrypi:/home $ sudo bash main.sh
%s\t%s\n 0 Bus 001 Device 004: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
%s\t%s\n 1 Bus 001 Device 005: ID 1a2c:0e24 China Resource Semico Co., Ltd
%s\t%s\n 2 Bus 001 Device 006: ID 0424:7800 Standard Microsystems Corp.
%s\t%s\n 3 Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
%s\t%s\n 4 Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
%s\t%s\n 5 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Target device:

%s\t%s\n 1 Bus 001 Device 005: ID 1a2c:0e24 China Resource Semico Co., Ltd
pi@raspberrypi:/home $

Este es el guión

#!/bin/bash

usbArray=()
while IFS= read -r line; do
    usbArray+=( "$line" )
done < <( lsusb )


for i in "${!usbArray[@]}"; do 

  echo "%s\t%s\n" "$i" "${usbArray[$i]}"

done

echo ""
echo "Target device:"
echo ""

for i in "${!usbArray[@]}"; do 

  if [[ ${usbArray[$i]} == *"China Resource Semico"* ]]; then
    echo "%s\t%s\n" "$i" "${usbArray[$i]}"
  fi

done

Desde el protocolo del dispositivo veo:

1.read master version 
sent: 5A 00 00 0d 0a 71
reply: A5 00+ "MASTER-FW:v1.0\r\n" + CS

Entonces tengo que enviar 5A 00 00 0d 0a 71como datos, no como cadena, y recibiré una respuesta de datos hexadecimales. Lo hice en Windows usando la biblioteca cport, pero no sé cómo hacerlo en Debian (raspi3).

¿alguna idea?

Respuesta1

Podemos convertirlo usbArrayen una cadena de escape adecuada usando printf:

printf ' \\x%s' "${usbArray[@]}"

Esto produce \x5A\x00\x00\x0d\x0a\x71.

Luego pasa eso como argumento aotro printf, para interpretarlos como códigos de escape:

printf '%b\n' "$(printf '\\x%s' "${usbArray[@]}")"

Para demostrar que tenemos el resultado correcto, inspecciónelo usando od:

$ printf '%b\n' "$(printf '\\x%s' "${usbArray[@]}")" | od -t x1
0000000 5a 00 00 0d 0a 71 0a
0000007

información relacionada