Changeset bc02b83 in mainline for uspace/lib/usbvirt/include/usbvirt/device.h
- Timestamp:
- 2011-05-07T09:59:39Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6fb003e, 7ab7c7f6, d38d830
- Parents:
- f90c0d6 (diff), beee81a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbvirt/include/usbvirt/device.h
rf90c0d6 rbc02b83 31 31 */ 32 32 /** @file 33 * @briefVirtual USB device.33 * Virtual USB device. 34 34 */ 35 35 #ifndef LIBUSBVIRT_DEVICE_H_ … … 39 39 #include <usb/request.h> 40 40 41 /** Maximum number of endpoints supported by virtual USB. */ 41 42 #define USBVIRT_ENDPOINT_MAX 16 42 43 43 44 typedef struct usbvirt_device usbvirt_device_t; 44 45 45 typedef int (*usbvirt_on_data_to_device_t)(usbvirt_device_t *, usb_endpoint_t, 46 usb_transfer_type_t, void *, size_t); 47 typedef int (*usbvirt_on_data_from_device_t)(usbvirt_device_t *, usb_endpoint_t, 48 usb_transfer_type_t, void *, size_t, size_t *); 49 typedef int (*usbvirt_on_control_t)(usbvirt_device_t *, 50 const usb_device_request_setup_packet_t *, uint8_t *, size_t *); 51 52 typedef struct { 46 /** Callback for data to device (OUT transaction). 47 * 48 * @param dev Virtual device to which the transaction belongs. 49 * @param endpoint Target endpoint number. 50 * @param transfer_type Transfer type. 51 * @param buffer Data buffer. 52 * @param buffer_size Size of the buffer in bytes. 53 * @return Error code. 54 */ 55 typedef int (*usbvirt_on_data_to_device_t)(usbvirt_device_t *dev, 56 usb_endpoint_t endpoint, usb_transfer_type_t transfer_type, 57 void *buffer, size_t buffer_size); 58 59 /** Callback for data from device (IN transaction). 60 * 61 * @param dev Virtual device to which the transaction belongs. 62 * @param endpoint Target endpoint number. 63 * @param transfer_type Transfer type. 64 * @param buffer Data buffer to write answer to. 65 * @param buffer_size Size of the buffer in bytes. 66 * @param act_buffer_size Write here how many bytes were actually written. 67 * @return Error code. 68 */ 69 typedef int (*usbvirt_on_data_from_device_t)(usbvirt_device_t *dev, 70 usb_endpoint_t endpoint, usb_transfer_type_t transfer_type, 71 void *buffer, size_t buffer_size, size_t *act_buffer_size); 72 73 /** Callback for control transfer on endpoint zero. 74 * 75 * Notice that size of the data buffer is expected to be read from the 76 * setup packet. 77 * 78 * @param dev Virtual device to which the transaction belongs. 79 * @param setup_packet Standard setup packet. 80 * @param data Data (might be NULL). 81 * @param act_data_size Size of returned data in bytes. 82 * @return Error code. 83 */ 84 typedef int (*usbvirt_on_control_t)(usbvirt_device_t *dev, 85 const usb_device_request_setup_packet_t *setup_packet, 86 uint8_t *data, size_t *act_data_size); 87 88 /** Callback for control request on a virtual USB device. 89 * 90 * See usbvirt_control_reply_helper() for simple way of answering 91 * control read requests. 92 */ 93 typedef struct { 94 /** Request direction (in or out). */ 53 95 usb_direction_t req_direction; 96 /** Request recipient (device, interface or endpoint). */ 54 97 usb_request_recipient_t req_recipient; 98 /** Request type (standard, class or vendor). */ 55 99 usb_request_type_t req_type; 100 /** Actual request code. */ 56 101 uint8_t request; 102 /** Request handler name for debugging purposes. */ 57 103 const char *name; 104 /** Callback to be executed on matching request. */ 58 105 usbvirt_on_control_t callback; 59 106 } usbvirt_control_request_handler_t; … … 77 124 } usbvirt_device_configuration_t; 78 125 79 /** Standard USB descriptors . */126 /** Standard USB descriptors for virtual device. */ 80 127 typedef struct { 81 128 /** Standard device descriptor. … … 102 149 } usbvirt_device_state_t; 103 150 104 typedef struct { 151 /** Ops structure for virtual USB device. */ 152 typedef struct { 153 /** Callbacks for data to device. 154 * Index zero is ignored. 155 */ 105 156 usbvirt_on_data_to_device_t data_out[USBVIRT_ENDPOINT_MAX]; 157 /** Callbacks for data from device. 158 * Index zero is ignored. 159 */ 106 160 usbvirt_on_data_from_device_t data_in[USBVIRT_ENDPOINT_MAX]; 161 /** Array of control handlers. 162 * Last handler is expected to have the @c callback field set to NULL 163 */ 107 164 usbvirt_control_request_handler_t *control; 165 /** Callback when device changes state. 166 * 167 * The value of @c state attribute of @p dev device is not 168 * defined during call of this function. 169 * 170 * @param dev The virtual USB device. 171 * @param old_state Old device state. 172 * @param new_state New device state. 173 */ 108 174 void (*state_changed)(usbvirt_device_t *dev, 109 175 usbvirt_device_state_t old_state, usbvirt_device_state_t new_state); 110 176 } usbvirt_device_ops_t; 111 177 178 /** Virtual USB device. */ 112 179 struct usbvirt_device { 180 /** Name for debugging purposes. */ 113 181 const char *name; 182 /** Custom device data. */ 114 183 void *device_data; 184 /** Device ops. */ 115 185 usbvirt_device_ops_t *ops; 186 /** Device descriptors. */ 116 187 usbvirt_descriptors_t *descriptors; 188 /** Current device address. 189 * You shall treat this field as read only in your code. 190 */ 117 191 usb_address_t address; 192 /** Current device state. 193 * You shall treat this field as read only in your code. 194 */ 118 195 usbvirt_device_state_t state; 196 /** Phone to the host controller. 197 * You shall treat this field as read only in your code. 198 */ 199 int vhc_phone; 119 200 }; 120 201 121 202 int usbvirt_device_plug(usbvirt_device_t *, const char *); 203 void usbvirt_device_unplug(usbvirt_device_t *); 122 204 123 205 void usbvirt_control_reply_helper(const usb_device_request_setup_packet_t *,
Note:
See TracChangeset
for help on using the changeset viewer.