UPDATE 2:Android USB Host API - как найти драйвер для USB (Prolific) связи
я испытал с чипом FTDI путем замыкания его в и из контактов. controlTransfer()
всегда возвращает 0, bulkTransfer() - Write
возвращает длину отправленных данных и bulkTransfer() - Read
возвращает любые данные.
Кто-нибудь знает Как найти драйвер для Prolific?
UPDATE 1:
Я сделал еще несколько тестов с Slick USB 2, и я думаю, что я нашел мою проблему. Похоже, что мне не хватает какого-то драйвера, из-за которого связь не работает.
Я подключаю свою плату к Slick USB 2, а затем попытался подключиться с помощью своего приложения, и оно напечатало «открытое устройство и требует: false, file = 45, test = null». Я снова попытался, и связь начала работать. Я мог писать и читать данные, как ожидалось. Кроме того, когда я снова подключил кабель, связь перестала работать.
Я думаю, Slick USB 2 устанавливает драйвер, необходимый для связи.
Кто-нибудь знает, где и как я могу найти этот драйвер?
Я хочу, чтобы мой Android устройство (Galaxy Tab 2.0 7" , версия 4.0.3) для связи с пользовательской платы. Для этого я использую OTG кабель + USB-последовательный преобразователь (Prolific) .
Я проверил связь с Slick USB 2 приложения и все работает, как ожидалось.
Теперь я пытаюсь создать свою собственную программу, используя USB Host API. Я добавил пристальный фильтр и при подключении мой совет, он также распознается. Я использую приведенный ниже код:
UsbDevice usbDevice; // contains device from intent-filter
Context context; // activity object
UsbManager manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
Toast.makeText(context, "usb device perm: " + manager.hasPermission(usbDevice), Toast.LENGTH_LONG).show();
UsbInterface interfaceUsb = usbDevice.getInterface(0);
UsbDeviceConnection connection = manager.openDevice(usbDevice);
boolean resClaim = connection.claimInterface(interfaceUsb, true);
Toast.makeText(context, "open device and claim: " + resClaim + ", file = " + connection.getFileDescriptor() + ", test = " + connection.getSerial(), Toast.LENGTH_LONG).show();
// Prints "open device and claim: true, file = 45, test = null"
int result = connection.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0); // set baudrate 57600
Toast.makeText(context, "result: " + result, Toast.LENGTH_LONG).show(); // returns -1
int resultWrite = connection.bulkTransfer(endpointUsbWrite, new byte[]{'a'}, 1, 1000);
byte[] bytesRead = new byte[64];
int resultRead = connection.bulkTransfer(endpointUsbRead, bytesRead, bytesRead.length, 1000);
// resultWrite returns 1, resultRead returns -1
controlTransfer()
всегда возвращает -1. Я также пробовал bulkTransfer() - write
и возвращает длину отправленных данных, но плата НЕ принимает никаких данных. bulkTransfer() - read
возвращает -1
Я проверил, где я подключил свою доску к моему приложению и попытался подключиться к Slick USB 2, а Slick USB 2 смог подключиться к моей плате - это действительно не должно работать. Я думаю, что я не могу правильно открыть устройство.
Что мне здесь не хватает? Я проверил несколько потоков, но не смог решить проблему. Может кто-нибудь предложить что-нибудь?
Можете ли вы разместить код, в котором вы пробовали bulktransfer? Трудно догадаться об этом без дополнительного контекста. – sarwar
@sarwar Я обновил свой код – user427969
Предполагая, что вы получили конечные точки, мне нечего добавить помимо этого; У меня никогда не было правильного целочисленного значения чтения или записи массового переноса. Никогда. Я понятия не имею, почему, и теперь я этому не верю. Удачи. Проверьте документы для своего устройства, посмотрите еще раз, есть ли у кого-нибудь рабочий код для Android в любом месте в Google; если нет, выпейте пиво и начните завтра. – sarwar