Tout a commencé très drôle. Deux webcams du fabricant Logitech (modèle C525) ont été connectées à mon ordinateur. Assez bons appareils photo, mais comme il s'est avéré plus tard, avec des pilotes de qualité très douteuse. En fait, ce n'est pas seulement un problème de ce fabricant. Leur utilitaire de configuration remplace le système, mais ne soupçonne même pas que l'ordinateur puisse avoir plus d'une caméra de ce modèle. Par conséquent, lorsque vous ouvrez la fenêtre des paramètres pour différentes caméras d'OBS Studio, la mise au point change toujours pour une. Le désordre.
À une certaine époque, il a beaucoup joué avec la capture et la diffusion de caméras dans VLC. De son interface, j'ai découvert DirectShow . J'ai décidé de me développer en C #, malgré le manque d'expérience (nous ne considérerons pas les labos à l'université). Littéralement le soir, j'ai dessiné des TrackBars pour toutes les caméras trouvées, et heureusement il n'y avait pas de limite. J'ai jeté l'utilitaire à quelques blogueurs vidéo familiers pour une utilisation sur les flux.

Ensuite, ils ont reçu une demande d'extension de la fonctionnalité. Ajoutez l'ajustement de la balance des blancs. Alors pourquoi ne pas laisser l'utilisateur choisir les paramètres dont il a besoin? Pour chaque caméra séparément. A partir de ce moment, des onglets sont apparus. Le premier est général, avec des paramètres sélectionnés et un onglet pour chaque webcam détectée.

Certes, tous les paramètres ne sont pas pris en charge par la caméra. Seulement 3 états: non disponible, uniquement réglage manuel, réglage manuel et automatique. Il n'y a aussi que de l'automatique, mais je ne me souviens pas l'avoir obtenu depuis n'importe quel appareil. Par conséquent, certaines lignes sont désactivées. Pour les caméras portables, par exemple, la moitié de la liste associée aux paramètres de capture n'est pas disponible. Mais la correction est déjà là .
Lors de la mise en place de l '«interface à onglets», la pensée m'est venue: de fixer un encodeur. Dans les appareils photo reflex, tourner la bague de mise au point est très pratique. Mais ils ne l'ont pas livré aux webcams. Les bébés STM32F070 ont donc été connectés au projet. Ce sont les plus petites puces prenant en charge USB 2.0. Il y a déjà un bon article sur le Habr sur HID personnalisé , vous pouvez donc ignorer la description détaillée de cet article. La disposition des appareils est extrêmement simple. Aucune tuyauterie n'est nécessaire pour ce microcontrôleur. Ce n'est que maintenant qu'il ne sait pas comment démarrer le générateur intégré sur PLL, donc du quartz est nécessaire. Des éléments de contrôle, en plus de l'encodeur, il y a 4 boutons. L'un d'eux est intégré à l'encodeur. Ce sont maintenant très courants. A propos de la nomination de chacun sera un peu plus tard.

Pour déboguer le logiciel, deux instances du périphérique HID ont été soudées. Mais ils sont assemblés presque sur une planche à pain. Ce sont en fait des foulards pour Pinboard II. En vain, lors du câblage, je n'ai pas immédiatement ajouté un port USB et un stabilisateur linéaire. Il aurait l'air moins ferme collective (non). Dans l'appareil fini, il est prévu de placer l'écharpe dans le support de l'appareil photo sur un trépied. Bien sûr, imprimé sur une imprimante 3D. Pour qu'un seul fil mène à la caméra, vous pouvez également placer un concentrateur USB au même endroit. Par exemple, FE1.1s n'est pas beaucoup plus grand que STM32. Mais honnête 480 mégabits. En général, la mise en œuvre du fer reste une question ouverte.
Ceux qui souhaitent répéter peuvent télécharger la source depuis le référentiel . Le coût d'un morceau de fer par composants est conditionnellement de 100 roubles, dont 55 le microcontrôleur «mange». Dans mon cas, le quartz coûte 20 mégahertz, mais c'est "ce qui était dans les bacs". Modifiez la dénomination, mais reconfigurez le système d'horloge pour que le module USB convienne à tout.

Maintenant sur la nomination des boutons matériels. L'encodeur intégré remet le paramètre en mode automatique, si possible. La rotation se traduit en manuel. Étant donné que l'utilisateur peut ajuster plusieurs paramètres, vous devez basculer entre eux. Le bouton S1 est chargé de parcourir les paramètres, et sur S2 et S3, vous pouvez en affecter des spécifiques afin de ne pas être distrait par la fenêtre du programme en vérifiant le paramètre sélectionné.
L'indication est utilisée pour identifier les périphériques. Sur l'onglet caméra, vous pouvez lier le périphérique HID à une caméra spécifique. La LED s'allume lorsqu'elle est sélectionnée dans la liste déroulante. Le diagramme fournit une LED avec deux cristaux dans un boîtier, mais toutes ses fonctionnalités ne sont pas utilisées. Partis pour l'avenir.
Chaque appareil HID possède son propre numéro de série unique, qui est transmis via USB. C'est lui qui s'affiche dans la liste. L'unicité des nombres est assurée par l'identifiant du microcontrôleur lui-même. C'est la date de production et sa place dans l'assiette. Une méthode de formation très amusante. Bien que le numéro de série ne soit pas stocké dans le fichier INI, mais le chemin vers le périphérique (contient VID, PID et GUID). Tous les paramètres sont lisibles, donc le fichier peut être modifié avec le bloc-notes. Mais pourquoi.
La lame de la caméra est une mauvaise chose. OBS Studio, par exemple, laisse la dernière image. Parfois, vous ne remarquez pas immédiatement une panne. Donc un avis de casque. En général, le traitement de la connexion de nouveaux appareils et de la reconnexion d'appareils existants était la tâche la plus difficile. Les deux webcams et HID. Fondamentalement, le premier. Affecté par le manque d'expérience en programmation en C #. Il faudrait lire une sorte de livre ... Combien de flux ont passé alors qu'il fonctionnait encore ... Le processus a été diffusé sur YouTube, où les téléspectateurs étaient périodiquement invités à la fois par le code et par les fonctionnalités de l'application. C'est très pratique. Esprit collectif.
Ainsi, à cause des conducteurs obliques, de tels métiers apparaissent. Bien sûr, au fil du temps, il sera mis à jour, débogué, il existe donc un lien vers le référentiel .