# Hardware-Treiber 
Möchte oder kann man das Layout softwareseitig nicht ändern, besteht die Möglichkeit Neo mittels eines Tastaturadapters oder einer programmierbaren Tastatur zu nutzen.

## Umsetzungen

### Neo Hardware-Adapter 
Für das Neo-Layout existiert ein [Hardware-Adapter](https://github.com/Jonas-commits/Neo-Keyboard-Adapter) zum Eigenbau, welcher die Funktionalität der Neo-Tastatur weitgehend vollständig abbildet. Alle Ebenen und die wichtigsten Compose-Sequenzen sind implementiert. Weiter sind zusätzliche Features, wie das schnelle Umschalten zwischen Neo-Layout und Standard-Layout möglich.

### QMK-Firmware auf programmierbaren Tastaturen oder generischen Adaptern 
Das [QMK-Projekt](https://qmk.fm/) ist ein Projekt, welches einen generisches Tastaturtreiber bietet. Entweder direkt in programmierbaren Tastaturen wie der [Ergodox](Ergodox.md), oder durch Umsetzung auf Zwischensteckern wie einem [USB-USB-Konverter](https://github.com/qmk/qmk_firmware/tree/master/keyboards/converter/usb_usb). Es ist universeller nutzbar, unterstützt allerdings nicht alle Eigenarten des Neo-Layouts direkt ohne Erweiterung des QMK-Codes (beispielsweise scheint es keine naheliegende Möglichkeit zur Implementierung von verschiedenen Toten Tasten zu geben; für Compose lässt sich jedoch die [Leader-Funktion](https://beta.docs.qmk.fm/using-qmk/advanced-keycodes/feature_leader_key) nutzen).
Eine Beispielkonfiguration ohne tote Tasten und Compose, die auf Qwerty aufbaut, befindet sich [hier](https://git.neo-layout.org/attachments/5c9c7174-6b02-4652-bf33-d6c9859c38f0).


## Technik 
Eine Standardtastatur sendet nicht etwa das Zeichen, welches gedrückt wird, sondern einen Code, welche die Position des Zeichens wiedergibt. Drückt man beispielsweise auf einer Qwertz-Tastatur das `Z`, wird das gleiche gesendet, wie wenn man auf einer Qwerty-Tastatur das `Y` sendet. Die Entscheidung, wie das Zeichen interpretiert wird, findet softwareseitig durch das ausgewählte Tastaturlayout statt. So wird hier bei einem deutschen Layout ein `Z` bei einem englischen ein `Y` und beim Neo-Layout ein `K` interpretiert. 

Bei einer Hardware-Umsetzung greift man an dieser Stelle ein. Man sendet anstelle des eigentlich Scancodes einen anderen. Sendet man bei eingestelltem Qwertz-Layout beispielsweise anstelle des Scancodes der Taste `Z` den der Taste `K`, dann wird diese Taste als `K` interpretiert, bei eingestelltem Qwertz-Layout. Stellt man das Qwerty-Layout ein müsste man natürlich den Scancode der Taste `Y` modifizieren. Zum ummappen braucht es eine programmierbare Tastatur oder einen dedizierte Adapter mit einem Microcontroller wie einem Teensy oder Arduino Micro, welcher eine USB-Tastatur emuliert. Die eigentliche Tastatur ist über einen Adapter mit diesem Board verbunden und liest die Tastaureingaben ein. Bei Tastendruck wird eine Aktion abgeleitet. Dies kann das Senden eines Tastendrucks sein, oder aber auch eine interne Zustandsänderung, wie eine Ebenenumschaltung.

## Vor- und Nachteile 

### Vorteile 
* Für Basisfunktionalität keine Installation erforderlich (Sonderzeichen benötigen je nach System Einrichtung und potentiell Wechsel des Modus der Tastatur)
* Keine Probleme mit dem Layout bei Remote-Arbeit
* Keine Probleme bei Erkennung der zusätzlichen Modifier bei diversen Software-Produkten 
* Verwendung von 2 Tastaturen mit unterschiedlichen Layouts ohne Konfigurationsaufwand gleichzeitig möglich (bspw. Paar-Programmierung, Remote Support)
* Vermeidung jeglicher weiterer Seiteneffekte des Layouts
* Einwandfreie Funktion von Standard-Tastenkombinationen 

### Nachteile 
* Spezielle Hardware erforderlich
* Beim Adapter sind Zusatzfunktionen der Tastatur nur begrenzt nutzbar (abhängig vom Umfang der Umsetzung des HID-Standards)
* Im Softwarelayout nicht enthalte Zeichen (bspw. griechische Zeichen) können nicht durch einen Tastaturcodes dargestellt werden, da sie eben nicht existieren für das Layout. Es muss sich hier der Betriebssystem-Bordmittel, wie bei Windows bspw. `Alt` + `Num-Block` bedient werden. Diese Makros funktionieren wiederrum nur sehr lückenhaft und malen beim Benutzen meist Artefakte auf den Bildschirm (bei Windows werden die Anfangsbuchstaben der Texte in der Menuleiste unterstrichen; bei der entsprechenden Linux-Funktion erscheint der Codepoint erst auf dem Bildschirm, bevor das Zeichen ersetzt wird). Die Eingabe solcher Sonderzeichen ist teilweise spürbar langsamer als bei einem Softwarelayout.
* Nicht nutzbar auf Laptop-Tastaturen
* Compose-Sequenzen auf Speicher der Hardware beschränkt 

### Schlussfolgerung 
Eine Hardwareumsetzung hat insbesondere dann Vorteile, wenn man mit Windows arbeitet, da dieser dort die meisten Probleme bereitet. Wenn man sich oft auf Remote Maschinen einwählt funktioniert die Arbeit einwandfrei. Nicht vorteilhaft ist die Verwendung dann, wenn oft Unicode-Zeichen in verschiedenen Anwendungen benötigt werden oder ohne externe Tastatur gearbeitet werden soll. Weiter sollte man auf Sonderfunktionen der verwendeten Tastatur verzichten können, da es nur schwer möglich ist, den kompletten HID-Standard in einem Adapter umzusetzen. 
