bonjour à tous,
je dois envoyer et recevoir des données sur le port parallèle LPT1. Comment faire avec les MFC?
merci?
Version imprimable
bonjour à tous,
je dois envoyer et recevoir des données sur le port parallèle LPT1. Comment faire avec les MFC?
merci?
regarde ce lien : http://www.lvr.com/parport.htm
Sinon, je crois qu'il faut utiliser CreateFile...
Pour simplement envoyer / recevoir des données, à priori le CreateFile devrait suffire. Tente d'ouvrir un CFile sur "LPT1".
Salut,
Si tu fais ca sous 2000 ou XP, je te conseille d'aller voir un site :
http://www.beyondlogic.org/porttalk/porttalk.htm
Tu trouveras ce qu'il faut pour ne plus avoir les problemes de privileges.
:D
c'est vite dit. Ca utilise un driver pour pouvoir écrire sur les ports, donc il faut être administrateur pour charger ce driver...
CreateFile, s'il te suffit, fonctionnera tout le temps.
:merci: à tous,
j'ai réussi avec CreateFile. J'arrive à envoyer des données (avec la fonction WriteFile()). Mais maintenant, comment en recevoir??
Mon problème est le suivant:
quand j'envoie un requête, la réponse peut mettre assez longtemps à venir (30 secondes maxi). Dois-je créer un thread qui attend la réponse? Car si je fais un ReadFile() et que la réponse n'est pas encore arrivée, ça ne va pas marcher.
encore merci :D
ReadFile doit échoué car il y a timeout de lecture. Tu peux régler le tiemout avec SetCommTimeouts et doit pouvoir attendre qu'un évènement arrive (reception de données...) avec WaitCommEvent.
ok.
Je ne comprends pas bien la structure COMMTIMEOUTS qui définit les temps d'attente. En particulier, je ne vois pas la différence entre les trois premiers champs: ReadIntervalTimeout, ReadTotalTimeoutMultiplier et ReadTotalTimeoutConstant.
Si quelqu'un connait cette structure, j'accepte volontiers quelques explications :)
:merci:
Faut lire la doc...
C'est le premier qui t'intéresse, les 2 autres tu peux les mettre à 0. Tu lui met le nombre de ms à attendre avant de considérer que t'as rien reçu.
et vérifie dans le Bios que ton port parallèle est bien bi-directionnel, ce n'est pas toujours le cas.
ça c'est bon, il est bien bidirectionnel. Le câble aussi.Citation:
Envoyé par tut
Sinon, j'ai une erreur que je ne parviens pas à corriger:
Donc, visiblement, un des paramètres de SetCommTimeouts est incorrect. Cependant, m_hFile est bon car:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 m_hFile = CreateFile(...); if (m_hFile==INVALID_HANDLE_VALUE) { MessageBox("INVALID_HANDLE_VALUE"); return; } if (0==WriteFile(m_hFile,...)) { MessageBox("cannot write"); } [...] COMMTIMEOUTS cto; cto.ReadIntervalTimeout = 20000; cto.ReadTotalTimeoutMultiplier = 0; cto.ReadTotalTimeoutConstant = 0; cto.WriteTotalTimeoutMultiplier = 0; cto.WriteTotalTimeoutConstant = 0; DWORD toto = GetLastError(); //->toto=0 SetCommTimeouts(m_hFile, &cto); toto = GetLastError();//->toto=87:the parameter is incorrect
1/ m_hFile!=INVALID_HANDLE_VALUE
2/ le WriteFile fonctionne parfaitement
Donc c'est mon COMMTIMEOUTS qui doit être erroné, mais là, je ne vois pas.
Une idée?
SetCommTimeouts() te renvoie FALSE ?
ouiCitation:
Envoyé par Aurelien.Regat-Barrel
P.S: je ne trouve pas beaucoup de chose sur le sujet sur la toile. J'ai trouvé un sujet qui en parle: http://www.dotnetmonster.com/Uwe/For...-LPT-port-in-C
mais j'ai beaucoup de mal à tout comprendre, surtout qu'il parle de Parité/ByteSize/StopBits, je croyais que c'était pour le port série ça...
erf, je n'y comprends plus rien. Maintenant, SetCommTimeouts me renvoie l'erreur:"Fonction Incorrecte"!!! Alors que je n'ai pas modifé mon code!!
Je ne comprends vraiment pas...
J'ai essayé sans les timeouts, et j'obtiens un comportement des plus étranges:
- parfois je parviens à lire ce qui arrive sur LPT1
- parfois j'ai une "unknown i/o error"
- parfois j'ai l'erreur: "ne peux pas accéder au fichier LPT1"
J'ai également essayé avec CFile.Open(), et ça marchait presque...