Сделал композитное устройство.
Воспользовался статьёй
Composite CDC+MSC
Всё бы хорошо, но в зависимости от назначения endpoint-ов работает
на платформе STM32F4xx очереди FIFO настраиваются по-другому.
Нашёл другую
полезную ссылку: тоже не помогло.
Мой код лежит
здесь
работает очень просто
CDC - работает почти как эхо. Подключаешь терминал -и на любое нажатие клавиши в ответ получаешь
"aba01 "
HID - раз в секунду отправляет
"HID " под линуксом это видно
cat /dev/hidraw0
В зависимости от назначения Endpoint
#if 0
#define CUSTOM_HID_EPIN_ADDR 0x82U
#define CUSTOM_HID_EPOUT_ADDR 0x02U
#define CDC_IN_EP 0x81U /* EP1 for data IN */
#define CDC_OUT_EP 0x01U /* EP1 for data OUT */
#define CDC_CMD_EP 0x83U /* EP2 for CDC commands */
#else
#define CUSTOM_HID_EPIN_ADDR 0x81U
#define CUSTOM_HID_EPOUT_ADDR 0x01U
#define CDC_IN_EP 0x82U /* EP1 for data IN */
#define CDC_OUT_EP 0x02U /* EP1 for data OUT */
#define CDC_CMD_EP 0x83U /* EP2 for CDC commands */
#endif
Работает либо HID либо CDC. Магический номер ENDPOINTa -
0x81 - он работает
Если заменить
HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1/*Количество FIFO*/, 0x80);
на
HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 2/*Количество FIFO*/, 0x80);
По совету
StackOverflow
Ситуация меняется.
Работает либо HID либо CDC. Но уже с ENDPOINT -
0x82
Как заставить работать оба ендпоинта - не понимаю.
HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 2/*Количество FIFO*/, 0x40);
Тоже не помогает.