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

Doum006 Messages postés 4 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 30 avril 2006 - 30 avril 2006 à 00:54
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 30 avril 2006 à 23:06
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

Doum006 Messages postés 4 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 30 avril 2006
30 avril 2006 à 13:05
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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 avril 2006 à 15:26
0
Doum006 Messages postés 4 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 30 avril 2006
30 avril 2006 à 16:19
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 avril 2006 à 16:46
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Doum006 Messages postés 4 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 30 avril 2006
30 avril 2006 à 22:46
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 avril 2006 à 23:06
Jamais utilisé ces librairies.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous