У меня есть дешевый USB-RFID-Reader. Этот читатель является HID-клавиатурой (без кнопок). Мне нужно захватить вывод читателя, не записывая его на любую консоль. Я нашел этот код здесь: https://stackoverflow.com/a/7672324/4500123Не удалось прочитать USB-HID RFID-Reader с C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <dirent.h>
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/select.h>
#include <sys/time.h>
#include <termios.h>
#include <signal.h>
int main(int argc, char* argv[])
{
struct input_event ev[64];
int fevdev = -1;
int result = 0;
int size = sizeof(struct input_event);
int rd;
int value;
char name[256] = "Unknown";
char *device = "/dev/input/event3";
fevdev = open(device, O_RDONLY);
if (fevdev == -1) {
printf("Failed to open event device.\n");
exit(1);
}
result = ioctl(fevdev, EVIOCGNAME(sizeof(name)), name);
printf ("Reading From : %s (%s)\n", device, name);
printf("Getting exclusive access: ");
result = ioctl(fevdev, EVIOCGRAB, 1);
printf("%s\n", (result == 0) ? "SUCCESS" : "FAILURE");
while (1)
{
if ((rd = read(fevdev, ev, size * 64)) < size) {
break;
}
value = ev[0].value;
if (value != ' ' && ev[1].value == 1 && ev[1].type == 1) {
printf ("Code[%d]\n", (ev[1].code));
}
}
printf("Exiting.\n");
result = ioctl(fevdev, EVIOCGRAB, 1);
close(fevdev);
return 0;
}
Этот код должен работать. У меня это работает на моем RaspberryPI без проблем. Теперь я пытаюсь заставить этот код работать на моем планшете Android (с корнем). Но очень часто я пропускаю буквы или код неполный.
Если я пишу в текстовый файл, все письма передаются без проблем. Но с кодом он будет работать неправильно.
Что я могу сделать, чтобы узнать о проблеме? Это проблема времени?
Большое спасибо за помощь! Я принял этот хороший ответ и отправил измененный код в качестве ответа (я надеюсь, что все в порядке) – Blondie