diff --git a/elbear_uploader.py b/elbear_uploader.py index f0de82e..8a26a49 100644 --- a/elbear_uploader.py +++ b/elbear_uploader.py @@ -3,6 +3,8 @@ import time import argparse from sys import exit +UPLOADER_VERSION = "0.2.3" + TIMEOUT_DEFAULT = 0.1 # sec BYTE_COUNT_POS = 0 # индекс счетчика байт данных @@ -13,6 +15,7 @@ REC_TYPE_EXT_LIN_ADDR = 4 # тип записи - расширенный ад COMMAND_PACKAGE_SIZE = b'\x30' # Команда размера пакета COMMAND_SEND_PACKAGE = b'\x60' # Команда отправить пакет +COMMAND_GET_VERSION = b'\x90' # Команда получить версию начального загрузчика COMMAND_FULL_ERASE = 0xBADC0FEE # Команда очистить чип ACK = 0x0F # МК подтвердил 0b00001111 @@ -64,6 +67,22 @@ def cmd_send_package(data_package): # Если дошли сюда, значит контроллер ответил на команду. Отправить пакет send_parsel(bytes(data_package)) +# Получить версию начального загрузчика +def cmd_get_version(): + for attempt in range(10): + ser.write(COMMAND_GET_VERSION) # Отправка команды получения версии + read_bytes = ser.read(3) # Ожидание ответа от МК, должны получить 3 байта + + if len(read_bytes) == 3: + major, minor, patch = read_bytes + return f"{major}.{minor}.{patch}" # Возвращаем строку версии + else: + # ответ на команду не получен + pass + + # за 10 раз не получили внятного ответа - устройство не отвечает, выходим + print("Device not responding (get_version)") + exit() def printProgressBar (iteration, total, prefix = '', suffix = '', decimals = 1, length = 100, fill = '_', printEnd = "\r"): percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total))) @@ -124,6 +143,8 @@ parser = createParser() namespace = parser.parse_args() if namespace.hexpath: + print(f"Start elbear_uploader v{UPLOADER_VERSION}") + # читаем хекс with open(f"{namespace.hexpath}", "r", encoding='utf-8') as f: hex_lines = f.readlines() @@ -218,6 +239,10 @@ if namespace.hexpath: if ping: print("Device connected") + # todo проверить + version_str = cmd_get_version() + print("Bootloader version:", version_str) + if namespace.fullerase: print('Erasing memory') cmd_full_erase()