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)