diff --git a/GreatGamedevVault/Библиотека скриптов/2. Периферия/Система команд платы v2.x.md b/GreatGamedevVault/Библиотека скриптов/2. Периферия/Система команд платы v2.x.md index c58f5d5..db76655 100644 --- a/GreatGamedevVault/Библиотека скриптов/2. Периферия/Система команд платы v2.x.md +++ b/GreatGamedevVault/Библиотека скриптов/2. Периферия/Система команд платы v2.x.md @@ -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+\ – команда, а 0+\ – уже нет -- Таймаут - 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\ (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 | Подготовиться к приему файла. освободить место, отформатировать встроенную файловую, проверить хватит ли места.
_**Например**_, `02356987` - заявка на файл обновления размером 356987 байт.
Выполняется около 15 секунд, после чего весь прием  данных в порту заносится в файл "update.bin".
Ответ при приеме файла - каждый блок (4096) - размер принятого.
По окончании - переход снова в режим команд (подробнее – [Обновление](#Обновление)). | -| 03 | Показать содержимое SPIFFS | -| 04 | Запустить ОТА обновление с ранее записанным файлом SPIFFS: `/update.bin` | -| 05 | Показать версию прошивки (указана в дефолтах) | -| 06 | Показать MAC-адрес (без двоеточий, как в оригинале), уникальный, можно считать серийным номером | -| 07 | Безопасность (запрос авторизации от компа. На этот запрос создается рандомный запрос навстречу. См. [[#Алгоритм авторизации]]) | -| 08 | Безопасность (прием ответа от компьютера на запрос `07`. См. [[#Алгоритм авторизации]]) | -| 09 | Сброс EEPROM (параметром - MAC без двоеточий, иначе не сбросится) | -| 10 | Подтверждение принятия сигнала COIN, иначе этот сигнал будет посылаться снова с периодичностью `200 мс` (сколько приняли койнов, столько и подтверждений быть должно) | -| 20X | Установить состояние выходов - всего выходов 8, давать их двоичное состояние.
_**Например**_, `203` - вывести 1 и 2 выходы по единичке, остальные - нолики. Соответственно, выход на разъеме будет "прижат" к земле. | -| 21XY | Установить состояние выхода номер Х в -> Y \[0,1,2(инверсия)\].
_**Примеры:**_
`2131` - Включить 3 по индексу выход
`2170` - Выключить 7 по индексу выход | -| 30X | Хоппер 1.
`301` - Включить мотор хоппера
`300` - Выключить мотор хоппера
`309` - Выдать приз (в авторежиме[^1]) | -| 40X | Хоппер 2.
Аналогично | -| 8XY | Выбор программы адресных диодов Y по каналу X (См. [[#Программы адресных диодов]]) | -| 85XXYY | См. [[#Специфичные программы]] | -| 85 | Без параметра отключает процесс рендеринга эффектов (чтобы освободить оперативную память) | -| 89\[X\] | Переключить цветовое чередование.
***Примеры:***
- `89` или `890` – RGB
- `891` – RBG
- `892` – BRG
- `893` – BGR
- `894` - GRB
- `895` - GBR | -| 90 | Очистить очередь команд | -| 91 | Запрос состояния цифровых входов, их всего 24(+2 входа хоппера), ответ в двоичном коде.
Для уменьшения объема передаваемой информации, преобразуется в десятичное число
_**Примеры:**_
`INPUT67108863` (`11111111111111111111111111`) - все кнопки не нажаты
`INPUT67108861` (`11111111111111111111111101`) - нажата вторая кнопка | -| 91X | _Дополнительно_: задать время антидребезга платы (`10..100`; по умолчанию установлено на 50 мс)
_**Например**_, 9110 - Установить антидребезг на 10 мс | -| 92 | Запрос значения аналоговых входов **(отключает автовывод)** - ответ в формате `ADC0,0,0,0`.
Всего 4 аналоговых входа | -| 92X | Периодический автовывод значений аналоговых входов.
_**Например**_, `92100` - каждые 100 милисекунд выдавать значения ADC (`50..5000`) | -| 93 | Запрос `global_summa` (число коинов, нестираемо) | -| 96 | Cохранение в памяти платы пользовательского значения.
***Например,*** «роли» контроллера (левый-правый в морском бое, или шкаф…)
***Пример команды:*** `96right` | -| 97 | Вывод пользовательского значения
***Формат вывода:*** `ROLE : <значение>` (до 20 символов) | -| 98 | Запрос загруженности ядер, оперативки, свободного места в памяти | -| 99 | Запрос статуса | +| Команда | Назначение, примеры, ответы | +| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 00 | Перезагрузить контроллер (RESET) | +| 01 | Отладочная. включает-выключает подробные логи. В релизе будет отключена | +| 02 | Подготовиться к приему файла обновления.
_**Например**_, `02356987` - заявка на файл размером 356987 байт.
После подготовки все данные из порта записываются в файл обновления.
Ответ при приеме файла - размер принятого блока.
По окончании - переход снова в режим команд (подробнее – [Обновление](#Обновление)). | +| 03 | Показать список файлов обновления и служебных файлов | +| 04 | Запустить обновление с ранее переданным файлом | +| 05 | Показать версию прошивки (указана в дефолтах) | +| 06 | Показать MAC-адрес (без двоеточий, как в оригинале), уникальный, можно считать серийным номером | +| 07 | Безопасность (запрос авторизации от компа. На этот запрос создается рандомный запрос навстречу. См. [[#Алгоритм авторизации]]) | +| 08 | Безопасность (прием ответа от компьютера на запрос `07`. См. [[#Алгоритм авторизации]]) | +| 09 | Сброс настроек контроллера. Параметр - MAC без двоеточий, иначе команда не выполнится. Накопительные счетчики сохраняются | +| 10 | Подтверждение принятия сигнала COIN, иначе этот сигнал будет посылаться снова с периодичностью `200 мс` (сколько приняли койнов, столько и подтверждений быть должно) | +| 20X | Установить состояние 8 выходов двоичной маской.
_**Например**_, `203` - включить выходы 1 и 2, остальные выключить. | +| 21XY | Установить состояние выхода номер Х в -> Y \[0,1,2(инверсия)\].
_**Примеры:**_
`2131` - Включить 3 по индексу выход
`2170` - Выключить 7 по индексу выход | +| 25CCB | Команды призового шкафа.
`25` - состояние всех ячеек
`2501B` - выдать приз из ячейки `B` (`1..5`)
`2511B` - открыть ячейку без списания
`25991` / `25990` - включить / выключить автозапуск призовой стойки с перезагрузкой | +| 30X | Хоппер 1.
`301` - Включить мотор хоппера
`300` - Выключить мотор хоппера
`309` - Выдать приз (в авторежиме[^1]) | +| 40X | Хоппер 2.
Аналогично | +| 50CCP | Дополнительные выходы.
`50` - показать режимы и уровни
`5001P` - настроить режимы дополнительных выходов
`5005P` - показать краткое состояние `ADD:..`
`5010P` - установить уровни выходов | +| 80NNYY | Выбор программы адресных диодов `YY` по каналу `NN`: `00` - все каналы, `01..04` - канал 1..4 (См. [[#Программы адресных диодов]]) | +| 81XXNN | Бродяги морей: direct-объекты (См. [[#Отдельный раздел для Бродяги морей]]).
`8130` - очистить
`8131NN` / `8132NN` - уровни объектов
`81311..81313` и `81321..81323` - эффекты объектов | +| 82..84 | Свободно / зарезервировано под новую логику | +| 85XXSSS | Виртуальная панель морского боя `s_b` (См. [[#Отдельный раздел для морского боя VR]]) | +| 85 | Без параметра отключает анимации `s_b` | +| 86XXSSS | Виртуальная панель Данро (См. [[#Отдельный раздел для Данро]]) | +| 86 | Без параметра отключает анимации Данро | +| 87XXSSS | Резервная виртуальная панель RZ (См. [[#Отдельный раздел для RZ]]) | +| 87 | Без параметра отключает анимации RZ | +| 89CKP | Настройки адресной подсветки. Старый короткий вариант `89[X]` переключает цветовое чередование.
***Примеры чередования:***
- `89` или `8900` – RGB
- `8901` – RBG
- `8902` – BRG
- `8903` – BGR
- `8904` - GRB
- `8905` - GBR | +| 90 | Очистить очередь команд | +| 91 | Запрос состояния цифровых входов, их всего 24(+2 входа хоппера), ответ в двоичном коде.
Для уменьшения объема передаваемой информации, преобразуется в десятичное число
_**Примеры:**_
`INPUT67108863` (`11111111111111111111111111`) - все кнопки не нажаты
`INPUT67108861` (`11111111111111111111111101`) - нажата вторая кнопка | +| 91X | _Дополнительно_: задать время антидребезга входов (`10..100`; по умолчанию установлено на 50 мс)
_**Например**_, 9110 - установить антидребезг на 10 мс | +| 92 | Запрос значения аналоговых входов **(отключает автовывод)** - ответ в формате `ADC0,0,0,0`.
Всего 4 аналоговых входа | +| 92X | Периодический автовывод значений аналоговых входов.
_**Например**_, `92100` - каждые 100 миллисекунд выдавать значения ADC (`50..5000`) | +| 93 | Запрос `global_summa` (число коинов, нестираемо). Ответ: `SUMMA:` | +| 96 | Cохранение в памяти платы пользовательского значения.
***Например,*** «роли» контроллера (левый-правый в морском бое, или шкаф…)
***Пример команды:*** `96right` | +| 97 | Вывод пользовательского значения
***Формат вывода:*** `ROLE : <значение>` (до 20 символов) | +| 98 | Запрос технического статуса контроллера: загрузка, память, свободное место | +| 99 | Запрос статуса: имя контроллера, версия, `READY!` при `auth_ok=true` | [^1]: Авторежим: если датчик в закрытом состоянии - на полсекунды включить мотор, ждать сработки датчика либо таймаута. Если таймаут - выдать сообщение "HOPPER1 ERROR" и наглухо повесить процесс хоппера до перезагрузки. Иначе - сообщение "HOPPER1 OK" # Обновление +Файл обновления принимается командой `02`. После полного приема контроллер отвечает текущим количеством записанных байт и итоговым `file size= OK`, затем обновление запускается командой `04`. + Для обновления платы на новую версию прошивки надо: 1. Волшебным образом заполучить флешку с новой прошивкой 2. Проверить, что прошивка на плате точно старше при помощи команды `05` 3. Выбрать файл новой прошивки с флешки -4. Вполнить появившуюся команду -5. После успешного выполнения команды, проверить состояние SPIFFS +4. Выполнить появившуюся команду +5. После успешного выполнения команды, проверить состояние файла обновления 6. При наличии выделенного места, обновить прошивку при помощи команды `04`, дождаться завершения обновления 7. Проверить, что прошивка на плату встала при помощи команды `05` 8. ... -9. PROFIT! \ No newline at end of file +9. PROFIT!