Обновить документацию системы команд платы

This commit is contained in:
Данил Ярош 2026-06-16 16:12:21 +03:00
parent 611131b830
commit e4213e203b

View File

@ -5,6 +5,7 @@ by: Паша Николаевич
>[!info] Информация
>Это раздел с информацией о плате периферийного контроллера.
>Информацию о плате для витрины призов смотреть в [[Витрина призов]]
>Текущая описанная прошивка: `ver_2.3.6_no_auth_prizes`.
>[!info] Общие сведения
> - Плата подключается к компьютеру по переходу USB - COM порт.
@ -21,6 +22,7 @@ by: Паша Николаевич
1. [[#Служебные команды]]
2. [[#Программы адресных диодов]]
1. [[#Специфичные программы]]
1. [[#Отдельный раздел для Бродяги морей]]
2. [[#Список команд]]
3. [[#Обновление]]
@ -28,27 +30,30 @@ by: Паша Николаевич
- Общение - строка, заканчивающаяся кодами (0xD)+(0xA), достаточно любого из них  для окончания строки
- Минимально – ДВА (2, two) символа. 00+\<Enter\> – команда, а 0+\<Enter\> – уже нет
- Таймаут - 100 милисекунд, если строка за это время не окончилась - идет игнорирование команды
- Максимальная длина входной строки - 199 символов
- Таймаут - 100 миллисекунд, если строка за это время не окончилась - идет игнорирование команды
Команды получаемые от компьютера помещаются в очередь и выполняются последовательно, кроме команд "сброс" (00) и "очистка очереди".
Размер очереди команд - 100 строк. Команды `00` и `90` обрабатываются сразу.
Шифрование обмена: двойное рукопожатие при помощи AES256 c фиксированным ключом.
#### Кнопка SERVICE на плате:
- Если ее зажать и удержать при включении – выполнится сброс EEPROM
- Если ее зажать и удержать при включении – выполнится сброс настроек контроллера
- При работе – посылает команду «SERVICE – предлагая компьютеру перейти в режим настройки игровой программы
>[!warning] Внимание!
>Имеются два режима работы: SILENT (тихий режим) и DEVELOPER (режим разработки, с полными логами).
>
>Переключение режимов:
>Если соединить ногу GPIO_15 с землей через резистор <10кОм включается ТИХИЙ режим, и контроллер не выдает логи, а только необходимые ответы и команды.
>Также режим можно переключать командой «01» (временно, в релизе будет удалено)
>Команда `01` временно переключает режим логирования. В релизной версии команда может быть удалена.
### Авторизация
После загрузки контроллер не принимает никаких команд, кроме запросов на авторизацию.
В текущей сборке `ver_2.3.6_no_auth_prizes` флаг авторизации по умолчанию выставлен в `true`, поэтому контроллер фактически стартует уже разрешенным. Если `auth_ok=false`, логика остается прежней: интерпретатор принимает только команды `07` и `08` до успешной авторизации.
Запрос – требование зашифровать строку шестнадцатеричных символов с помощью AES256 алгоритма, используя известный ключ.
Компьютер генерирует случайную последовательность из 16 байт и отправляет ее контроллеру на шифрование. Тот ее шифрует и отвечает. Компьютер расшифровывает и проверяет на совпадение.
@ -70,6 +75,7 @@ by: Паша Николаевич
4. **Контроллер ответит на первый запрос компа**:
**RAES\<symbols\> (16 байт или 32 HEX-символа)**
***Пример:*** **RAES***99ED731648AB8C1709CC4C3C8C3BB0E1*
5. При успехе контроллер отправляет `AUTH_PC_OK` и статус. При ошибке - `AUTH_PC_FAIL`.
# Команды
@ -77,98 +83,298 @@ by: Паша Николаевич
### Служебные команды
`02…09` – команды относятся к служебным (обновление прошивки и двойное рукопожопие)
`02…09` – команды относятся к служебным (обновление прошивки и двойное рукопожатие)
>[!warning] Внимание!
>Перешивается только основная программа, не трогается таблица разделов и буты.
>Поэтому контроллер должен шиться изначально в файловую систему «OTA0-1M+OTA1-1M+SpiFFS-1.7M».
>При прошивке зашивается ключ шифрования и AES ключ авторизации.
>Прошивка для обновления идет бин-файлом, уже криптованным.
>Обновляется только основная программа контроллера.
>Файл обновления передается как подготовленный `bin`.
>Ключи шифрования и авторизации должны соответствовать версии прошивки.
### Программы адресных диодов
`8XYY` - выбор программы адресных диодов
Всего 4 канала
- `81YY…84YY`  - переключить программу на канале
***Например:*** `8204` – на второй канал вывести четвертую, "зеленую" программу
- `80YY` – переключает программу на всех каналах сразу.
`80NNYY[PARAMS]` - выбор программы адресных диодов, где NN - номер канала в формате ДВУХ (2, two) цифр, а YY - номер параметра базового эффекта.
Программа зависит от автомата и не может быть унифицирована. Именно для этого требуется обновление прошивки контроллера.
Кроме, пожалуй, этих (считать тестовыми. Остальное – добавлять по вкусу):
- 0 – ничего не выводить в канал
- 1 – повторный периодический вывод буфера
- 2 – погасить (выводить нолики на всю длину)
- 3 – красный
- 4 – зеленый
- 5 - синий
- 6 - серый (100, 100, 100)
- 7 - белый
- 9 - выводить ЛГБТ переливы
***Список базовых эффектов:***
- 00 – ничего не выводить в канал
- 01 – повторный периодический вывод последнего состояния
- 02 – погасить (выводить нолики на всю длину)
- 03 – красный
- 04 – зеленый
- 05 - синий с яркостью `B=100`
- 06 - белый (100, 100, 100)
- 07 - белый (255, 255, 255)
- 08 - пользовательский цвет `RRRGGGBBB`, где каждая компонента `000..255`
- 09 - радужный сдвиг на весь канал
- 10 - морская волна для шапки морского боя
- 11 - автоперебор медленных эффектов шапки морского боя
- 20 - idle-анимация призовой стойки
- 21 - подсветить полку призовой стойки, параметры `BCF`: ячейка `1..5`, цвет, мигание `0/1`
- 22 - красная мигающая тревога
- 23 - радужный сдвиг на весь канал
- 90 - выводить состояние, которое заполняет виртуальная панель
*10 и далее – пользовательские функции*
***Примеры:***
- `800003` - все каналы красные
- `800103` - канал 1 красный
- `800002` - все каналы черные
- `800208255000128` - канал 2, цвет RGB `255,000,128`
- `800121311` - канал 1, полка 3, красный, мигает
##### Настройки адресной подсветки
`89CKP`:
- `C` - канал: `0` для всех каналов подсветки, `1..4` для конкретного канала;
- `K` - настройка: `0` порядок цветов, `1` яркость, `2` гамма-коррекция;
- `P` - значение настройки. Может состоять из нескольких цифр, например `255` для яркости. Если отправить только `89CK` без `P`, параметр будет принят как `0`, поэтому лучше передавать `P` явно.
`K=0` сохраняет порядок цветов, `K=1` меняет яркость до перезагрузки, `K=2` включает/выключает гамма-коррекцию до перезагрузки.
Порядки цвета для `K=0`:
| `P` | Порядок |
|---|---|
| `0` | RGB |
| `1` | RBG |
| `2` | BRG |
| `3` | BGR |
| `4` | GRB |
| `5` | GBR |
***Примеры:***
- `89004` - установить порядок `GRB` для всех каналов
- `89104` - установить порядок `GRB` для 1-го канала
- `89404` - установить порядок `GRB` для 4-го канала
- `8901255` - установить яркость `255` для всех каналов
- `8901128` - установить яркость `128` для всех каналов
- `89020` - выключить гамма-коррекцию на всех каналах
- `89421` - включить гамма-коррекцию для 4-го канала
#### Специфичные программы
##### Отдельный раздел для Бродяги морей
`81XX[NN]` управляет двумя отдельными direct-объектами Бродяги морей. Эта группа похожа на direct-шкалы `8530..8534`, но не является частью команды `85` и используется отдельно от панелей `85`, `86` и `87`.
- `XX` - подкоманда объекта;
- `NN` - уровень заполнения объекта;
- короткие команды `81311..81313` - эффекты для объекта 1;
- короткие команды `81321..81323` - эффекты для объекта 2;
- если нужен ручной уровень `1..3`, передавайте уровень с ведущим нулем: `813101..813103` или `813201..813203`;
- эффекты `81311..81313` и `81321..81323` ускорены примерно в 3 раза, цветовые переходы сглажены.
| Команда | Назначение | Максимальный уровень |
|---|---|---|
| `8130` | Очистить оба объекта | - |
| `8131NN` | Объект 1. Заполнить шкалу градиентом красный -> фиолетовый -> синий | `21` |
| `81311` | Эффект 1 объекта 1: плавный перелив синий -> фиолетовый -> фиолетово-красный | - |
| `81312` | Эффект 2 объекта 1: плавный перелив фиолетовый -> синий -> сине-голубой | - |
| `81313` | Эффект 3 объекта 1: мягкое мигание белым | - |
| `8132NN` | Объект 2. Заполнить шкалу градиентом красный -> зеленый | `44` |
| `81321` | Эффект 1 объекта 2: плавный перелив синий -> фиолетовый -> фиолетово-красный | - |
| `81322` | Эффект 2 объекта 2: плавный перелив фиолетовый -> синий -> сине-голубой | - |
| `81323` | Эффект 3 объекта 2: мягкое мигание белым | - |
Если `NN` больше длины объекта, значение ограничивается полной длиной объекта. Если `NN=0`, объект гаснет. Команды `8130`, `8131NN` и `8132NN` останавливают эффект соответствующего объекта.
***Примеры:***
- `8130` - очистить оба объекта
- `813105` - установить уровень `5` для первого объекта
- `81311` - запустить эффект 1 первого объекта
- `81312` - запустить эффект 2 первого объекта
- `81313` - запустить эффект 3 первого объекта
- `81321` - запустить эффект 1 второго объекта
- `81322` - запустить эффект 2 второго объекта
- `81323` - запустить эффект 3 второго объекта
- `813101` - вручную установить уровень `1` для первого объекта, не запускать эффект
- `813201` - вручную установить уровень `1` для второго объекта, не запускать эффект
- `813121` - полностью зажечь первый объект
- `813244` - полностью зажечь второй объект
##### Отдельный раздел для морского боя VR
`85XXYY`:
- XX – команда;
- YY – время в секундах.
`85XX[SSS]` управляет виртуальной панелью морского боя (`s_b`). Это отдельная группа анимаций, которая работает независимо от обычных программ подсветки.
***Пример:*** `854505` – включить спецэффект ЗАРЯДКА на 5 секунд
- `XX` – код управления или эффекта, две цифры после `85`;
- `SSS` – необязательная длительность в секундах, все оставшиеся цифры после `XX`;
- для direct-шкал `XX=30..34` хвост команды трактуется как уровень `0..22`, а не как время;
- для тестов `XX=25` хвост команды разбирается как `TVVV`.
`85` – без параметра отключает процесс рендеринга эффектов (чтобы освободить оперативную память).
***Примеры разбора:***
###### Список эффектов
| Команда | Как разбирается |
|---|---|
| `85` | Остановить анимации `s_b` |
| `8500` | Автокарусель выключена, очистить экран, перейти в ожидание |
| `8501` | Автокарусель включена |
| `8510` | Горизонтальная волна с длительностью по умолчанию |
| `851005` | Горизонтальная волна на 5 секунд |
| `853105` | Первая direct-шкала на уровень `5` |
| `854506` | `CHARGE` на 6 секунд |
| `858006` | Красная тестовая заливка на 6 секунд |
| Команда (`XX`) | Название эффекта |
| :-------------: | :------------------: |
| **Базовые** | **эффекты** |
| 00 | Горизонтальная волна |
| 01 | Вертикальная волна |
| 02 | Диагональная волна |
| 03 | Плазма |
| 04 | Ночь |
| 05 | Радуга |
| 06 | Огонь-Лёд |
| 07 | Вода |
| 08 | Звёзды |
| 09 | Сканер |
| 10 | Поток |
| 11 | Буря |
| 12 | Лёд |
| **Специальные** | **эффекты** |
| 40 | СТАРТ |
| 41 | КОНЕЦ |
| 42 | ПОПАДАНИЕ |
| 43 | ВЫСТРЕЛ |
| 44 | ПРОМАХ |
| 45 | ЗАРЯДКА |
| 46 | СОНАР |
| 47 | КРАСНАЯ ВОЛНА |
| 48 | ТРЕВОГА |
| 49 | ПУЛЬСАЦИЯ |
| 80 | красный |
| 81 | зеленый |
| 82 | синий |
`85` без параметра отключает анимации `s_b`. В debug-режиме контроллер может отправить `85 - rendering OFF`.
Любая непустая команда `85...` запускает анимации `s_b`, если они еще не запущены. Direct-группы `813x` и `8530..8534` управляются отдельными командами и не смешиваются с обычными эффектами `85`.
Анимации рассчитываются как виртуальная 2D-панель. Для внешней программы важны только коды эффектов, длительность и правила возврата к предыдущему состоянию.
###### Управляющие коды `85`
| `XX` | Назначение | Длительность по умолчанию |
|---|---|---|
| `00` | Автокарусель выключена, очистить экран, перейти в ожидание | - |
| `01` | Автокарусель включена | 10 сек на эффект |
###### Поведение после окончания эффекта
- Если запущен базовый эффект `10..22` и автокарусель выключена, после истечения времени экран очищается и `s_b` переходит в ожидание.
- Если автокарусель включена, базовые эффекты переключаются по кругу `10 -> 11 -> ... -> 22 -> 10`.
- Если запущен спецэффект `40..49` или `80..82`, после завершения контроллер возвращается к последнему базовому эффекту.
- Если автокарусель выключена, после спецэффекта экран очищается и уходит в ожидание.
###### Direct-шкалы `8530..8534`
Эти команды управляют отдельными шкалами `s_b`. Параметр после `XX` - уровень шкалы `0..22`. Значения больше `22` ограничиваются до полной шкалы.
Шкалы живут независимо от эффектов и не обнуляются при `8500`, `8501`, `8510..8522`, `8540..`, перезапуске анимаций или автопереходе карусели. Обновляются командами `8531..8534`; `8530` вручную очищает шкалы.
| Команда | Назначение | Параметр |
|---|---|---|
| `8530` | Очистить все direct-шкалы | не используется |
| `8531NN` | Шкала 1: красный -> фиолетовый -> синий | уровень `0..22` |
| `8532NN` | Шкала 2: красный -> зеленый | уровень `0..22` |
| `8533NN` | Шкала 3: красный -> фиолетовый -> синий | уровень `0..22` |
| `8534NN` | Шкала 4: красный -> зеленый | уровень `0..22` |
***Примеры:***
- `8530` - очистить все direct-шкалы
- `853105` - установить уровень `5` для первой шкалы
- `853222` - полностью зажечь вторую шкалу
- `853300` - погасить третью шкалу
- `853422` - полностью зажечь четвертую шкалу
###### Тесты морского боя VR `8525TVVV`
При запуске теста обычные анимации `s_b` останавливаются, и панель переходит в тестовый режим.
| Команда | Назначение |
|---|---|
| `85250` | Стоп теста, очистить тестовый режим |
| `85251` | Общий тест подсветки VR: бегущая змейка, цвета меняются |
| `85252NN` | Тест строки панели VR, `NN` - номер строки |
| `85253NN` | Тест столбца панели VR, `NN` - номер столбца |
| `85254NNN` | Тест адресного элемента `NNN` |
***Примеры:***
- `85251` - змейка VR
- `8525212` - строка `12` VR
- `852533` - столбец `3` VR
- `85254105` - адресный элемент `105`
###### Базовые эффекты `8510..8522`
| `XX` | Имя в коде | Визуальный смысл | Длительность по умолчанию |
|---|---|---|---|
| `10` | `hor wave` | Горизонтальная волна: синяя и красная волны идут навстречу | 10 сек |
| `11` | `vert wave` | Вертикальная морская волна снизу вверх/вниз, ping-pong | 10 сек |
| `12` | `diag wave` | Диагональная волна с темно-синим/оранжевым характером | 10 сек |
| `13` | `plazma` | Плазма: смешение синий/красный/зеленый | 10 сек |
| `14` | `night` | Ночной градиент: голубой, фиолетовый, розовый | 10 сек |
| `15` | `rainbow` | Радуга, полный HSV-спектр | 10 сек |
| `16` | `fire-ice` | Огонь-лед, красный к голубому | 10 сек |
| `17` | `wave` | Вода, диагональная темно-синяя/голубая волна | 10 сек |
| `18` | `stars` | Звезды, розово-зеленая диагональная динамика | 10 сек |
| `19` | `scaner` | Зеленый сканер с затуханием | 10 сек |
| `20` | `flame` | Поток / 2D RGB-градиент | 10 сек |
| `21` | `shtorm` | Быстрая радужная буря | 10 сек |
| `22` | `ice` | Лед, холодный вариант красный/голубой | 10 сек |
###### Спецэффекты `8540..8549`
Спецэффекты предназначены для событий игры. Они имеют приоритет над базовой анимацией, очищают состояние панели перед показом и после завершения возвращают систему к предыдущему базовому состоянию или в ожидание.
| `XX` | Имя в коде | Назначение | Длительность по умолчанию |
|---|---|---|---|
| `40` | `START` | Старт: волны темно-синий -> бирюзовый снизу вверх | 3 сек |
| `41` | `FINISH` | Финиш / завершение | 3 сек |
| `42` | `ONE_SHOT` | Попадание / торпеда | 2 сек |
| `43` | `SHOT` | Выстрел / boom: красно-оранжево-желтые полосы от центра | 1 сек |
| `44` | `MISS` | Промах: зелено-голубая волна снизу вверх | 1 сек |
| `45` | `CHARGE` | Зарядка: сине-красный фон и индикатор заряда | 2 сек |
| `46` | `SONAR` | Сонар: расширяющиеся концентрические круги | 3 сек |
| `47` | `RED WAVE` | Красная волна сверху вниз | 3 сек |
| `48` | `ALARM` | Тревога: мигание красным | 3 сек |
| `49` | `PULSE` | Оранжевая пульсация | 2 сек |
###### Тестовые заливки `8580..8582`
Эти коды идут через тот же механизм спецэффектов:
| `XX` | Назначение | Длительность по умолчанию |
|---|---|---|
| `80` | Залить всю виртуальную панель красным | 3 сек |
| `81` | Залить всю виртуальную панель зеленым | 3 сек |
| `82` | Залить всю виртуальную панель синим | 3 сек |
###### Диагностика `85`
В debug-режиме возможны сообщения:
| Сообщение | Значение |
|---|---|
| `85 - rendering ON` | Рендер `s_b` запущен |
| `85 - rendering OFF` | Рендер остановлен командой `85` |
| `[S_B_] autoCarousel ON` | Автокарусель включена |
| `[S_B_] autoCarousel OFF` | Автокарусель выключена, экран очищен |
| `[S_B_] effect: 85XX (...)` | Запущен базовый эффект |
| `[S_B_] gauge: 85XX, level=N` | Обновлена direct-шкала `30..34` |
| `[S_B_] spec: XX (...)` | Запущен спецэффект |
| `[S_B_] effect done, waiting...` | Эффект завершен, экран очищен, режим ожидания |
Ограничения текущего кода:
- параметры после `85` должны быть цифрами, но строгой проверки каждого символа сейчас нет;
- для спецэффектов в текущем коде принимается любой `XX >= 40`, но безопасно описаны только `40..49` и `80..82`;
- полный останов анимаций выполняется пустой командой `85`.
##### Отдельный раздел для Данро
`85XXYY`:
`86XX[SSS]`:
- XX – команда;
- YY – время в секундах.
- SSS – время в секундах.
***Пример:*** `854505` – включить спецэффект ЗАРЯДКА на 5 секунд
***Пример:*** `864906` – включить эффект "Падающие ряды" на 6 секунд
`85` – без параметра отключает процесс рендеринга эффектов (чтобы освободить оперативную память).
`86` – без параметра отключает анимации Данро.
Команды `86XX[SSS]` управляют только панелью Данро и не меняют direct-объекты других аппаратов.
###### Тесты панели Данро `8625TVVV`
При запуске теста обычные анимации Данро останавливаются, и панель переходит в тестовый режим.
| Команда | Назначение |
| ---------- | ---------------------------------------------------------- |
| `86250` | Стоп теста, очистить тестовый режим |
| `86251` | Общий тест подсветки Данро: бегущая змейка, цвета меняются |
| `86252NN` | Тест строки панели Данро, `NN` - номер строки |
| `86253NN` | Тест столбца панели Данро, `NN` - номер столбца |
| `86254NNN` | Тест адресного элемента `NNN` |
***Примеры:***
- `86251` - змейка Данро
- `8625212` - строка `12` Данро
- `862533` - столбец `3` Данро
- `86254105` - адресный элемент `105`
###### Список эффектов
| Команда (`XX`) | Название эффекта |
| :------------: | :----------------------: |
| 00 | Autoplay OFF, очистить экран |
| 01 | Autoplay ON |
| 25 | Тесты подсветки панели |
| 40 | Горизонтальная волна |
| 41 | Вертикальная волна |
| 42 | Диагональная волна |
@ -183,51 +389,86 @@ by: Паша Николаевич
| 51 | Морская волна |
| 52 | Диагональная волна 3 |
##### Отдельный раздел для RZ
`87XX[SSS]` - резервная виртуальная панель. Формат и эффекты совпадают с `86`.
Команды `87XX[SSS]` управляют только резервной панелью RZ и не меняют direct-объекты других аппаратов.
###### Тесты панели RZ `8725TVVV`
При запуске теста обычные анимации RZ останавливаются, и панель переходит в тестовый режим.
| Команда | Назначение |
|---|---|
| `87250` | Стоп теста, очистить тестовый режим |
| `87251` | Общий тест подсветки RZ: бегущая змейка, цвета меняются |
| `87252NN` | Тест строки панели RZ, `NN` - номер строки |
| `87253NN` | Тест столбца панели RZ, `NN` - номер столбца |
| `87254NNN` | Тест адресного элемента `NNN` |
***Примеры:***
- `8701` - включить автоперебор резервной панели
- `8743` - rainbow с длительностью по умолчанию
- `872533` - тест столбца `3`
- `87254105` - адресный элемент `105`
- `87` - остановить анимации
## Список команд
| Команда | Назначение, примеры, ответы |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 00 | Перезагрузить контроллер (RESET) |
| 01 | Отладочная. включает-выключает подробные логи. В релизе будет отключена |
| 02 | Подготовиться к приему файла. освободить место, отформатировать встроенную файловую, проверить хватит ли места. <br>_**Например**_, `02356987` - заявка на файл обновления размером 356987 байт.<br>Выполняется около 15 секунд, после чего весь прием  данных в порту заносится в файл "update.bin".<br>Ответ при приеме файла - каждый блок (4096) - размер принятого.<br>По окончании - переход снова в режим команд (подробнее – [Обновление](#Обновление)). |
| 03 | Показать содержимое SPIFFS |
| 04 | Запустить ОТА обновление с ранее записанным файлом SPIFFS: `/update.bin` |
| 05 | Показать версию прошивки (указана в дефолтах) |
| 06 | Показать MAC-адрес (без двоеточий, как в оригинале), уникальный, можно считать серийным номером |
| 07 | Безопасность (запрос авторизации от компа. На этот запрос создается рандомный запрос навстречу. См. [[#Алгоритм авторизации]]) |
| 08 | Безопасность (прием ответа от компьютера на запрос `07`. См. [[#Алгоритм авторизации]]) |
| 09 | Сброс EEPROM (параметром - MAC без двоеточий, иначе не сбросится) |
| 10 | Подтверждение принятия сигнала COIN, иначе этот сигнал будет посылаться снова с периодичностью `200 мс` (сколько приняли койнов, столько и подтверждений быть должно) |
| 20X | Установить состояние выходов - всего выходов 8, давать их двоичное состояние.<br>_**Например**_, `203` - вывести 1 и 2 выходы по единичке, остальные - нолики. Соответственно, выход на разъеме будет "прижат" к земле. |
| 21XY | Установить состояние выхода номер Х в -> Y \[0,1,2(инверсия)\].<br>_**Примеры:**_<br>`2131` - Включить 3 по индексу выход<br>`2170` - Выключить 7 по индексу выход |
| 30X | Хоппер 1.<br>`301` - Включить мотор хоппера<br>`300` - Выключить мотор хоппера<br>`309` - Выдать приз (в авторежиме[^1]) |
| 40X | Хоппер 2.<br>Аналогично |
| 8XY | Выбор программы адресных диодов Y по каналу X (См. [[#Программы адресных диодов]]) |
| 85XXYY | См. [[#Специфичные программы]] |
| 85 | Без параметра отключает процесс рендеринга эффектов (чтобы освободить оперативную память) |
| 89\[X\] | Переключить цветовое чередование.<br>***Примеры:***<br>- `89` или `890` – RGB<br>- `891` – RBG<br>- `892` – BRG<br>- `893` – BGR<br>- `894` - GRB<br>- `895` - GBR |
| 90 | Очистить очередь команд |
| 91 | Запрос состояния цифровых входов, их всего 24(+2 входа хоппера), ответ в двоичном коде.<br>Для уменьшения объема передаваемой информации, преобразуется в десятичное число<br>_**Примеры:**_<br>`INPUT67108863` (`11111111111111111111111111`) - все кнопки не нажаты<br>`INPUT67108861` (`11111111111111111111111101`) - нажата вторая кнопка |
| 91X | _Дополнительно_: задать время антидребезга платы (`10..100`; по умолчанию установлено на 50 мс)<br>_**Например**_, 9110 - Установить антидребезг на 10 мс |
| 92 | Запрос значения аналоговых входов **(отключает автовывод)** - ответ в формате `ADC0,0,0,0`.<br>Всего 4 аналоговых входа |
| 92X | Периодический автовывод значений аналоговых входов.<br>_**Например**_, `92100` - каждые 100 милисекунд выдавать значения ADC (`50..5000`) |
| 93 | Запрос `global_summa` (число коинов, нестираемо) |
| 96 | Cохранение в памяти платы пользовательского значения.<br>***Например,*** «роли» контроллера (левый-правый в морском бое, или шкаф…)<br>***Пример команды:*** `96right` |
| 97 | Вывод пользовательского значения<br>***Формат вывода:*** `ROLE : <значение>` (до 20 символов) |
| 98 | Запрос загруженности ядер, оперативки, свободного места в памяти |
| 99 | Запрос статуса |
| Команда | Назначение, примеры, ответы |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 00 | Перезагрузить контроллер (RESET) |
| 01 | Отладочная. включает-выключает подробные логи. В релизе будет отключена |
| 02 | Подготовиться к приему файла обновления.<br>_**Например**_, `02356987` - заявка на файл размером 356987 байт.<br>После подготовки все данные из порта записываются в файл обновления.<br>Ответ при приеме файла - размер принятого блока.<br>По окончании - переход снова в режим команд (подробнее – [Обновление](#Обновление)). |
| 03 | Показать список файлов обновления и служебных файлов |
| 04 | Запустить обновление с ранее переданным файлом |
| 05 | Показать версию прошивки (указана в дефолтах) |
| 06 | Показать MAC-адрес (без двоеточий, как в оригинале), уникальный, можно считать серийным номером |
| 07 | Безопасность (запрос авторизации от компа. На этот запрос создается рандомный запрос навстречу. См. [[#Алгоритм авторизации]]) |
| 08 | Безопасность (прием ответа от компьютера на запрос `07`. См. [[#Алгоритм авторизации]]) |
| 09 | Сброс настроек контроллера. Параметр - MAC без двоеточий, иначе команда не выполнится. Накопительные счетчики сохраняются |
| 10 | Подтверждение принятия сигнала COIN, иначе этот сигнал будет посылаться снова с периодичностью `200 мс` (сколько приняли койнов, столько и подтверждений быть должно) |
| 20X | Установить состояние 8 выходов двоичной маской.<br>_**Например**_, `203` - включить выходы 1 и 2, остальные выключить. |
| 21XY | Установить состояние выхода номер Х в -> Y \[0,1,2(инверсия)\].<br>_**Примеры:**_<br>`2131` - Включить 3 по индексу выход<br>`2170` - Выключить 7 по индексу выход |
| 25CCB | Команды призового шкафа.<br>`25` - состояние всех ячеек<br>`2501B` - выдать приз из ячейки `B` (`1..5`)<br>`2511B` - открыть ячейку без списания<br>`25991` / `25990` - включить / выключить автозапуск призовой стойки с перезагрузкой |
| 30X | Хоппер 1.<br>`301` - Включить мотор хоппера<br>`300` - Выключить мотор хоппера<br>`309` - Выдать приз (в авторежиме[^1]) |
| 40X | Хоппер 2.<br>Аналогично |
| 50CCP | Дополнительные выходы.<br>`50` - показать режимы и уровни<br>`5001P` - настроить режимы дополнительных выходов<br>`5005P` - показать краткое состояние `ADD:..`<br>`5010P` - установить уровни выходов |
| 80NNYY | Выбор программы адресных диодов `YY` по каналу `NN`: `00` - все каналы, `01..04` - канал 1..4 (См. [[#Программы адресных диодов]]) |
| 81XXNN | Бродяги морей: direct-объекты (См. [[#Отдельный раздел для Бродяги морей]]).<br>`8130` - очистить<br>`8131NN` / `8132NN` - уровни объектов<br>`81311..81313` и `81321..81323` - эффекты объектов |
| 82..84 | Свободно / зарезервировано под новую логику |
| 85XXSSS | Виртуальная панель морского боя `s_b` (См. [[#Отдельный раздел для морского боя VR]]) |
| 85 | Без параметра отключает анимации `s_b` |
| 86XXSSS | Виртуальная панель Данро (См. [[#Отдельный раздел для Данро]]) |
| 86 | Без параметра отключает анимации Данро |
| 87XXSSS | Резервная виртуальная панель RZ (См. [[#Отдельный раздел для RZ]]) |
| 87 | Без параметра отключает анимации RZ |
| 89CKP | Настройки адресной подсветки. Старый короткий вариант `89[X]` переключает цветовое чередование.<br>***Примеры чередования:***<br>- `89` или `8900` – RGB<br>- `8901` – RBG<br>- `8902` – BRG<br>- `8903` – BGR<br>- `8904` - GRB<br>- `8905` - GBR |
| 90 | Очистить очередь команд |
| 91 | Запрос состояния цифровых входов, их всего 24(+2 входа хоппера), ответ в двоичном коде.<br>Для уменьшения объема передаваемой информации, преобразуется в десятичное число<br>_**Примеры:**_<br>`INPUT67108863` (`11111111111111111111111111`) - все кнопки не нажаты<br>`INPUT67108861` (`11111111111111111111111101`) - нажата вторая кнопка |
| 91X | _Дополнительно_: задать время антидребезга входов (`10..100`; по умолчанию установлено на 50 мс)<br>_**Например**_, 9110 - установить антидребезг на 10 мс |
| 92 | Запрос значения аналоговых входов **(отключает автовывод)** - ответ в формате `ADC0,0,0,0`.<br>Всего 4 аналоговых входа |
| 92X | Периодический автовывод значений аналоговых входов.<br>_**Например**_, `92100` - каждые 100 миллисекунд выдавать значения ADC (`50..5000`) |
| 93 | Запрос `global_summa` (число коинов, нестираемо). Ответ: `SUMMA:<value>` |
| 96 | Cохранение в памяти платы пользовательского значения.<br>***Например,*** «роли» контроллера (левый-правый в морском бое, или шкаф…)<br>***Пример команды:*** `96right` |
| 97 | Вывод пользовательского значения<br>***Формат вывода:*** `ROLE : <значение>` (до 20 символов) |
| 98 | Запрос технического статуса контроллера: загрузка, память, свободное место |
| 99 | Запрос статуса: имя контроллера, версия, `READY!` при `auth_ok=true` |
[^1]: Авторежим: если датчик в закрытом состоянии - на полсекунды включить мотор, ждать сработки датчика либо таймаута. Если таймаут - выдать сообщение "HOPPER1 ERROR" и наглухо повесить процесс хоппера до перезагрузки. Иначе - сообщение "HOPPER1 OK"
# Обновление
Файл обновления принимается командой `02<size>`. После полного приема контроллер отвечает текущим количеством записанных байт и итоговым `file size=<size> OK`, затем обновление запускается командой `04`.
Для обновления платы на новую версию прошивки надо:
1. Волшебным образом заполучить флешку с новой прошивкой
2. Проверить, что прошивка на плате точно старше при помощи команды `05`
3. Выбрать файл новой прошивки с флешки
4. Вполнить появившуюся команду
5. После успешного выполнения команды, проверить состояние SPIFFS
4. Выполнить появившуюся команду
5. После успешного выполнения команды, проверить состояние файла обновления
6. При наличии выделенного места, обновить прошивку при помощи команды `04`, дождаться завершения обновления
7. Проверить, что прошивка на плату встала при помощи команды `05`
8. ...
9. PROFIT!
9. PROFIT!