Пока не комментируйте, я не дописал ещё.
Я раскидал секции содержания по подгифам. Обсуждение давайте вести здесь. Интересно, как пойдёт такая структура, не пробовал.
Мой протокол не заключён сам в себе, он всегда работает в паре с каким-то другим протоколом. Спецификация не ограничивает возможные протоколы-напарники. Примеры возможных:
-
USB для проводных клавиатур.
-
Bluetooth для беспроводных клавиатур.
-
Можно ШИМом по миниджеку передавать сообщения.
-
Клавиатурой может быть человек, который пишет сообщения на бумажках.
-
Я как-то описывал, как похожий протокол мог бы работать поверх Gemini.
Для спецификации разницы нет, как именно сообщения доставляются.
Сообщения (message) — что-то типа отчётов HID (HID report). Назвал их так, чтобы подчеркнуть двусторонность протокола: сообщения могут идти как от компа к клаве, так и от клавы к компу.
При подключении клавиатуры к компу, клавиатура ждёт от компьютера вопросов. Компьютер, когда посчитает нужным, спрашивает: ты кто? Клавиатура выдаёт такое (например; действительный формат данных приводить я нужным не считаю пока что):
Версия протокола: 1.0
Название: Сагарис
Производитель: Баунс
Описание: Полуаккордовая клавиатура
Версия клавиатуры: 2.6
Владелец: Баунс <bouncepaw@example.org>
Установленных профилей: 3
Максимальное число профилей: 6
Новые поля могут быть добавлены в новых версиях протокола. Разрешены любые другие поля. Если компьютер не знает поле, то его можно как угодно обработать: уведомить пользователя, отказаться работать с клавой, проигнорировать.
Далее компьютер говорит, что думает про подключение; это может занять сколько угодно времени, потому что ОС может, например, ждать выбора пользователя. Он может сказать что-то из этого (список, как водится, может быть расширен, но он должен быть обратно совместим).
-
Давай работать. Я буду говорить на твоей версии протокола.
-
Давай работать. Я буду говорить на протоколе версии 1.0.1.
-
Отказываюсь работать, потому что не знаю твою версию протокола.
-
Отказываюсь работать из-за настроек пользователя.
Далее клавиатура говорит, согласна ли она на такие условия. Если не согласна, то компьютер игнорирует дальнейшие сообщения клавиатуры в текущей сессии. Если согласна, компьютер и клавиатура входят в печатные отношения.
Cannot transclude hypha идеальный_протокол/баунс/устройство because it does not exist
Меня попросили пояснить, что такое кируна. Вот, что я сказал:
Представь компактный способ кодирования всех взаимодействий с клавишей, в том числе вводимые символы уникода, слои, моды, вот это всё. Я назвал это кирунами
Отдельное слово нужно, чтобы не путать с кикодами, которые очень завязаны на HID и классическую архитектуру клавиатур. Если названия разные, понятно, что понятия, скорее всего, разные
Cannot transclude hypha идеальный_протокол/баунс/настройка because it does not exist
По сути, прототип сделать несложно. На ардуине вполне реально накалякать за приемлимое время. Это со стороны клавиатуры.
Драйвер для пк — вот, где соль.
Симулятор нажатий
Самый простой способ написать драйвер: программа решает, какую клавишу надо нажать, и нажимает её через какую-нибудь другую программу.
Винда
Не смею лезть в этот лес.
macOS
GNU/Linux/X11
Есть программа xdotool
, через неё можно. Например, так можно нажать клавишу e
:
xdotool key 'e'
UPDATE. Писать драйвера даже под QMK можно, смотри статью, и там ищи по странице raw HID mode
.