feat: Compass initial commit

This commit is contained in:
2026-07-03 12:23:41 -04:00
commit 72dcfeb315
26 changed files with 2551 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
"""
Marine Compass Display
----------------------
python main.py # normal run (reads config.py ports)
python main.py --sim # built-in NMEA simulator (no hardware needed)
python main.py --port COM3 # Windows override
python main.py --port /dev/ttyUSB0 --baud 38400
python main.py --kiosk # RPi fullscreen, cursor hidden, no screensaver
"""
import sys
import argparse
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import Qt
def main():
parser = argparse.ArgumentParser(description='Marine Compass Display')
parser.add_argument('--sim', action='store_true', help='Run with NMEA simulator')
parser.add_argument('--port', default=None, help='Serial port override')
parser.add_argument('--baud', type=int, default=4800)
parser.add_argument('--kiosk', action='store_true', help='Kiosk mode (RPi): hide cursor, disable screensaver')
args = parser.parse_args()
if args.sim:
from simulator.nmea_simulator import start_simulator
start_simulator()
if args.port:
import config
config.SERIAL_PORTS = [{'port': args.port, 'baud': args.baud, 'name': 'CLI'}]
if args.kiosk:
_setup_kiosk()
# Must be set BEFORE QApplication is created
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
app = QApplication(sys.argv)
if args.kiosk:
app.setOverrideCursor(Qt.BlankCursor)
try:
from ui.main_window import MainWindow
win = MainWindow()
win.show()
win.activateWindow()
win.raise_()
sys.exit(app.exec_())
except Exception as e:
import traceback
from PyQt5.QtWidgets import QMessageBox
QMessageBox.critical(None, 'Error al iniciar', traceback.format_exc())
sys.exit(1)
def _setup_kiosk():
"""Disable screensaver and DPMS on Linux/RPi."""
import platform
if platform.system() != 'Linux':
return
import subprocess
for cmd in [
['xset', 's', 'off'],
['xset', '-dpms'],
['xset', 's', 'noblank'],
]:
try:
subprocess.Popen(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except FileNotFoundError:
pass
if __name__ == '__main__':
main()