Fixed bug with upload

This commit is contained in:
Eric Ratliff
2026-02-16 08:53:27 -06:00
parent fc1fb73d5a
commit 851965592c
7 changed files with 95 additions and 18 deletions

View File

@@ -10,3 +10,4 @@ extra_flags = ["-Werror"]
[monitor]
baud = 115200
# port = "/dev/ttyUSB0" # Uncomment to skip auto-detect

View File

@@ -36,12 +36,12 @@ die() { echo "${RED}FAIL${RST} $*" >&2; exit 1; }
# Searches the whole file; for sectioned keys, grep is specific enough
# given our small, flat schema.
toml_get() {
grep "^$1 " "$CONFIG" | head -1 | sed 's/.*= *"\{0,1\}\([^"]*\)"\{0,1\}/\1/' | tr -d ' '
(grep "^$1 " "$CONFIG" 2>/dev/null || true) | head -1 | sed 's/.*= *"\{0,1\}\([^"]*\)"\{0,1\}/\1/' | tr -d ' '
}
# Extract a TOML array as space-separated values: toml_array "key"
toml_array() {
grep "^$1 " "$CONFIG" | head -1 \
(grep "^$1 " "$CONFIG" 2>/dev/null || true) | head -1 \
| sed 's/.*\[//; s/\].*//; s/"//g; s/,/ /g' | tr -s ' '
}

View File

@@ -32,11 +32,12 @@ die() { echo "${RED}FAIL${RST} $*" >&2; exit 1; }
[[ -f "$CONFIG" ]] || die "No .anvil.toml found in $SCRIPT_DIR"
toml_get() {
grep "^$1 " "$CONFIG" | head -1 | sed 's/.*= *"\{0,1\}\([^"]*\)"\{0,1\}/\1/' | tr -d ' '
(grep "^$1 " "$CONFIG" 2>/dev/null || true) | head -1 | sed 's/.*= *"\{0,1\}\([^"]*\)"\{0,1\}/\1/' | tr -d ' '
}
BAUD="$(toml_get 'baud')"
BAUD="${BAUD:-115200}"
DEFAULT_PORT="$(toml_get 'port')"
# -- Parse arguments -------------------------------------------------------
PORT=""
@@ -62,16 +63,35 @@ command -v arduino-cli &>/dev/null \
# -- Auto-detect port ------------------------------------------------------
auto_detect() {
arduino-cli board list 2>/dev/null \
# Prefer ttyUSB/ttyACM (real USB devices) over ttyS (hardware UART)
local port
port=$(arduino-cli board list 2>/dev/null \
| grep -i "serial" \
| head -1 \
| awk '{print $1}'
| awk '{print $1}' \
| grep -E 'ttyUSB|ttyACM|COM' \
| head -1)
# Fallback: any serial port
if [[ -z "$port" ]]; then
port=$(arduino-cli board list 2>/dev/null \
| grep -i "serial" \
| head -1 \
| awk '{print $1}')
fi
echo "$port"
}
if [[ -z "$PORT" ]]; then
PORT="$(auto_detect)"
# Check .anvil.toml for configured port
if [[ -n "$DEFAULT_PORT" ]]; then
PORT="$DEFAULT_PORT"
else
PORT="$(auto_detect)"
fi
if [[ -z "$PORT" ]]; then
die "No serial port detected. Is the board plugged in?\n Specify manually: ./monitor.sh -p /dev/ttyUSB0"
die "No serial port detected. Is the board plugged in?\n Specify manually: ./monitor.sh -p /dev/ttyUSB0\n Or set port in .anvil.toml"
fi
warn "Auto-detected port: $PORT (use -p to override)"
fi

View File

@@ -34,11 +34,11 @@ die() { echo "${RED}FAIL${RST} $*" >&2; exit 1; }
[[ -f "$CONFIG" ]] || die "No .anvil.toml found in $SCRIPT_DIR"
toml_get() {
grep "^$1 " "$CONFIG" | head -1 | sed 's/.*= *"\{0,1\}\([^"]*\)"\{0,1\}/\1/' | tr -d ' '
(grep "^$1 " "$CONFIG" 2>/dev/null || true) | head -1 | sed 's/.*= *"\{0,1\}\([^"]*\)"\{0,1\}/\1/' | tr -d ' '
}
toml_array() {
grep "^$1 " "$CONFIG" | head -1 \
(grep "^$1 " "$CONFIG" 2>/dev/null || true) | head -1 \
| sed 's/.*\[//; s/\].*//; s/"//g; s/,/ /g' | tr -s ' '
}
@@ -53,6 +53,7 @@ BAUD="$(toml_get 'baud')"
[[ -n "$FQBN" ]] || die "Could not read fqbn from .anvil.toml"
BAUD="${BAUD:-115200}"
DEFAULT_PORT="$(toml_get 'port')"
SKETCH_DIR="$SCRIPT_DIR/$SKETCH_NAME"
BUILD_DIR="$SCRIPT_DIR/.build"
@@ -86,14 +87,28 @@ command -v arduino-cli &>/dev/null \
# -- Auto-detect port ------------------------------------------------------
if [[ -z "$PORT" ]]; then
# Look for the first serial port arduino-cli can see
PORT=$(arduino-cli board list 2>/dev/null \
| grep -i "serial" \
| head -1 \
| awk '{print $1}')
# Check .anvil.toml for configured port
if [[ -n "$DEFAULT_PORT" ]]; then
PORT="$DEFAULT_PORT"
else
# Prefer ttyUSB/ttyACM (real USB devices) over ttyS (hardware UART)
PORT=$(arduino-cli board list 2>/dev/null \
| grep -i "serial" \
| awk '{print $1}' \
| grep -E 'ttyUSB|ttyACM|COM' \
| head -1)
# Fallback: any serial port if no USB ports found
if [[ -z "$PORT" ]]; then
PORT=$(arduino-cli board list 2>/dev/null \
| grep -i "serial" \
| head -1 \
| awk '{print $1}')
fi
fi
if [[ -z "$PORT" ]]; then
die "No serial port detected. Is the board plugged in?\n Specify manually: ./upload.sh -p /dev/ttyUSB0"
die "No serial port detected. Is the board plugged in?\n Specify manually: ./upload.sh -p /dev/ttyUSB0\n Or set port in .anvil.toml"
fi
warn "Auto-detected port: $PORT (use -p to override)"