initial commit

This commit is contained in:
Ayzen
2025-09-23 18:42:55 +03:00
parent 90e5ae38c6
commit 6c54bbd16e
41 changed files with 6582 additions and 0 deletions

View 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