pre uart exchange
This commit is contained in:
170
tool/buzz.py
Normal file
170
tool/buzz.py
Normal file
@@ -0,0 +1,170 @@
|
||||
import sys
|
||||
import os
|
||||
import argparse
|
||||
|
||||
# # Falls buzz.py tief in Unterordnern liegt, stellen wir sicher,
|
||||
# # dass das Hauptverzeichnis im Pfad ist:
|
||||
# sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
def main():
|
||||
try:
|
||||
parser = argparse.ArgumentParser(description="Buzzer Serial Comm Tool")
|
||||
|
||||
# Allgemeine Parameter
|
||||
parser.add_argument("-c", "--config", help="Pfad zur config.yaml (optional)", type=str)
|
||||
parser.add_argument("-d", "--debug", help="Aktiviert detaillierte Hex-Logs", action="store_true")
|
||||
|
||||
# Verbindungsparameter (können auch in config.yaml definiert werden)
|
||||
parser.add_argument("-p", "--port", help="Serieller Port", type=str)
|
||||
parser.add_argument("-b", "--baud", help="Baudrate", type=int)
|
||||
parser.add_argument("-t", "--timeout", help="Timeout in Sekunden", type=float)
|
||||
|
||||
# Subparser für Befehle
|
||||
subparsers = parser.add_subparsers(dest="command", help="Verfügbare Befehle")
|
||||
|
||||
# Befehl: flash_info
|
||||
flash_info_parser = subparsers.add_parser("flash_info", help="Informationen über den Flash-Speicher des Controllers abfragen")
|
||||
|
||||
# Befehl: fw_status
|
||||
fw_status_parser = subparsers.add_parser("fw_status", help="Firmware- und Kernel-Status des Controllers abfragen")
|
||||
|
||||
# Befehl: get_file
|
||||
get_file_parser = subparsers.add_parser("get_file", help="Datei vom Zielsystem herunterladen")
|
||||
get_file_parser.add_argument("source_path", help="Pfad der Datei auf dem Zielsystem")
|
||||
get_file_parser.add_argument("dest_path", help="Zielpfad auf dem lokalen System")
|
||||
|
||||
# Befehl: ls
|
||||
ls_parser = subparsers.add_parser("ls", help="Listet Dateien/Ordner in einem Verzeichnis auf")
|
||||
ls_parser.add_argument("path", help="Pfad auf dem Zielsystem")
|
||||
ls_parser.add_argument("-r", "--recursive", help="Rekursiv durch die Verzeichnisse durchsuchen", action="store_true")
|
||||
|
||||
# Befehl: proto
|
||||
proto_parser = subparsers.add_parser("proto", help="Protokollversion des Controllers abfragen")
|
||||
|
||||
# Befehl: rename
|
||||
rename_parser = subparsers.add_parser("rename", help="Benennen Sie eine Datei oder einen Ordner auf dem Zielsystem um")
|
||||
rename_parser.add_argument("source_path", help="Aktueller Pfad der Datei/des Ordners auf dem Zielsystem")
|
||||
rename_parser.add_argument("dest_path", help="Neuer Pfad der Datei/des Ordners auf dem Zielsystem")
|
||||
|
||||
# Befehl: rm
|
||||
rm_parser = subparsers.add_parser("rm", help="Entfernt eine Datei oder einen Ordner auf dem Zielsystem")
|
||||
rm_parser.add_argument("path", help="Pfad auf dem Zielsystem")
|
||||
|
||||
# Befehl: stat
|
||||
stat_parser = subparsers.add_parser("stat", help="Informationen zu einer Datei/Ordner")
|
||||
stat_parser.add_argument("path", help="Pfad auf dem Zielsystem")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.command:
|
||||
parser.print_help()
|
||||
sys.exit(0)
|
||||
|
||||
from core.config import cfg
|
||||
from core.utils import console, console_err
|
||||
|
||||
if args.config:
|
||||
cfg.custom_path = args.config
|
||||
|
||||
if args.debug:
|
||||
cfg.debug = True
|
||||
|
||||
console.print("[bold blue]Buzzer Tool v1.0[/bold blue]", justify="left")
|
||||
|
||||
settings = cfg.serial_settings
|
||||
|
||||
settings['debug'] = args.debug
|
||||
|
||||
# Überschreibe Einstellungen mit Kommandozeilenparametern, falls vorhanden
|
||||
if args.port:
|
||||
settings['port'] = args.port
|
||||
if args.baud:
|
||||
settings['baudrate'] = args.baud
|
||||
if args.timeout:
|
||||
settings['timeout'] = args.timeout
|
||||
|
||||
# Ausgabe der aktuellen Einstellungen
|
||||
port = settings.get('port')
|
||||
baud = settings.get('baudrate', 'N/A')
|
||||
timeout = settings.get('timeout', 'N/A')
|
||||
|
||||
if not port:
|
||||
console_err.print("[error]Fehler: Kein serieller Port angegeben.[/error]")
|
||||
sys.exit(1)
|
||||
|
||||
if args.debug:
|
||||
console.print(f" • Port: [info]{port}[/info]")
|
||||
console.print(f" • Baud: [info]{baud}[/info]")
|
||||
console.print(f" • Timeout: [info]{timeout:1.2f}s[/info]")
|
||||
console.print("-" * 78)
|
||||
|
||||
from core.serial_conn import SerialBus
|
||||
bus = SerialBus(settings)
|
||||
|
||||
try:
|
||||
bus.open()
|
||||
if args.command == "get_file":
|
||||
from core.cmd.get_file import get_file
|
||||
cmd = get_file(bus)
|
||||
result = cmd.get(args.source_path, args.dest_path)
|
||||
cmd.print(result)
|
||||
elif args.command == "flash_info":
|
||||
from core.cmd.flash_info import flash_info
|
||||
cmd = flash_info(bus)
|
||||
result = cmd.get()
|
||||
cmd.print(result)
|
||||
elif args.command == "fw_status":
|
||||
from core.cmd.fw_status import fw_status
|
||||
cmd = fw_status(bus)
|
||||
result = cmd.get()
|
||||
cmd.print(result)
|
||||
elif args.command == "ls":
|
||||
from core.cmd.list_dir import list_dir
|
||||
cmd = list_dir(bus)
|
||||
result = cmd.get(args.path, recursive=args.recursive)
|
||||
cmd.print(result, args.path)
|
||||
elif args.command == "proto":
|
||||
from core.cmd.proto import proto
|
||||
cmd = proto(bus)
|
||||
result = cmd.get()
|
||||
cmd.print(result)
|
||||
elif args.command == "rename":
|
||||
from core.cmd.rename import rename
|
||||
cmd = rename(bus)
|
||||
result = cmd.get(args.source_path, args.dest_path)
|
||||
cmd.print(result)
|
||||
elif args.command == "rm":
|
||||
from core.cmd.rm import rm
|
||||
cmd = rm(bus)
|
||||
result = cmd.get(args.path)
|
||||
cmd.print(result, args.path)
|
||||
elif args.command == "stat":
|
||||
from core.cmd.stat import stat
|
||||
cmd = stat(bus)
|
||||
result = cmd.get(args.path)
|
||||
cmd.print(result, args.path)
|
||||
|
||||
finally:
|
||||
bus.close()
|
||||
|
||||
except FileNotFoundError as e:
|
||||
console_err.print(f"[error]Fehler: {e}[/error]")
|
||||
sys.exit(1)
|
||||
except (TimeoutError, IOError, ValueError) as e:
|
||||
console_err.print(f"[bold red]KOMMUNIKATIONSFEHLER:[/bold red] [error_msg]{e}[/error_msg]")
|
||||
sys.exit(1) # Beendet das Script mit Fehlercode 1 für Tests
|
||||
except Exception as e:
|
||||
# Hier fangen wir auch deinen neuen ControllerError ab
|
||||
from core.serial_conn import ControllerError
|
||||
if isinstance(e, ControllerError):
|
||||
console_err.print(f"[bold red]CONTROLLER FEHLER:[/bold red] [error_msg]{e}[/error_msg]")
|
||||
else:
|
||||
console_err.print(f"[bold red]UNERWARTETER FEHLER:[/bold red] [error_msg]{e}[/error_msg]")
|
||||
|
||||
if args.debug:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user