Domanda

ho un problema con libhid .

ho scoperto che ci sono 2 modi per accedere a 4 USB nascosto in Linux

1) librerie predefinite di Linux come input.h E hiddev.h E ...

2)usando libhid

ho trovato libhid un po' confuso e ho provato a usare input.h ma ho problemi con quello 2.

non so come ottenere informazioni sul mio dispositivo da Ubuntu

utilizzo open() per aprire il dispositivo

str="/dev/inpt/eventX" \\where X=0,1,...,7(I'm not sure about this)
open(str,O_RDWR)

quindi ottieni informazioni con ioctl

ioctl(fd,EVIOCGVERSION,&version);

ma mi dà ID prodotto e fornitore errati

Quindi cerco di usare Libhid ma ho avuto idea di come usare Libhid (o qualsiasi altra libreria) in Eclipse o Netbeans

puoi dirmi come hai compilato i tuoi codici qualsiasi IDE come Eclipse o netbeans o semplicemente usando terminale e gcc?O come lavorare con ioctl () e open ()?

tutto il mio codice di esempio:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ftw.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <errno.h>
#include <stdint.h>
#include <asm/types.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>
#include <linux/input.h>
#include <strings.h>


struct input_devinfo
{
        uint16_t bustype;
        uint16_t vendor;
        uint16_t product;
        uint16_t version;
};


int main(void) {
    //puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
    //usb_device ud;
    //int i=0;
    //string str;
    //str=char[100];
    //str="/dev/input/event0\n";

    printf("------------- start -----------------\n");
    char str[]="" ;
    int version=0;
    char c[16];
    char t;
    int i,fd;
    //for (i=0 ; i<8 ; i++)
    {
        //strcpy(c,str);
        //t=i-'0';
        //printf("salam5\n");
        //c[15]=t;

        //openning
        //open(str,O_RDONLY);//read and write
        if ((fd = open(str,O_RDWR)) < 0)
            perror("str open\n");
        else
            printf("%s opened successfully\n",str);


        ioctl(fd,EVIOCGVERSION,&version);
        printf("version = %d \n",version);
        printf("evdev driver version is %d.%d.%d\n",version >> 16, (version >> 8) & 0xff, version & 0xff);

        //geting info from device
        struct input_devinfo device_info;
        ioctl(fd,EVIOCGID,&device_info);
        printf("vendor 0x%04hx product 0x%04hx version 0x%04hx is on ?",
            device_info.vendor, device_info.product,
            device_info.version);
    }



    return EXIT_SUCCESS;
}
È stato utile?

Soluzione

Trovo un modo per compilare il mio codice in Eclipse

1 problema risolto

per compilare il tuo codice con GCC nel terminale dovresti definire libhid per GCC aggiungendo "-lhid" al tuo comando:gcc test_libhid.c -lhid

Se stai usando Eclipse e vuoi usare Libhid con esso dovresti aggiungere "-Lhid" al linker GCC per GCC potrebbe usare Libhid quando la compilazione del codice seguire i passaggi:

1) Sul pannello Explorer del progetto, R-click sul progetto Seleziona proprietà (ultima opzione) o seleziona il progetto e premi Alt+Invio

2)nel pannello di sinistra espandere "c/c++ build" e selezionare "impostazione"

3)nel lato destro selezionare la scheda "impostazione strumento".

4) dovresti vedere il compilatore GCC C, il linker GCC C e l'assemblatore GCC lì dentro.espandere il linker GCC C e selezionare Librerie

5)dopo aver selezionato nella parte destra dovresti vedere 2 riquadri:Libraries (-l) e percorso di ricerca della libreria (-l) nelle librerie (-l) Aggiungi "HID"

Nota:eclipse usa GCC per compilare i tuoi codici quando esegui questi passaggi eclipse aggiungi il parametro "-lhid" a gcc per consentirgli di riconoscere libhid.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top