2014-10-23 3 views
0

Так что я относительно новичок в USB и PyUSB. Я пытаюсь установить связь с устройством Bluetooth с помощью PyUSB. Чтобы инициализировать его, мне нужно отправить команду и прочитать некоторые данные с устройства. Я делаю это с использованием dev.write(0x02, msg) и ret = dev.read(0x81, 0x07). Я знаю структуру команд и формат успешного ответа. Ответ должен иметь 7 байт, но я только вернусь 2.PyUSB читает несколько кадров из массового переноса с неизвестной длиной

Существует эталонная программа для этого устройства, которая работает только на окнах. Я запустил это и использовал USBPcap/wireshark для отслеживания трафика. Из этого я вижу, что после отправки моей команды устройство несколько раз отвечает с ответом на 2 байта, а затем в конечном итоге с полным ответом на 7 байтов. Я выполняю работу python на малине Pi, поэтому я не могу контролировать трафик так же легко.

Я полагаю, что проблема связана с ожиданием чтения 7 байтов и последующим возвратом результата после достижения максимального времени ожидания без получения последующих ответов. Я могу установить байты в 2 и сделать несколько чтений, но я не знаю, было ли в сообщении больше байтов, которые мне не хватает. Итак, я ищу способ проверить длину сообщения в буфере, прежде чем запрашивать чтение, поэтому я могу указать размер.

Кроме того, есть ли буфер или что-нибудь, что нужно очистить, чтобы убедиться, что я читаю следующее сообщение. Кажется, что независимо от того, сколько раз я запускаю команду чтения, я получаю тот же ответ.

ответ

0

Решил мою собственную проблему. После запуска моего кода на полной машине linux, захватив данные и сравнив их с трассой wirehark, я взял приложение Windows, я понял, что длина чтения не была проблемой. Результаты были очень похожими, и приложение Windows фактически запрашивало 4096 байт вместо 2 или 7, и устройство просто отдавало все, что у него было. Проблема на самом деле связана с тем, что мое сообщение Tx не было в правильном формате, прежде чем оно было отправлено.