Класс 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)
|
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++) для доступа к устройству.
public byte[] getRawDescriptors ()
Появился в API level 13. Возвращает сырые (raw) дескрипторы USB для устройства. Это может использоваться для получения доступа к дескрипторам, недоступным напрямую через высокоуровневое API.
Возвращает
- необработанные данные дескрипторов USB
public String getSerial ()
Появился в API level 12. Возвращает серийный номер устройства. Этот метод вернет null, если устройство не было открыто.
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 устройство. |