Как стать автором
Обновить

Самодельное ПО для клавиатуры Optimus Maximus

Про клавиатуру и оригинальный софт


Начну рассказ с того момента, как я стал обладателем б/у клавиатуры Optimus Maximus. Покупать новую за 60 000 было бы слишком расточительно, но увидев предложение, за гораздо меньшую цену, на одном из сайтов объявлений, я решил не отказывать себе в удовольствии потискать это интересное устройство.

По-хорошему, следовало бы рассказать и про саму клавиатуру, ибо все доступные обзоры описывают новенькое устройство только что из коробки. А вот как оно чувствует себя года через 4 эксплуатации, вы нигде не узнаете. Но, раз уж решил рассказывать про софт, будет про софт. Про клавиатуру в другой раз.
Сначала я кратко расскажу про оригинальное ПО, чтобы было понятно, почему я решил написать своё. Фирменный софт, который можно только скачивать с сайта, ибо в коробке никаких носителей нет, имеет ряд недостатков, которые так и не были устранены разработчиком, хотя само ПО обновлялось. Вот они:
  • Только английский интерфейс (не слишком страшно, но неприятно).
  • Не может нормально работать на Window 7 x64 (именно такая ОС установлена у меня дома). Проблема проявляется следующим образом: при переключении пользователей софт перестаёт видеть клавиатуру, а последняя при этом намертво виснет на аппаратном уровне. Помогает только передёргивание питания. Для меня это абсолютно неприемлемо, т.к. мы с женой делим один компьютер и, соответственно, часто переключаемся.
  • Нет условия переключения изображений на клавишах по заголовку окна. Это приводит к интересному эффекту, когда, например, при сохранении файла из фотошопа вам нужно вводить имя файла, а на кнопках отображаются значки для инструментов.
  • Бедная инфраструктура плагинов. Фактически, вы можете только выводить что-то на кнопки. Изменить сканкод клавиши (контроллер клавиатуры это поддерживает) или добавлять свои условия невозможно.

Пытаясь прояснить ситуацию с решением этих проблем, я прошерстил интернет и обнаружил, что форум по Оптимусу не разрешает новых регистраций и фактически мёртв. На русском сайте Студии Лебедева, на страницах, посвящённых клавиатуре, нет никаких контактов технической поддержки.
На английской версии сайта такой контакт обнаружился, что меня несколько удивило: русскоговорящим пользователям помощь не нужна? Я написал на указанный на странице адрес пару писем с разными вопросами, одно на русском, другое на английском. Ответа не получил до сих пор, хотя прошло уже больше полутора месяцев.
Кроме контакта ТП (понимайте аббревиатуру как хотите), на английских страницах обнаружилась документация для разработчиков и примеры кода. Посмотрев их я решил, что спасение утопающих в данном случае дело рук самих утопающих, тем более это обещало быть интересным (ибо программирование внешних устройств всегда интересно) и не слишком сложным.
Для управления клавиатурой разработчики применили интересный приём. При подключении устройства у вас появляются не только обычные для клавиатур HID-устройства, но и съёмный диск! Нет, этот диск не SD-карта, вставленная в клавиатуру, как можно было бы подумать.
Диск (объёмом 2,32 мегабайта, файловая система — FAT) содержит несложную структуру файлов, записывая и читая данные в/из которых можно управлять всеми параметрами устройства, включая перепрошивку. Похожая, по сути, концепция применяется в Linux для папки /proc.
По мнению разработчиков устройства, это делает управление им независимым от ОС. В контексте этого утверждения не очень понятно, что помешало Студии Лебедева выкатить софт под Linux, уж за столько-то времени его можно было написать. Видимо, надеялись на сторонних разработчиков, но линоксойды надежд не оправдали. :)
Я не буду пересказывать документацию, расписывая структуру файлов и их назначение. Скажу лишь, что для вывода изображения на клавишу нужно просто записать картинку в соответствующий файл (одна клавиша – один файл). Для изображений используется формат RGB565, причём порядок следования бит весьма странный (см. картинку, внутри каждой группы бит порядок естественный), RGB565, который может делать Bitmap из .NET Framework для клавиатуры не подходит.


Про новый софт


Как вы уже, наверное, догадались, я решил писать софт на C#. Для нетерпеливых скажу сразу, что он Open Source и доступен под лицензией GPL v2 здесь.
Графического интерфейса и программы нет, для управления (загрузить конфигурацию, закрыть программу) предназначен значок в трее. Конфигурация представляет собой XML-файл, поддерживаются ссылки на другие файлы (include). В проекте есть XSD-схема, описывающая формат.

Что стало лучше, по сравнению с оригинальным софтом:

  • Функциональная и простая инфраструктура плагинов для всех возможных задач (вывод изображение, условия, реакция на нажатие клавиши).
  • Нормально переживает быстрое переключение пользователей, блокировку сеанса и подключение через терминальную сессию. Когда сессия не активна, ПО освобождает клавиатуру, восстанавливая на ней изображения и сканкоды по умолчанию. Когда на консоль вновь возвращается сессия, настройки клавиатуры также возвращаются.
  • Проблема с картинками на кнопках в фотошопе решена одним из штатных плагинов – условие по заголовку активного окна и имени основного модуля процесса.
  • Для вывода текста на кнопки используются не картинки, а плагин, которых рисует. В файле конфигурации вы задаёте текст текстом, что естественно.
  • Поддерживается прозрачность слоёв. Это позволяет, например, рисовать для lock-клавиши не две картинки (просто текст, текст с меткой), а только одну – метку. Она оверлеем накладывается на текст, рисуемый плагином, упомянутым выше.
  • Раскладка по умолчанию содержит и русские, и английские буквы (см. про прозрачность выше). Это решает проблему с набором паролей латинскими буквами в русской раскладке (в раскладках из коробки показываются или только латинские или только русские буквы).

Кроме дежурной англо-русской конфигурации я сделал конфигурацию, выводящую на все клавиши ровный белый цвет. А по нажатию Shift, Ctrl и Alt, соответственно красный, синий и зелёный. Такая раскладка будет полезна при оценке состояния дисплеев клавиатуры, учитывая их быстрое выгорание (про это напишу в статье о клавиатуре).
Кроме них, в комплекте идёт простая конфигурация для приложения Paint.NET (на буквенных клавишах появляются значки инструментов). Если в редакторе открыть какое-либо другое дочернее окно (выбор файла, настройки и т.п.) значки снова меняются на соответствующие буквы.
Имя файла с конфигурацией можно передать приложению как параметр командной строки. Это удобно при автоматическом запуске приложения, например, через автозагрузку.

Что стало хуже:

  • Нет графического интерфейса. Я сам делать его пока не планирую. Но сделать его не очень сложно: вся работа с устройством происходить через один интерфейс. Нужно написать свою реализацию, которая будет вместо отправки на физическое устройство, будет рисовать картиночки на экране.
  • Упала скорость перерисовки картинок на кнопках. Я не делал точных замеров, но субъективно стало медленнее. Нужно исправлять.


Что интересного посмотреть:

Реализацию слежения за изменением раскладки в активном приложении. Подобных примеров крайне мало, я нашёл только один на CodeProject, но он уже малость устарел и из коробки не работает. На чистом .NET реализовать это невозможно, ибо требуется библиотека для внедрения во все активные процессы. Причём, на платформе x64 таких библиотек должно быть две, по одной для каждой архитектуры.
Кстати, судя по отсутствию библиотек у оригинального софта и некоторой задержке в реакции на смену раскладки, я предполагаю, что там авторы не старили напрягаться и реализовали проверку активной раскладки просто по таймеру.

Какой план?


Написать документацию.
Буду смотреть на реакцию, нежен ли вообще кому-то такой софт. Студия Лебедева не раскрывает статистику продаж, поэтому трудно оценить, каким тиражом клавиатура разошлась по России и миру. На вторичном рынке устройство, фактически, отсутствует, что позволяет считать объём продаж не слишком большим.
Если у вас есть раскладки для оригинального софта, которые вы хотели бы адаптировать для нового, или вы сделали новую раскладку, пожалуйста, присылайте её мне. Я бы хотел собрать в вики проекта как можно больше раскладок для разных приложений и языков.
Аналогично, если вы написали плагин для KbdMax, я буду рад дать ссылку на него с вики проекта. Принимая во внимание смерь форума everythingoptimus, вики проекта может стать, как минимум, актуальной базой ссылок на раскладки и плагины для управляющего софта.
Ну и, конечно, буду рад увидеть ваши пожелания и жалобы в багтракере проекта.
Буду рад прочитать в комментариях впечатления других владельцев Maximus от штатного и моего софта.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.