USB virtualization library
[USB virtualization]

Library for creating virtual USB devices. More...


Files

file  ctrltransfer.c
 Control transfer handling.
file  device.c
 Virtual USB device main routines.
file  device.h
 Virtual USB device.
file  ipc.h
 IPC wrappers for virtual USB.
file  ipc_dev.c
 IPC wrappers, device side.
file  ipc_hc.c
 IPC wrappers, host controller side.
file  private.h
 Private definitions.
file  stdreq.c
 Standard control request handlers.
file  transfer.c
 Transfer handling.

Data Structures

struct  usbvirt_control_request_handler_t
 Callback for control request on a virtual USB device. More...
struct  usbvirt_descriptors_t
 Standard USB descriptors for virtual device. More...
struct  usbvirt_device
 Virtual USB device. More...
struct  usbvirt_device_configuration_extras_t
 Extra configuration data for GET_CONFIGURATION request. More...
struct  usbvirt_device_configuration_t
 Single device configuration. More...
struct  usbvirt_device_ops_t
 Ops structure for virtual USB device. More...

Defines

#define USBVIRT_ENDPOINT_MAX   16
 Maximum number of endpoints supported by virtual USB.

Typedefs

typedef usbvirt_device usbvirt_device_t
typedef int(*) usbvirt_on_control_t (usbvirt_device_t *dev, const usb_device_request_setup_packet_t *setup_packet, uint8_t *data, size_t *act_data_size)
 Callback for control transfer on endpoint zero.
typedef int(*) usbvirt_on_data_from_device_t (usbvirt_device_t *dev, usb_endpoint_t endpoint, usb_transfer_type_t transfer_type, void *buffer, size_t buffer_size, size_t *act_buffer_size)
 Callback for data from device (IN transaction).
typedef int(*) usbvirt_on_data_to_device_t (usbvirt_device_t *dev, usb_endpoint_t endpoint, usb_transfer_type_t transfer_type, void *buffer, size_t buffer_size)
 Callback for data to device (OUT transaction).

Enumerations

enum  usbvirt_device_state_t { USBVIRT_STATE_DEFAULT, USBVIRT_STATE_ADDRESS, USBVIRT_STATE_CONFIGURED }
 Possible states of virtual USB device. More...
enum  usbvirt_hc_to_device_method_t
 IPC methods communication between host controller and virtual device.

Functions

static void callback_connection (ipc_callid_t iid, ipc_call_t *icall)
 Main IPC call handling from virtual host controller.
static void ipc_control_read (usbvirt_device_t *dev, ipc_callid_t iid, ipc_call_t *icall)
 Handle VHC request for control read from the device.
static void ipc_control_write (usbvirt_device_t *dev, ipc_callid_t iid, ipc_call_t *icall)
 Handle VHC request for control write to the device.
static void ipc_data_in (usbvirt_device_t *dev, usb_transfer_type_t transfer_type, ipc_callid_t iid, ipc_call_t *icall)
 Handle VHC request for data read from the device (in transfer).
static void ipc_data_out (usbvirt_device_t *dev, usb_transfer_type_t transfer_type, ipc_callid_t iid, ipc_call_t *icall)
 Handle VHC request for data write to the device (out transfer).
static void ipc_get_name (usbvirt_device_t *dev, ipc_callid_t iid, ipc_call_t *icall)
 Handle VHC request for device name.
int process_control_transfer (usbvirt_device_t *dev, usbvirt_control_request_handler_t *control_handlers, usb_device_request_setup_packet_t *setup, uint8_t *data, size_t *data_sent_size)
 Find and execute control transfer handler for virtual USB device.
static int req_get_descriptor (usbvirt_device_t *device, const usb_device_request_setup_packet_t *setup_packet, uint8_t *data, size_t *act_size)
 GET_DESCRIPTOR handler.
static int req_set_address (usbvirt_device_t *device, const usb_device_request_setup_packet_t *setup_packet, uint8_t *data, size_t *act_size)
static int req_set_configuration (usbvirt_device_t *device, const usb_device_request_setup_packet_t *setup_packet, uint8_t *data, size_t *act_size)
int usbvirt_control_read (usbvirt_device_t *dev, void *setup, size_t setup_size, void *data, size_t data_size, size_t *data_size_sent)
 Issue a control read transfer to virtual USB device.
void usbvirt_control_reply_helper (const usb_device_request_setup_packet_t *setup_packet, uint8_t *data, size_t *act_size, void *actual_data, size_t actual_data_size)
 Helper for replying to control read transfer from virtual USB device.
static int usbvirt_control_transfer (usbvirt_device_t *dev, void *setup, size_t setup_size, void *data, size_t data_size, size_t *data_size_sent)
 Process a control transfer to the virtual USB device.
int usbvirt_control_write (usbvirt_device_t *dev, void *setup, size_t setup_size, void *data, size_t data_size)
 Issue a control write transfer to virtual USB device.
int usbvirt_data_in (usbvirt_device_t *dev, usb_transfer_type_t transf_type, usb_endpoint_t endpoint, void *data, size_t data_size, size_t *data_size_sent)
 Request data from virtual USB device.
int usbvirt_data_out (usbvirt_device_t *dev, usb_transfer_type_t transf_type, usb_endpoint_t endpoint, void *data, size_t data_size)
 Send data to virtual USB device.
int usbvirt_device_plug (usbvirt_device_t *dev, const char *vhc_path)
 Connect the device to the virtual host controller.
void usbvirt_device_unplug (usbvirt_device_t *dev)
 Disconnect the device from virtual host controller.
bool usbvirt_ipc_handle_call (usbvirt_device_t *dev, ipc_callid_t callid, ipc_call_t *call)
 Handle incoming IPC call for virtual USB device.
int usbvirt_ipc_send_control_read (int phone, void *setup_buffer, size_t setup_buffer_size, void *data_buffer, size_t data_buffer_size, size_t *data_transfered_size)
 Send control read transfer to virtual USB device.
int usbvirt_ipc_send_control_write (int phone, void *setup_buffer, size_t setup_buffer_size, void *data_buffer, size_t data_buffer_size)
 Send control write transfer to virtual USB device.
int usbvirt_ipc_send_data_in (int phone, usb_endpoint_t ep, usb_transfer_type_t tr_type, void *data, size_t data_size, size_t *act_size)
 Request data transfer from virtual USB device.
int usbvirt_ipc_send_data_out (int phone, usb_endpoint_t ep, usb_transfer_type_t tr_type, void *data, size_t data_size)
 Send data to virtual USB device.

Variables

static usbvirt_device_tDEV = NULL
 Current device.
usbvirt_control_request_handler_t library_handlers []
 Standard request handlers.
usbvirt_control_request_handler_t library_handlers []
 Standard request handlers.

Detailed Description

Library for creating virtual USB devices.


Typedef Documentation

typedef int(*) usbvirt_on_control_t(usbvirt_device_t *dev, const usb_device_request_setup_packet_t *setup_packet, uint8_t *data, size_t *act_data_size)

Callback for control transfer on endpoint zero.

Notice that size of the data buffer is expected to be read from the setup packet.

Parameters:
dev Virtual device to which the transaction belongs.
setup_packet Standard setup packet.
data Data (might be NULL).
act_data_size Size of returned data in bytes.
Returns:
Error code.

Definition at line 84 of file device.h.

typedef int(*) usbvirt_on_data_from_device_t(usbvirt_device_t *dev, usb_endpoint_t endpoint, usb_transfer_type_t transfer_type, void *buffer, size_t buffer_size, size_t *act_buffer_size)

Callback for data from device (IN transaction).

Parameters:
dev Virtual device to which the transaction belongs.
endpoint Target endpoint number.
transfer_type Transfer type.
buffer Data buffer to write answer to.
buffer_size Size of the buffer in bytes.
act_buffer_size Write here how many bytes were actually written.
Returns:
Error code.

Definition at line 69 of file device.h.

typedef int(*) usbvirt_on_data_to_device_t(usbvirt_device_t *dev, usb_endpoint_t endpoint, usb_transfer_type_t transfer_type, void *buffer, size_t buffer_size)

Callback for data to device (OUT transaction).

Parameters:
dev Virtual device to which the transaction belongs.
endpoint Target endpoint number.
transfer_type Transfer type.
buffer Data buffer.
buffer_size Size of the buffer in bytes.
Returns:
Error code.

Definition at line 55 of file device.h.


Enumeration Type Documentation

enum usbvirt_device_state_t

Possible states of virtual USB device.

Notice that these are not 1:1 mappings to those in USB specification.

Enumerator:
USBVIRT_STATE_DEFAULT  Default state, device listens at default address.
USBVIRT_STATE_ADDRESS  Device has non-default address assigned.
USBVIRT_STATE_CONFIGURED  Device is configured.

Definition at line 142 of file device.h.


Function Documentation

static void callback_connection ( ipc_callid_t  iid,
ipc_call_t icall 
) [static]

Main IPC call handling from virtual host controller.

Parameters:
iid Caller identification.
icall Initial incoming call.

Definition at line 54 of file device.c.

static void ipc_control_read ( usbvirt_device_t dev,
ipc_callid_t  iid,
ipc_call_t icall 
) [static]

Handle VHC request for control read from the device.

Parameters:
dev Target virtual device.
iid Caller id.
icall The call with the request.

Definition at line 81 of file ipc_dev.c.

static void ipc_control_write ( usbvirt_device_t dev,
ipc_callid_t  iid,
ipc_call_t icall 
) [static]

Handle VHC request for control write to the device.

Parameters:
dev Target virtual device.
iid Caller id.
icall The call with the request.

Definition at line 136 of file ipc_dev.c.

static void ipc_data_in ( usbvirt_device_t dev,
usb_transfer_type_t  transfer_type,
ipc_callid_t  iid,
ipc_call_t icall 
) [static]

Handle VHC request for data read from the device (in transfer).

Parameters:
dev Target virtual device.
iid Caller id.
icall The call with the request.

Definition at line 180 of file ipc_dev.c.

static void ipc_data_out ( usbvirt_device_t dev,
usb_transfer_type_t  transfer_type,
ipc_callid_t  iid,
ipc_call_t icall 
) [static]

Handle VHC request for data write to the device (out transfer).

Parameters:
dev Target virtual device.
iid Caller id.
icall The call with the request.

Definition at line 224 of file ipc_dev.c.

static void ipc_get_name ( usbvirt_device_t dev,
ipc_callid_t  iid,
ipc_call_t icall 
) [static]

Handle VHC request for device name.

Parameters:
dev Target virtual device.
iid Caller id.
icall The call with the request.

Definition at line 51 of file ipc_dev.c.

int process_control_transfer ( usbvirt_device_t dev,
usbvirt_control_request_handler_t control_handlers,
usb_device_request_setup_packet_t setup,
uint8_t *  data,
size_t data_sent_size 
)

Find and execute control transfer handler for virtual USB device.

Parameters:
dev Target virtual device.
control_handlers Array of control request handlers.
setup Setup packet.
data Extra data.
data_sent_size Size of extra data in bytes.
Returns:
Error code.
Return values:
EFORWARD No suitable handler found.

Definition at line 51 of file ctrltransfer.c.

int usbvirt_control_read ( usbvirt_device_t dev,
void *  setup,
size_t  setup_size,
void *  data,
size_t  data_size,
size_t data_size_sent 
)

Issue a control read transfer to virtual USB device.

See also:
usbvirt_control_transfer
Parameters:
dev Target virtual device.
setup Setup data.
setup_size Size of setup packet.
data Extra data (DATA stage).
data_size Size of extra data buffer in bytes.
data_size_sent Number of actually send bytes during the transfer.
Returns:
Error code.

Definition at line 121 of file transfer.c.

void usbvirt_control_reply_helper ( const usb_device_request_setup_packet_t setup_packet,
uint8_t *  data,
size_t act_size,
void *  actual_data,
size_t  actual_data_size 
)

Helper for replying to control read transfer from virtual USB device.

This function takes care of copying data to answer buffer taking care of buffer sizes properly.

Parameters:
setup_packet The setup packet.
data Data buffer to write to.
act_size Where to write actual size of returned data.
actual_data Data to be returned.
actual_data_size Size of answer data (actual_data) in bytes.

Definition at line 51 of file stdreq.c.

static int usbvirt_control_transfer ( usbvirt_device_t dev,
void *  setup,
size_t  setup_size,
void *  data,
size_t  data_size,
size_t data_size_sent 
) [static]

Process a control transfer to the virtual USB device.

Parameters:
dev Target device.
setup Setup packet data.
setup_size Size of setup packet.
data Extra data (DATA stage).
data_size Size of extra data in bytes.
data_size_sent Number of actually send bytes during the transfer (only used for READ transfers).
Returns:
Error code.

Definition at line 52 of file transfer.c.

int usbvirt_control_write ( usbvirt_device_t dev,
void *  setup,
size_t  setup_size,
void *  data,
size_t  data_size 
)

Issue a control write transfer to virtual USB device.

See also:
usbvirt_control_transfer
Parameters:
dev Target virtual device.
setup Setup data.
setup_size Size of setup packet.
data Extra data (DATA stage).
data_size Size of extra data buffer in bytes.
Returns:
Error code.

Definition at line 102 of file transfer.c.

int usbvirt_data_in ( usbvirt_device_t dev,
usb_transfer_type_t  transf_type,
usb_endpoint_t  endpoint,
void *  data,
size_t  data_size,
size_t data_size_sent 
)

Request data from virtual USB device.

Parameters:
dev Target virtual device.
transf_type Transfer type (interrupt, bulk).
endpoint Endpoint number.
data Where to stored data the device returns to the driver.
data_size Size of the data buffer in bytes.
data_size_sent Number of actually written bytes.
Returns:
Error code.

Definition at line 163 of file transfer.c.

int usbvirt_data_out ( usbvirt_device_t dev,
usb_transfer_type_t  transf_type,
usb_endpoint_t  endpoint,
void *  data,
size_t  data_size 
)

Send data to virtual USB device.

Parameters:
dev Target virtual device.
transf_type Transfer type (interrupt, bulk).
endpoint Endpoint number.
data Data sent from the driver to the device.
data_size Size of the data buffer in bytes.
Returns:
Error code.

Definition at line 137 of file transfer.c.

int usbvirt_device_plug ( usbvirt_device_t dev,
const char *  vhc_path 
)

Connect the device to the virtual host controller.

Parameters:
dev The virtual device to be (virtually) plugged in.
vhc_path Devman path to the virtual host controller.
Returns:
Error code.

Definition at line 85 of file device.c.

void usbvirt_device_unplug ( usbvirt_device_t dev  ) 

Disconnect the device from virtual host controller.

Parameters:
dev Device to be disconnected.

Definition at line 120 of file device.c.

bool usbvirt_ipc_handle_call ( usbvirt_device_t dev,
ipc_callid_t  callid,
ipc_call_t call 
)

Handle incoming IPC call for virtual USB device.

Parameters:
dev Target USB device.
callid Caller id.
call Incoming call.
Returns:
Whether the call was handled.

Definition at line 255 of file ipc_dev.c.

int usbvirt_ipc_send_control_read ( int  phone,
void *  setup_buffer,
size_t  setup_buffer_size,
void *  data_buffer,
size_t  data_buffer_size,
size_t data_transfered_size 
)

Send control read transfer to virtual USB device.

Parameters:
phone IPC phone to the virtual device.
ep Target endpoint number.
setup_buffer Setup buffer.
setup_buffer_size Setup buffer size in bytes.
data_buffer Data buffer (DATA stage of control transfer).
data_buffer_size Size of data buffer in bytes.
data_transfered_size Number of actually transferred bytes.
Returns:
Error code.

Definition at line 56 of file ipc_hc.c.

int usbvirt_ipc_send_control_write ( int  phone,
void *  setup_buffer,
size_t  setup_buffer_size,
void *  data_buffer,
size_t  data_buffer_size 
)

Send control write transfer to virtual USB device.

Parameters:
phone IPC phone to the virtual device.
ep Target endpoint number.
setup_buffer Setup buffer.
setup_buffer_size Setup buffer size in bytes.
data_buffer Data buffer (DATA stage of control transfer).
data_buffer_size Size of data buffer in bytes.
Returns:
Error code.

Definition at line 127 of file ipc_hc.c.

int usbvirt_ipc_send_data_in ( int  phone,
usb_endpoint_t  ep,
usb_transfer_type_t  tr_type,
void *  data,
size_t  data_size,
size_t act_size 
)

Request data transfer from virtual USB device.

Parameters:
phone IPC phone to the virtual device.
ep Target endpoint number.
tr_type Transfer type (interrupt or bulk).
data Data buffer.
data_size Size of the data buffer in bytes.
act_size Number of actually returned bytes.
Returns:
Error code.

Definition at line 180 of file ipc_hc.c.

int usbvirt_ipc_send_data_out ( int  phone,
usb_endpoint_t  ep,
usb_transfer_type_t  tr_type,
void *  data,
size_t  data_size 
)

Send data to virtual USB device.

Parameters:
phone IPC phone to the virtual device.
ep Target endpoint number.
tr_type Transfer type (interrupt or bulk).
data Data buffer.
data_size Size of the data buffer in bytes.
Returns:
Error code.

Definition at line 253 of file ipc_hc.c.


Generated on Thu Jun 2 07:45:56 2011 for HelenOS/USB by  doxygen 1.4.7