Acceder au port parallele

Le
patrice.riou
Bonjour,

Je suis actuellement entrain de m'amuser avec le port paralle. Je fais
un soft permettant de diagnostiquer un port parallele (avec un bouchon
sur le port). Mon probleme est lors de l'ecriture sur le port. Apres un
appel a CreateFile("LPT1"..) j'utilise la fonction WriteFile mais elle
n'aboutit pas (en overlapped ou pas elle n'ecrit jamais rien). Voila ce
que je fais (je reste bloque dans la fonction WriteFile):
hDevice = CreateFile("LPT1", GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
if (INVALID_HANDLE_VALUE == hDevice) return;
unsigned char c = 0;
boOk = WriteFile(hDevice, &c, 1, &dw, NULL);
if (boOk) printf("Nb Write %d Write 0x%02X", dw, c);
else printf("WriteFile Error %d", GetLastError());

Est ce que j'utilise mal le WriteFile ? Comment proceder ?
J'ai essaye de dialoguer avec le driver parport.sys mais sans plus de
resultats. Quelle sont les commandes pour lire sur le port // en
utilisant le driver. Comment marche IOCTL_PAR_SET_WRITE_ADDRESS ??

Merci d'avance
Vos réponses
Trier par : date / pertinence
Vincent Burel
Le #9770561
news:
Bonjour,

Je suis actuellement entrain de m'amuser avec le port paralle. Je fais
un soft permettant de diagnostiquer un port parallele (avec un bouchon
sur le port). Mon probleme est lors de l'ecriture sur le port. Apres un
appel a CreateFile("LPT1"..) j'utilise la fonction WriteFile mais elle
n'aboutit pas (en overlapped ou pas elle n'ecrit jamais rien). Voila ce
que je fais (je reste bloque dans la fonction WriteFile):
hDevice = CreateFile("LPT1", GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
if (INVALID_HANDLE_VALUE == hDevice) return;
unsigned char c = 0;
boOk = WriteFile(hDevice, &c, 1, &dw, NULL);
if (boOk) printf("Nb Write %d Write 0x%02Xn", dw, c);
else printf("WriteFile Error %dn", GetLastError());



Il se peut que la configuration de votre port ne soit pas ok. regardez les
fonction Get/SetCommState...
Suivant le mode d'un port de communication, le write et/ou le read peuvent
etre bloquant (en attente de données... ou d'un accusé de reception), pour
controler cette attente, regardez du coté de Set/GetCommTimeouts

Je vous invite à parcourir le chapitre du MSDN :
Platform SDK Documentation / Base Services / Files and I/O / Communications

Vincent Burel
Bertrand Lenoir-Welter
Le #9770541
:

hDevice = CreateFile("LPT1", GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);



Ca paraît pourtant bon. La seule différence avec ce que j'ai ici et qui
marche, c'est que j'utilise GENERIC_READ|GENERIC_WRITE même pour une
sortie unidirectionnelle, et 0 à la place de FILE_ATTRIBUTE_NORMAL.
D'ailleurs, vous parlez de lecture sur le port et vous avez l'argument
GENERIC_WRITE seul. Pour l'écriture avec WriteFile(), on a la même chose.

Le mieux est de vérifier déjà si ça sort bien vers un fichier (mettez
"TOTO.TXT" à la place de "LPT1"). Si c'est ok, vous avez peut-être un
souci avec le port.
patrice.riou
Le #9770531
Merci pour vos reponses,

Le fait d'ecrire dans un fichier (ou port serie) fonctionne très bien.
Je pense que mon probleme vient du fait que j'ai uniquement un bouchon
sur le port parallele.
En fait je voudrais uniquement ecrire une valeur a l'adresse du port
//, et relire le registre d'etat du port //. Et voir si cette valeur
est conforme a ce que j'ai ecrit (en fonction du cablâge du loopback
//)
Est ce que qq'1 a une idee en dialoguant avec le driver parport.sys ?
Utilisation des commandes IOCTL_.....


Bertrand Lenoir-Welter a écrit :

:
>
> hDevice = CreateFile("LPT1", GENERIC_WRITE, 0, NULL,
> OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);

Ca paraît pourtant bon. La seule différence avec ce que j'ai ici et q ui
marche, c'est que j'utilise GENERIC_READ|GENERIC_WRITE même pour une
sortie unidirectionnelle, et 0 à la place de FILE_ATTRIBUTE_NORMAL.
D'ailleurs, vous parlez de lecture sur le port et vous avez l'argument
GENERIC_WRITE seul. Pour l'écriture avec WriteFile(), on a la même ch ose.

Le mieux est de vérifier déjà si ça sort bien vers un fichier (me ttez
"TOTO.TXT" à la place de "LPT1"). Si c'est ok, vous avez peut-être un
souci avec le port.


Bertrand Lenoir-Welter
Le #9770521
:

Le fait d'ecrire dans un fichier (ou port serie) fonctionne très bien.
Je pense que mon probleme vient du fait que j'ai uniquement un bouchon
sur le port parallele.



Votre souci semble plutôt hard que soft. Je suis un peu rouillé sur la
question, mais il me semble que le port parallèle réclame des signaux de
synchro, genre Strobe, Busy, etc. pour produire un flux de données. Je
vous recommande le bouquin de Jan Axelson "Parallel Port Complete", un
peu ancien mais très complet pour ce que je m'en souviens.

Ceci dit, le mieux est d'essayer d'abord votre sortie vers une
imprimante LPT qui accepte le mode texte et voir si ça sort bien. Si
c'est le cas, votre bouchon a un problème.

Au cas où, une page de liens : http://www.lvr.com/parport.htm
Publicité
Poster une réponse
Anonyme