Перейти к содержанию

Раскраска клавиш

Прошивка хранит таблицу из 143 слотов [индекс, R, G, B] и показывает её как режим 0x80. Таблица обновляется живьём: если подсветка уже в этом режиме, каждая новая запись сразу меняет свечение клавиш.

Запись таблицы

begin
  → SET 04 23 00*6 09
  → ACK
  → 9 пакетов по 64 Б: 143 записи [index, R, G, B] + 0000 + aa55  (576 Б)
  → commit (ACK сумма = sum(576 Б))
  → save
  • Индекс в записи дублируется: слот определяется полем [0], а не позицией в блобе.
  • Хвост блоба — два нулевых байта и признак aa55.
  • После записи включите режим 0x80, иначе таблица не отображается.
  • Команда перезаписывает все 143 слота.
  • Таблица обновляется живьём: если подсветка уже в режиме 0x80, каждая новая запись сразу меняет свечение клавиш.

Чтение живого кадра

Чтение идёт по вендорской схеме без begin и data-begin.

SET 04 f5 + 09
  → GET × 9: поток [idx, r, g, b] × 16, индексы 0x00, 0x10 … 0x80
  → commit (ACK 01, сумма 0000 — payload не писался)
  → save

Правила:

  • первый GET после SET может быть подтверждением 04 f5 00 01 — читатель пропускает не-данные и ждёт пакеты с ожидаемыми индексами;
  • указатель сбрасывается на 0x00 каждым SET 04 f5;
  • для потока кадров save не нужен: схема f5 → 9 GET → commit с паузой 5 мс даёт около 15 кадров в секунду;
  • на железе эта схема выдала 900 кадров подряд без сбоев;
  • с паузой 2 мс получается около 25 кадров в секунду, но запас по надёжности меньше;
  • без commit примерно половина чтений сбоится;
  • при ошибке делается до трёх попыток, между ними отправляется begin для переоткрытия контекста.

Не отправляйте data-begin

Команда 04 13 перед f5 обезоруживает поток: подтверждение приходит со статусом 00, а GET возвращает эхо последнего SET.

Кадр отражает анимацию любого режима, а не только 0x80. Цвета в нём уже умножены на яркость показа: при яркости 15 максимум равен ee. Слот 0x6d всегда читается как 000000 — это null-слот прошивки, даже у вендорской утилиты. Слепые слоты в кадре на статике показывают цвет режима: буфер расчётный, физических светодиодов за ними нет.

Стриминг кадров

Вендорские per-key анимации прошивка сама не исполняет: утилита считает кадры на компьютере и шлёт их потоком.

SET 04 20 00*6 08        (без begin и data-begin)
  → GET ACK 04 20 00 01  (первый ответ после простоя может быть 00 ff)
  → 8 пакетов по 64 Б: [idx, R, G, B] × 16, 104 физические клавиши + нули
  → SET 04 02 → GET ACK 04 02 00 01 (сумма в ACK = 0000)
  без save

Особенности:

  • вендор шлёт около 15 кадров в секунду: период ~64 мс, пауза между запросами ~4 мс;
  • пауза 5 мс держится стабильно: 200 кадров подряд без отказов, около 15,6 кадра в секунду;
  • с паузой 40 мс получается около 2 кадров в секунду;
  • без пауз прошивка отклоняет почти все кадры (97 из 100), но потом продолжает работать;
  • кадр заменяет всю подсветку поверх любого режима: клавиши, которых нет в блобе, гаснут;
  • флеш не трогается, и через 3–6 секунд после последнего кадра прошивка возвращается к сохранённому режиму;
  • повторное чтение f5 после стрима показывает чёрный кадр и, похоже, продлевает стрим-состояние.

Слепые слоты

39 слотов из 143 ни к какому светодиоду не подключены. Прошивка молча принимает в них любой цвет, но свечения не будет.

Список слепых слотов: 0x00, 0x0e–0x12, 0x23, 0x24, 0x35, 0x36, 0x47, 0x48, 0x59, 0x5a, 0x6b–0x6f, 0x72, 0x7c–0x8e. Хвост начиная с 0x80 — резерв прошивки под большие раскладки. Слот 0x80 в раннем тесте светился синим, а в финальном не горел: считайте его слепым, но помните об аномалии при чтении кадра.

Полная карта «индекс → клавиша» — в разделе Карта клавиш.