Public Access
scripts/sd_put.sh <file> [card path] sends a file (by default into /updates, for Update from SD) without taking the card out. The serial driver drops bytes once its receive buffer is full, so the transfer is stop-and-wait: 1 KB chunks, each acknowledged once the Storage Service has written it, into a 2 KB receive buffer. The device checks the SHA-256 before renaming <path>.part into place, and gives up after 5 s of silence or a card job that never returns. FileReceiver holds the logic, with 12 host tests. About 55 KB/s: 1.6 MB in under 30 s. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
11 lines
710 B
Bash
Executable File
11 lines
710 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copy a file to the Cardputer's SD card over USB serial, e.g. an Update File into /updates.
|
|
# Usage: scripts/sd_put.sh <file> [card path] (default card path: /updates/<file name>)
|
|
set -euo pipefail
|
|
source "$(dirname "$0")/_docker.sh"
|
|
[ -f "${1:-}" ] || { echo "Usage: scripts/sd_put.sh <file> [card path]" >&2; exit 1; }
|
|
docker rm -f roro9stack-serial >/dev/null 2>&1 || true # a serial log would hold the port
|
|
FILE="$(realpath "$1")"
|
|
DOCKER_EXTRA=(-e SD_PUT_DEBUG="${SD_PUT_DEBUG:-}" --group-add "$(getent group dialout | cut -d: -f3)" --privileged -v /dev:/dev -v "$(dirname "$FILE"):/in:ro")
|
|
run_in_container /pio/penv/bin/python scripts/sd_put.py "/in/$(basename "$FILE")" "${@:2}"
|