Макросы¶
Содержимое макросов хранится в прошивке, а не на компьютере. Макрос играет при отключённой вендорской утилите и другой раскладке: прошивка помнит именно клавиши, а не символы.
Запись содержимого¶
Транзакция отличается от обычной: вместо 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.