• [^] # Re: Controller le port parallèle

    Posté par . En réponse au message Contrôler le port parallèle. Évalué à 2.

    J'ai vu plusieurs propositions pour utiliser les ioperm et inb/outb directement. NON. Sous Linux il y a le module "ppdev" qui gere le "device" /dev/parport0 (pour LPT1), /dev/parport2, etc...

    Exemple de prog de test pour controler le registre de donnees :

    static int init_parport()
    {
    int fd_pp, i;

    fd_pp = open("/dev/parport0", O_WRONLY);
    if (fd_pp < 0)
    {
    perror("open lp");
    return 0;
    }

    ioctl(fd_pp, PPCLAIM);
    i = PARPORT_MODE_COMPAT;
    ioctl(fd_pp, PPSETMODE, & i);
    i = IEEE1284_MODE_COMPAT;
    ioctl(fd_pp, PPNEGOT, & i);

    return fd_pp;
    }


    void send_parport(int fd_pp, unsigned char data)
    {
    ioctl(fd_pp, PPWDATA, & data);
    }

    /* Et pour relacher le port :
    unsigned char data;

    data = 0;
    ioctl(parport_fd, PPWDATA, & data);
    ioctl(parport_fd, PPRELEASE);

    return close(parport_fd);
    */


    Evidemment, cet exemple est facilement adaptable pour controler les 2 autres registres (remplacer DATA par STATUS et CONTROL). Pour modifier ce source, voir l'API definie dans ppdev.h de include/linux/ . Dans le source, on utilise le mode de base du port // : tous les autres modes sont dispo (en particupier EPP).

    Sous windows, j'ai pas trouve mieux que d'utiliser inpout32.dll qui permet de se ramener au niveau inb/outb a la main. Peut-etre qu'une ecriture toute bete sur le "fichier" "LPT1" suffit.