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

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

11.04.2024, 07:30. Показов 2686. Ответов 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
Сообщений: 55
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
828 / 834 / 102
Регистрация: 23.11.2021
Сообщений: 4,851
Записей в блоге: 15
13.04.2024, 21:50
COKPOWEHEU, во взаимодействии с китайскими продуХтами, я понял, что там все очень-очень плохо: а) они - упоротые вантузоиды, б) они вообще не любят писать документацию, в) если и пишут, то исключительно на китайском…
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru