Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57

Чтение с USB устройства

11.04.2024, 07:30. Показов 3441. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Осваиваю работу с USB устройствами. При попытке чтения записи с осциллографа выдает: LIBUSB_ERROR_IO.
Функция чтения.
C++ (Qt)
1
2
3
4
5
6
ret = libusb_interrupt_transfer (dev_handle, 0x02, cmd, 512,&Transfer, 200);//sizeof (cmd)
    if (ret == 0 && Transfer == sizeof (cmd)) {
        printf ("Запись прошла успешно");
    } else {
        printf ("Ошибка записи  %d! :", ret);printf (libusb_error_name(ret));printf ("\n");
    }
Подноготная осциллографа:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Bus 003 Device 003: ID 049f:505a Compaq Computer Corp. Linux-USB "CDC Subset" Device, or Itsy (experimental)
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x049f Compaq Computer Corp.
  idProduct          0x505a Linux-USB "CDC Subset" Device, or Itsy (experimental)
  bcdDevice           24.30
  iManufacturer           1 Linux 3.2.35 with s3c-hsudc
  iProduct                2 Gadget Serial v2.4
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0020
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          3 
    bmAttributes         0xc0
      Self Powered
    MaxPower                2mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
Попробовал считать с USB клавиатуры по 81 конечной точке получилось по 82 такая же ошибка.
Клавиатура:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Bus 003 Device 002: ID c0f4:01b0 USB usb keyboard
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0xc0f4 
  idProduct          0x01b0 
  bcdDevice            1.10
  iManufacturer           1 USB
  iProduct                2 usb keyboard
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x003b
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      54
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      50
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
Предполагаю что я что-то не донастроил.

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
int main () {
    int i = 0;
    int ret = 1;
    int Transfer = 0;
    ssize_t cnt;
    unsigned char cmd [64] = {0x5A, 0x00, 0x01, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x01, 0xF4, 0x87}; // 64 第 上述 第 3 获取 获取 到 的 缓冲区 大小
 
    struct libusb_device_descriptor desc;
    libusb_device ** devs;
 
    libusb_context * ctx = NULL;
 
    ret = libusb_init (NULL);
    if (ret <0) {
        fprintf (stderr, "не удалось инициализировать libusb \ n");
        return 1;
    }
 
    dev_handle = libusb_open_device_with_vid_pid (NULL, 0x049F, 0x505A);
    if (dev_handle == NULL) {
        perror ("Невозможно открыть устройство \n");
        return 1;
    } else {
        printf ("Устройство открыто \n");
    }
 
    if (libusb_kernel_driver_active (dev_handle, 0) == 1) {
        printf ("Активный драйвер ядра \n");
        if (libusb_detach_kernel_driver (dev_handle, 0) == 0) {
            printf ("драйвер ядра отключен! \n");
        }
    }
 
    ret =libusb_set_configuration(dev_handle, 1);
    if (ret <0) {
        perror ("Cannot configuration Interface \n");
        return 1;
    }
 
    ret = libusb_claim_interface (dev_handle, 0);
    if (ret <0) {
        perror ("Cannot Claim Interface \n");
        return 1;
    }
 
    ret = libusb_interrupt_transfer (dev_handle, 0x02, cmd, 512,&Transfer, 200);//sizeof (cmd)
    if (ret == 0 && Transfer == sizeof (cmd)) {
        printf ("Запись прошла успешно");
    } else {
        printf ("Ошибка записи  %d! :", ret);printf (libusb_error_name(ret));printf ("\n");
    }
 
    char buf [1024] = {0};
    ret = libusb_interrupt_transfer (dev_handle, 0x81, buf, 512, &Transfer, 2000);  //sizeof (buf)
    if (ret != 0) {
        printf ("не удалось прочитать %d   ",ret);printf (libusb_error_name(ret));printf ("\n");
 
    }else{
       printf ("Прилетело %d %d \n",ret,Transfer);
       printf("%d", buf[0]);
    }
 
    ret = libusb_release_interface (dev_handle, 0);
    if (ret != 0) {
        printf ("Невозможно закрыть интерфейс!  ");
    } else {
        printf ("Закрыт интерфейс! \n");
    }
    libusb_close (dev_handle);
    libusb_exit (ctx);
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2024, 07:30
Ответы с готовыми решениями:

Чтение данных от устройства usb
Подскажите, может у кого есть простенькая программа на С для передачи и чтения из usb устройства в качестве примера?

Чтение/запись на устройства
Программа отправки ussd-команд(написанная мной) выглядит так: #include &lt;stdio.h&gt; #include &lt;unistd.h&gt; #include &lt;string.h&gt; ...

Usbmon и мониторинг драйвера usb-устройства
Здравствуйте! Подскажите, пожалуста, как используя usbmon я могу узнать какое usb-устройство обрабатывается каким драйвером?

22
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
13.04.2024, 21:17  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну хотя бы данные там углядеть можно? А то с них станется...
Логика в протоколе прослеживается.
вот кусок может кому интересно:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
out
 
00000000 53 02 00 01 56 S . . . V
 
in
 
00000000 53 D2 00 81 01 06 01 00 00 00 00 00 00 00 00 06 00 00 00 01 00 00 00 00 02 00 00 00 00 18 00 00 00 00 00 00 00 00 00 A0 86 01 00 00 00 00 S Ò .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   † . . . . .
 
0000002E 00 00 A0 72 4E 18 09 00 00 20 A1 07 00 00 00 00 00 00 00 00 00 01 00 00 00 20 A1 07 00 00 00 00 00 00 00 00 32 00 CE FF 20 A1 07 00 00 00 . .   r N . . . . ¡ . . . . . . . . . . . . . . ¡ . . . . . . . . . 2 . Î ÿ ¡ . . . .
 
0000005C 00 00 00 00 00 00 00 01 00 01 00 00 00 80 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 20 A1 07 00 00 00 . . . . . . . . . . . . . € . . . . . . ÿ ÿ ÿ ÿ . . . . . . . . . . . . . . . . ¡ . . . .
 
0000008A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 A1 07 00 00 00 00 00 0F 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 . . . . . . . . . . . . . . . . . . ¡ . . . . . . . . . . . . . . . . . . . . . . . . . .
 
000000B8 08 0F 01 05 0F 00 02 00 00 00 01 00 02 00 03 00 04 00 06 00 07 00 0A 00 08 00 29 01 80 . . . . . . . . . . . . . . . . . . . . . . . . . . ) . €
 
out
 
00000000 53 04 00 12 01 01 6B S . . . . . k
 
in
 
00000000 53 04 00 92 01 01 EB S . . ’ . . ë
53 магическа цифра. потом количество байт, затем данные последний байт скорее всего контрольная сумма.
0
Windows must die
613 / 885 / 105
Регистрация: 23.11.2021
Сообщений: 5,196
Записей в блоге: 19
13.04.2024, 21:50
COKPOWEHEU, во взаимодействии с китайскими продуХтами, я понял, что там все очень-очень плохо: а) они - упоротые вантузоиды, б) они вообще не любят писать документацию, в) если и пишут, то исключительно на китайском…
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,083
14.04.2024, 18:27
Цитата Сообщение от Vlad_V9 Посмотреть сообщение
Логика в протоколе прослеживается.
вот кусок может кому интересно:
Тут лучше создайте новую тему с соответствующим названием вроде "присоединяйтесь к реверсу протокола от ???" (я не знаю точную марку вашей железяки)
Цитата Сообщение от Eddy_Em Посмотреть сообщение
COKPOWEHEU, во взаимодействии с китайскими продуХтами, я понял, что там все очень-очень плохо: а) они - упоротые вантузоиды, б) они вообще не любят писать документацию, в) если и пишут, то исключительно на китайском…
Не знаю как с продуктами вообще, но у wch относительно неплохо. Они перевели даже некоторые надписи на картинках в документации. А с того момента, как я написал утилиту прошивки через бутлоадер, можно и экспериментировать спокойно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.04.2024, 18:27

Написание USB драйверов под различные устройства
Доброе времени суток! Ищу людей которые занимались написанием USB драйверов под различные устройства в OS Linux. Интересует весь процесс и...

Организация записи в базу данных из устройства, подключенного по USB
Здравствуйте! Подскажите, как можно реализовать связку USB - база данных. Задача такая: Есть устройство которое подключено к USB порту...

Прямое чтение блочного устройства без буфера чтения
Добрый день. Имеется usb-storage устройство, на котором 3 блока по 4096 байт. в этих блоках разные данные, и устройство по-разному...

USB устройства
Как можно в С++ перехватить USB устройство, что бы его вначале определяла программа и при этом ОС не выполняла никаких действий(не...

Событие подключения Usb устройства
Подскажите, плиз, есть ли спецальное событие подключение usb устройства. Цель поймать подключение флешки, серийный номер которой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru