Цитата(Golikov A. @ Aug 26 2015, 19:39)

64 байта - граница пакета, должна быть снабжена пустым пакетом с 0 данными, может дело в этом?
Не совсем понял: т.е., чтобы отослать 64 байта, надо отослать 65 с последним нулевым? Или в 64 байтах последний болжен быть нулевой?
Хорошо, давайте разбираться детально

Вот есть такой код отправки ответа:
Код
#define buf_size 8
uint8_t buf[buf_size];
static uint8_t USBD_HID_DataOut (void *pdev, uint8_t epnum) {
uint16_t USB_Rx_Cnt;
uint8_t i = 0;
/* Get the received data buffer and update the counter */
USB_Rx_Cnt = ((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].xfer_count; // pointer to usb packet
if(USB_Rx_Buffer[1] == 0x01) {
TM_DISCO_LedOn(LED_GREEN);
}
else if(USB_Rx_Buffer[1] == 0x00) {
TM_DISCO_LedOff(LED_GREEN);
}
for(i = 0; i<buf_size; i++) buf[i] = i;
TM_USB_HIDDEVICE_SendCustom(buf, buf_size);
/* Prepare Out endpoint to receive next packet */
DCD_EP_PrepareRx(pdev, HID_OUT_EP, USB_Rx_Buffer, MAX_DATA_LENGTH);
return USBD_OK;
}
Т.е., в ответ на прием пакета я отправляю 8 байт со счетчиком внутри.
TM_USB_HIDDEVICE_SendCustom() - это просто обертка над USBD_HID_SendReport(&USB_OTG_dev, buff, count).
Я ожидаю, что на пк примется этот 8-байтный ответ, однако ничего не принимается. Смотрим сниффером что получается:
Нажмите для просмотра прикрепленного файлаОтветы приходят (правда почему-то только с 3-го раза после включения девайса), длина 8 байт, вроде все как заказывали.
Смотрим како-нить пакетик:
Нажмите для просмотра прикрепленного файлаСниффер говорит что пакет принят успешно.
Однако, принимающая прога на компе в упор ничего не видит.
Вот репу уже сломал, прям руки опускаются. И что-то мне подсказывает что дело, скорее всего, в дескрипторах. Вроде я их пилил-пилил, но может чего не допилил. Посмотрите опытным взглядом:
Нажмите для просмотра прикрепленного файлаТам по идее заложено 64 байта туда, 64 байта обратно и все.