initial commit
This commit is contained in:
82
reference_data_acquisition/socat_serial_sniffer.sh
Executable file
82
reference_data_acquisition/socat_serial_sniffer.sh
Executable file
@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
# --- Settings ----------------------------------------------------------------
|
||||
LOGFILE="vna_protocol.bin" # will be normalized to absolute path
|
||||
DEVICE="/dev/ttyACM0"
|
||||
REAL_DEV="${DEVICE}.real"
|
||||
VIRT_DEV="/tmp/vna_log" # PTY endpoint for the app (peer created by socat)
|
||||
|
||||
# Normalize LOGFILE and ensure directory exists
|
||||
if command -v realpath >/dev/null 2>&1; then
|
||||
LOGFILE="$(realpath -m -- "$LOGFILE")"
|
||||
else
|
||||
LOGFILE="$(cd "$(dirname "$LOGFILE")" && pwd -P)/$(basename "$LOGFILE")"
|
||||
fi
|
||||
mkdir -p "$(dirname "$LOGFILE")"
|
||||
|
||||
BRIDGE="./bridge_logger.py"
|
||||
|
||||
# --- Helpers -----------------------------------------------------------------
|
||||
restore_device() {
|
||||
[[ -e "$VIRT_DEV" || -L "$VIRT_DEV" ]] && rm -f "$VIRT_DEV" || true
|
||||
if [[ -e "$DEVICE" && ! -c "$DEVICE" ]]; then rm -f "$DEVICE" || true; fi
|
||||
if [[ -e "$REAL_DEV" ]]; then sudo mv -f "$REAL_DEV" "$DEVICE" || true; fi
|
||||
if [[ -e "$REAL_DEV" && -c "$DEVICE" ]]; then rm -f "$REAL_DEV" || true; fi
|
||||
}
|
||||
|
||||
kill_descendants() {
|
||||
pkill -TERM -P $$ 2>/dev/null || true
|
||||
sleep 0.1
|
||||
pkill -KILL -P $$ 2>/dev/null || true
|
||||
}
|
||||
|
||||
|
||||
# --- Cleanup -----------------------------------------------------------------
|
||||
CLEANED=0
|
||||
cleanup() {
|
||||
(( CLEANED )) && return 0
|
||||
CLEANED=1
|
||||
set +e
|
||||
echo; echo "Stopping logger..."
|
||||
restore_device
|
||||
kill_descendants
|
||||
echo "Log saved to: $LOGFILE"
|
||||
echo "Cleanup complete."
|
||||
}
|
||||
trap cleanup EXIT INT TERM HUP QUIT
|
||||
|
||||
echo "== Preparing direction-switch protocol logging =="
|
||||
echo "Binary log file: $LOGFILE"
|
||||
|
||||
# Fix leftovers from previous run (if any)
|
||||
if [[ -e "$REAL_DEV" ]]; then
|
||||
echo "Found leftover $REAL_DEV — restoring..."
|
||||
restore_device
|
||||
fi
|
||||
|
||||
# Safety checks
|
||||
[[ -e "$DEVICE" ]] || { echo "Error: device $DEVICE not found."; exit 1; }
|
||||
[[ -c "$DEVICE" ]] || { echo "Error: $DEVICE is not a character device."; exit 1; }
|
||||
|
||||
# Park the real device and create a PTY pair for the application
|
||||
sudo mv "$DEVICE" "$REAL_DEV"
|
||||
socat -d -d pty,raw,echo=0,link="$DEVICE",mode=666 \
|
||||
pty,raw,echo=0,link="$VIRT_DEV" &
|
||||
sleep 1
|
||||
|
||||
# Configure the real serial device (adjust if needed)
|
||||
stty -F "$REAL_DEV" 115200 cs8 -cstopb -parenb -ixon -ixoff -crtscts raw -echo
|
||||
|
||||
# Initialize the binary log with a magic header (if empty)
|
||||
if [[ ! -s "$LOGFILE" ]]; then
|
||||
printf 'VNALOG1\n' > "$LOGFILE"
|
||||
fi
|
||||
|
||||
# Run the bridge+logger (single process handles both directions + logging)
|
||||
"$BRIDGE" "$VIRT_DEV" "$REAL_DEV" "$LOGFILE" &
|
||||
|
||||
echo "Logging active. Press Ctrl+C to stop."
|
||||
wait
|
||||
Reference in New Issue
Block a user