Open Stream Deck

Аппаратная часть

Микроконтроллер, карта памяти, матрица кнопок, дисплей и USB-подсистема.

Плата

Устройство AJAZZ AKP153R, маркировка процессора ARX2902 Q2303. Приложение собирается для ARMv7-M в режиме Thumb без аппаратных операций с плавающей точкой.

USB работает через опрос контроллера MUSB. Прерывания в текущей реализации отключены. Функция board_service() обслуживает watchdog, клавиши и USB, в том числе во время ожидания дисплея.

Карта памяти приложения

ОбластьНачалоРазмер
Приложение во flash0x0800400096 496 байт
RAM приложения0x20000000128 KiB
Резерв стека0x2001E0008 KiB
Начальный указатель стека0x20020000Значение первого вектора

Эти диапазоны задают контракт сборки. Это не измерение полной физической ёмкости процессора. Загрузчик расположен вне области приложения, и образ его не включает.

Таблица векторов содержит 80 записей, занимает 320 байт и начинается с базы приложения. Проверка ELF контролирует Thumb-адреса обработчиков, непересечение загрузочных сегментов, границы flash и RAM. Линкер отдельно проверяет отсутствие пересечения BSS и стека.

Клавиши

Матрица 3 × 5 сканируется с независимым подавлением дребезга 8 мс. В битовой карте HID бит row × 5 + column соответствует физической кнопке, начиная с верхней левой. Нажатие устанавливает бит, отпускание сбрасывает его. Удержание передаётся сохранением установленного бита, а жесты определяет хост.

Пауза переключения строк задаётся ограниченным числом инструкций. Функция platform_delay_ms() использует программную задержку относительно частоты ядра и не является калиброванным таймером. Для времени протокола и дребезга используется timebase.

Дисплей

Нативная геометрия панели 480 × 854. Физическая ориентация связана с нативными координатами формулой x = v, y = 853 - u, где u направлено вправо на устройстве, а v вниз.

Окна кнопок имеют размер 103 × 103 пикселя. Боковая область в нативных координатах начинается с x = 35, y = 10 и имеет размер 406 × 85. Полная карта находится в layout.json.

Штатный режим вывода использует DMA, глубину очереди на пути CPU равную 2 и цвет RGB565. Промежуточные буферы по 1440 байт каждый, выравнивание 4. При тайм-ауте DMA драйвер прекращает передачу и переходит на путь через CPU до следующего перезапуска.

Начальные последовательности регистров, порядок volatile-доступов и коэффициенты задержек сохраняются при рефакторинге. Изменение этих параметров требует проверки на плате.

Память SDRAM

Заставка использует canvas 0x600000, игра рисует кадр в 0x400000 и копирует результат в canvas заставки. До передачи экрана приложению эти области зарезервированы: 0x400000..0x52C3FF и 0x600000..0x72C3FF. Размеры учитывают RGB888, а в обычном режиме используется RGB565. Кадры не хранятся в RAM микроконтроллера.