// черновик с вопросами!!!
Материал для тех, кто хочет собрать себе свою собственную, кастомную эргономичную клавиатуру. Чтобы было удобно.
фото tg:@wi11son сообщеcтво
Для человека, решившего сделать клавиатуру под свои зпросы, но не очень знакомого с программированием (но дотошным), при попытке разобраться с документацией для её прошивки, может возникнуть проблема "3-х сосен".
Когда вроде всё понятно, а по сути - //непонятно нихуя// возникают проблемы на ровном месте.
Самая простая и доступная для изучения библиотека для создания прошивки – QMK. И для неё написано довольно много документации.
Но, из-за несостыковок английской лексики, русского перевода, и устоявшихся при описании клавиатур, понятий...
Может легко возникнуть недопонимание.
Поэтому, попытаюсь "разложить всё по полкам", и описать понятия, которыми она, эта библиотека, оперирует:
Key – в контексте клавиатур, это клавиша, кнопка, в физическом её смысле. Основа основ любой клавиатуры. Если трогать её руками. Но не думать, что у неё, под кнопками, "внутри", происходит.
В прошивке клавиатуры, и доках к ней, собственно, о кнопках не так уж много и речи. В ней о том, что клавиатура отправляет компьютеру, когда кнопка нажимается.
А на уровне электронных сигналов клавиатура отправляет в ОС т.н. scan-code (скан-коды), двузначные, в шестнадцатиричном формате числа, обозначающие конкретные, закреплённые ещё во времена американского Царя Гороха символы на клавиатуре, которые охватывает только латинские буквы, знаки пунктуации и типовые клавиши.
ОС же, в соответствии с программной раскладкой, которая в ней на данный момент активна, ставит символ из соответствующего языка.
Но, когда в коде прошивки говорится о том, что отправляет клавиатура в компьютер, мы увидим не скан-коды, а кей-коды.
Ведь прошивка – это, в основном своём объёме, "рассказ" о не о физическом уровне (напр., прошёл сигнал между двух пинов), а "рассказ" о более высоком, и абстрактном уровне взаимоотношений; уровне слоёв, "режимов", функций, установленных в момент, когда этот этот сигнал прошёл.
Keycode (кей-код, кикод, клави-код, а дословно – код клавиши) – это именно та абстракция, которая обозначает символ или команду в коде прошивки, которая вызывает набор конкретных символов, даёт переключение на другой слой, позволяет зажечь/погасить диоды, издать звук, и разное другое).
Кей-код символа обычно выглядит как KC_A, KC_O, KC_E,..
Кей-код команды – KC_ESC, LCTL, RCTL, RALT,..
Keymap (дословно – карта клавиш) – переводится обычно как "раскладка", но сути это – слой.
Проблема в том, что когда мы говорим "раскладка" по-русски, мы подразумеваем не только слой строчных, но и, как минимум, слой заглавных букв.
А значит – 2 слоя(keymap). И это, если ещё нет слоя Alt.
В контексте же прошивки QMK, keymap – это базовый элемент. Ниже которого идут только отдельные кейкоды.
Слова Layer(слой) в коде прошивки, думаю, Вы не обнаружите. Но его можно встретить в документации. И обычно оно подразумевает "Keymap".
Layout (дословно – макет) – не поверите, это тоже в каком-то смысле – слой. Но!...
Когда операция идёт со слоем, как с "единой сущностью", и не рассматривается его, слоя, содержание.
Когда надо "переключить слой", "перейти на слой выше", или "слой ниже".
Когда речь идёт о его содержании, тогда это уже... keymap.
Поэтому, когда хочется перевести слово Layout как "раскладка", но это будет, мягко говоря, не точно.
Matrix (матрица, или, я бы сказал, "сетка") – на первый взгляд – это то, что можно назвать "раскадка", но... тоже нееет!
Это – своего рода "первораскладка", в которой определяется количество рядов и колонок условной сетки, образованной пересечением пинов микропроцессора, отправлющих в кей-, а точнее, скан-коды в операционную систему.
Иногда матрица являет собой ещё и некий дополнительный, промежуточный слой абстракции, заполненный условными, номерными кейкодами, например kc01, kc02,.. kc11, kc 12,.. как можно увидеть в клавиатуре 9key, часто приводящейся в качестве примера. И на них уже накладываются так скажем, "реальные" кейкоды, обозначающие конкретные сигналы.
Firmware (Прошивка) – файл в шестнадцатиричном формате (например .hex или .bin).
Или, изначально, папка с файлами, написанными на "высокоуровневом", "понятном человеку" языке, например, на языке C или C++.
Она "заливается" в контроллер клавиатуры с помощью расположенной в этом контроллере, подпрограммы – загрузчика (bootloader).
Файлы, из которых состоит прошивка клавиатуры (в частности, QMK), посмотреть можно тут.
Если говорить в данном контексте..
То можно сказать, обычно программисты делают прошивку на основе библиотеки, той же QMK, содержащих основные стандарты и наборы правил для микро-программ каких-нибудь устройств.
Например, тех же клавиатур, или джойстиков.
И по факту, каждая кастомная прошивка состоит из набора правил, или функций, отличающихся от начального "стандарта", но с набором ссылок на него, которые используются как своеобразная база.
Когда программист закончил свою работу по описанию нужных ему функций, например, в прошивке клавиатуры, он производит компиляцию (англ. Flash), и программа-компилятор соединяет это всё вместе, переводя в понятный компьютеру 16-ричный формат.
И уже он записывается в этот маленький чип на платке с помощью компьютера, usb-шнура, и упомянутого выше bootloader'a.