mirror of
https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
synced 2025-11-29 03:21:07 +08:00
tmp update
This commit is contained in:
@@ -58,9 +58,7 @@ if (r == 0 && actual_length == sizeof(data)) {
|
||||
|
||||
|
||||
|
||||
### 2.2 主要函数
|
||||
|
||||
#### 2.2.1 初始化
|
||||
### 2.2 初始化
|
||||
|
||||
```c
|
||||
/** \ingroup libusb_lib
|
||||
@@ -83,7 +81,7 @@ int API_EXPORTED libusb_init(libusb_context **ctx);
|
||||
|
||||
|
||||
|
||||
#### 2.2.2 获取设备
|
||||
### 2.3 获取设备
|
||||
|
||||
可以使用`libusb_get_device_list`取出所有设备,函数接口如下:
|
||||
|
||||
@@ -126,7 +124,7 @@ void API_EXPORTED libusb_free_device_list(libusb_device **list,
|
||||
int unref_devices);
|
||||
```
|
||||
|
||||
#### 2.2.3 打开/关闭设备
|
||||
### 2.4 打开/关闭设备
|
||||
|
||||
使用libusb_get_device_list得到设备列表后,可以选择里面的某个设备,然后调用libusb_open:
|
||||
|
||||
@@ -175,7 +173,7 @@ void API_EXPORTED libusb_close(libusb_device_handle *dev_handle);
|
||||
|
||||
|
||||
|
||||
#### 2.2.4 根据ID打开设备
|
||||
### 2.5 根据ID打开设备
|
||||
|
||||
如果知道设备的VID、PID,那么可以使用libusb_open_device_with_vid_pid来找到它、打开它。这个函数的内部,先使用`libusb_get_device_list`列出所有设备,然后遍历它们根据ID选出设备,接着调用libusb_open打开它,最后调用libusb_free_device_list释放设备。
|
||||
|
||||
@@ -205,7 +203,7 @@ libusb_device_handle * LIBUSB_CALL libusb_open_device_with_vid_pid(
|
||||
|
||||
|
||||
|
||||
#### 2.2.5 detach/attach驱动
|
||||
### 2.6 detach/attach驱动
|
||||
|
||||
使用libusb访问USB设备时,需要先移除(detach)设备原来的驱动程序,然后安装(attach)libusb专用的驱动程序。有两种办法:
|
||||
|
||||
@@ -326,7 +324,224 @@ int API_EXPORTED libusb_release_interface(libusb_device_handle *dev_handle,
|
||||
|
||||
|
||||
|
||||
#### 2.2.6 描述符相关函数
|
||||
### 2.7 描述符相关函数
|
||||
|
||||
**获得设备描述符**:
|
||||
|
||||
```c
|
||||
/** \ingroup libusb_desc
|
||||
* Get the USB device descriptor for a given device.
|
||||
*
|
||||
* This is a non-blocking function; the device descriptor is cached in memory.
|
||||
*
|
||||
* Note since libusb-1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102, this
|
||||
* function always succeeds.
|
||||
*
|
||||
* \param dev the device
|
||||
* \param desc output location for the descriptor data
|
||||
* \returns 0 on success or a LIBUSB_ERROR code on failure
|
||||
*/
|
||||
int API_EXPORTED libusb_get_device_descriptor(libusb_device *dev,
|
||||
struct libusb_device_descriptor *desc);
|
||||
```
|
||||
|
||||
**获得/释放配置描述符**:
|
||||
|
||||
```c
|
||||
/** \ingroup libusb_desc
|
||||
* Get a USB configuration descriptor based on its index.
|
||||
* This is a non-blocking function which does not involve any requests being
|
||||
* sent to the device.
|
||||
*
|
||||
* \param dev a device
|
||||
* \param config_index the index of the configuration you wish to retrieve
|
||||
* \param config output location for the USB configuration descriptor. Only
|
||||
* valid if 0 was returned. Must be freed with libusb_free_config_descriptor()
|
||||
* after use.
|
||||
* \returns 0 on success
|
||||
* \returns LIBUSB_ERROR_NOT_FOUND if the configuration does not exist
|
||||
* \returns another LIBUSB_ERROR code on error
|
||||
* \see libusb_get_active_config_descriptor()
|
||||
* \see libusb_get_config_descriptor_by_value()
|
||||
*/
|
||||
int API_EXPORTED libusb_get_config_descriptor(libusb_device *dev,
|
||||
uint8_t config_index, struct libusb_config_descriptor **config);
|
||||
|
||||
/** \ingroup libusb_desc
|
||||
* Free a configuration descriptor obtained from
|
||||
* libusb_get_active_config_descriptor() or libusb_get_config_descriptor().
|
||||
* It is safe to call this function with a NULL config parameter, in which
|
||||
* case the function simply returns.
|
||||
*
|
||||
* \param config the configuration descriptor to free
|
||||
*/
|
||||
void API_EXPORTED libusb_free_config_descriptor(
|
||||
struct libusb_config_descriptor *config);
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 2.8 同步传输函数
|
||||
|
||||
#### 2.8.1 控制传输
|
||||
|
||||
```c
|
||||
/** \ingroup libusb_syncio
|
||||
* Perform a USB control transfer.
|
||||
*
|
||||
* The direction of the transfer is inferred from the bmRequestType field of
|
||||
* the setup packet.
|
||||
*
|
||||
* The wValue, wIndex and wLength fields values should be given in host-endian
|
||||
* byte order.
|
||||
*
|
||||
* \param dev_handle a handle for the device to communicate with
|
||||
* \param bmRequestType the request type field for the setup packet
|
||||
* \param bRequest the request field for the setup packet
|
||||
* \param wValue the value field for the setup packet
|
||||
* \param wIndex the index field for the setup packet
|
||||
* \param data a suitably-sized data buffer for either input or output
|
||||
* (depending on direction bits within bmRequestType)
|
||||
* \param wLength the length field for the setup packet. The data buffer should
|
||||
* be at least this size.
|
||||
* \param timeout timeout (in milliseconds) that this function should wait
|
||||
* before giving up due to no response being received. For an unlimited
|
||||
* timeout, use value 0.
|
||||
* \returns on success, the number of bytes actually transferred
|
||||
* \returns LIBUSB_ERROR_TIMEOUT if the transfer timed out
|
||||
* \returns LIBUSB_ERROR_PIPE if the control request was not supported by the
|
||||
* device
|
||||
* \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
|
||||
* \returns LIBUSB_ERROR_BUSY if called from event handling context
|
||||
* \returns LIBUSB_ERROR_INVALID_PARAM if the transfer size is larger than
|
||||
* the operating system and/or hardware can support (see \ref asynclimits)
|
||||
* \returns another LIBUSB_ERROR code on other failures
|
||||
*/
|
||||
int API_EXPORTED libusb_control_transfer(libusb_device_handle *dev_handle,
|
||||
uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex,
|
||||
unsigned char *data, uint16_t wLength, unsigned int timeout);
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 2.8.2 批量传输
|
||||
|
||||
```c
|
||||
/** \ingroup libusb_syncio
|
||||
* Perform a USB bulk transfer. The direction of the transfer is inferred from
|
||||
* the direction bits of the endpoint address.
|
||||
*
|
||||
* For bulk reads, the <tt>length</tt> field indicates the maximum length of
|
||||
* data you are expecting to receive. If less data arrives than expected,
|
||||
* this function will return that data, so be sure to check the
|
||||
* <tt>transferred</tt> output parameter.
|
||||
*
|
||||
* You should also check the <tt>transferred</tt> parameter for bulk writes.
|
||||
* Not all of the data may have been written.
|
||||
*
|
||||
* Also check <tt>transferred</tt> when dealing with a timeout error code.
|
||||
* libusb may have to split your transfer into a number of chunks to satisfy
|
||||
* underlying O/S requirements, meaning that the timeout may expire after
|
||||
* the first few chunks have completed. libusb is careful not to lose any data
|
||||
* that may have been transferred; do not assume that timeout conditions
|
||||
* indicate a complete lack of I/O. See \ref asynctimeout for more details.
|
||||
*
|
||||
* \param dev_handle a handle for the device to communicate with
|
||||
* \param endpoint the address of a valid endpoint to communicate with
|
||||
* \param data a suitably-sized data buffer for either input or output
|
||||
* (depending on endpoint)
|
||||
* \param length for bulk writes, the number of bytes from data to be sent. for
|
||||
* bulk reads, the maximum number of bytes to receive into the data buffer.
|
||||
* \param transferred output location for the number of bytes actually
|
||||
* transferred. Since version 1.0.21 (\ref LIBUSB_API_VERSION >= 0x01000105),
|
||||
* it is legal to pass a NULL pointer if you do not wish to receive this
|
||||
* information.
|
||||
* \param timeout timeout (in milliseconds) that this function should wait
|
||||
* before giving up due to no response being received. For an unlimited
|
||||
* timeout, use value 0.
|
||||
*
|
||||
* \returns 0 on success (and populates <tt>transferred</tt>)
|
||||
* \returns LIBUSB_ERROR_TIMEOUT if the transfer timed out (and populates
|
||||
* <tt>transferred</tt>)
|
||||
* \returns LIBUSB_ERROR_PIPE if the endpoint halted
|
||||
* \returns LIBUSB_ERROR_OVERFLOW if the device offered more data, see
|
||||
* \ref libusb_packetoverflow
|
||||
* \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
|
||||
* \returns LIBUSB_ERROR_BUSY if called from event handling context
|
||||
* \returns LIBUSB_ERROR_INVALID_PARAM if the transfer size is larger than
|
||||
* the operating system and/or hardware can support (see \ref asynclimits)
|
||||
* \returns another LIBUSB_ERROR code on other failures
|
||||
*/
|
||||
int API_EXPORTED libusb_bulk_transfer(libusb_device_handle *dev_handle,
|
||||
unsigned char endpoint, unsigned char *data, int length,
|
||||
int *transferred, unsigned int timeout);
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 2.8.3 中断传输
|
||||
|
||||
```c
|
||||
/** \ingroup libusb_syncio
|
||||
* Perform a USB interrupt transfer. The direction of the transfer is inferred
|
||||
* from the direction bits of the endpoint address.
|
||||
*
|
||||
* For interrupt reads, the <tt>length</tt> field indicates the maximum length
|
||||
* of data you are expecting to receive. If less data arrives than expected,
|
||||
* this function will return that data, so be sure to check the
|
||||
* <tt>transferred</tt> output parameter.
|
||||
*
|
||||
* You should also check the <tt>transferred</tt> parameter for interrupt
|
||||
* writes. Not all of the data may have been written.
|
||||
*
|
||||
* Also check <tt>transferred</tt> when dealing with a timeout error code.
|
||||
* libusb may have to split your transfer into a number of chunks to satisfy
|
||||
* underlying O/S requirements, meaning that the timeout may expire after
|
||||
* the first few chunks have completed. libusb is careful not to lose any data
|
||||
* that may have been transferred; do not assume that timeout conditions
|
||||
* indicate a complete lack of I/O. See \ref asynctimeout for more details.
|
||||
*
|
||||
* The default endpoint bInterval value is used as the polling interval.
|
||||
*
|
||||
* \param dev_handle a handle for the device to communicate with
|
||||
* \param endpoint the address of a valid endpoint to communicate with
|
||||
* \param data a suitably-sized data buffer for either input or output
|
||||
* (depending on endpoint)
|
||||
* \param length for bulk writes, the number of bytes from data to be sent. for
|
||||
* bulk reads, the maximum number of bytes to receive into the data buffer.
|
||||
* \param transferred output location for the number of bytes actually
|
||||
* transferred. Since version 1.0.21 (\ref LIBUSB_API_VERSION >= 0x01000105),
|
||||
* it is legal to pass a NULL pointer if you do not wish to receive this
|
||||
* information.
|
||||
* \param timeout timeout (in milliseconds) that this function should wait
|
||||
* before giving up due to no response being received. For an unlimited
|
||||
* timeout, use value 0.
|
||||
*
|
||||
* \returns 0 on success (and populates <tt>transferred</tt>)
|
||||
* \returns LIBUSB_ERROR_TIMEOUT if the transfer timed out
|
||||
* \returns LIBUSB_ERROR_PIPE if the endpoint halted
|
||||
* \returns LIBUSB_ERROR_OVERFLOW if the device offered more data, see
|
||||
* \ref libusb_packetoverflow
|
||||
* \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
|
||||
* \returns LIBUSB_ERROR_BUSY if called from event handling context
|
||||
* \returns LIBUSB_ERROR_INVALID_PARAM if the transfer size is larger than
|
||||
* the operating system and/or hardware can support (see \ref asynclimits)
|
||||
* \returns another LIBUSB_ERROR code on other error
|
||||
*/
|
||||
int API_EXPORTED libusb_interrupt_transfer(libusb_device_handle *dev_handle,
|
||||
unsigned char endpoint, unsigned char *data, int length,
|
||||
int *transferred, unsigned int timeout);
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 2.9 异步传输函数
|
||||
|
||||
#### 2.9.1 使用步骤
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user