IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[C] Problème de sortie port parallèle avec ioperm outb


Sujet :

Linux

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Points : 112
    Points
    112
    Par défaut [C] Problème de sortie port parallèle avec ioperm outb
    Bonjour a tous. Voila j'ai un petit soucis pour controller mon port parralle.

    En effet j'obteins tout les droits ... aucune erreur mais cependant les etats de mes petites leds ne change pas...

    le source c'est ca :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/io.h>
     
     
    #define ADRESSEBASE 0x378
    #define TIME_MAX 2000
    #define TIME_MIN 1000
    #define DEBATEMENT 180
     
    int ioperm();
     
    int  main()
            {
     
                    setuid(0);
     
                    printf("demmarage\n");
     
                    openLPT();
                    int i=0;
                    for (i=0; i < 255; i++)
                            {
                                    usleep(40000);
                                    printf("signal envoye : %d\n", i);
                                    act(i);
                            }
     
                    closeLPT();
     
     
                    return 0;
            }
     
     
    int act(int broche)
            {
                    outb(broche, ADRESSEBASE);
            }
     
     
    int openLPT()
            {
                     if (ioperm(0x378, 3, 1) < 0)
                            {
                                    perror("ioperm");
                                    exit (1);
                            }
                    else
                            {
                                    outb( 0x2, ADRESSEBASE+2);
                                    printf("innitialisation Ok\n");
     
                            }
     
     
    int closeLPT()
            {
                     if (ioperm(0x378, 3, 0) < 0)
                            {
                                    perror("ioperm");
                                    exit (1);
                            }
                    return 1;
            }

    Et malheureusement aucun changement phisique des etats du port...


    Pourriez vous m'aider s'il vous plait.

    Je suis sous UBUNTU SERVER.

    et j'utilise gcc evidement.

    Merci

  2. #2
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Le code me semble bon. Il faudrait maintenant être sûr que l'adresse de base de ton port parallèle est effectivement celle-là. Tu en es certains ?

    Après on peut imaginer que le changement d'état est trop rapide pour être visible à l'oeil nu.

    Enfin, remettre en cause ton montage électronique (des fois que tu n'ais pas compté les broches à partir du bon côté par exemple).

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Points : 112
    Points
    112
    Par défaut reponse..
    Bonjour. merci pour ta reponse.

    Le port me semble etre le bon etant donné que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [artiom@server:/] $ dmesg | grep par
    [   14.745720] Booting paravirtualized kernel on bare hardware
    [   14.793924] PCI: Transparent bridge - 0000:00:1e.0
    [   21.010000] parport_pc 00:0a: reported by Plug and Play ACPI
    [   21.010000] parport0: PC-style at 0x378 (0x778), irq 7, dma 3 [PCSPP,TRISTATE,COMPAT,EPP,ECP,DMA]
    [   22.920000] lp0: using parport0 (interrupt-driven).
    [2451159.960000] ppdev: user-space parallel port driver
    Ensuite en ce qui conserne le montage, il es bon aussi etant donné que sous windows j'ai bien reussi a developper un petit soft qui permet de le controler avec la lib inout32.dll...

    Donc la je suis un peu perdu ca je ne sais vraiment plus ou regarder...

    ah oui un detail qui peut etre important : dans /dev/ de ma ubuntu j'ai pas de parport0.... c etrange ou ca peut etre normal?

    merci.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Par défaut [C] Problème de sortie port parallèle avec ioperm outb
    Vérifier ton montage électronique et l'adresse de ton port parallèle me semble effectivement les premières actions à entreprendre.
    Cependant, dans un HOWTO linux, j'ai lu que l'utilisation de la fonction ioperm() nécessitait les privilèges de "root".
    En concéquence, soit tu donnes les droits root à ton exécutable (chown root:root fichier), soit tu agis sur le suid (ex : chmod 8755 fichier) pour que lors du lancement ton exécutable il ait les droits de root.
    De plus, j'ai lu aussi sur une doc qu'il vallait mieux utilisé l'option -O2 ou -O3 pour éviter les messaventures.
    J'espère que cela t'aidera dans ton débuggage.

    @+

Discussions similaires

  1. Entrée/sortie port parallèle (db25)
    Par boombalabo dans le forum C#
    Réponses: 2
    Dernier message: 20/11/2011, 21h21
  2. Piloter un port parallèle.. avec VB
    Par kk1cp dans le forum VB.NET
    Réponses: 2
    Dernier message: 27/03/2010, 21h50
  3. envoi sur port parallèle avec VBA
    Par soeursourire dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/11/2008, 10h57
  4. Port parallèle avec Vista
    Par declencher dans le forum Langage
    Réponses: 2
    Dernier message: 14/10/2007, 12h54
  5. Ecrire sur port parallèle avec Delphi 5 sous XP
    Par gillou026 dans le forum Delphi
    Réponses: 3
    Dernier message: 22/12/2006, 20h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo