Протокол GANSS ARDOR Katana¶
Клавиатура GANSS ARDOR_Katana (USB 0C45:8006, чип Sonix SN32) управляется HID feature-репортами: настройки подсветки, раскраска, переназначения и макросы передаются блоками по 64 байта.
Протокол восстановлен по дампам USB-трафика вендорской утилиты и проверен на железе. Ниже — общая картина; детали разобраны на отдельных страницах.
Интерфейсы¶
| Интерфейс | Назначение | Канал |
|---|---|---|
| iface0 | boot keyboard + конфиг-канал | feature-репорты rid=0, 64 байта данных |
| iface1 | consumer/mouse | vendor page 0xFF00, rid=5, только input |
Работа идёт только с интерфейсом 0.
Узел /dev/hidrawN ищется через /sys/class/hidraw/*/device по родителю *:1.0 и modalias hid:b0003g0001v00000C45p00008006.
Интерфейс 1 несёт consumer/mouse-репорты и в настройке не участвует.
Транспорт¶
На Linux обмен идёт через hidraw-ioctl (HIDIOCSFEATURE и HIDIOCGFEATURE), буфер — 65 байт, первый байт равен report id 0.
Драйвер usbhid при этом не отцепляется, поэтому печать не прерывается.
Между запросами выдерживается пауза 0,04 с — вендорский тайминг.
На macOS используется тот же протокол поверх IOKit (IOHIDDeviceSetReport и IOHIDDeviceGetReport) с типом репорта kIOHIDReportTypeFeature.
Транспорт выбирается автоматически по sys.platform.
Подробнее — в разделе Транспорт и транзакции.
Транзакция¶
Любая запись настроек состоит из одинаковых шагов.
SET 04 18 begin ACK: 04 18 00 01 (или ff = сессия уже открыта)
SET 04 13 00*6 01 data-begin ACK: 04 13 00 01
SET <payload 64B> данные (без ACK)
SET 04 02 commit ACK: 04 02 00 01 <LE16 sum(payload)>
SET 04 f0 save (flash) ACK: 04 f0 00 01
- Байт
[3]в ACK:01— успех,00илиff— отказ. - Контрольная сумма —
sum(payload) & 0xFFFFв байтах 4–5 ACK коммита, порядок little-endian. - Байт
[8]командыdata-beginзадаёт параметр блока: у таблиц раскраски и переназначений это число пакетов09, у макросов — фактическое число пакетов. - Сессию всегда закрывайте командой
04 f0, иначе прошивка залипает и перестаёт принимать команды. - Вендорская утилита шлёт полную транзакцию даже для одной настройки; проект повторяет это поведение.
Каналы¶
| Канал | Что делает | Страница |
|---|---|---|
04 18 |
открытие обычной сессии | Транспорт |
04 13 |
data-begin обычного блока | Транспорт |
04 02 |
commit с контрольной суммой | Транспорт |
04 f0 |
сохранение области во флеш | Транспорт |
04 23 |
запись таблицы раскраски | Раскраска клавиш |
04 f5 |
чтение живого кадра | Раскраска клавиш |
04 20 |
стриминг кадров per-key анимации | Раскраска клавиш |
04 11 |
запись таблицы переназначений | Переназначение |
04 19 |
запись содержимого макросов | Макросы |
04 15 |
data-begin блока макросов | Макросы |
Состояние реверса¶
Что установлено твёрдо:
- транспорт и полная транзакция;
- формат lighting-payload'а и все 19 режимов;
- таблица раскраски и чтение живого кадра;
- форматы записей переназначения для мыши, шорткатов, мультимедиа и макросов;
- блоб макросов и вендорский XML;
- карта из 104 физических клавиш и 39 слепых слотов.
Что осталось открытым:
- чтение таблицы переназначений и содержимого макросов;
- Fn-слой и прочие типы действий;
- полный лимит макросов и семантика задержек;
- коллизия кодов
05и06в макросах.
Открытые задачи собраны в конце страницы Реверс-инжиниринг.
Важные грабли¶
pyusbсdetach_kernel_driverломает печать: используйте только hidraw.- Сессия без
04 f0клинит прошивку; лечение — командаreset. - Перед чтением
04 f5нельзя делатьbeginиdata-begin: поток возвращает эхо последнегоSET. - Ответ
ffнаbeginозначает «сессия уже открыта» — это нормально, работу можно продолжать. - Слепые слоты прошивка принимает молча, но они ни к какому светодиоду не подключены.
- Пользователь различает цвета приблизительно: для картирования нужны контрастные цвета и мало точек за раз.