Alles begann sehr lustig. Zwei Webcams des Herstellers Logitech (Modell C525) wurden an meinen Computer angeschlossen. Ziemlich gute Kameras, aber wie sich später herausstellte, mit Treibern von sehr zweifelhafter Qualität. In der Tat ist dies nicht nur ein Problem dieses Herstellers. Ihr Konfigurationsdienstprogramm ersetzt das System, vermutet jedoch nicht einmal, dass der Computer möglicherweise über mehr als eine Kamera dieses Modells verfügt. Wenn Sie das Einstellungsfenster für verschiedene Kameras in OBS Studio öffnen, hat sich der Fokus daher immer für eine geändert. Das Durcheinander.
Zu einer Zeit spielte er viel mit dem Erfassen und Senden von Kameras in VLC. Über seine Benutzeroberfläche habe ich von DirectShow erfahren. Ich habe mich trotz mangelnder Erfahrung für C # entschieden (wir werden keine Labore an der Universität in Betracht ziehen). Buchstäblich abends skizzierte ich TrackBars für alle gefundenen Kameras, und zum Glück gab es keine Begrenzung. Ich habe das Dienstprogramm einigen bekannten Video-Bloggern zur Verwendung in Streams zur Verfügung gestellt.

Als nächstes erhielten sie eine Anfrage zur Erweiterung der Funktionalität. Weißabgleich anpassen. Warum lassen Sie den Benutzer dann nicht die Parameter auswählen, die er benötigt? Für jede Kamera einzeln. Von diesem Moment an erschienen Registerkarten. Der erste ist allgemein, mit ausgewählten Parametern und einer Registerkarte für jede erkannte Webcam.

Richtig, nicht alle Parameter werden von der Kamera unterstützt. Nur 3 Zustände: nicht verfügbar, nur manuelle Einstellung, manuelle und automatische Einstellung. Es gibt auch nur Automatik, aber ich kann mich nicht erinnern, sie von einem Gerät erhalten zu haben. Dementsprechend sind einige Leitungen ausgeschaltet. Bei Laptop-Kameras ist beispielsweise die Hälfte der Liste für die Aufnahmeeinstellungen nicht verfügbar. Aber die Korrektur ist schon da.
Bei der Implementierung der „Tabbed Interface“ kam mir der Gedanke: einen Encoder anzubringen. Bei Spiegelreflexkameras ist das Drehen des Fokusrings sehr praktisch. Sie haben es jedoch nicht an Webcams geliefert. So wurden die STM32F070-Babys mit dem Projekt verbunden. Dies sind die kleinsten Chips mit Unterstützung für USB 2.0. Es gibt bereits einen guten Artikel über Custom HID im Habr , sodass Sie die detaillierte Beschreibung dieses Artikels überspringen können. Das Gerätelayout ist äußerst einfach. Für diesen Mikrocontroller sind keine Rohrleitungen erforderlich. Erst jetzt weiß er nicht, wie er den eingebauten Generator auf PLL starten soll, daher wird Quarz benötigt. Von den Bedienelementen gibt es neben dem Encoder 4 Tasten. Einer von ihnen ist in den Encoder eingebaut. Diese sind jetzt sehr häufig. Über die Ernennung von jedem wird etwas später sein.

Zum Debuggen von Software wurden zwei Instanzen des HID-Geräts gelötet. Aber sie sind fast auf einem Steckbrett montiert. Dies sind eigentlich Schals für Pinboard II. Vergebens habe ich bei der Verkabelung nicht sofort einen USB-Anschluss und einen Linearstabilisator hinzugefügt. Es würde weniger Kollektivfarm aussehen (nein). Im fertigen Gerät ist geplant, den Schal im Kamerahalter auf ein Stativ zu legen. Natürlich auf einem 3D-Drucker gedruckt. Damit nur ein Kabel zur Kamera führt, können Sie auch einen USB-Hub an derselben Stelle platzieren. Zum Beispiel ist FE1.1s nicht viel größer als STM32. Aber ehrliche 480 Megabit. Im Allgemeinen ist die Implementierung von Eisen noch eine offene Frage.
Diejenigen, die wiederholen möchten, können die Quelle aus dem Repository herunterladen. Die Kosten für ein Stück Eisen nach Komponenten betragen bedingt 100 Rubel, von denen 55 der Mikrocontroller „frisst“. In meinem Fall kostet Quarz 20 Megahertz, aber das ist "was in den Behältern war". Ändern Sie den Nennwert, aber konfigurieren Sie das Uhrensystem so, dass das USB-Modul für alles geeignet ist.

Nun zur Ernennung von Hardware-Buttons. Der eingebaute Encoder bringt den Parameter nach Möglichkeit in den automatischen Modus zurück. Drehung wird in manuell übersetzt. Da der Benutzer mehrere Parameter anpassen kann, müssen Sie zwischen diesen wechseln. Die S1-Taste ist für das Durchlaufen der Parameter verantwortlich. In S2 und S3 können Sie bestimmte Parameter zuweisen, um nicht durch Programmieren des ausgewählten Parameters vom Programmfenster abgelenkt zu werden.
Die Anzeige dient zur Identifizierung von Geräten. Auf der Registerkarte Kamera können Sie das HID-Gerät an eine bestimmte Kamera binden. Die LED leuchtet auf, wenn sie in der Dropdown-Liste ausgewählt ist. Das Diagramm zeigt eine LED mit zwei Kristallen in einem Gehäuse, aber alle Funktionen werden nicht verwendet. Links für die Zukunft.
Jedes HID-Gerät verfügt über eine eigene Seriennummer, die über USB übertragen wird. Er wird in der Liste angezeigt. Die Eindeutigkeit der Zahlen wird durch die Kennung des Mikrocontrollers selbst sichergestellt. Dies ist das Produktionsdatum und sein Platz auf der Platte. Eine sehr lustige Formationsmethode. In der INI-Datei ist zwar nicht die Seriennummer gespeichert, sondern der Pfad zum Gerät (enthält VID, PID und GUID). Alle Einstellungen sind lesbar, sodass die Datei mit dem Editor bearbeitet werden kann. Aber warum.
Das Kamerablatt ist eine böse Sache. OBS Studio verlässt beispielsweise den letzten Frame. Manchmal bemerken Sie eine Panne nicht sofort. Also ein Helmhinweis. Im Allgemeinen war die Verarbeitung des Verbindens neuer und des erneuten Verbindens vorhandener Geräte die schwierigste Aufgabe. Sowohl Webcams als auch HID. Grundsätzlich die erste. Betroffen von mangelnder Programmiererfahrung in C #. Es wäre notwendig, eine Art Buch zu lesen ... Wie viele Streams gingen, während es noch funktionierte ... Der Prozess wurde auf YouTube ausgestrahlt, wo die Zuschauer regelmäßig sowohl durch Code als auch durch Anwendungsfunktionen dazu aufgefordert wurden. Es ist sehr bequem. Kollektiver Geist.
Aufgrund der schrägen Fahrer erscheinen solche Handwerke. Natürlich wird es im Laufe der Zeit aktualisiert und debuggt, sodass ein Link zum Repository besteht .