Changes in / [bc02b83:f90c0d6] in mainline
- Files:
-
- 12 added
- 5 deleted
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/Makefile.common
rbc02b83 rf90c0d6 140 140 $(USPACE_PATH)/app/stats/stats \ 141 141 $(USPACE_PATH)/app/sysinfo/sysinfo \ 142 $(USPACE_PATH)/app/tasks/tasks \ 142 143 $(USPACE_PATH)/app/top/top \ 143 144 $(USPACE_PATH)/app/usbinfo/usbinfo \ 145 $(USPACE_PATH)/app/virtusbkbd/vuk \ 144 146 $(USPACE_PATH)/app/vuhid/vuh \ 145 147 $(USPACE_PATH)/app/websrv/websrv -
uspace/Makefile
rbc02b83 rf90c0d6 51 51 app/top \ 52 52 app/usbinfo \ 53 app/virtusbkbd \ 53 54 app/vuhid \ 54 55 app/netecho \ -
uspace/app/vuhid/device.c
rbc02b83 rf90c0d6 77 77 { 78 78 vuhid_interface_t *iface = arg; 79 vuhid_data_t *hid_data = iface->vuhid_data;80 79 81 80 if (iface->live != NULL) { 82 81 iface->live(iface); 83 82 } 84 85 fibril_mutex_lock(&hid_data->iface_count_mutex);86 hid_data->iface_died_count++;87 fibril_condvar_broadcast(&hid_data->iface_count_cv);88 fibril_mutex_unlock(&hid_data->iface_count_mutex);89 83 90 84 return EOK; … … 116 110 if ((iface->in_data_size == 0) && (iface->out_data_size == 0)) { 117 111 return EEMPTY; 118 }119 120 // FIXME - we shall set vuhid_data to NULL in the main() rather121 // than to depend on individual interfaces122 /* Already used interface. */123 if (iface->vuhid_data != NULL) {124 return EEXISTS;125 112 } 126 113 … … 265 252 266 253 /* Launch the "life" fibril. */ 267 iface->vuhid_data = hid_data;268 254 fid_t life_fibril = fibril_create(interface_life_fibril, iface); 269 255 if (life_fibril == 0) { … … 324 310 += total_descr_size; 325 311 326 hid_data->iface_count++;327 312 fibril_add_ready(life_fibril); 328 313 … … 346 331 } 347 332 348 void wait_for_interfaces_death(usbvirt_device_t *dev)349 {350 vuhid_data_t *hid_data = dev->device_data;351 352 fibril_mutex_lock(&hid_data->iface_count_mutex);353 while (hid_data->iface_died_count < hid_data->iface_count) {354 fibril_condvar_wait(&hid_data->iface_count_cv,355 &hid_data->iface_count_mutex);356 }357 fibril_mutex_unlock(&hid_data->iface_count_mutex);358 }359 333 360 334 /** @} -
uspace/app/vuhid/hids/bootkbd.c
rbc02b83 rf90c0d6 39 39 #include <usb/classes/hidut.h> 40 40 41 #include "../ report.h"41 #include "../../virtusbkbd/report.h" 42 42 43 43 uint8_t report_descriptor[] = { … … 169 169 .on_data_out = on_data_out, 170 170 171 .live = live, 172 173 .vuhid_data = NULL 171 .live = live 174 172 }; 175 173 -
uspace/app/vuhid/main.c
rbc02b83 rf90c0d6 132 132 .in_endpoint_first_free = 1, 133 133 .out_endpoints_mapping = { NULL }, 134 .out_endpoint_first_free = 1, 135 136 .iface_count = 0, 137 .iface_died_count = 0 138 // mutex and CV must be initialized elsewhere 134 .out_endpoint_first_free = 1 139 135 }; 140 141 136 142 137 /** Keyboard device. … … 156 151 157 152 usb_log_enable(USB_LOG_LEVEL_DEBUG2, "vusbhid"); 158 159 fibril_mutex_initialize(&vuhid_data.iface_count_mutex);160 fibril_condvar_initialize(&vuhid_data.iface_count_cv);161 153 162 154 /* Determine which interfaces to initialize. */ … … 190 182 printf("Connected to VHCD...\n"); 191 183 192 wait_for_interfaces_death(&hid_dev); 184 while (true) { 185 async_usleep(10 * 1000 * 1000); 186 } 193 187 194 188 printf("Terminating...\n"); 195 189 196 usbvirt_device_unplug(&hid_dev);197 198 190 return 0; 199 191 } -
uspace/app/vuhid/virthid.h
rbc02b83 rf90c0d6 38 38 #include <usb/usb.h> 39 39 #include <usbvirt/device.h> 40 #include <fibril_synch.h>41 40 42 41 #define VUHID_ENDPOINT_MAX USB11_ENDPOINT_MAX … … 44 43 45 44 typedef struct vuhid_interface vuhid_interface_t; 46 47 typedef struct {48 vuhid_interface_t *in_endpoints_mapping[VUHID_ENDPOINT_MAX];49 size_t in_endpoint_first_free;50 vuhid_interface_t *out_endpoints_mapping[VUHID_ENDPOINT_MAX];51 size_t out_endpoint_first_free;52 vuhid_interface_t *interface_mapping[VUHID_INTERFACE_MAX];53 54 fibril_mutex_t iface_count_mutex;55 fibril_condvar_t iface_count_cv;56 size_t iface_count;57 size_t iface_died_count;58 } vuhid_data_t;59 45 60 46 struct vuhid_interface { … … 77 63 78 64 void *interface_data; 65 }; 79 66 80 vuhid_data_t *vuhid_data; 81 }; 67 typedef struct { 68 vuhid_interface_t *in_endpoints_mapping[VUHID_ENDPOINT_MAX]; 69 size_t in_endpoint_first_free; 70 vuhid_interface_t *out_endpoints_mapping[VUHID_ENDPOINT_MAX]; 71 size_t out_endpoint_first_free; 72 vuhid_interface_t *interface_mapping[VUHID_INTERFACE_MAX]; 73 } vuhid_data_t; 82 74 83 75 typedef struct { … … 92 84 93 85 int add_interface_by_id(vuhid_interface_t **, const char *, usbvirt_device_t *); 94 void wait_for_interfaces_death(usbvirt_device_t *);95 86 96 87 #endif -
uspace/drv/vhc/transfer.c
rbc02b83 rf90c0d6 135 135 if (transfer->direction == USB_DIRECTION_IN) { 136 136 rc = usbvirt_ipc_send_control_read(phone, 137 transfer->endpoint, 137 138 transfer->setup_buffer, transfer->setup_buffer_size, 138 139 transfer->data_buffer, transfer->data_buffer_size, … … 141 142 assert(transfer->direction == USB_DIRECTION_OUT); 142 143 rc = usbvirt_ipc_send_control_write(phone, 144 transfer->endpoint, 143 145 transfer->setup_buffer, transfer->setup_buffer_size, 144 146 transfer->data_buffer, transfer->data_buffer_size); -
uspace/lib/usbvirt/Makefile
rbc02b83 rf90c0d6 33 33 34 34 SOURCES = \ 35 src/ipc.c \ 35 36 src/ctrltransfer.c \ 36 src/device.c \37 src/ipc_dev.c \38 src/ipc_hc.c \39 37 src/stdreq.c \ 40 38 src/transfer.c -
uspace/lib/usbvirt/include/usbvirt/device.h
rbc02b83 rf90c0d6 31 31 */ 32 32 /** @file 33 * Virtual USB device.33 * @brief 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. */42 41 #define USBVIRT_ENDPOINT_MAX 16 43 42 44 43 typedef struct usbvirt_device usbvirt_device_t; 45 44 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); 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 *); 58 51 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 the76 * 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 answering91 * control read requests.92 */93 52 typedef struct { 94 /** Request direction (in or out). */95 53 usb_direction_t req_direction; 96 /** Request recipient (device, interface or endpoint). */97 54 usb_request_recipient_t req_recipient; 98 /** Request type (standard, class or vendor). */99 55 usb_request_type_t req_type; 100 /** Actual request code. */101 56 uint8_t request; 102 /** Request handler name for debugging purposes. */103 57 const char *name; 104 /** Callback to be executed on matching request. */105 58 usbvirt_on_control_t callback; 106 59 } usbvirt_control_request_handler_t; … … 124 77 } usbvirt_device_configuration_t; 125 78 126 /** Standard USB descriptors for virtual device. */79 /** Standard USB descriptors. */ 127 80 typedef struct { 128 81 /** Standard device descriptor. … … 149 102 } usbvirt_device_state_t; 150 103 151 /** Ops structure for virtual USB device. */152 104 typedef struct { 153 /** Callbacks for data to device.154 * Index zero is ignored.155 */156 105 usbvirt_on_data_to_device_t data_out[USBVIRT_ENDPOINT_MAX]; 157 /** Callbacks for data from device.158 * Index zero is ignored.159 */160 106 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 NULL163 */164 107 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 not168 * 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 */174 108 void (*state_changed)(usbvirt_device_t *dev, 175 109 usbvirt_device_state_t old_state, usbvirt_device_state_t new_state); 176 110 } usbvirt_device_ops_t; 177 111 178 /** Virtual USB device. */179 112 struct usbvirt_device { 180 /** Name for debugging purposes. */181 113 const char *name; 182 /** Custom device data. */183 114 void *device_data; 184 /** Device ops. */185 115 usbvirt_device_ops_t *ops; 186 /** Device descriptors. */187 116 usbvirt_descriptors_t *descriptors; 188 /** Current device address.189 * You shall treat this field as read only in your code.190 */191 117 usb_address_t address; 192 /** Current device state.193 * You shall treat this field as read only in your code.194 */195 118 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;200 119 }; 201 120 202 121 int usbvirt_device_plug(usbvirt_device_t *, const char *); 203 void usbvirt_device_unplug(usbvirt_device_t *);204 122 205 123 void usbvirt_control_reply_helper(const usb_device_request_setup_packet_t *, -
uspace/lib/usbvirt/include/usbvirt/ipc.h
rbc02b83 rf90c0d6 1 1 /* 2 * Copyright (c) 201 1Vojtech Horky2 * Copyright (c) 2010 Vojtech Horky 3 3 * All rights reserved. 4 4 * … … 31 31 */ 32 32 /** @file 33 * IPC wrappers for virtual USB.33 * @brief Virtual USB device. 34 34 */ 35 35 #ifndef LIBUSBVIRT_IPC_H_ … … 40 40 #include <bool.h> 41 41 42 /** IPC methods communication between host controller and virtual device. */43 42 typedef enum { 44 43 IPC_M_USBVIRT_GET_NAME = IPC_FIRST_USER_METHOD + 80, … … 46 45 IPC_M_USBVIRT_CONTROL_WRITE, 47 46 IPC_M_USBVIRT_INTERRUPT_IN, 48 IPC_M_USBVIRT_INTERRUPT_OUT, 49 IPC_M_USBVIRT_BULK_IN, 50 IPC_M_USBVIRT_BULK_OUT 51 } usbvirt_hc_to_device_method_t; 47 IPC_M_USBVIRT_INTERRUPT_OUT 48 } usbvirt_ipc_t; 52 49 53 int usbvirt_ipc_send_control_read(int, void *, size_t,50 int usbvirt_ipc_send_control_read(int, usb_endpoint_t, void *, size_t, 54 51 void *, size_t, size_t *); 55 int usbvirt_ipc_send_control_write(int, void *, size_t,52 int usbvirt_ipc_send_control_write(int, usb_endpoint_t, void *, size_t, 56 53 void *, size_t); 57 54 int usbvirt_ipc_send_data_in(int, usb_endpoint_t, usb_transfer_type_t, -
uspace/lib/usbvirt/src/ctrltransfer.c
rbc02b83 rf90c0d6 1 /*2 * Copyright (c) 2011 Vojtech Horky3 * All rights reserved.4 *5 * Redistribution and use in source and binary forms, with or without6 * modification, are permitted provided that the following conditions7 * are met:8 *9 * - Redistributions of source code must retain the above copyright10 * notice, this list of conditions and the following disclaimer.11 * - Redistributions in binary form must reproduce the above copyright12 * notice, this list of conditions and the following disclaimer in the13 * documentation and/or other materials provided with the distribution.14 * - The name of the author may not be used to endorse or promote products15 * derived from this software without specific prior written permission.16 *17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.27 */28 29 /** @addtogroup libusbvirt30 * @{31 */32 /** @file33 * Control transfer handling.34 */35 1 #include "private.h" 36 2 #include <usb/request.h> … … 39 5 #include <errno.h> 40 6 41 /** Find and execute control transfer handler for virtual USB device.42 *43 * @param dev Target virtual device.44 * @param control_handlers Array of control request handlers.45 * @param setup Setup packet.46 * @param data Extra data.47 * @param data_sent_size Size of extra data in bytes.48 * @return Error code.49 * @retval EFORWARD No suitable handler found.50 */51 7 int process_control_transfer(usbvirt_device_t *dev, 52 8 usbvirt_control_request_handler_t *control_handlers, … … 96 52 return EFORWARD; 97 53 } 98 99 100 /**101 * @}102 */ -
uspace/lib/usbvirt/src/private.h
rbc02b83 rf90c0d6 1 /*2 * Copyright (c) 2011 Vojtech Horky3 * All rights reserved.4 *5 * Redistribution and use in source and binary forms, with or without6 * modification, are permitted provided that the following conditions7 * are met:8 *9 * - Redistributions of source code must retain the above copyright10 * notice, this list of conditions and the following disclaimer.11 * - Redistributions in binary form must reproduce the above copyright12 * notice, this list of conditions and the following disclaimer in the13 * documentation and/or other materials provided with the distribution.14 * - The name of the author may not be used to endorse or promote products15 * derived from this software without specific prior written permission.16 *17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.27 */28 29 /** @addtogroup libusbvirt30 * @{31 */32 /** @file33 * Private definitions.34 */35 #ifndef USBVIRT_PRIVATE_H_36 #define USBVIRT_PRIVATE_H_37 38 1 #include <usbvirt/device.h> 39 2 … … 44 7 45 8 extern usbvirt_control_request_handler_t library_handlers[]; 46 47 #endif48 /**49 * @}50 */ -
uspace/lib/usbvirt/src/stdreq.c
rbc02b83 rf90c0d6 1 /*2 * Copyright (c) 2011 Vojtech Horky3 * All rights reserved.4 *5 * Redistribution and use in source and binary forms, with or without6 * modification, are permitted provided that the following conditions7 * are met:8 *9 * - Redistributions of source code must retain the above copyright10 * notice, this list of conditions and the following disclaimer.11 * - Redistributions in binary form must reproduce the above copyright12 * notice, this list of conditions and the following disclaimer in the13 * documentation and/or other materials provided with the distribution.14 * - The name of the author may not be used to endorse or promote products15 * derived from this software without specific prior written permission.16 *17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.27 */28 29 /** @addtogroup libusbvirt30 * @{31 */32 /** @file33 * Standard control request handlers.34 */35 1 #include "private.h" 36 2 #include <usb/request.h> … … 38 4 #include <errno.h> 39 5 40 /** Helper for replying to control read transfer from virtual USB device.41 *42 * This function takes care of copying data to answer buffer taking care43 * of buffer sizes properly.44 *45 * @param setup_packet The setup packet.46 * @param data Data buffer to write to.47 * @param act_size Where to write actual size of returned data.48 * @param actual_data Data to be returned.49 * @param actual_data_size Size of answer data (@p actual_data) in bytes.50 */51 6 void usbvirt_control_reply_helper(const usb_device_request_setup_packet_t *setup_packet, 52 7 uint8_t *data, size_t *act_size, … … 189 144 } 190 145 191 /** Standard request handlers. */192 146 usbvirt_control_request_handler_t library_handlers[] = { 193 147 { … … 219 173 }; 220 174 221 /**222 * @}223 */ -
uspace/lib/usbvirt/src/transfer.c
rbc02b83 rf90c0d6 31 31 */ 32 32 /** @file 33 * Transfer handling.33 * 34 34 */ 35 35 #include <usbvirt/device.h> … … 39 39 #include "private.h" 40 40 41 /** Process a control transfer to the virtual USB device.42 *43 * @param dev Target device.44 * @param setup Setup packet data.45 * @param setup_size Size of setup packet.46 * @param data Extra data (DATA stage).47 * @param data_size Size of extra data in bytes.48 * @param data_size_sent Number of actually send bytes during the transfer49 * (only used for READ transfers).50 * @return Error code.51 */52 41 static int usbvirt_control_transfer(usbvirt_device_t *dev, 53 42 void *setup, size_t setup_size, … … 89 78 } 90 79 91 /** Issue a control write transfer to virtual USB device.92 *93 * @see usbvirt_control_transfer94 *95 * @param dev Target virtual device.96 * @param setup Setup data.97 * @param setup_size Size of setup packet.98 * @param data Extra data (DATA stage).99 * @param data_size Size of extra data buffer in bytes.100 * @return Error code.101 */102 80 int usbvirt_control_write(usbvirt_device_t *dev, void *setup, size_t setup_size, 103 81 void *data, size_t data_size) … … 107 85 } 108 86 109 /** Issue a control read transfer to virtual USB device.110 *111 * @see usbvirt_control_transfer112 *113 * @param dev Target virtual device.114 * @param setup Setup data.115 * @param setup_size Size of setup packet.116 * @param data Extra data (DATA stage).117 * @param data_size Size of extra data buffer in bytes.118 * @param data_size_sent Number of actually send bytes during the transfer.119 * @return Error code.120 */121 87 int usbvirt_control_read(usbvirt_device_t *dev, void *setup, size_t setup_size, 122 88 void *data, size_t data_size, size_t *data_size_sent) … … 126 92 } 127 93 128 /** Send data to virtual USB device.129 *130 * @param dev Target virtual device.131 * @param transf_type Transfer type (interrupt, bulk).132 * @param endpoint Endpoint number.133 * @param data Data sent from the driver to the device.134 * @param data_size Size of the @p data buffer in bytes.135 * @return Error code.136 */137 94 int usbvirt_data_out(usbvirt_device_t *dev, usb_transfer_type_t transf_type, 138 95 usb_endpoint_t endpoint, void *data, size_t data_size) … … 151 108 } 152 109 153 /** Request data from virtual USB device.154 *155 * @param dev Target virtual device.156 * @param transf_type Transfer type (interrupt, bulk).157 * @param endpoint Endpoint number.158 * @param data Where to stored data the device returns to the driver.159 * @param data_size Size of the @p data buffer in bytes.160 * @param data_size_sent Number of actually written bytes.161 * @return Error code.162 */163 110 int usbvirt_data_in(usbvirt_device_t *dev, usb_transfer_type_t transf_type, 164 111 usb_endpoint_t endpoint, void *data, size_t data_size, size_t *data_size_sent)
Note:
See TracChangeset
for help on using the changeset viewer.