Andre Savelev
Так, вижу, что USBD_CUSTOM_HID_SendReport может вернуть USBD_BUSY
А внутри самой этой функции вот так:
——————-
uint8_t USBD_CUSTOM_HID_SendReport(USBD_HandleTypeDef *pdev,
uint8_t *report,
uint16_t len)
{
USBD_CUSTOM_HID_HandleTypeDef *hhid = (USBD_CUSTOM_HID_HandleTypeDef *)pdev->pClassData;
if (pdev->dev_state == USBD_STATE_CONFIGURED)
{
if (hhid->state == CUSTOM_HID_IDLE)
{
hhid->state = CUSTOM_HID_BUSY;
USBD_LL_Transmit(pdev, CUSTOM_HID_EPIN_ADDR, report, len);
}
else
{
return USBD_BUSY;
}
}
return USBD_OK;
}
——————-
У меня есть
hUsbDeviceFS->pClassData
Наверное можно написать:
USBD_CUSTOM_HID_HandleTypeDef *hhid = (USBD_CUSTOM_HID_HandleTypeDef*) (hUsbDeviceFS.pClassData);
а потом проверять
if (hhid->state == CUSTOM_HID_IDLE)
Никогда не работал с HID, но, судя по всему, USBD_CUSTOM_HID_SendReport для HID нечто вроде CDC_Transmit_FS для CDC. Я бы не стал вмешиваться в библиотечную функцию, это может доставить много неудобств. На мой взгляд лучше проверку вынести "выше" и проверять возвращаемое значение именно функцией USBD_CUSTOM_HID_SendReport и, в случае если оно USBD_BUSY сделать паузу и выполнить повтор.