Программирование Android Класс UsbDeviceConnection Tue, November 12 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Класс UsbDeviceConnection Печать
Добавил(а) microsin   

Класс UsbDeviceConnection используется для отправки и приема данных и управляющих сообщений при обмене данными с устройством USB, когда оно подключено к системе Android, работающей в режиме хоста. Экземпляры этого класса создаются вызовом openDevice(UsbDevice).

[Обзор класса UsbDeviceConnection]

При доступе к устройствам USB обычно используется следующая цепочка использования классов (UsbDeviceConnection является конечным звеном взаимодействия с устройствами USB):

UsbManager -> UsbDevice -> UsbInterface -> UsbEndpoint -> UsbDeviceConnection

Класс UsbDeviceConnection находится в пакете android.hardware.usb.UsbDeviceConnection, расширяет (extends) объект Object. Класс UsbDeviceConnection (как и поддержка режима хоста USB) была добавлена в Android начиная с API Level 12. Некоторые методы были добавлены в API Level 13 и API Level 18 (специально указано в правом столбце таблицы методов, а также в подробном описании метода). Общую информацию по поддержке режимов Host и Accessory см. в [2].

Общедоступные методы (Public Methods)
int bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int offset, int length, int timeout)
Выполняет bulk-транзакцию на указанной конечной точке.
18
int bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)
Выполняет bulk-транзакцию на указанной конечной точке.
12
boolean claimInterface(UsbInterface intf, boolean force)
Захватывает исключительный доступ к интерфейсу UsbInterface.
12
void close()
Освобождает все системные ресурсы, связанные с устройством USB.
12
int controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)
Выполняет control-транзакцию с конечной точкой 0 этого устройства.
12
int controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int offset, int length, int timeout)
Выполняет control-транзакцию с конечной точкой 0 этого устройства.
18
int getFileDescriptor()
Returns the native file descriptor for the device, or -1 if the device is not opened.
12
byte[] getRawDescriptors()
Возвращает сырые (raw) дескрипторы устройства USB.
13
String getSerial()
Возвращает серийный номер устройства USB.
12
boolean releaseInterface(UsbInterfaceintf)
Освобождает UsbInterface от исключительного доступа.
12
UsbRequest requestWait()
Ожидает результат операции на очереди queue(ByteBuffer, int). Имейте в виду, что этот вызов может возвратить запросы, поставленные в очередь от нескольких конечных точек UsbEndpoint.
12

[Общедоступные методы (Public Methods)]

public int bulkTransfer (UsbEndpoint endpoint, byte[] buffer, int offset, int length, int timeout)

Появился в API level 18. Выполняет транзакцию типа bulk на указанной конечной точке. Направление передачи данных определяется направлением конечной точки.

Параметры
endpoint конечная точка для этой транзакции
buffer буфер для данных, которые передаются или принимаются
offset индекс первого байта в буфере для передачи или приема
length длина данных для передачи или приема
timeout таймаут в миллисекундах
Возвращает
  • длину переданных данных (или 0) для успеха, или отрицательное значение в случае неудачи

public int bulkTransfer (UsbEndpoint endpoint, byte[] buffer, int length, int timeout)

Появился в API level 12. Выполняет транзакцию типа bulk на указанной конечной точке. Направление передачи данных определяется направлением конечной точки.

Этот метод передает данные начиная с индекса 0 в буфере. Чтобы использовать другое смещение, используйте bulkTransfer(UsbEndpoint, byte[], int, int, int).

Параметры
endpoint конечная точка для этой транзакции
buffer буфер для данных, которые передаются или принимаются
length длина данных для передачи или приема
timeout таймаут в миллисекундах
Возвращает
  • длину переданных данных (или 0) в случае успеха, или отрицательное значение, если произошла ошибка

public boolean claimInterface (UsbInterface intf, boolean force)

Появился в API level 12. Захватывает исключительный доступ к интерфейсу UsbInterface. Это должно быть выполнено перед отправкой или приемом данных через любую конечную точку UsbEndpoint, принадлежащую интерфейсу.

Параметры
intf интерфейс для захвата
force true для отключения драйвера ядра (kernel driver), если это необходимо
Возвращает
  • true, если интерфейс успешно захвачен.

public void close ()

Появился в API level 12. Освобождает все системные ресурсы, относящиеся к устройству USB. Как только объект закрыт, он не может использоваться снова. Клиент должен вызвать снова метод openDevice(UsbDevice), чтобы получить новый экземпляр для повторной установки соединения с устройством.

public int controlTransfer (int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)

Появился в API level 12. Выполняет транзакцию управления (control transaction) на конечной точке 0 (endpoint zero) для этого устройства USB. Направление трансфера определяется типом запроса. Если requestType & USB_ENDPOINT_DIR_MASK равен USB_DIR_OUT, то трансфер является записью (передача из хоста Android в устройство USB), и если USB_DIR_IN, то трансфер является чтением (передача данных из устройства USB в хост Android).

Этот метод перемещает данные, начиная с индекса 0 в буфере 0. Чтобы указать другое смещение, используйте controlTransfer(int, int, int, int, byte[], int, int, int).

Параметры
requestType тип запроса для этой транзакции
request идентификатор запроса (request ID) для этой транзакции
value поле значения (value field) для этой транзакции
index поле индекса (index field) для этой транзакции
buffer буфер для порции данных этой транзакции, или null, если не должны быть переданы или приняты данные
length длина данных для отправки или приема
timeout таймаут в миллисекундах
Возвращает
  • длину переданных или принятых данных (или 0) в случае успеха, либо отрицательное значение, если произошла ошибка

public int controlTransfer (int requestType, int request, int value, int index, byte[] buffer, int offset, int length, int timeout)

Появился в API level 18. Выполняет транзакцию управления (control transaction) на конечной точке 0 (endpoint zero) для этого устройства USB. Направление трансфера определяется типом запроса. Если requestType & USB_ENDPOINT_DIR_MASK равен USB_DIR_OUT, то трансфер является записью (передача из хоста Android в устройство USB), и если USB_DIR_IN, то трансфер является чтением (передача данных из устройства USB в хост Android).

Параметры
requestType тип запроса для этой транзакции
request идентификатор запроса (request ID) для этой транзакции
value поле значения (value field) для этой транзакции
index поле индекса (index field) для этой транзакции
buffer буфер для порции данных этой транзакции, или null, если не должны быть переданы или приняты данные
offset индекс первого байта в буфере для передачи или приема
length длина данных для передачи или приема
timeout таймаут в миллисекундах
Возвращает
  • длину переданных или принятых данных (или 0) в случае успеха, либо отрицательное значение, если произошла ошибка

public int getFileDescriptor ()

Появился в API level 12. Возвращает стандартный файловый дескриптор (native file descriptor) для устройства, или -1, если устройство не открыто. Этот метод предназначен для передачи в нативный код (native code, что означает C/C++) для доступа к устройству.

Возвращает
  • native file descriptor

public byte[] getRawDescriptors ()

Появился в API level 13. Возвращает сырые (raw) дескрипторы USB для устройства. Это может использоваться для получения доступа к дескрипторам, недоступным напрямую через высокоуровневое API.

Возвращает
  • необработанные данные дескрипторов USB

public String getSerial ()

Появился в API level 12. Возвращает серийный номер устройства. Этот метод вернет null, если устройство не было открыто.

Возвращает
  • device serial number

public boolean releaseInterface (UsbInterface intf)

Появился в API level 12. Освобождает UsbInterface от исключительного доступа.

Возвращает
  • true, если интерфейс был успешно освобожден

public UsbRequest requestWait ()

Появился в API level 12. Ожидает результат операции на очереди queue(ByteBuffer, int). Имейте в виду, что этот вызов может возвратить запросы, поставленные в очередь от нескольких конечных точек UsbEndpoint. Когда используется несколько конечных точек, то могут пригодиться методы getEndpoint() и getClientData() для того, чтобы определить, как обработать результат возврата функции requestWait.

Возвращает
  • завершенный запрос USB, или null, если произошла ошибка

[Ссылки]

1. UsbDeviceConnection site:developer.android.com.
2. Android как USB хост и как USB устройство.

 

Добавить комментарий


Защитный код
Обновить

Top of Page