⌨️СофтИдеальный ПротоколБаунсПередача Информации

Мой протокол не заключён сам в себе, он всегда работает в паре с каким-то другим протоколом. Спецификация не ограничивает возможные протоколы-напарники. Примеры возможных:

  • USB для проводных клавиатур.

  • Bluetooth для беспроводных клавиатур.

  • Можно ШИМом по миниджеку передавать сообщения.

  • Клавиатурой может быть человек, который пишет сообщения на бумажках.

  • Я как-то описывал, как похожий протокол мог бы работать поверх Gemini.

Для спецификации разницы нет, как именно сообщения доставляются.

Сообщения (message) — что-то типа отчётов HID (HID report). Назвал их так, чтобы подчеркнуть двусторонность протокола: сообщения могут идти как от компа к клаве, так и от клавы к компу.

При подключении клавиатуры к компу, клавиатура ждёт от компьютера вопросов. Компьютер, когда посчитает нужным, спрашивает: ты кто? Клавиатура выдаёт такое (например; действительный формат данных приводить я нужным не считаю пока что):

Версия протокола: 1.0
Название: Сагарис
Производитель: Баунс
Описание: Полуаккордовая клавиатура
Версия клавиатуры: 2.6
Владелец: Баунс <bouncepaw@example.org>

Установленных профилей: 3
Максимальное число профилей: 6

Новые поля могут быть добавлены в новых версиях протокола. Разрешены любые другие поля. Если компьютер не знает поле, то его можно как угодно обработать: уведомить пользователя, отказаться работать с клавой, проигнорировать.

Далее компьютер говорит, что думает про подключение; это может занять сколько угодно времени, потому что ОС может, например, ждать выбора пользователя. Он может сказать что-то из этого (список, как водится, может быть расширен, но он должен быть обратно совместим).

  1. Давай работать. Я буду говорить на твоей версии протокола.

  2. Давай работать. Я буду говорить на протоколе версии 1.0.1.

  3. Отказываюсь работать, потому что не знаю твою версию протокола.

  4. Отказываюсь работать из-за настроек пользователя.

Далее клавиатура говорит, согласна ли она на такие условия. Если не согласна, то компьютер игнорирует дальнейшие сообщения клавиатуры в текущей сессии. Если согласна, компьютер и клавиатура входят в печатные отношения.