1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-29 09:58:47 +00:00
trezor-firmware/tools/automatic_battery_tester/single_capture.py
2025-07-02 14:19:11 +02:00

141 lines
4.1 KiB
Python

import sys
import time
from pathlib import Path
from dut import Dut
from hardware_ctl.gdm8351 import GDM8351
from serial.tools import list_ports
output_directory = Path("single_capture_test_results")
test_description = "non_specified_test"
temp_description = "ambient"
"""
This script will connect to a signle DUT over VCP port and will run a continous
log of the power manager data (continously calls pm-report command) into the
log file. User can also select to log the temepertature readings from an
external thermocouple sensor connected to the GDM8351 multimeter.
"""
def main():
print("**********************************************************")
print(" DUT port selection ")
print("**********************************************************")
ports = list_ports.comports()
available_ports = {}
port_count = 0
print("Available VCP ports:")
for port in ports:
if "ACM" in port.device:
port_count += 1
available_ports[port_count] = port.device
print(f" [{port_count}]: {port.device} - {port.description}")
if port_count == 0:
print("No device conneceted. Exiting.")
return
dut_port_selection = input("Select VCP port number (or Q to quit the selection): ")
if dut_port_selection.lower() == "q":
print("Exiting script.")
sys.exit(0)
selected_port = None
for port_id, port_name in available_ports.items():
if int(dut_port_selection) == port_id:
selected_port = port_name
break
try:
dut = Dut(name="Trezor", usb_port=selected_port)
except Exception as e:
print(f"Failed to initialize DUT on port {selected_port}: {e}")
sys.exit(1)
# Initialize DUT
print("**********************************************************")
print(" GDM8351 port selection (temp measurement) ")
print("**********************************************************")
# Initialize the GDM8351 multimeter
gdm8351 = GDM8351()
# Get the device ID to confirm connection
try:
device_id = gdm8351.get_id()
print(f"Connected to device: {device_id}")
except Exception as e:
print(f"Error getting device ID: {e}")
return
# Configure temperature sensing
try:
gdm8351.configure_temperature_sensing(sensor_type="K", junction_temp_deg=29.0)
print("Temperature sensing configured successfully.")
except ValueError as ve:
print(f"Configuration error: {ve}")
except Exception as e:
print(f"Error configuring temperature sensing: {e}")
# Creat test time ID
test_time_id = f"{time.strftime('%y%m%d%H%M')}"
# Create output data directory
try:
output_directory.mkdir(parents=True, exist_ok=True)
except OSError as e:
print("Failed to create output directory:", e)
sys.exit(1)
#########################################################################
# Test setup section
#########################################################################
dut.set_soc_limit(100)
dut.set_backlight(100)
dut.enable_charging()
#########################################################################
# Main test loop
#########################################################################
try:
while True:
dut.log_data(
output_directory=output_directory,
test_time_id=test_time_id,
test_scenario="single_capture",
test_phase=test_description,
temp=temp_description,
verbose=True,
)
# Read temperature from GDM8351
gdm8351.log_temperature(
output_directory=output_directory,
test_time_id=test_time_id,
verbose=True,
)
time.sleep(1)
except KeyboardInterrupt:
print("Test execution interrupted by user (Ctrl+C)")
except Exception as e:
print(f"FATAL ERROR during test execution: {e}")
finally:
dut.close()
gdm8351.close()
if __name__ == "__main__":
main()