port parallèle Linux (Debian)

port parallèle Linux (Debian) - C - Programmation

Marsh Posté le 01-12-2005 à 16:41:23    

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
Reply

Marsh Posté le 01-12-2005 à 16:41:23   

Reply

Marsh Posté le 01-12-2005 à 19:22:40    

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/
Reply

Marsh Posté le 02-12-2005 à 10:39:22    

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
Reply

Marsh Posté le 02-12-2005 à 11:15:08    

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/
Reply

Marsh Posté le 02-12-2005 à 16:38:46    

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

Reply

Marsh Posté le 03-12-2005 à 16:26:07    

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


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 04-12-2005 à 01:34:35    

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

Reply

Marsh Posté le 05-12-2005 à 11:40:39    

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


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 05-12-2005 à 11:44:03    

Ne vous moquez pas svp  :sarcastic:

Reply

Sujets relatifs:

Leave a Replay

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