import socket
import serial
import sys
import time

# === CONFIGURATION ===
UDP_PORT = 8888
SERIAL_PORT = "COM6"  # Change this if your Arduino uses a different COM port
BAUD_RATE = 9600

# === SETUP SERIAL CONNECTION ===
try:
    ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
    print(f"Connected to Arduino on {SERIAL_PORT}")
except Exception as e:
    print(f" Could not open serial port: {e}")
    sys.exit()

# === SETUP UDP SERVER ===
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("", UDP_PORT))
sock.settimeout(1.0)  #  Prevents indefinite hang
print(f"🔌 Listening for UDP on port {UDP_PORT}...")

# === MAIN LOOP ===
last_value = None

while True:
    try:
        while True:
            data, addr = sock.recvfrom(1024)
            message = data.decode("utf-8").strip()

            if message != last_value:
                print(f"Received from HoloLens: {message}")
                ser.write((message + "\n").encode("utf-8"))
                ser.flush()
                print(f" Forwarded to Arduino: {message}")
                last_value = message
                time.sleep(0.05)  #  Prevent flooding the Arduino
    except socket.timeout:
        pass
    except Exception as e:
        print(f" Error: {e}")
