Я новичок в программировании драйверов в целом, а также в USB. Однако мне удалось написать драйвер для Windows CE (6.0), и у меня также был доступ к USB-Sniffer для чтения всего трафика между хостом и устройством.
Проблема теперь возникает на некоторых платах (2 из 3, которые у меня есть):
Если на устройстве нет данных для отправки, и я запускаю прерывание при передаче, устройство отправляет ACK.
Пока это ожидается. Однако что-то (я полагаю, либо USB-контроллер, либо WinCE), кажется, автоматически выдает больше IN-Transfers (3 на одной плате, 4 на другой), и я получаю последующее подтверждение. Это пока не проблема.
Но следующий IN-Transfer также приведет к ACK, независимо от того, есть ли данные для отправки или нет, я получаю ноль байтов в драйвере.
Тем не менее, когда я смотрю на USB-Sniffer, была отправлена правильная телеграмма, однако автоматически отправляются еще 2 IN-трансфера, которые отвечают ACK. Похоже, данные перезаписываются ACK.
Я перепробовал все, что приходило мне в голову: перезагрузить канал, закрыть и снова открыть соединение, но, похоже, ничего не получилось. Перезагрузка трубы решает проблему примерно в половине случаев. У меня действительно закончились идеи для решения проблемы.
Есть ли способ указать USB-контроллеру (или WinCE или тому, что вызывает такое поведение) всегда выполнять только одну передачу?
EDIT
Оказывается, это была проблема с потоками. К сожалению, я не был тем, кто это исправил, и у меня нет доступа к рабочему решению, поэтому я не могу дать более подробную информацию.