Допустим мой девайс имеет две Bulk конечные точки на вход и выход. Обзовем из BulkIN, BulkOUT и соответствуют дескрипторы конечных точек BulkIN_ED, BulkOUT_ED Я их соединяю в список и цепряю к HcBulkHeadED. Получаю HcBulkHeadED указывает на BulkIN_ED, BulkiIN_ED.NextED указывает на BulkOUT_ED, а BulkiOUT_ED.NextED=0; Далее я планирую цеплять трансфер дескрипторы к нужным дескрипторам конечных точек и ожидаю, что хост контроллер будет бегать по ED и передавать данные в соответствии с TD.
Теперь к сути вопроса. Девайс может как иметь данные для передачи хосту так может и не иметь. Если он не имеет данных, я делаю TD для IN транзакции и цепляю ее к BulkIN_ED, хост ее запускает, но т.к. девайс не имеет данных для передачи, эта транзакция висит не исполненная. В это время возникает необходимость сделать OUT транзакцию, я создаю TD и цепляю ее к BulkOUT_ED. Хост исполнит транзакцию OUT несмотря на то, что по другой EP есть незавершенная IN ? Если исполнит, и в ответ на нее у девайса появятся данные для передачи, то хост примет эти данные в незавершенную IN или надо ее как-то убирать и делать новую?
|