Android USB Host Communication

Я работаю над проектом, который использует Возможности USB Host в Android 3.2. Я страдаю от прискорбной нехватки знаний и талантов в отношении USB / последовательной связи в целом. Я также не могу найти хороший пример кода для того, что мне нужно сделать.

Мне нужно для чтения с USB-устройства связи.
Пример: Когда я подключаюсь через Putty (на моем ПК), я ввожу:

>GO

И устройство начинает выдавать мне данные. Шаг / Крен / Температура / Контрольная сумма.

Пример:

$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) Тип: прерывание (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);
  }
16
задан K.R. 22 January 2012 в 05:36
поделиться