Раскраска клавиш¶
Прошивка хранит таблицу из 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 в раннем тесте светился синим, а в финальном не горел: считайте его слепым, но помните об аномалии при чтении кадра.
Полная карта «индекс → клавиша» — в разделе Карта клавиш.