Changeset fd312d5 in mainline for uspace/drv/bus/usb/usbdiag/device.c
- Timestamp:
- 2017-12-20T16:06:56Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- cec130b
- Parents:
- f98f4b7
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbdiag/device.c
rf98f4b7 rfd312d5 41 41 42 42 #include "device.h" 43 #include "tests.h" 43 44 44 45 #define NAME "usbdiag" 45 46 46 47 static int some_test(ddf_fun_t *fun, int x, int *y) 48 { 49 int rc = EOK; 50 usb_diag_dev_t *dev = ddf_fun_to_usb_diag_dev(fun); 51 52 const size_t size = min(dev->bulk_in->desc.max_packet_size, dev->bulk_out->desc.max_packet_size); 53 char *buffer = (char *) malloc(size); 54 memset(buffer, 42, sizeof(buffer)); 55 56 // Write buffer to device. 57 if ((rc = usb_pipe_write(dev->bulk_out, buffer, size))) { 58 usb_log_error("Bulk OUT write failed. %s\n", str_error(rc)); 47 #define TRANSLATE_FUNC_NAME(fun) translate_##fun 48 #define TRANSLATE_FUNC(fun) \ 49 static int TRANSLATE_FUNC_NAME(fun)(ddf_fun_t *f, int cycles, size_t size)\ 50 {\ 51 usb_diag_dev_t *dev = ddf_fun_to_usb_diag_dev(f);\ 52 return fun(dev, cycles, size);\ 59 53 } 60 54 61 // Read device's response. 62 size_t remaining = size; 63 size_t transferred; 64 while (remaining > 0) { 65 if ((rc = usb_pipe_read(dev->bulk_in, buffer + size - remaining, remaining, &transferred))) { 66 usb_log_error("Bulk IN read failed. %s\n", str_error(rc)); 67 break; 68 } 69 70 if (transferred > remaining) { 71 usb_log_error("Bulk IN read more than expected.\n"); 72 rc = EINVAL; 73 break; 74 } 75 76 remaining -= transferred; 77 } 78 79 // TODO: Check output? 80 81 free(buffer); 82 83 *y = x + 42; 84 return rc; 85 } 55 TRANSLATE_FUNC(usb_diag_stress_bulk_out) 56 TRANSLATE_FUNC(usb_diag_stress_bulk_in) 86 57 87 58 static usbdiag_iface_t diag_interface = { 88 .test = some_test, 59 .stress_bulk_out = TRANSLATE_FUNC_NAME(usb_diag_stress_bulk_out), 60 .stress_bulk_in = TRANSLATE_FUNC_NAME(usb_diag_stress_bulk_in) 89 61 }; 62 63 #undef TRANSLATE_FUNC_NAME 64 #undef TRANSLATE_FUNC 90 65 91 66 static ddf_dev_ops_t diag_ops = { … … 105 80 dev->fun = fun; 106 81 107 usb_endpoint_mapping_t *epm_out = usb_device_get_mapped_ep(dev->usb_dev, USB_DIAG_EP_BULK_OUT); 108 usb_endpoint_mapping_t *epm_in = usb_device_get_mapped_ep(dev->usb_dev, USB_DIAG_EP_BULK_IN); 82 #define _MAP_EP(target, ep_no) do {\ 83 usb_endpoint_mapping_t *epm = usb_device_get_mapped_ep(dev->usb_dev, USB_DIAG_EP_##ep_no);\ 84 if (!epm || !epm->present) {\ 85 usb_log_error("Failed to map endpoint: " #ep_no ".\n");\ 86 rc = ENOENT;\ 87 goto err_fun;\ 88 }\ 89 target = &epm->pipe;\ 90 } while (0); 109 91 110 if (!epm_in || !epm_out || !epm_in->present || !epm_out->present) { 111 usb_log_error("Required EPs were not mapped.\n"); 112 rc = ENOENT; 113 goto err_fun; 114 } 92 _MAP_EP(dev->intr_in, INTR_IN); 93 _MAP_EP(dev->intr_out, INTR_OUT); 94 _MAP_EP(dev->bulk_in, BULK_IN); 95 _MAP_EP(dev->bulk_out, BULK_OUT); 96 _MAP_EP(dev->isoch_in, ISOCH_IN); 97 _MAP_EP(dev->isoch_out, ISOCH_OUT); 115 98 116 dev->bulk_out = &epm_out->pipe; 117 dev->bulk_in = &epm_in->pipe; 99 #undef _MAP_EP 118 100 119 101 return EOK;
Note:
See TracChangeset
for help on using the changeset viewer.