Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1171 connectés 

 


Dernière réponse
Sujet : gestion du port parallèle en C++
electricblue 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.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
electricblue 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.
bab 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);
electricblue 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???
HelloWorld 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 ;)
bab 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
electricblue 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???
HelloWorld pourras tu publier ici le code de cette dll (la partie outp uniquement, pas la partie qui change la priorite)
merci :)
electricblue 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??
Acidechaos pas mal le site programmation world :)
electricblue 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!!!
HelloWorld :??:
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
Belegar 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.
electricblue 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++)
HelloWorld "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)
electricblue 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!!!  :)
Belegar 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...
electricblue OK, je vais t'envoyer les liens, ms là je peux pas trop.
Alors à ce soir!!!
(sois patient  ;) )
Belegar 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 !
bab 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.
electricblue 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...)
bab Est-ce que quelqu'un saurait gérer le port parallèle sous windows en C++ ?

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR