blob: a9d02b9d8ab81b92809fdc1386d6ff84d01c26a4 [file]
#!/usr/bin/env python3
# allow-non-vendored-python
# Copyright 2026 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import hashlib
import json
import os
import socket
import sys
import time
args = sys.argv[1:]
target = None
log_dir = None
socket_path = None
baud = None
simple = False
log_level = None
for i in range(len(args)):
if args[i] == "--target" and i + 1 < len(args):
target = args[i + 1]
elif args[i] == "--log-dir" and i + 1 < len(args):
log_dir = args[i + 1]
elif args[i] == "--socket" and i + 1 < len(args):
socket_path = args[i + 1]
elif args[i] == "--baud" and i + 1 < len(args):
baud = int(args[i + 1])
elif args[i] == "--simple":
simple = True
elif args[i] == "--log-level" and i + 1 < len(args):
log_level = args[i + 1]
if target and log_dir:
h = hashlib.sha256(target.encode("utf-8")).hexdigest()[:16]
meta_path = os.path.join(log_dir, f"ffx_uart_{h}.json")
pid = os.fork()
if pid == 0:
devnull = os.open(os.devnull, os.O_RDWR)
os.dup2(devnull, 0)
os.dup2(devnull, 1)
os.dup2(devnull, 2)
os.close(devnull)
my_pid = os.getpid()
data = {
"pid": my_pid,
"target": target,
"status": "Connected",
"id": h,
"baud": baud,
"protocol": "ResendSP",
"log_level": log_level,
}
os.makedirs(log_dir, exist_ok=True)
sock_fd = None
control_fd = None
if socket_path:
if os.path.exists(socket_path):
os.remove(socket_path)
sock_fd = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock_fd.bind(socket_path)
sock_fd.listen(5)
control_path = os.path.splitext(socket_path)[0] + ".control"
if os.path.exists(control_path):
os.remove(control_path)
control_fd = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
control_fd.bind(control_path)
control_fd.listen(5)
with open(meta_path, "w") as f:
json.dump(data, f)
time.sleep(3600)
if sock_fd:
sock_fd.close()
if control_fd:
control_fd.close()
else:
sys.exit(0)
else:
sys.exit(0)