Как извлечь максимум пользы из мышей Asus ROG

Прокомментировать Просмотры: 33

Все остальные опции сводятся к этим четырём категориям

Вы вложили значительную сумму в стильную, эргономичную игровую мышь: она идеально ложится в руку, радует переливами подсветки и оснащена шестью программируемыми кнопками сверх пяти базовых. Разумеется, хочется раскрыть весь её функционал! Но создатели Armoury Crate от ASUS предлагают лишь четыре типа назначения:

  1. Действия мыши
  2. Комбинации клавиш
  3. Управление мультимедиа
  4. Макрокоманды

Выглядит неплохо, но на деле вы не можете назначить любую клавишу. ASUS признаёт лишь стандартный набор 100-процентной клавиатуры.

Виртуальная клавиатура Armoury Crate

Какая польза от шести дополнительных кнопок, если они лишь дублируют привычные? Для узких задач, скажем, при трассировке плат, удобно иметь быстрый доступ к «Num *» или «Перелистнуть слой». Но поскольку мы заплатили за расширенные возможности, пригодится любая лишняя кнопка.

Push to Talk

Основная причина моих изысканий — голосовые конференции, где применяют кнопку «говорить по нажатию» вместо голосовой активации. Обычные клавиши заняты печатью, а «Scroll Lock» — единственная свободная, но его мигнувший LED раздражает.

Решение нашлось в факте: у полноценной клавиатуры существуют дополнительные F-клавиши F13–F24. Операционные системы их распознают без проблем (см. документацию Microsoft по USB-HID).

Подробнее о поддержке клавиш F13–F24 в Windows

Unicomp PC122 с клавишами F13–F24
Клавиатура Unicomp PC122 с F13–F24 доступна и сегодня

Стало ясно: нужно привязать F13 к одной из дополнительных кнопок мыши. Но как это осуществить?

Попытка № 1: макросы

Armoury Crate позволяет записать макрос, эмулирующий нажатие клавиши: либо выбрать кнопку на виртуальной раскладке, либо нажать физически. Однако ПО распознаёт лишь те клавиши, что присутствуют в этой раскладке. Даже внешние AHK-скрипты не помогут — софт отторгает всё, что не входит в список.

Попытка № 2: правка профиля вручную

Экспорт профиля мыши идёт в файл формата .rog, представляющий собой Base64-кодированный URL-encoded JSON. Декодируем и смотрим содержимое:

"13": {
  "buttonFunction": "1",
  "key_1": 6,
  "key_2": "-1",
  "key_3": "-1",
  "layout": "en-US"
}

Здесь, вопреки ожиданиям, «6» соответствует клавише F6. Если собрать карту сканкодов ASUS, получим:

  • Scroll Lock – 267
  • Pause – 523
  • F1 – 1
  • F3 – 3
  • …
  • F12 – 1797
  • Insert – 1544
  • Home – 1545
  • PgUp – 1547
  • Num Lock – 1036
  • L-Alt – 1796
  • L-Shift – 1024
  • G – 771
Карта кодов ASUS

Попытка назначить F13 с предполагаемым кодом 2053 привела к аварии Armoury Crate — оно перестало отвечать и ни одна кнопка не работала. Приходилось переустанавливать утилиту, а штатный деинсталлятор без стороннего логаутера не справлялся.

Попытка № 3: опенсорс-решение

В сообществе упомянули проект libratbag, который на Linux уже умеет переназначать любые клавиши игровых мышей. На Windows прямого порта нет, но можно изучить исходники библиотеки.

В issue #1747 выясняется, что ASUS-коды — это просто стандартные USB-HID сканкоды. В исходниках найдена таблица соответствий:

static const unsigned char ASUS_KEY_MAPPING[] = {
  /* 00 */  0,    0,    0,    0,
  /* 04 */  KEY_A,KEY_B,KEY_C,KEY_D,
  …
  /* 3C */  KEY_F3,KEY_F4,KEY_F5,KEY_F6,
  …
  /* 44 */  KEY_F11,KEY_F12,0,0,
  /* 48 */  0,0,KEY_HOME,KEY_PAGEUP,
  /* 4C */  KEY_DELETE,0,KEY_PAGEDOWN,KEY_RIGHT,
  …
  /* E0 */  KEY_LCTRL,KEY_LSHIFT,KEY_LALT,KEY_LGUI,
};
Фрагмент таблицы USB-HID сканкодов
Отрывок из спецификации HID Usage Tables для USB

Иными словами, диапазон 0x03–0xE8 позволяет назначать практически любые клавиши, включая F13–F24, Ctrl, Shift, Alt и прочие экзотические кнопки стандарта.

Концепция «библейской» клавиатуры
Иллюстрация идеи расширенной клавиатуры

Осталось проверить на практике: написать минимальный драйвер на Python с использованием hidapi.

Открываем интерфейс MI_02

def open_mi02_interface(vid, pid):
    devices = hid.enumerate(vid, pid)
    for dev in devices:
        if dev.get('interface_number') == 2:
            device = hid.device()
            device.open_path(dev['path'])
            return device, dev['path']
    return None, None

Чтение текущих биндов

def asus_get_binding_data(device, path):
    cmd = struct.pack('

Запись нового назначения и сохранение

def asus_set_button(device, path, src_code, dst_code):
    cmd = struct.pack('def asus_save_profile(device, path):
cmd = struct.pack('<H', ASUS_CMD_SAVE)
req = [REPORT_ID] + list(cmd) + [0]*(ASUS_PACKET_SIZE-2)
device.write(req)
time.sleep(0.5)

После выполнения скрипта проверяем в OBS Studio — F13 на кнопке мыши работает как Push to Talk!

Успешная проверка в OBS Studio
Отлично работает в OBS Studio!

Нюанс с Armoury Crate

При повторном запуске Armoury Crate оно полностью игнорирует конфигурацию устройства и начинает затирать её сохранённым профилем. В итоге приходится либо отключать софт, либо не перезагружать систему.

Итоги

Мне удалось первым в сообществе заставить мышь ASUS принять нестандартную клавишу F13. Решение опубликовано на GitHub в виде proof-of-concept.

Полезные ссылки

 

Источник

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов