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

  FORUM HardWare.fr
  Programmation
  C

  port parallèle Linux (Debian)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

port parallèle Linux (Debian)

n°1256997
ptitchep
Posté le 01-12-2005 à 16:41:23  profilanswer
 

Bonjour
Voila je dois faire deux petits programmes qui, executés sur deux pc communiquent sur port parallèle.
J'ai trouvé pas mal de doc et j'arrive à envoyer des signaux sur une broche voulue (je contrôle avec un oscilloscope). Seulement je n'arrive pas à les capter sur le deuxième PC... je reçois constamment la valeur 127...
Merci
 
Serveur:

Code :
  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <sys/io.h>
  4. #define ADRESSE_PORT 0x378
  5. int main()
  6. {
  7.   unsigned char i;
  8.   double j;
  9.   /*On ouvre le port:*/
  10.   if(ioperm(ADRESSE_PORT,1,1))
  11.   {
  12.     printf("Erreur ouverture du port\n" );
  13.     return 1;
  14.   }
  15.   printf("Port OK\n" );
  16.  
  17.   i=0;
  18.   while(1)
  19.     {
  20.       printf("Valeur envoyée: %d\n",i);
  21.       outb(i,ADRESSE_PORT);
  22.       if(i==0) i=255;
  23.       else i=0;
  24.       for (j=0;j<3000000;j+=0.1);
  25.     }
  26.   /*On ferme le port:*/
  27.   if(ioperm(ADRESSE_PORT,1,0))
  28.   {
  29.     printf("Erreur fermeture du port\n" );
  30.     return 1;
  31.   }
  32.   return 0;
  33. }


 
client:

Code :
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/io.h>
  4. #include <errno.h>
  5. #define ADRESSE_BAZ 0x378
  6. int main(void) {
  7.  
  8.   int bou;
  9.   if(ioperm(ADRESSE_BAZ, 2, 1))
  10.     {
  11.       perror("erreur d'ouverture (mets toi root, branle-manettes !)" );
  12.       exit(errno);
  13.     }
  14.   printf("je vais lire, muahahahahaha *rire machiavélique*\n" );
  15.   while(1) {
  16.  
  17.   bou=inb(ADRESSE_BAZ);
  18.   printf("j'ai lu %d, héhéhéhéhéhé *rire pervers*\n", bou);
  19.    }
  20.   if(ioperm(ADRESSE_BAZ, 2, 0))
  21.     {
  22.       perror("erreur d'ouverture (mets toi root, branle-manettes !)" );
  23.       exit(errno);
  24.     }
  25.   return 0;
  26. }


---------------
deluser --remove-home ptitchep
mood
Publicité
Posté le 01-12-2005 à 16:41:23  profilanswer
 

n°1257087
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-12-2005 à 19:22:40  profilanswer
 

ptitchep a écrit :


Voila je dois faire deux petits programmes qui, executés sur deux pc communiquent sur port parallèle.
J'ai trouvé pas mal de doc et j'arrive à envoyer des signaux sur une broche voulue (je contrôle avec un oscilloscope). Seulement je n'arrive pas à les capter sur le deuxième PC... je reçois constamment la valeur 127...


Est-il configuré pour recevoir ? Les ports // ne sont pas forcément bi-directionnels voir le BIOS...
 
Sinon, plutôt que ce boucles infâmes, essaye usleep()...
 
Enfin, pour échanger des données par les port //, il faut gérer les signaux de contrôle (data strobe, notamment), sinon, tu risques de lire n'importe quoi...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1257300
Evil_Ifrit
gooby pls
Posté le 02-12-2005 à 10:39:22  profilanswer
 

Emmanuel Delahaye a écrit :

Est-il configuré pour recevoir ? Les ports // ne sont pas forcément bi-directionnels voir le BIOS...


Les ports sont bien configurés en communication bi-directionnelle (EPP).

Emmanuel Delahaye a écrit :

Enfin, pour échanger des données par les port //, il faut gérer les signaux de contrôle (data strobe, notamment), sinon, tu risques de lire n'importe quoi...


C'est bien possible que ça soit ça qui pose problème, nous allons essayer de gérer le data strobe.
Merci Emmanuel. :hello:

Message cité 1 fois
Message édité par Evil_Ifrit le 03-12-2005 à 15:20:44
n°1257350
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-12-2005 à 11:15:08  profilanswer
 

Evil_Ifrit a écrit :

Les ports sont bien configurés en communication bi-directionnels (EPP).
 
C'est bien possible que ça soit ça qui pose problème, nous allons essayer de gérer le data strobe.
Merci Emmanuel. :hello:


Il y a en effet un chronogramme bien précis à respecter.
 
J'aime bien ce site http://www.beyondlogic.org
 
EPP :
http://www.beyondlogic.org/epp/epp.htm


Message édité par Emmanuel Delahaye le 02-12-2005 à 11:15:29

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1257668
nicolas_9
Jésus vous aime
Posté le 02-12-2005 à 16:38:46  profilanswer
 

Bonjour,
 
Après avoir relu la doc suivante sur le mode EPP :  
http://www.beyondlogic.org/epp/epp.htm
qui est très bien faite, mais en anglais, je me souviens mieux de la question du port // sur PC.
 
Si l'on souhaite utiliser un simple cable, sans aucune électronique, pour communiquer entre deux PC, la seule solution
que je connaisse est d'utiliser un cable de type "NULL modem parallèle".
Ce "charabia", "NULL modem parallèle", signifie que l'on relie les ports de sortie (4 ou 5 lignes de DATA), aux ports
d'entrée (Ack, Busy, Paper out/End, Select, Error / Fault)
Le handshake doit se faire pas soft, et on ne transmet que 4 ou 5 bits, à chaque fois. Les débits ne sont donc pas
très élevés.
 
Cette méthode était utilisée par des logiciels comme Laplink, et DOS, dans sa version 6.2 et sous Windows 95  
(je ne sais pas si ils ont conservé la fonctionnalité depuis) : connection directe par cable.
 
Dans ce mode de communcation, on utilise le mode SPP qui permet d'utiliser les signaux d'erreur en entrée.
Je sais que dans le livre : "La Bible PC", édité chez Microapplication, on trouve le schéma et le soft en C pour
faire les échanges entre deux PC.  
   La Bible PC
   3e édition, revue et corrigée
   Micro Application
   1992
 
Pour le cable "NULL modem parallèle", je ne sais pas si ça se trouve encore dans le commerce. Si non, il faut
le faire soi même.
 
Si l'on veut utiliser les modes ECP ou EPP qui permettent d'avoir des débits plus élévés, il faut faire un montage
électronique, car les cartes // sont avant tout faites pour communiquer avec des imprimantes. L'imprimante disposant
de sa propre électronique, qui n'est pas une carte // PC.
 
Si un tel montage t'intéresse, il faut chercher un peu sur le Net, ça doit bien se trouver !
(Je veux dire faire des transferts rapides entre deux PC en utilisant les modes ECP ou EPP).
 
Nicolas

n°1258131
ptitchep
Posté le 03-12-2005 à 16:26:07  profilanswer
 

Wahoo
merci on va potasser tout ça!!!!!!!!!!!


---------------
deluser --remove-home ptitchep
n°1258309
Evil_Ifrit
gooby pls
Posté le 04-12-2005 à 01:34:35  profilanswer
 

En effet, on résoudra sûrement notre problème avec tout ça ^^
Merci bien ! :P

n°1258926
ptitchep
Posté le 05-12-2005 à 11:40:39  profilanswer
 

Ca marche , notre cable n'était pas null modem, les broches étaient pas croisées!
Merci bien


---------------
deluser --remove-home ptitchep
n°1258929
Evil_Ifrit
gooby pls
Posté le 05-12-2005 à 11:44:03  profilanswer
 

Ne vous moquez pas svp  :sarcastic:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  port parallèle Linux (Debian)

 

Sujets relatifs
[linux][ext2fs] galere a trouver les entrées struct ext2_dir_entry[c++/linux] mise en page en ligne de commande
[Linux/X11] Iconification d'une fenetre dans la Taskbar[java] [linux] arreter un programme java qui boucle
utilisation du port parallele sous windows XPfiltrer un port
mettre des couleur sur le SHELL (linux)Question Intranet,serveur linux
ecouter un port 
Plus de sujets relatifs à : port parallèle Linux (Debian)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)