gestion du port parallèle en C++

gestion du port parallèle en C++ - Programmation

Marsh Posté le 08-07-2001 à 18:32:12    

Est-ce que quelqu'un saurait gérer le port parallèle sous windows en C++ ?

Reply

Marsh Posté le 08-07-2001 à 18:32:12   

Reply

Marsh Posté le 08-07-2001 à 20:19:44    

J'avais ce genre de pb à régler aussi.
Ya plusieurs solutions:
1)tu integre de l'assembleur ds ton code C++
2)tu utilises des programmes deja fait pour ca (payants et non payants)
3)tu utilises les API de ce cher windows
4)t'utilise une dll specialement crée pr ca
 
Pr ma part, je pouvais pas integrer de l'assembleur directement ds mon code paske je suis sous borland C++ 5.0 et ya pas l'utilitaire qui permette de mettre de l'assembleur (il s'appelle turbo assembleur de borland).
Alors je me suis rabattu sur les API, mais le resultats est pas trop top. Finalement, l'utilisation d'une dll d'acces aux ports est le meilleure slution (pr l'instant...)

Reply

Marsh Posté le 08-07-2001 à 23:34:02    

Tu aurais par hasard une dll dont tu parles (pour inspiration ou utilisation).
Mon but est d'envoyer des données traitées à partir d'un fichier, sur le port parallèle. Donc il faudrait que je complète le programme que j'ai fait, qui s'occupe déjà des données.

Reply

Marsh Posté le 09-07-2001 à 01:23:23    

Tu trouveras tout ce que tu cherches sur le site suivant :
 
http://www.programmationworld.com
 
section Langage -> électronique :)
 
Fais attention, les fonctions inp() et outp() ne fonctionnent pas sur les systèmes NT !


---------------
Belegar The Dwarf
Reply

Marsh Posté le 09-07-2001 à 14:33:44    

OK, je vais t'envoyer les liens, ms là je peux pas trop.
Alors à ce soir!!!
(sois patient  ;) )

Reply

Marsh Posté le 09-07-2001 à 15:38:53    

pas besoin de dll en C++ !! tout est fourni dans les librairies standards. Sous VC++, c'est dans conio.h, sous djgpp c'est danc pc.h, sous linux c'est dans asm/io.h (généralement) etc...


---------------
Belegar The Dwarf
Reply

Marsh Posté le 09-07-2001 à 16:39:31    

Non pas tt est fourni!!
En tt cas avec le borland c++ 5.0 que j'utilise, t'as pas trop le choix, soit API soit dll, sinon fo avoir le turbo assembleur (tres difficile à trouver, meme chez l'editeur).
Sinon g pas testé VC++, ms ca m'etonnerai qu'on ait acces aussi facilement aux hardware ss win 32 bits!!
 
Sinon, voici le lien vers une page sur le port // (entre autres), vers la fin ya pleins de liens pr des utilitaires ou dll de gestion de port //:
http://www.lvr.com/parport.htm
 
voir aussi le lien (tiré de la meme page) pr l'utilisation des dll en VC++ et VB: http://www.boondog.com/tutorials/dlltutor/dlltutor.htm
 
voila, bonne lecture!!!  :)

Reply

Marsh Posté le 09-07-2001 à 19:39:20    

"1)tu integre de l'assembleur ds ton code C++ "
 
pas la peine : fo passer par l'ecriture sur les ports et ca ben ca marche pas en win32 (instruction protegee)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 10-07-2001 à 00:37:42    

HelloWorld > meme pas essayé
par contre les dll marchent tres tres bien (j'utilise une dll qui est faite avec les fonctions inp et outp du VC++)

Reply

Marsh Posté le 10-07-2001 à 20:04:09    

Mais bien sûr que si ça marche en Win32. Ça ne marche pas sous les systèmes NT, mais il est possible de contourner le problème en changeant les droits momentanément ou en passant par l'API.


---------------
Belegar The Dwarf
Reply

Marsh Posté le 10-07-2001 à 20:04:09   

Reply

Marsh Posté le 10-07-2001 à 21:19:47    

:??:
quand je dis ke ca marche pas, c'est ke faire:
 
_asm
{
    mov dx, 0x60
    in  ax, dx
}
 
ben ca marche pas
apres si tu augmente ton nivo de priorite via les API ca n'a rien a voir avec l'assembleur
 
"il est possible de contourner le problème en changeant les droits momentanément ou en passant par l'API."
 
c'est koi la difference ? on passe par les API dans le but de changer les droits....
ensuite tu changes pas les droits de ton executable ... sous windows les executables ne peuvent avoir une priorite RL0, seul du code offert en tant que service genre dll ou VxD peut avoir cette priorite ...
et tu dis ke ca marche en win32n, mais moi j'ai essayé, j'ai fais un petit executable 32 bits ki fait "entrez un numero de port", "voulez vous lire ou ecrire une valeur sur ce port ?" etc ...
ben sous DOS ca marche nickel (quand compilé en DOS biensur) et sous win ben ...
ah ca oui il ecrit la valeur sur le port mais si je la relit derriere ben c'est comme si j'avais rien fait => mes in et out sont ignorés.
 
je me suis documenté et résultat : ke ce soit NT ou 95/98, tu peux pas le faire directement
fo changer le nivo de priorite
pour ca soit tu fais une dll soit tu fais un VxD afin d'avoir un nivo de privilege maximal (=> l'instruction est protegee).
 
sinon en effet ces dll marchent nickel
"par contre les dll marchent tres tres bien (j'utilise une dll qui est faite avec les fonctions inp et outp du VC++)"
 
mais ca m'etonnerais qu'elle soit ecrite avec inp et outp de VC++ puisque a ma conaissance ces fonctions n'existent que sous DOS


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-07-2001 à 00:16:04    

HelloWorld : "mais ca m'etonnerais qu'elle soit ecrite avec inp et outp de VC++ puisque a ma conaissance ces fonctions n'existent que sous DOS  "
 
J'ai fais que reprendre le commentaire du code cpp fourni avec la dll, ms on s'en fout de ca vu que ca marche!!!

Reply

Marsh Posté le 11-07-2001 à 00:55:35    

pas mal le site programmation world :)

Reply

Marsh Posté le 11-07-2001 à 10:37:59    

Question bonus: si on travaille en mode ECP ou EPP du port //, est-ce que si j'envoie des données (sur la partie data du port) en utilisant la fonction de la dll qui fait exactement la meme chose que "outp", les signaux de handshake sont générés automatiquement??

Reply

Marsh Posté le 11-07-2001 à 14:46:38    

pourras tu publier ici le code de cette dll (la partie outp uniquement, pas la partie qui change la priorite)
merci :)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-07-2001 à 20:21:06    

Bon, voici le lien direct vers la dll tant convoitée:
http://www.boondog.com/tutorials/dlltutor/8255.zip
 
Voici le code de la fonction de sortie (ce code est ds le zip):
 
// ------------------------------------------------------
//   FUNC: Out8255
//   DESC: uses Microsoft's Visual C++ _outp() function
//         to output a PortData to PortAddress
// ------------------------------------------------------
 
short _stdcall Out8255( int PortAddress, int PortData )
{
  short Dummy;  
  // Need Dummy since _outp officially returns int  
  // short is a 16-bit integer in Win32 C++
  // whereas int is 32-bit integer Win32 C++
  // use (short) to force returning 16-bit integer
  // back to VB
  Dummy = (short)(_outp( PortAddress, PortData ));
 
  return(Dummy);
 
}; // end of Out8255
 
Et ya meme pas de changement de priorité (en tt cas pas ds ces fichiers).
En parlant de chagement de priorité, tu voulais ptete dire les fonctions API qui permettent de l'utiliser???

Reply

Marsh Posté le 12-07-2001 à 09:07:09    

c'est bon, tout marche comme il faut en utilisant la librairie <conio.h> (avec _outp)
merci Belegar pour le lien que tu as mis

Reply

Marsh Posté le 12-07-2001 à 20:15:13    

j'ai regarde ce code et decouvert avec grande surprise que sous VC++ et sous windows95 ben outp ca existe (pas sous le Borland :()
alors cette histoire de priorite ke je vous ai fait chier avec ben c'est ke pour NT alors ... il me semblait que le source de la mega dll ke j'avais pompé disais ke sous 95 c'etait necessaire aussi
en tout cas sous 95 j'ai pu verifier ke ca marche
moi avec mon prog j'avais du boire je sais pas mais ca vait fouaré ... a moins ke je me soit gouré de port va savoir.
je pense en fait que cette dll offrait une fonction qui marche et sous 95 et sous NT ...
on en apprend tous les jours ;)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 12-07-2001 à 20:35:28    

Ouais c cool pr ceux qui ont VC++
Par contre, la dll marche avec tt les win, donc plus besoin de se faire chier à tt reécrire soi-même!! (reste à savoir comment l'utiliser correctement)
 
Sinon, personne pr répondre à ma question posée plus haut sur le handshake???

Reply

Marsh Posté le 12-07-2001 à 22:55:47    

je sais pas si ça répond à ta question mais dans mon prog, il faut que je valide chaque donnée en faisant un créneau d'horloge à l'adresse 0x37A càd :
 
_outp (0x378, data);
_outp (0x37A, 0);
_outp (0x37A, 1);
_outp (0x37A, 0);

Reply

Marsh Posté le 12-07-2001 à 23:03:12    

Oui, en quelque sorte, enfin je sais pas  :)  
J'avais lu qu'en mode EPP ou ECP, des signaux de handsake étaient générés, et je sais pas s'il fo les créer soi-même ou s'ils sont crée automatiquement.
Tu me rassures qd meme 1 peu, vu qu'en utilisant des fonctions de bases d'acces aux ports, on ne dervait faire sortir que les données voules.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed