• # Idem

    Posté par (site web personnel) . En réponse au message driver cx82xx et infrarouge (IR). Évalué à 3.

    Je suis passés par les meme questions que toi mais la difference c'est que j'ai trouvé tout seul :)
    Donc
    Je vais commencer par la fin apres le debut puis le milieu (je sais je suis tordu)
    Donc dire que lirc configurer tout simplement franchement j'ai essayé de le faire marcher longtemps avant de.......abandonner!
    Les touches codées en dur?
    Ben voui c'est la vie ils savent pas trop comment faire autrement, si t'as une idée propose!
    Enfin bon il est excessivement facile de rajouter des touches (par cotrne faut rajouter un printk ou le decommenter je sais plus pour savoir à quel code la touche correspond), vu la structure.

    Pour surveiller les evenements c'est avec un /dev/input qui correspond
    Voici un code d'exemple
    #define __KERNEL_STRICT_NAMES
    #define _GNU_SOURCE
    #include <linux/input.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>

    int main() {
    int pid;
    struct input_event evenement;
    /*
    for(pid=0;pid>=0;pid++) {
    char *path;
    asprintf(&path, "/dev/input/event%d", pid);
    printf("%s\n", path);
    int fd=open(path, O_RDONLY);
    if(fd<0) {
    perror("Open input device");
    return -1;
    }
    char *buf=malloc(512);
    ioctl(fd, EVIOCGNAME(512), buf);
    printf("%s\n", buf);
    close(fd);
    free(path);
    free(buf);
    }*/
    int fd=open("/dev/input/event4", O_RDONLY);
    ioctl(fd, EVIOCGRAB, 1);
    while(1) {
    read(fd, &evenement, sizeof(evenement));
    switch(evenement.code) {
    default:
    printf("time (s): %d\ntype: %d\ncode: %d\nvalue: %d\n", evenement.time.tv_sec,
    evenement.type,
    evenement.code,
    evenement.value);
    break;
    }
    }
    return 0;
    }

    Le code en commentaire permet de detecter les devices qui existent et de donner leur nom (c'est aussi possible par /sys mais c'est moins drole :)
    Apres on a le open bon ben lui c'est pas compliqué (faut peut être changer le device). Le ioctl qui n'est pas obligatoire permet de verouiller le périphérique, càd qu'il n'est utilisé par personne d'autre et qu'il n'emule plus un clavier (comme ca on peut utiliser la telecommande sans se faire chier avec une appli en arriere plan pendant qu'on fait autre chose sur une appli devant)
    Et finalement dans le switch evenement.code on fait les cases pour les différentes touches (les define sont dans /usr/include/linux/input.h, regarde dans cx88-ir.c (de mémoire) pour connaitre les codes qu'il renvoie (et aussi pour en ajouter/les corriger))

    Voila je crois que j'ai rien oublié
    Ah si quand meme pour lirc si t'y tiens vraiment tu prends le driver devinput pour pouvoir etre compatible avec le driver la