mirror of
https://github.com/cjfranko/NTP-Timeturner.git
synced 2025-11-08 18:32:02 +00:00
feat: add mock Teensy support with entrypoint and LTC generator
Co-authored-by: aider (openai/gpt-5) <aider@aider.chat>
This commit is contained in:
parent
ddbdf8cb72
commit
f855cac040
4 changed files with 76 additions and 0 deletions
|
|
@ -31,14 +31,19 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
libudev1 \
|
libudev1 \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
tzdata \
|
tzdata \
|
||||||
|
socat \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY --from=builder /app/target/release/get-haci /usr/local/bin/get-haci
|
COPY --from=builder /app/target/release/get-haci /usr/local/bin/get-haci
|
||||||
COPY static ./static
|
COPY static ./static
|
||||||
|
COPY scripts/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
|
COPY scripts/ltc_gen.sh /usr/local/bin/ltc-gen.sh
|
||||||
|
RUN chmod +x /usr/local/bin/entrypoint.sh /usr/local/bin/ltc-gen.sh
|
||||||
|
|
||||||
ENV RUST_LOG=info
|
ENV RUST_LOG=info
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
||||||
CMD ["get-haci"]
|
CMD ["get-haci"]
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ services:
|
||||||
container_name: haci
|
container_name: haci
|
||||||
environment:
|
environment:
|
||||||
- RUST_LOG=info
|
- RUST_LOG=info
|
||||||
|
- MOCK_TEENSY=1
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
volumes:
|
volumes:
|
||||||
|
|
|
||||||
27
scripts/entrypoint.sh
Normal file
27
scripts/entrypoint.sh
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
# If enabled, start a mock Teensy that exposes a PTY at /dev/ttyACM0 and streams LTC-like lines.
|
||||||
|
if [ "${MOCK_TEENSY:-0}" = "1" ]; then
|
||||||
|
echo "[entrypoint] Starting mock Teensy (PTY at /dev/ttyACM0)..." >&2
|
||||||
|
# Bridge the LTC generator to a PTY that looks like a Teensy serial port.
|
||||||
|
# Left side runs the generator, right side is a PTY linked to /dev/ttyACM0
|
||||||
|
socat -d -d -lf /dev/stderr EXEC:'/usr/local/bin/ltc-gen.sh',pty,ctty,echo=0,raw PTY,link=/dev/ttyACM0,raw,echo=0 &
|
||||||
|
SOCAT_PID=$!
|
||||||
|
|
||||||
|
# Wait briefly for the PTY to appear
|
||||||
|
i=0
|
||||||
|
while [ $i -lt 50 ]; do
|
||||||
|
if [ -e /dev/ttyACM0 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
i=$((i+1))
|
||||||
|
sleep 0.1
|
||||||
|
done
|
||||||
|
if [ ! -e /dev/ttyACM0 ]; then
|
||||||
|
echo "[entrypoint] WARNING: Failed to create /dev/ttyACM0 (mock Teensy)" >&2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run the requested command (default: get-haci)
|
||||||
|
exec "$@"
|
||||||
43
scripts/ltc_gen.sh
Normal file
43
scripts/ltc_gen.sh
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
# Simple LTC-like line generator to feed into a PTY for development.
|
||||||
|
# It outputs lines like: "LOCK HH:MM:SS;FF 25.00"
|
||||||
|
# Configure frames-per-second via LTC_FPS environment variable (23,24,25,29,30 supported).
|
||||||
|
FPS="${LTC_FPS:-25}"
|
||||||
|
|
||||||
|
case "$FPS" in
|
||||||
|
23) PERIOD="0.0417083"; RATE_STR="23.98" ;;
|
||||||
|
24) PERIOD="0.0416667"; RATE_STR="24.00" ;;
|
||||||
|
25) PERIOD="0.0400000"; RATE_STR="25.00" ;;
|
||||||
|
29) PERIOD="0.0333667"; RATE_STR="29.97" ;;
|
||||||
|
30) PERIOD="0.0333333"; RATE_STR="30.00" ;;
|
||||||
|
*) PERIOD="0.0400000"; RATE_STR="25.00"; FPS="25" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
h=12
|
||||||
|
m=0
|
||||||
|
s=0
|
||||||
|
f=0
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
printf "LOCK %02d:%02d:%02d;%02d %s\r\n" "$h" "$m" "$s" "$f" "$RATE_STR"
|
||||||
|
|
||||||
|
# increment frame
|
||||||
|
f=$((f+1))
|
||||||
|
if [ "$f" -ge "$FPS" ]; then
|
||||||
|
f=0
|
||||||
|
s=$((s+1))
|
||||||
|
if [ "$s" -ge 60 ]; then
|
||||||
|
s=0
|
||||||
|
m=$((m+1))
|
||||||
|
if [ "$m" -ge 60 ]; then
|
||||||
|
m=0
|
||||||
|
h=$(( (h + 1) % 24 ))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# sleep to approximate frame cadence
|
||||||
|
sleep "$PERIOD"
|
||||||
|
done
|
||||||
Loading…
Add table
Add a link
Reference in a new issue