[LINUX] Versuchen Sie, etwas zu entwickeln, das der Einbettung mit TDD nahe kommt ~ Problemauslösung ~

Einführung

Es ist eine Fortsetzung des Folgenden.

Versuchen Sie, mit TDD ~ Preparation ~ etwas zu entwickeln, das nahezu eingebettet ist

Wir denken in Echtzeit über den Inhalt nach. Wenn Sie also Meinungen oder Wünsche haben, können Sie sich gerne an uns wenden. Code ist auf github verfügbar

Änderungen und Entscheidungen vom letzten Mal

Werkzeug erstellen

Das Build-Tool wurde von Autotools in CMake geändert. CMake Version 2.8 oder höher ist eine erforderliche Umgebung.

Produktcode

Der Produktcode sollte in C-Sprache sein. Ich habe nicht vor, sehr komplizierten Code zu schreiben, also plane ich, in roher C-Sprache fortzufahren. Wenn Ihr Code kompliziert wird, sollten Sie glib verwenden.

Was zu machen

** Drücken Sie die Taste "A" auf der Tastatur, um die Feststelltaste ein- und auszuschalten. ** **.

Vorerst werden wir von hier aus beginnen und die Spezifikationen mit den Gefühlen, Ideen und Rückmeldungen vor Ort erweitern. Mit Ausnahme des diesmal veröffentlichten Codes werden wir es mit TDD schaffen. Am Ende möchte ich sagen, dass ich es mit einer anderen Hardware als der Tastatur mit einer anderen Hardware wie Razzpie richtig portieren konnte. Herzlichen Glückwunsch! Ich habe zu diesem Zeitpunkt keine wirklich spezifische Hardware ausgewählt. Sie sehen, das ist eher eine tatsächliche Entwicklung, nicht wahr?

Problemdarstellung

Wenn Sie nun zu dem zurückkehren, was Sie gerade machen, und die Taste "A" auf der Tastatur drücken, wird die Feststelltaste ein- und ausgeschaltet **. Welche Art von Implementierung haben Sie, wenn Sie ein Programm erstellen?

Wenn Sie es ehrlich machen, wird es ein Pseudocode wie der folgende sein.

static void mainloop() {
  do {
Schlüsselereignis abrufen
    if (Ein Knopf wurde gedrückt) {
      write(LED umschalten);
    }
  } while (Bis eine Bedingung erfüllt ist);
}

int main() {
  mainloop();
  return 0;
}

Als ich den obigen Pseudocode tatsächlich erstellt habe, wurde er zum folgenden Code. Sie haben den Betrieb von libevdev im vorherigen Test zum Verständnis der Bibliothek bestätigt.

#define KEYBOARD_DEVICE "/dev/input/event2"
#define LED_DEVICE      "/sys/class/leds/input2::capslock/brightness"

#define KEY_RELEASED 0
#define KEY_PRESSED 1

static void mainloop() {
  struct libevdev *dev = NULL;
  int key_fd = open(KEYBOARD_DEVICE, O_RDONLY|O_NONBLOCK);
  int rc = libevdev_new_from_fd(key_fd, &dev);

  if (rc < 0) {
    fprintf(stderr, "Failed to init libevdev (%s)\n", strerror(-rc));
    exit(1);
  }

  int led_fd = open(LED_DEVICE, O_WRONLY|O_NONBLOCK);
  if (led_fd < 0) {
    fprintf(stderr, "Failed to init LED device.\n");
    exit(1);
  }

  bool led_on = false;
  do {
    struct input_event ev;
    rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, &ev);
    if (rc == 0) {
      if (ev.type == EV_KEY && ev.code == KEY_A && ev.value == KEY_PRESSED) {
        led_on = !led_on;
        char buf[2];
        snprintf(buf, 2, "%d", led_on ? 1 : 0);
        write(led_fd, buf, 2);
      }
    }
  } while (rc == 1 || rc == 0 || rc == -EAGAIN);

  libevdev_free(dev);
  close(key_fd);
  close(led_fd);
}

int main() {
  mainloop();
  return 0;
}

Wenn Sie eine Linux-Umgebung haben, können Sie diese tatsächlich ausführen. Lesen Sie den vorherigen Artikel, überprüfen Sie das Tastaturgerät und das LED-Gerät und korrigieren Sie die Pfade der beiden Makros (* KEYBOARD_DEVICE, LED_DEVICE *). Wenn ich ** build / bad_example / bad_example ** erstelle und ausführe, schaltet sich die LED jedes Mal ein und aus, wenn ich die Taste "A" drücke (je nach Umgebung ist eine Root-Berechtigung erforderlich).

Nun, dieser Code sieht auf den ersten Blick gut aus, hat aber viele Probleme.

Aus diesen Gründen wird es zunehmend schwieriger, Funktionen hinzuzufügen, wenn die Funktionserweiterung wiederholt wird, und es wird schwierig, Funktionen hinzuzufügen, ohne eine Entfettung zu verursachen.

Ab dem nächsten Mal werde ich tatsächlich versuchen, was passiert, wenn ich diesen Code mit TDD entwickle, und Funktionen der Reihe nach hinzufügen.

Nächster: Versuchen Sie, mit TDD ~ file open ~ etwas zu entwickeln, das nahezu eingebettet ist

Recommended Posts

Versuchen Sie, etwas zu entwickeln, das der Einbettung mit TDD nahe kommt ~ Problemauslösung ~
Lassen Sie uns mit TDD ~ Preparation ~ etwas entwickeln, das nahezu eingebettet ist
Lassen Sie uns mit TDD ~ Intermediate Review ~ etwas entwickeln, das dem Integrierten nahe kommt
Lassen Sie uns mit TDD ~ Design pattern ~ etwas entwickeln, das dem Integrierten nahe kommt
Lassen Sie uns etwas entwickeln, das mit TDD ~ file open edition ~ nahezu eingebettet ist
Lassen Sie uns mit TDD ~ Key Input Detection Version ~ etwas entwickeln, das dem Integrierten nahe kommt
Lassen Sie uns etwas entwickeln, das mit TDD ~ libevdev Initialisierungs- / Beendigungsverarbeitung ~ nahezu eingebettet ist
Schritte zur Entwicklung von Django mit VSCode
[Einführung in WordCloud] Spielen Sie mit Scraping ♬
[Einführung in Python] Verwenden wir foreach mit Python
Wie man Problemdaten mit Paiza liest
Lassen Sie uns mit Python 1 einen Investitionsalgorithmus entwickeln