Я работаю над проектом, который использует возможности USB Host в Android 3.2. Я страдаю от плачевного недостатка знаний и таланта в отношении USB/последовательной связи в целом. Я также не могу найти хороший пример кода для того, что мне нужно сделать.
Мне нужно прочитать с USB-устройства связи.
Пример: Когда я подключаюсь через Putty (на моем ПК), я ввожу:
>GO
И устройство начинает извергать данные для меня. Pitch/Roll/Temp/Контрольная сумма.
Пример:
$R1.217P-0.986T26.3*60
$R1.217P-0.986T26.3*60
$R1.217P-0.987T26.3*61
$R1.217P-0.986T26.3*60
$R1.217P-0.985T26.3*63
Я могу отправить начальную команду "GO" с устройства Android, и в это время я получаю эхо "GO".
Тогда ничего больше при последующих чтениях.
Как я могу: 1) Отправьте команду "идти". 2) Прочитайте в потоке данных, которые будут получены.
Устройство USB, с которым я работаю, имеет следующие интерфейсы (конечные точки).
Класс устройства: устройство связи (0x2)
Интерфейсы:
ИнтерфейС# 0 Класс: устройство связи (0x2) Конечная точка # 0 Направление: входящий (0x80) Тип: Intrrupt (0x3) Интервал опроса: 255 Максимальный размер пакета: 32 Атрибуты: 000000011
ИнтерфейС# 1 Класс: Класс устройства связи (CDC) (0xa) Конечная точка # 0 Адрес: 129 Номер 1 Направление: входящий (0x80) Тип: Навальный (0x2) Интервал опроса (0) Максимальный размер пакета: 32 Атрибуты: 000000010
Конечная точка №1 Адрес 2 Номер 2 Направление: Исходящий (0x0) Тип: Навальный (0x2) Интервал опроса (0) Максимальный размер пакета: 32 Атрибуты: 000000010
Я могу справиться с разрешением, подключиться к устройству, найти правильный интерфейс и назначить конечные точки. Мне просто трудно понять, какой метод использовать для отправки исходной команды, считывая последующие данные. Я пробовал разные комбинации bulkTransfer и controlTransfer без везения.
Спасибо.
Я использую интерфейС# 1, как показано ниже:
public AcmDevice(UsbDeviceConnection usbDeviceConnection, UsbInterface usbInterface) {
Preconditions.checkState(usbDeviceConnection.claimInterface(usbInterface, true));
this.usbDeviceConnection = usbDeviceConnection;
UsbEndpoint epOut = null;
UsbEndpoint epIn = null;
// look for our bulk endpoints
for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
UsbEndpoint ep = usbInterface.getEndpoint(i);
Log.d(TAG, "EP " + i + ": " + ep.getType());
if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {
epOut = ep;
} else if (ep.getDirection() == UsbConstants.USB_DIR_IN) {
epIn = ep;
}
}
}
if (epOut == null || epIn == null) {
throw new IllegalArgumentException("Not all endpoints found.");
}
AcmReader acmReader = new AcmReader(usbDeviceConnection, epIn);
AcmWriter acmWriter = new AcmWriter(usbDeviceConnection, epOut);
reader = new BufferedReader(acmReader);
writer = new BufferedWriter(acmWriter);
}