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")