Accès direct au port série sous XP ?

Signaler
Messages postés
4
Date d'inscription
dimanche 30 avril 2006
Statut
Membre
Dernière intervention
30 avril 2006
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour à tous !

J'essaie de communiquer avec un convertisseur analogique-numérique via un adaptateur USB->série sous Windows XP. J'avais réalisé sous Linux un programme en C qui utilisait les fonctions outb et inb (accès direct aux ports d'I/O) qui fonctionnait très bien. Sous XP la situation est plus difficile...

J'ai testé quelques librairies sensées autoriser l'accès direct aux ports d'I/O : WinIo, KPort, DLPortIO, NTPort, aucune d'entre elles n'a donné de résultats. Le programme compilé avec les fonctions fournies par ces librairies ne renvoie pas d'erreurs, mais apparemment aucun signal n'est effectivement envoyé au port série...

En QBasic par contre, ça fonctionne...!  (avec les fonctions OUT et INP)

Est-ce que l'adaptateur USB->série peut être à l'origine du problème ? Ou autre chose...?

Merci pour votre aide !
++

Dom

6 réponses

Messages postés
4
Date d'inscription
dimanche 30 avril 2006
Statut
Membre
Dernière intervention
30 avril 2006

Suite du message précédent...

J'ai utilisé un moniteur de port série pour vérifier le fonctionnement des fonctions d'accès au ports (citées ci-dessus). Effectivement, seuls les OUT et INP de QBasic fonctionnent, ainsi que la fonction port de TurboPascal -> en résumé, seul ntvdm.exe, la machine virtuelle 16bits d'XP, parvient à accéder directement aux ports.

Finalement, j'ai également testé une librairie Matlab, IOLib (Hardware I/O Library for Matlab/Simulink), qui fonctionne en // avec un driver en kernel mode, CrackNT. Toujours pareil, aucun résultat...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Messages postés
4
Date d'inscription
dimanche 30 avril 2006
Statut
Membre
Dernière intervention
30 avril 2006

Merci pour ton aide BruNews, mais je pense pas pouvoir m'en sortir avec l'API Windows... je m'explique :
Mon objectif n'est pas d'envoyer ou de recevoir des données avec les broches TD et RD (respectivement pins 3 et 2 sur une DB-9) mais de contrôler l'état des broches de contrôle RTS (pin 7) et DTR (pin 5) et de lire celui de CTS (pin 8). Avec des fonctions d'accès direct au port, ça se fait très facilement : par ex, pour alterner entre état haut et état bas sur RTS, en Qbasic ça donne :

B = $H3F8    -> Adresse de base du port série (COM1)
OUT B+4, 0  -> RTS état bas
OUT B+4, 2  -> RTS état haut

Même chose en TurboPascal avec la fonction port, ou sous linux avec outb(). En théorie ça devrait être pareil avec les fonctions fournies par les différentes librairies citées dans mon premier message, mais non... pourtant ces fonctions, qui renvoient généralement un booléen, indiquent que l'écriture sur le port s'est déroulée correctement ! Je précise aussi que je les utilise en tant qu'administrateur, ça ne devrait donc pas poser de problème...

++
Dom
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
ok, il est clair que c'est différent.
Je ne pense pas que tu passeras des commandes privilégiées (out, cli, etc...) directement, les accès directs au matériel sont interceptés par le system pour garantir sa stabilité, qu'on soit en session admin ou non n'y change rien.
Il faudrait que tu mettes ces commandes dans un driver et tu lui communiquerais ce que tu veux faire par DeviceIoControl().

ciao...
BruNews, MVP VC++
Messages postés
4
Date d'inscription
dimanche 30 avril 2006
Statut
Membre
Dernière intervention
30 avril 2006

Ok merci je vais essayer d'écrire des drivers, mais à première vue c'est pas évident... Ce qui m'étonne quand même c'est de ne pas pouvoir utiliser ces librairies (WinIO, DLPortIO, etc) qui sont apparemment conçues pour ça !

++
Dom
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Jamais utilisé ces librairies.

ciao...
BruNews, MVP VC++