Host-Einstellungen (Linux)

Auf dem USB-Host, das heißt dem Linux-Rechner, wechsle ich zu einem Virtuellen Terminal (VT), indem ich meinen Log-in-Manager stoppe (und damit meine aktuelle grafische Sitzung beende!):

Stellenmarkt
  1. Clinical Solution Architect (w/m/d)
    Ascom Deutschland GmbH, Baar (Schweiz)
  2. IT Support / Helpdesk (m/w/d)
    Friedrich Lütze GmbH, Weinstadt
Detailsuche


% sudo systemctl stop gdm

Ist das Virtuelle Terminal aktiv, wird das Drücken der Feststelltaste vollständig im Kernel-Treibercode verarbeitet, ohne einen Umweg über den Userspace zu nehmen. Das können wir überprüfen, indem wir mit bpftrace(8) Stacktraces sammeln, wenn der Kernel die Funktion kbd_event in drivers/tty/vt ausführt:


% sudo bpftrace -e 'kprobe:kbd_event { @[kstack] = count(); }'

Golem Karrierewelt
  1. Adobe Photoshop Aufbaukurs: virtueller Zwei-Tage-Workshop
    06./07.10.2022, Virtuell
  2. Deep Dive: Data Governance Fundamentals: virtueller Ein-Tages-Workshop
    22.02.2023, Virtuell
Weitere IT-Trainings

Nachdem wir die Feststelltaste gedrückt und den bpftrace-Prozess abgebrochen haben, sollte ein Stacktrace zu sehen sein.

Ich habe dann die grundlegende Ende-zu-Ende-Latenz gemessen - mithilfe meiner measure-fw-Firmware auf dem FRDM-K66F-Eval-Kit, einem billigen und leicht erhältlichen USB-2.0-High-Speed-Gerät. Die Firmware misst die Latenzzeit zwischen einem Tastendruck und der USB-HID-Meldung für die LED der Feststelltaste, allerdings ohne zusätzliche Verzögerung durch den Matrixscan oder Ähnliches:


% cat /dev/ttyACM0
sof=74 μs	report=393 μs
sof=42 μs	report=512 μs
sof=19 μs	report=512 μs
sof=39 μs	report=488 μs
sof=20 μs	report=518 μs
sof=90 μs	report=181 μs
sof=42 μs	report=389 μs
sof=7 μs	report=319 μs

Eine schnellere Reaktion können wir aus diesem Computer nicht herausholen. Alles, was dazukommt (z. B. X11, Anwendungen), macht das Ganze langsamer. Dieser Wert stellt also die untere Grenze dar.

Code für die Simulation von Tastendrücken und Durchführung von Messungen

Ich verwende den Arduino-Sketch latencydriver ; die Arduino IDE muss so konfiguriert sein:

Teensy 4.0 (USB Type: Serial, CPU Speed: 600 MHz, Optimize: Faster)

Die Pins werden im Messtreiber Teensy 4.0 wie folgt eingerichtet:

  1. void setup() {
  2. Serial.begin(115200);
  3.  
  4. // Connected to kinT pin 15, COL_2
  5. pinMode(11, OUTPUT);
  6. digitalWrite(11, HIGH);
  7.  
  8. // Connected to kinT pin 8, ROW_EQL.
  9. // Pin 11 will be high/low in accordance with pin 10
  10. // to simulate a key-press, and always high (unpressed)
  11. // otherwise.
  12. pinMode(10, INPUT_PULLDOWN);
  13. attachInterrupt(digitalPinToInterrupt(10), onScan, CHANGE);
  14.  
  15. // Connected to the kinT LED_CAPS_LOCK output:
  16. pinMode(12, INPUT_PULLDOWN);
  17. attachInterrupt(digitalPinToInterrupt(12), onCapsLockLED, CHANGE);
  18. }

Damit eine Taste als gedrückt erkannt wird, müssen wir in der Tastaturmatrix (hier mehr zur Tastaturmatrix) die Spalte mit der Zeile verbinden - aber nur, wenn die Spalte gescannt wird. Das machen wir über den Interrupt Handler wie folgt:

  1. bool simulate_press = false;
  2.  
  3. void onScan() {
  4. if (simulate_press) {
  5. // connect row scan signal with column read
  6. digitalWrite(11, digitalRead(10));
  7. } else {
  8. // always read not pressed otherwise
  9. digitalWrite(11, HIGH);
  10. }
  11. }

Jetzt können wir über unser Textinterface eine Messung starten:

  1. caps_lock_on_to_off = capsLockOn();
  2. Serial.printf("# Caps Lock key pressed (transition: %s)\r\n",
  3. caps_lock_on_to_off ? "on to off" : "off to on");
  4. simulate_press = true;
  5. t0 = ARM_DWT_CYCCNT;
  6. emt0 = 0;
  7. eut0 = 0;

Beim nächsten Scan der Tastaturmatrix wird die gedrückte Taste erkannt und ein HID-Report an das Betriebssystem gesendet. Sobald das Betriebssystem mit seinem HID-Report antwortet, der den Status der Caps-Lock-LED enthält, beendet unser Caps-Lock-LED-Interrupt-Handler die Messung:

  1. void onCapsLockLED() {
  2. const uint32_t t1 = ARM_DWT_CYCCNT;
  3. const uint32_t elapsed_millis = emt0;
  4. const uint32_t elapsed_micros = eut0;
  5. uint32_t elapsed_nanos = (t1 - t0) / cycles_per_ns;
  6.  
  7. Serial.printf("# Caps Lock LED (pin 12) is now %s\r\n", capsLockOn() ? "on" : "off");
  8. Serial.printf("# %u ms == %u us\r\n", elapsed_millis, elapsed_micros);
  9. Serial.printf("BenchmarkKeypressToLEDReport 1 %u ns/op\r\n", elapsed_nanos);
  10. Serial.printf("\r\n");
  11. }

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Die Pins identifizierenMessungen durchführen 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10.  


Aktuell auf der Startseite von Golem.de
Streaming
Amazon zeigt neuen Fire TV Cube

Das neue Spitzenmodell der Fire-TV-Produktfamilie wurde beschleunigt und hat deutlich mehr Anschlüsse als bisher. Zudem wird eine neue Fire-TV-Fernbedienung angeboten.

Streaming: Amazon zeigt neuen Fire TV Cube
Artikel
  1. Berufsschule für die IT-Branche: Leider nicht mal ausreichend
    Berufsschule für die IT-Branche
    Leider nicht mal "ausreichend"

    Lehrmaterial wie aus einem Schüleralbtraum, ein veralteter Rahmenlehrplan und nette Lehrer, denen aber die Praxis fehlt - mein Fazit aus drei Jahren als Berufsschullehrer.
    Ein Erfahrungsbericht von Rene Koch

  2. Tim Cook: Apple will Entwicklung in München weiter ausbauen
    Tim Cook
    Apple will Entwicklung in München weiter ausbauen

    Laut Konzernchef Cook ist der Standort München wegen der Mobilfunktechnik für Apple "sehr, sehr wichtig". Doch da ist noch mehr.

  3. Indiegogo: Ein Computer, der sich nur auf Schreibmarathons fokussiert
    Indiegogo
    Ein Computer, der sich nur auf Schreibmarathons fokussiert

    Der Freewrite Alpha ist mit internem Speicher und mechanischer Tastatur etwas mehr als eine analoge Schreibmaschine - aber auch nicht viel mehr.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • PS5-Controller GoW Ragnarök Edition vorbestellbar • Saturn Technik-Booster • Viewsonic Curved 27" FHD 240 Hz günstig wie nie: 179,90€ • MindStar (Gigabyte RTX 3060 Ti 499€, ASRock RX 6800 579€) • AMD Ryzen 7000 jetzt bestellbar • Alternate (KF DDR5-5600 16GB 96,90€) [Werbung]
    •  /