mirror of
https://github.com/cjfranko/NTP-Timeturner.git
synced 2025-11-08 10:22:02 +00:00
37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
import serial
|
|
import re
|
|
|
|
# Adjust as needed
|
|
SERIAL_PORT = "/dev/ttyACM0"
|
|
BAUD_RATE = 115200
|
|
|
|
# Updated pattern to match drop-frame (;) and non-drop (:) timecode
|
|
ltc_pattern = re.compile(
|
|
r"\[(LOCK|FREE)\]\s+(\d{2}:\d{2}:\d{2}[:;]\d{2})\s+\|\s+([\d.]+fps)", re.IGNORECASE
|
|
)
|
|
|
|
def main():
|
|
print(f"[INFO] Connecting to serial port: {SERIAL_PORT} @ {BAUD_RATE} baud")
|
|
try:
|
|
with serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1) as ser:
|
|
print("[INFO] Listening for LTC messages...\n")
|
|
while True:
|
|
line = ser.readline().decode(errors='ignore').strip()
|
|
match = ltc_pattern.match(line)
|
|
if match:
|
|
status, timecode, framerate = match.groups()
|
|
framerate = framerate.upper()
|
|
if status == "LOCK":
|
|
print(f"[LOCK] {status:<4} | Timecode: {timecode} | Rate: {framerate}")
|
|
else:
|
|
print(f"[FREE] {status:<4} | Timecode: {timecode} | Rate: {framerate}")
|
|
else:
|
|
if line:
|
|
print(f"[WARN] Unrecognised line: {line}")
|
|
except serial.SerialException as e:
|
|
print(f"[ERROR] Serial error: {e}")
|
|
except KeyboardInterrupt:
|
|
print("\n[EXIT] Stopped by user.")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|