Je travaille sur une application C++ Win32 pour laquelle j'essaye de détecter automatiquement si un périphérique a été connecté à l'un des ports RS232 La vérification d'un périphérique connecté est assez simple car mon cas d'utilisation me permet de supposer que ce thread sera le premier à essayer d'initier la communication avec le port. pour balayer les ports disponibles toutes les minutes et une fois que j'ai trouvé un port avec le périphérique, je signale que ce port a un périphérique, fermez le port, puis définissez un événement pour que le processus qui utilisera le périphérique le sache il peut maintenant se connecter sur ce portDétermine si le périphérique est connecté/déconnecté au port RS232 sans ouvrir le port
La détection de déconnexion est l'endroit où je rencontre des problèmes. Lorsque je recherche des appareils connectés, je peux effectivement envoyer des données au port pour être sûr que, s'il y a un appareil, c'est l'appareil que je recherche. Mais une fois connecté, ce port sera déjà ouvert par l'autre processus et je ne peux plus ouvrir ce port à partir du thread de détection. Donc, je cherche un moyen d'ouvrir le port en mode "écoute" ou quelque chose comme ça, donc je peux juste voir si l'appareil est toujours là.
Je suis brièvement tombé sur quelque chose à propos de regarder la ligne DSR ou DTR ou quelque chose ... mais je ne pouvais pas trouver plus ou comment le faire réellement.
Des suggestions?
Edit: On dirait que je dois clarifier un peu plus ... Pour détecter la déconnexion, je ne peut pas envoyer des données au port RS232 de quelque façon. En outre, je ne peux pas supposer qu'une autre application a effectivement le port ouvert. Le périphérique peut être physiquement connecté, mais sans et ouvrir la connexion ... mais je ne peux toujours pas risquer d'envoyer des données. J'espérais qu'il y avait un moyen de vérifier qu'il y avait encore de la puissance sur ce port ou quelque chose comme ça.
Explication, Merci. Malheureusement, je ne peux pas accéder au niveau du pilote ... mais je peux au moins avoir un handle sur le port qui est déjà ouvert, donc je peux vérifier. –
Encore une réflexion ... est-il un moyen d'essayer de se connecter au port où il va échouer s'il y a déjà une connexion? De cette façon, si elle échoue avec une connexion précédente, ou tout simplement se connecte, je sais qu'il est toujours là. –
Bien sûr, essayez d'ouvrir le port et vérifiez le résultat de GetLastError() en cas d'échec. Cela vous dira si le port est ouvert. Cela ne vous dit pas si l'appareil est toujours connecté. Vous devez avoir un échange de données périodique pour cela, ou utiliser GetCommModemStatus() dans votre autre processus aussi. – mghie