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

Макросы

Содержимое макросов хранится в прошивке, а не на компьютере. Макрос играет при отключённой вендорской утилите и другой раскладке: прошивка помнит именно клавиши, а не символы.

Запись содержимого

Транзакция отличается от обычной: вместо 04 18 используется 04 19, а вместо 04 13 — 04 15.

SET 04 19                          begin            ACK: 04 19 00 01
SET 04 15 00*6 <число пакетов>     data-begin       ACK: 04 15 00 01 (эхо числа в байте [8])
SET <данные, пакетов × 64Б>        данные           (без ACK)
SET 04 02                          commit           ACK: 04 02 00 01 <LE16 sum>

Вендор после коммита не делает save. В проекте сохранение включается отдельно: без своего save макросы не переживут переподключение. Чужой save макросы не сохраняет и не затирает: у каждой области прошивки свой save.

Формат блоба

Блоб занимает до 896 байт (14 пакетов).

Часть Размер Содержимое
Заголовок 400 Б 100 u32-смещений от начала блоба; 0 — слот пуст
Тело макроса переменно u32 (число событий × 2), u32 0, затем события по 8 байт
Хвост до 2 Б нули до кратности 64 и признак aa55

Событие состоит из восьми байт: [00 00][код][тип][задержка u16 LE][00][50].

В дампе слот 0 указывает на смещение 0x190 (400), слот 1 — на 0x1d8 (472). Ёмкость по дампу — 896 байт. Один макрос вмещает до 60 событий, если остальные слоты пусты.

Типы событий

Байт Событие
B0 клавиша нажата
30 клавиша отпущена
90 кнопка мыши нажата
10 кнопка мыши отпущена

Коды клавиш

Код Клавиша Примечание
04…1D буквы совпадает с HID usage ID
1E…27 цифры совпадает с HID usage ID
3A…45 F1–F12 совпадает с HID usage ID
E0…E3 модификаторы LCtrl, LShift, LAlt, LWin
5C стрелка влево собственный код прошивки
5E стрелка вправо собственный код прошивки
5D стрелка вверх предположение, на железе не проверено
5F стрелка вниз предположение, на железе не проверено
05 громкость + конфликтует с HID-кодом буквы B
06 громкость − конфликтует с HID-кодом буквы C
01 ЛКМ как в таблице переназначений
02 ПКМ как в таблице переназначений
04 СКМ как в таблице переназначений

Коллизия 05 и 06 не объяснена: вендорская утилита шлёт эти коды именно для громкости. По вендорскому XML видно происхождение: VK 175 даёт 05, VK 174 — 06. Стрелки Left и Right (5C и 5E) проверены на железе, Up и Down (5D и 5F) — предположение по соседству.

Задержки

Задержка хранится как u16 в миллисекундах. В двух событиях вендорского XML стоит delay_time="0", а в блобе прошивки оказалось 10: похоже на минимальное значение вендора.

Семантика задержки — пауза до или после события — по дампу не определяется. Значения переносятся как есть.

Привязка к клавише

Привязка выполняется обычной записью канала 04 11: [06, индекс, режим, счётчик]. Вендор после привязки делает save, в отличие от записи содержимого.

Правила работы с содержимым:

  • несколько макросов живут только тогда, когда записаны одним блобом;
  • каждый вызов 04 19 с одним слотом обнуляет остальные;
  • при обращении к пустому слоту прошивка использует слот 0 (проверено: macro1 при пустом слоте 1 исполнял содержимое macro0);
  • запись макросов сбивает таблицу переназначений и режим подсветки в оперативной памяти;
  • после записи макросов переназначения и режим нужно отправить повторно;
  • чтение содержимого макросов из прошивки не реализовано: канал чтения неизвестен.

Вендорский XML

Утилита экспортирует макрос в XML, по файлу на макрос. Имя макроса хранится в элементе macroinfo.

Тип item Событие Значение value
2 клавиша нажата VK-код Windows
3 клавиша отпущена VK-код Windows
4 кнопка мыши нажата 1 — ЛКМ, 2 — СКМ, 3 — ПКМ
5 кнопка мыши отпущена 1 — ЛКМ, 2 — СКМ, 3 — ПКМ

Блоб, собранный из вендорских XML, совпадает с дампом побайтово, кроме двух задержек 0 → 10.

Как макросы задаются из CLI и YAML, описано в разделах Команда macro и Команда apply.