linux usb-hid: добавить библиотеку libhid в eclipse(C++) или IDE NetBeans, или в собственный input.h или hiddev.h?
У меня проблема с libhid.
я обнаружил, что есть 2 способа 4 доступа к USB-HID в Linux
1) стандартные библиотеки linux, такие как input.h и hiddev.h и...
2) используя libhid
я нашел libhid немного запутанным и попытался использовать input.h, но у меня проблема с этим 2.
я не знаю, как получить информацию о моем устройстве из Ubuntu
я использую open(), чтобы открыть устройство
str="/dev/inpt/eventX" \\where X=0,1,...,7(I'm not sure about this)
open(str,O_RDWR)
тогда получите информацию с ioctl
ioctl(fd,EVIOCGVERSION,&version);
но это дает мне неправильные поставщики и идентификаторы продуктов
Затем я пытаюсь использовать libhid, но знал, как использовать libhid (или любую другую библиотеку) в Eclipse или NetBeans
Можете ли вы сказать мне, как вы скомпилировали свои коды в любой IDE, например, eclipse или netbeans или просто используя терминал и gcc? или как работать с ioctl() и open()?
весь мой пример кода:
#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;
}
1 ответ
Я нахожу способ скомпилировать мой код в затмении
1 проблема решена
чтобы скомпилировать свой код с GCC в терминале, вы должны определить libhid для GCC, добавив "-lhid" в свою команду: gcc test_libhid.c -lhid
если вы используете eclipse и хотите использовать libhid с ним, вы должны добавить "-lhid" к компоновщику gcc, чтобы gcc мог использовать libhid при компиляции вашего кода, следуя инструкциям:
1) на панели проводника проекта, R-щелкните на свой проект, выберите свойства (последний вариант) или выберите свой проект и нажмите Alt + Enter
2) в левой панели разверните "c/ C++ build" и выберите "настройка"
3) в правой части выберите вкладку "Настройка инструмента"
4) вы должны увидеть компилятор GCC C, компоновщик GCC C и ассемблер GCC. разверните GCC C компоновщик и выберите библиотеки
5) после выбора в правой части вы должны увидеть 2 поля: Библиотеки (-l) и Путь поиска библиотеки (-L) в разделе Библиотеки (-l) добавьте "hid"
примечание:eclipse использует GCC для компиляции ваших кодов, когда вы выполняете эти шаги. eclipse добавляет параметр "-lhid" в gcc, чтобы он мог распознавать libhid.