Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Radikal_78
56 / 56 / 2
Регистрация: 20.11.2016
Сообщений: 140
1

Не могу прочитать данные от HID устройства

29.11.2019, 23:48. Просмотров 196. Ответов 5

Здравствуйте уважаемые гуру и сэнсеи форума!)

Изучаю USB по классу HID. Нашел в сети примеры работы с использованием функций HID API. Написал свою программу на VisualStudio. Моя программа находит нужное устройство по моим PID и VID. С помощью функций HidD_SetOutputReport и HidD_SetFeature происходит пересылка данных моему контроллеру STM32F407 (причем функция WriteFile не работает)
Контроллер принимает данные от компьютера и зажигает соответствующий светодиод. С отправкой данных от компа к устройству проблем нет.

А вот принять данные от STM32F407 никак не получается. Все три функции HidD_GetOutputReport , HidD_GetFeature и ReadFile не работают. Причем STM32F407 передает данные на комп, которые я могу увидеть с помощью программ мониторинга.

Что я делаю не так?(( Кто знает как решить эту проблему?

Добавлено через 8 минут
дескриптор репорта для STM32F407
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
  /* USER CODE BEGIN 0 */
  
   0x06, 0x00, 0xff,              // USAGE_PAGE (Generic Desktop)
 
    0x09, 0x01,                    // USAGE (Vendor Usage 1)
 
    0xa1, 0x01,                    // COLLECTION (Application)
 
    0x85, 0x01,                    //   REPORT_ID (1)
 
    0x09, 0x01,                    //   USAGE (Vendor Usage 1)
 
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
 
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
 
    0x75, 0x08,                    //   REPORT_SIZE (8)
 
    0x95, 0x01,                    //   REPORT_COUNT (1)
 
    0xB1, 0x82,                    //   FEATURE (Data,Var,Abs,Vol)
 
    0x85, 0x01,                    //   REPORT_ID (1)
 
    0x09, 0x01,                    //   USAGE (Vendor Usage 1)
 
    0x91, 0x82,                    //   OUTPUT (Data,Var,Abs,Vol)
 
 
 
    0x85, 0x02,                    //   REPORT_ID (2)
 
    0x09, 0x02,                    //   USAGE (Vendor Usage 2)
 
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
 
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
 
    0x75, 0x08,                    //   REPORT_SIZE (8)
 
    0x95, 0x01,                    //   REPORT_COUNT (1)
 
    0xB1, 0x82,                    //   FEATURE (Data,Var,Abs,Vol)
 
    0x85, 0x02,                    //   REPORT_ID (2)
 
    0x09, 0x02,                    //   USAGE (Vendor Usage 2)
 
    0x91, 0x82,                    //   OUTPUT (Data,Var,Abs,Vol)
 
 
 
    0x85, 0x03,                    //   REPORT_ID (3)
 
    0x09, 0x03,                    //   USAGE (Vendor Usage 3)
 
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
 
    0x25, 0x01,                                      //   LOGICAL_MAXIMUM (255)
 
    0x75, 0x08,                    //   REPORT_SIZE (8)
 
    0x95, 0x01,                    //   REPORT_COUNT (1)
 
    0xB1, 0x82,                    //   FEATURE (Data,Var,Abs,Vol)
 
    0x85, 0x03,                    //   REPORT_ID (3)
 
    0x09, 0x03,                    //   USAGE (Vendor Usage 3)
 
    0x91, 0x82,                    //   OUTPUT (Data,Var,Abs,Vol)
 
 
 
    0x85, 0x04,                    //   REPORT_ID (4)
 
    0x09, 0x04,                    //   USAGE (Vendor Usage 4)
 
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
 
    0x25, 0x01,                                      //   LOGICAL_MAXIMUM (255)
 
    0x75, 0x08,                    //   REPORT_SIZE (8)
 
    0x95, 0x01,                    //   REPORT_COUNT (1)
 
    0xB1, 0x82,                    //   FEATURE (Data,Var,Abs,Vol)
 
    0x85, 0x04,                    //   REPORT_ID (4)
 
    0x09, 0x04,                    //   USAGE (Vendor Usage 4)
 
    0x91, 0x82,                    //   OUTPUT (Data,Var,Abs,Vol)
 
 
    0x85, 0x91,                    //   REPORT_ID (6)
 
    0x09, 0x06,                    //   USAGE (Vendor Usage 6)
 
    0x75, 0x08,                    //   REPORT_SIZE (8)
 
    0x95, 0x02,                    //   REPORT_COUNT (2)
    
    //0xB1, 0x80,                     //  FEATURE
    0x81, 0x82,                    //   INPUT (Data,Var,Abs,Vol)
  /* USER CODE END 0 */
  0xC0    /*     END_COLLECTION              */
};
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2019, 23:48
Ответы с готовыми решениями:

Устройства HID
Доброго времени суток,ребята. Такая проблема у меня.. Я случайно отключил Устройства HID а именно...

HID Устройства
это USB термометр :) Как теперь с него прочитать температуру? Дайте плиз направления!

Не могу прочитать данные
Здравствуйте. Не могу прочитать данные после второго ввода (после enter a phrase). Объясните...

5

Radikal_78
56 / 56 / 2
Регистрация: 20.11.2016
Сообщений: 140
29.11.2019, 23:55  [ТС] 2
скрин с программы SimpleHIDWrite.exe
0
Миниатюры
Не могу прочитать данные от HID устройства  
Radikal_78
56 / 56 / 2
Регистрация: 20.11.2016
Сообщений: 140
30.11.2019, 11:41  [ТС] 3
продолжаю копаться...

нашел в инете один пример в котором используются функции HidD_SetFeature и HidD_GetFeature, рассматривая в нем параметры функции CreateFile обратил внимание чту автора написано
C
1
hFile=CreateFile(DetailData->DevicePath, [B]GENERIC_READ | GENERIC_WRITE[/B], FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
у меня же в программе вместо GENERIC_READ | GENERIC_WRITE был прописан 0, однако при моей попытке вписать у себя
эти GENERIC_READ | GENERIC_WRITE, прога перестала открывать мое устройство. Пришлось изучить эти атрибуты. Эти атрибуты оказались составными и состояли из комбинации следующих атрибутов
FILE_APPEND_DATA
FILE_WRITE/READ_ATTRIBUTES
FILE_WRITE/READ_DATA
FILE_WRITE/READ_EA
STANDARD_RIGHTS_WRITE/READ
SYNCHRONIZE

я начал добавлять атрибуты по одному и выяснил что когда добавляю FILE_READ_DATA устройство у меня перестает открываться. С чего бы это?....
0
locm
2286 / 1001 / 127
Регистрация: 28.10.2011
Сообщений: 3,378
Записей в блоге: 6
30.11.2019, 12:21 4
Цитата Сообщение от Radikal_78 Посмотреть сообщение
дескриптор репорта для STM32F407
Попробуйте такой.
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
const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
  {
    0x06, 0x00 , 0xFF,          // Usage_page (vendor Defined Page 1)
    0x09, 0x01,                 // Usage (vendor Usage 1)
    0xA1, 0x01,                 // Collection (Application)
 
    0x09, 0x00,                 // Usage (undefined)
    0x15, 0x00,                 // Logical_minimum (0)
    0x25, 0xFF,                 // Logical_maximum (255)
    0x75, 0x08,                 // Report_size (8)
    0x95, 0x01,                 // Report_count
    0x81, 0x02,                 // Input(data , Var , Abs)
 
    0x09, 0x00,                 // Usage (undefined)
    0x15, 0x00,                 // Logical_minimum (0)
    0x25, 0xFF,                 // Logical_maximum (255)
    0x75, 0x08,                 // Report_size (8)
    0x95, 0x01,                 // Report_count
    0x91, 0x02,                 // Output(data , Var , Abs)
 
    0x09, 0x00,                 // Usage (undefined)
    0x15, 0x00,                 // Logical_minimum (0)
    0x25, 0xFF,                 // Logical_maximum (255)
    0x75, 0x08,                 // Report_size (8)
    0x95, 0x01,                 // Report_count
    0xB1, 0x02,                 // Feature(data , Var , Abs)
 
    0xC0                        // End Collection
};
Цитата Сообщение от Radikal_78 Посмотреть сообщение
STM32F407
В архиве прошивка для этого МК.
Она для платы.
Не могу прочитать данные от HID устройства


Если у вас другая, измените в main.c порты светодиода и кнопки.
0
Вложения
Тип файла: zip USB_HID_STM32F407.zip (532.3 Кб, 5 просмотров)
Radikal_78
56 / 56 / 2
Регистрация: 20.11.2016
Сообщений: 140
30.11.2019, 16:12  [ТС] 5
locm, спасибо. Буду разбираться. А программу для компа на каком языке писали?
0
locm
2286 / 1001 / 127
Регистрация: 28.10.2011
Сообщений: 3,378
Записей в блоге: 6
01.12.2019, 01:12 6
Цитата Сообщение от Radikal_78 Посмотреть сообщение
А программу для компа на каком языке писали?
PureBasic.
В архиве есть исходники.
0
01.12.2019, 01:12
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2019, 01:12

ST32F4 не могу прочитать данные из встроенной flash
Здравствуйте, ест такая задача - записать файл во внутреннюю память и считывать его с помощью...

Проблема с GUI - не могу прочитать файлы и данные
Доброе время суток! Необходимо написать функцию по поиску экстремумов (мин и макс), сделать к нему...

В диспетчере устройств нет вкладки Устройства HID
Ребята помогите в диспетчере устройств нет вкладки Устройства HID (Human interface device) и не...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.