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