import threading import time import typer from rich.console import Console from rich.table import Table from .UART import UART from .ConfigBoard import ConfigBoard class FaultyWorker(threading.Thread): def __init__(self): super().__init__() #self.daemon = True self.workers = [] self.board_uart = UART() self.board_configurator = ConfigBoard() self.pulse_count = self.board_configurator.BOARD_CONFIG["pulse_count"] self.pulse_time = self.board_configurator.BOARD_CONFIG["pulse_time"] def add_worker(self, worker): self.workers.append(worker) def stop_workers(self): for worker in self.workers: worker.join() def run_workers(self): for worker in self.workers: worker.start() def set_serial_port(self, serial_port): self.board_uart.set_serial_port(serial_port) def validate_serial_connection(self): return self.board_uart.is_valid_connection() def set_pulse_count(self, pulse_count): self.pulse_count = pulse_count self.board_configurator.BOARD_CONFIG["pulse_count"] = pulse_count def set_pulse_time(self, pulse_time): self.pulse_time = pulse_time self.board_configurator.BOARD_CONFIG["pulse_time"] = pulse_time def start_faulty_attack(self): try: self.board_uart.open() time.sleep(0.1) typer.secho("Board connected.", fg=typer.colors.GREEN) typer.secho("[*] ARMING BOARD, BE CAREFULL!", fg=typer.colors.BRIGHT_YELLOW) self.board_uart.send(self.board_configurator.board_commands.COMMAND_DISARM.value.encode("utf-8")) time.sleep(1) self.board_uart.send(self.board_configurator.board_commands.COMMAND_ARM.value.encode("utf-8")) typer.secho("[*] ARMED BOARD.", fg=typer.colors.BRIGHT_GREEN) time.sleep(1) typer.secho(f"[*] SENDING {self.pulse_count} PULSES.", fg=typer.colors.BRIGHT_GREEN) for i in range(self.pulse_count): typer.secho(f"\t- SENDING PULSE {i+1} OF {self.pulse_count}.", fg=typer.colors.BRIGHT_GREEN) self.board_uart.send(self.board_configurator.board_commands.COMMAND_PULSE.value.encode("utf-8")) time.sleep(self.pulse_time) typer.secho("DISARMING BOARD.", fg=typer.colors.BRIGHT_YELLOW) self.board_uart.send(self.board_configurator.board_commands.COMMAND_DISARM.value.encode("utf-8")) self.board_uart.close() typer.secho("BOARD DISARMING.", fg=typer.colors.BRIGHT_YELLOW) except Exception as e: typer.secho(f"Error: {e}", fg=typer.colors.BRIGHT_RED)