Перейти к основному содержимому

mp.config — 9 функций

Все сеттеры возвращают (ok: bool, err: string). На успех — (true, ""), на ошибку — (false, "<причина>").

ФункцияВозвратОписание
get()table{target, family, programmer, power, file_path, region_index}
set_target(name)ok, errУмный поиск family + programmer в БД, полная реконфигурация backend. (false, "Ambiguous target ...") или (false, "Target not found")
set_target(family, name)ok, errЯвное семейство. Валидирует target ∈ family
set_family(name)ok, errВалидация по БД; авто-смена программатора если текущий не поддерживается семейством
set_programmer(t)ok, err"stlink" | "usbdm" | "tgsn" | "esp"
set_power(v)ok, err"3v3" | "5v" | "off"
set_file(path)ok, errПуть к текущему файлу
set_region_index(i)ok, errИндекс активного региона (с 0)
select(prog, family, target)ok, errПолный выбор; валидирует target ∈ family до триггера backend
set(opts)ok, errМассовая установка — {target, family, programmer, power, file_path}; валидируется до применения

Зачем set_target вместо прямой записи?

Умная форма эмитит тот же сигнал requestUpdateSelection, который использует GUI: регионы памяти, информация о программаторе, селектор питания и уровень лога перенастраиваются под новый таргет. Простая запись cfg.target = "..." не запускает эту цепочку — backend остаётся инициализированным под предыдущий таргет.

Примеры

local cfg = mp.config.get()
mp.log.info("Таргет: " .. cfg.target)

-- Умный однопараметрический вид
local ok, err = mp.config.set_target("STM32F103C8")
if not ok then mp.log.error(err) end

-- Двухпараметрический вид: явное семейство
mp.config.set_target("STM32F1", "STM32F103C8")

mp.config.set_family("STM32F1")
mp.config.set_programmer("stlink")
mp.config.set_power("3v3")
mp.config.set_file("C:/firmware.hex")
mp.config.set_region_index(0)

-- Bulk
mp.config.set({target="STM32F103C8", family="STM32F1", programmer="stlink"})

-- Полный выбор с валидацией
mp.config.select("stlink", "STM32F1", "STM32F103C8")