
我的 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 $
這是腳本
#!/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
從設備協議我看到:
1.read master version
sent: 5A 00 00 0d 0a 71
reply: A5 00+ "MASTER-FW:v1.0\r\n" + CS
所以我必須5A 00 00 0d 0a 71
作為資料發送,而不是字串,並且我將收到十六進位資料回應,我使用 cport 庫在 Windows 中完成了此操作,但我不知道如何在 debian(raspi3) 中執行此操作
任何想法?
答案1
我們可以使用以下方法將 轉換usbArray
為適當的轉義字串printf
:
printf ' \\x%s' "${usbArray[@]}"
這會產生\x5A\x00\x00\x0d\x0a\x71
.
然後將其作為參數傳遞給其他 printf
,將它們解釋為轉義碼:
printf '%b\n' "$(printf '\\x%s' "${usbArray[@]}")"
為了證明我們有正確的輸出,請使用以下命令檢查它od
:
$ printf '%b\n' "$(printf '\\x%s' "${usbArray[@]}")" | od -t x1
0000000 5a 00 00 0d 0a 71 0a
0000007