Libusb Java - асинхронное чтение с устройства

1

Я общаюсь с устройством USB, которое я строю с помощью PIC18F4550 через Libusb Java. Я могу писать асинхронно, поэтому мне не нужно объединять переменные с устройством, но я не могу сделать это с помощью своего приложения Java. Я должен продолжать пытаться читать сообщение от него, поднимая прерывания в микроконтроллере, чего именно я пытаюсь избежать. Есть ли способ использовать что-то вроде обратного вызова или команды блокировки, которые будут пытаться читать с устройства, только если на самом деле есть что-то, что нужно прочитать? Мне очень жаль, если я не смог сделать мой вопрос более ясным, любые сомнения могут быть заданы!

Теги:
pic
usb
libusb

1 ответ

1
Лучший ответ

Нет, это невозможно из-за фундаментального способа работы USB. Устройство USB может разговаривать только с хостом, когда хост спрашивает его, есть ли у него что сказать. Ведущий отвечает за то, кто разговаривает. Когда у вас есть конечная точка IN, хост должен регулярно опробовать ваше устройство, чтобы проверить, есть ли у устройства что-либо сказать.

Я запрограммировал PIC18F4550 раньше, и я знаю, если вы сконфигурируете конечную точку IN для отправки NAK, вам не нужно обрабатывать прерывание каждый раз, когда хост запрашивает данные с конечной точки. Я подозреваю, что вы настраиваете конечную точку для отправки пакетов данных нулевой длины, когда на самом деле вы должны настроить его для отправки NAK. Ответ NAK может обрабатываться USB SIE без каких-либо вмешательств с вашей прошивки.

Однако есть команды блокировки, которые вы можете использовать для чтения данных с USB. Они блокируют команды с точки зрения вашей Java-программы, но в аппаратном обеспечении они реализованы с использованием опроса USB-устройства. Я не использовал "Libusb Java", но я знаю, что libusb 1.0 поддерживает блокирующие команды, такие как libusb_bulk_transfer.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню