Обновить myscript.py
Добавлен поиск пароля в логе
This commit is contained in:
134
myscript.py
134
myscript.py
@@ -7,6 +7,8 @@ import os
|
||||
import re
|
||||
import glob
|
||||
from datetime import datetime
|
||||
import time
|
||||
import serial
|
||||
|
||||
class MainApp:
|
||||
def __init__(self, root):
|
||||
@@ -24,6 +26,8 @@ class MainApp:
|
||||
self.small_font = ('Arial', 16)
|
||||
|
||||
self.create_widgets()
|
||||
# Автоматически открываем Minicom при запуске
|
||||
self.root.after(1000, self.open_minicom) # Задержка 1 секунда перед открытием Minicom
|
||||
|
||||
def position_window_left(self):
|
||||
"""Позиционирует окно по левому краю экрана"""
|
||||
@@ -82,13 +86,13 @@ class MainApp:
|
||||
# Кнопка Minicom
|
||||
self.minicom_btn = tk.Button(
|
||||
self.root,
|
||||
text="Minicom",
|
||||
text="Получить пароль",
|
||||
font=self.big_font,
|
||||
bg='#FF9800',
|
||||
fg='white',
|
||||
width=15,
|
||||
height=2,
|
||||
command=self.open_minicom
|
||||
command=self.get_password
|
||||
)
|
||||
self.minicom_btn.pack(pady=10)
|
||||
|
||||
@@ -154,6 +158,130 @@ class MainApp:
|
||||
self.add_to_log("✅ Приложение запущено и готово к работе")
|
||||
self.add_to_log("📐 Окно позиционировано по левому краю (900x900)")
|
||||
|
||||
def get_password(self):
|
||||
"""Получает пароль от устройства"""
|
||||
self.add_to_log("🔑 Запуск процесса получения пароля...")
|
||||
self.status_var.set("Получение пароля...")
|
||||
|
||||
try:
|
||||
# Прошивка STM32 с firmware для получения UID
|
||||
self.add_to_log("🔍 Прошивка STM32 для получения UID...")
|
||||
stm32_firmware = os.path.expanduser("~/fw/getuid/STM32_GET_UID.bin")
|
||||
|
||||
|
||||
if os.path.exists(stm32_firmware):
|
||||
# Стираем флеш-память STM32
|
||||
self.add_to_log("🧹 Стирание флеш-памяти STM32...")
|
||||
erase_result = subprocess.run([
|
||||
'st-flash', 'erase'
|
||||
], capture_output=True, text=True, timeout=30)
|
||||
|
||||
if erase_result.returncode != 0:
|
||||
self.add_to_log(f"❌ Ошибка стирания STM32: {erase_result.stderr}")
|
||||
return False
|
||||
|
||||
# Прошивка STM32
|
||||
|
||||
# Прошивка ESP32
|
||||
self.add_to_log("📥 Прошивка ESP32 для получения пароля...")
|
||||
port = "/dev/ttyUSB0"
|
||||
|
||||
# Файлы для ESP32
|
||||
bootloader_path = os.path.expanduser("~/fw/getuid/bootloader.bin")
|
||||
firmware_path = os.path.expanduser("~/fw/getuid/ET_22KW_1.0b.bin")
|
||||
partition_path = os.path.expanduser("~/fw/getuid/partition-table.bin")
|
||||
www_path = os.path.expanduser("~/fw/getuid/www.bin")
|
||||
|
||||
if not all([os.path.exists(p) for p in [bootloader_path, firmware_path, partition_path, www_path]]):
|
||||
self.add_to_log("❌ Не все файлы прошивки GetUID найдены")
|
||||
return False
|
||||
|
||||
# Стираем флеш-память ESP32
|
||||
self.add_to_log("🧹 Стирание флеш-памяти ESP32...")
|
||||
esp_erase_result = subprocess.run([
|
||||
'esptool.py', '--chip', 'esp32', '--port', port, 'erase_flash'
|
||||
], capture_output=True, text=True, timeout=60)
|
||||
|
||||
time.sleep(60) # Ждем после стирания
|
||||
|
||||
# Прошиваем ESP32
|
||||
flash_command = [
|
||||
'esptool.py', '--chip', 'esp32', '--port', port, '--baud', '460800',
|
||||
'write_flash', '--flash_mode', 'dio', '--flash_freq', '40m', '--flash_size', 'detect',
|
||||
'0x1000', bootloader_path,
|
||||
'0x10000', firmware_path,
|
||||
'0x8000', partition_path,
|
||||
'0x210000', www_path
|
||||
]
|
||||
|
||||
self.add_to_log(f"🔧 Команда прошивки: {' '.join(flash_command)}")
|
||||
flash_result = subprocess.run(flash_command, capture_output=True, text=True, timeout=180)
|
||||
|
||||
if flash_result.returncode != 0:
|
||||
self.add_to_log(f"❌ Ошибка прошивки ESP32: {flash_result.stderr}")
|
||||
return False
|
||||
|
||||
self.add_to_log("📥 Прошивка STM32 специальной прошивкой...")
|
||||
flash_result = subprocess.run([
|
||||
'st-flash', '--reset', 'write',
|
||||
stm32_firmware, '0x08000000'
|
||||
], capture_output=True, text=True, timeout=30)
|
||||
|
||||
if flash_result.returncode != 0:
|
||||
self.add_to_log(f"❌ Ошибка прошивки STM32: {flash_result.stderr}")
|
||||
return False
|
||||
# Перезагрузка устройств
|
||||
self.add_to_log("🔄 Перезагрузка устройств...")
|
||||
|
||||
# Перезагрузка ESP32
|
||||
subprocess.run(['esptool.py', '--port', port, 'run'],
|
||||
capture_output=True, text=True, timeout=20)
|
||||
time.sleep(5)
|
||||
|
||||
# Перезагрузка STM32
|
||||
subprocess.run(['st-flash', 'reset'],
|
||||
capture_output=True, text=True, timeout=20)
|
||||
time.sleep(5)
|
||||
|
||||
# Повторяем перезагрузку для надежности
|
||||
self.add_to_log("🔄 Повторная перезагрузка устройств...")
|
||||
subprocess.run(['esptool.py', '--port', port, 'run'],
|
||||
capture_output=True, text=True, timeout=20)
|
||||
time.sleep(5)
|
||||
subprocess.run(['st-flash', 'reset'],
|
||||
capture_output=True, text=True, timeout=20)
|
||||
|
||||
# Чтение данных с COM-порта
|
||||
self.add_to_log("📋 Чтение данных с порта...")
|
||||
try:
|
||||
with serial.Serial(port, 115200, timeout=20) as ser:
|
||||
time.sleep(2)
|
||||
data = ser.read(10000)
|
||||
received_data = data.decode(errors='ignore')
|
||||
self.add_to_log(f"📟 Полученные данные: {received_data}")
|
||||
|
||||
# Updated pattern to match "Hash:: XXXXXXXXXXXX" format
|
||||
import re
|
||||
password_match = re.search(r'Hash:: ([A-Za-z0-9]+)', received_data)
|
||||
if password_match:
|
||||
password = password_match.group(1)
|
||||
self.add_to_log(f"🔑 Найден пароль: {password}")
|
||||
self.status_var.set(f"Пароль: {password}")
|
||||
return password
|
||||
else:
|
||||
self.add_to_log("❌ Пароль не найден в полученных данных")
|
||||
return None
|
||||
except serial.SerialException as e:
|
||||
self.add_to_log(f"❌ Ошибка чтения COM-порта: {str(e)}")
|
||||
return None
|
||||
else:
|
||||
self.add_to_log(f"❌ Файл прошивки STM32 для получения UID не найден: {stm32_firmware}")
|
||||
return None
|
||||
except Exception as e:
|
||||
self.add_to_log(f"❌ Произошла ошибка при получении пароля: {str(e)}")
|
||||
self.status_var.set("Ошибка получения пароля")
|
||||
return None
|
||||
|
||||
def open_minicom(self):
|
||||
"""Открывает minicom в отдельном терминале"""
|
||||
try:
|
||||
@@ -267,7 +395,7 @@ class MainApp:
|
||||
"""Автоматический режим для STM32 или ESP32"""
|
||||
self.status_var.set(f"Режим Авто {mcu_type.upper()} активирован")
|
||||
self.add_to_log(f"🔄 Запуск автоматического режима для {mcu_type.upper()}...")
|
||||
import time
|
||||
|
||||
|
||||
if mcu_type == 'test':
|
||||
self.auto_mode_erase_stm32()
|
||||
|
||||
Reference in New Issue
Block a user