У меня есть устройство usb char, которое мне удалось связать с/dev/device0 с помощью usb skeleton 2.2 driver (только с несколькими комментариями, чтобы понять его). Теперь я должен написать приложение пользователя, которое будет отправлять и получать команды в виде символов ascii. Я могу отправлять команды с записью без проблем, но я не знаю, как правильно читать с устройства. Как я не знаю, как долго сообщение будет, я пытался что-то вроде этогоПочему чтение с устройства USB-устройства замораживается?
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv)
{
char *c, *ret;
int fd,err;
ret = malloc(1);
char *dev = "/dev/device0";
fd = open(dev, O_RDWR);
printf("fd: %d\n", fd);
if (fd == -1) {
printf("fopen() failed");
exit(1);
}
command = "command1";
write(fd, command, strlen(command));
while (read(fd, ret,1)!=EOF)
{
fprintf(stderr,"%c\n",ret);
}
close(fd);
return 0;
}
, но он не работает, он, кажется, тупиковой ситуации каким-то образом попасть в состояние очень похоже на это. Мне удалось найти, что количество чтений является случайным, обычно 3-6, а затем программа ждет (возможно, ждет данных с устройства, но я не уверен в этом), во время последней функции чтения wait_event_interruptible() в драйвере водителя Функция read() возвращает -512, а функция обратного вызова предпоследнего чтения не вызывается. Почему это происходит и как мне узнать, есть ли какие-либо данные, отправленные устройством?
[вздох] После успешного завершения чтения() и pread() возвращает неотрицательное целое число, указывающее количество байтов, считанных. В противном случае функции должны возвращать -1 и устанавливать errno для указания ошибки ' –