Forum Programmation.c le port usb?

Posté par  .
Étiquettes : aucune
0
28
avr.
2005
Salut à tous!

Je voudrais communiquer avec le port USB en C. J'utilise un module USB COMi (convertisseur USB =} COM) qui me permet de boucler par un système d'écho. J'ai déja tester le module avec cat et sa fonctionne. On remarque aussi le système d'écho, car il m'affiche plein de fois le même caractère.

Mais bon, voici mon code

#include asm/io.h
#include unistd.h
#include stdlib.h
#include asm/fcntl.h
#include termios.h
main()
{
int numFichier,key=0,choix=0,i=0;
char port[]={"/dev/ttyUSB0"};
char texte[11], car;
i=ioperm(port,1,1);

printf("\n\n\n ####### FICHIER.C #######\n Dialogue avec le port usb\n");

printf("Ouverture du port ....... ");
numFichier=open(port,O_RDWR|O_NONBLOCK);
if(numFichier>0)
{
printf("OK\n");
do
{
printf("\nMENU :\n1) Emettre 'a'\n2) Recevoir\n3) Quitter\n:");
scanf("%i",&choix);

if (choix==1) // Emettre
{
printf("\nGO.....\n");
write(numFichier,"x",1);
printf("\nEcriture faites\n");
}
else if (choix==2) // Recevoir
{
while(i==0)
i=read(numFichier,texte,10);
printf("Nombre d'octet lu : %i\n", i);
}
else if (choix==3) // Quitter
{
key=1;
}
else printf("Mauvaise commande\n");
}
while(key==0);
}
else printf("ERREUR\n");
printf("Fermeture du programme\n");
close(numFichier);
sleep(1);
printf("\a");
}


Si quelqu'un pouvais jeter un coup d'oeil, sa serais sympa, là je bloque....
  • # Et ?

    Posté par  . Évalué à 3.

    Si tu veux que l'on t'aide, ce serait sympa de :

    - Faire attention à l'orthographe;
    - Nous indiquer quel est ton problème en particulier.

    Tu veux communiquer avec quoi sur le bus USB ? Le hub ? Un des périphériques connectés ? Sniffer le réseau ?

    A mon avis c'est surtout cela qu'il faut éclaircir.

     char port[]={"/dev/ttyUSB0"}; 


    C'est bien le nom de ton port série, mais il n'y aucune raison pour qu'il fonctionne autrement qu'un ttyS0 normal parce qu'il est sur le bus USB, c'est au noyau de gérer cela. A ton niveau, c'est censé être totalement transparent (en dessous, par contre, cela se complique, évidement).

    Par contre, vire les accolades, sinon tu vas définir un tableau de chaînes et pas une chaîne. Ton pointeur risque d'être invalide.

     i=ioperm(port,1,1); 


    Non ! Tu mélanges tout. Cette primitive sert à donner le droit à un processus de manipuler directement les adresses de contrôle des périphériques ! Ne pas toucher. D'accord, il s'agit bien de donner l'accès à des « ports » d'entrée/sortie sur trouvant sur un bus particulier (au contraire de certains microprocesseurs qui utilisent le bus d'adresse), mais cela n'a strictement rien à voir avec un périphérique de port série branché sur le bus USB. D'ailleurs, si tu avais lu la page de manuel, tu aurais vu que cet appel attend un entier en premiere argument, et pas un pointeur sur une chaîne.

    Poubelle.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.