Changeset ff16da5f in mainline for uspace/drv/bus/usb/usbdiag
- Timestamp:
- 2017-12-21T14:37:30Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 119a794
- Parents:
- 74c0de0
- git-author:
- Petr Mánek <petr.manek@…> (2017-12-21 14:37:23)
- git-committer:
- Petr Mánek <petr.manek@…> (2017-12-21 14:37:30)
- Location:
- uspace/drv/bus/usb/usbdiag
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbdiag/device.c
r74c0de0 rff16da5f 53 53 } 54 54 55 TRANSLATE_FUNC(usb_diag_stress_intr_out) 56 TRANSLATE_FUNC(usb_diag_stress_intr_in) 55 57 TRANSLATE_FUNC(usb_diag_stress_bulk_out) 56 58 TRANSLATE_FUNC(usb_diag_stress_bulk_in) 57 TRANSLATE_FUNC(usb_diag_stress_i ntr_out)58 TRANSLATE_FUNC(usb_diag_stress_i ntr_in)59 TRANSLATE_FUNC(usb_diag_stress_isoch_out) 60 TRANSLATE_FUNC(usb_diag_stress_isoch_in) 59 61 60 62 static usbdiag_iface_t diag_interface = { 63 .stress_intr_out = TRANSLATE_FUNC_NAME(usb_diag_stress_intr_out), 64 .stress_intr_in = TRANSLATE_FUNC_NAME(usb_diag_stress_intr_in), 61 65 .stress_bulk_out = TRANSLATE_FUNC_NAME(usb_diag_stress_bulk_out), 62 66 .stress_bulk_in = TRANSLATE_FUNC_NAME(usb_diag_stress_bulk_in), 63 .stress_i ntr_out = TRANSLATE_FUNC_NAME(usb_diag_stress_intr_out),64 .stress_i ntr_in = TRANSLATE_FUNC_NAME(usb_diag_stress_intr_in)67 .stress_isoch_out = TRANSLATE_FUNC_NAME(usb_diag_stress_isoch_out), 68 .stress_isoch_in = TRANSLATE_FUNC_NAME(usb_diag_stress_isoch_in) 65 69 }; 66 70 -
uspace/drv/bus/usb/usbdiag/tests.c
r74c0de0 rff16da5f 178 178 } 179 179 180 int usb_diag_stress_isoch_out(usb_diag_dev_t *dev, int cycles, size_t size) 181 { 182 if (!dev) 183 return EBADMEM; 184 185 char *buffer = (char *) malloc(size); 186 if (!buffer) 187 return ENOMEM; 188 189 memset(buffer, 42, size); 190 191 // TODO: Are we sure that no other test is running on this endpoint? 192 193 usb_log_info("Performing isochronous out stress test on device %s.", ddf_fun_get_name(dev->fun)); 194 int rc = EOK; 195 for (int i = 0; i < cycles; ++i) { 196 // Write buffer to device. 197 if ((rc = usb_pipe_write(dev->isoch_out, buffer, size))) { 198 usb_log_error("Isochronous OUT write failed. %s\n", str_error(rc)); 199 break; 200 } 201 } 202 203 free(buffer); 204 return rc; 205 } 206 207 int usb_diag_stress_isoch_in(usb_diag_dev_t *dev, int cycles, size_t size) 208 { 209 if (!dev) 210 return EBADMEM; 211 212 char *buffer = (char *) malloc(size); 213 if (!buffer) 214 return ENOMEM; 215 216 // TODO: Are we sure that no other test is running on this endpoint? 217 218 usb_log_info("Performing isochronous in stress test on device %s.", ddf_fun_get_name(dev->fun)); 219 int rc = EOK; 220 for (int i = 0; i < cycles; ++i) { 221 // Read device's response. 222 size_t remaining = size; 223 size_t transferred; 224 225 while (remaining > 0) { 226 if ((rc = usb_pipe_read(dev->isoch_in, buffer + size - remaining, remaining, &transferred))) { 227 usb_log_error("Isochronous IN read failed. %s\n", str_error(rc)); 228 break; 229 } 230 231 if (transferred > remaining) { 232 usb_log_error("Isochronous IN read more than expected.\n"); 233 rc = EINVAL; 234 break; 235 } 236 237 remaining -= transferred; 238 } 239 240 if (rc) 241 break; 242 } 243 244 free(buffer); 245 return rc; 246 } 247 180 248 /** 181 249 * @} -
uspace/drv/bus/usb/usbdiag/tests.h
r74c0de0 rff16da5f 43 43 int usb_diag_stress_bulk_out(usb_diag_dev_t *, int, size_t); 44 44 int usb_diag_stress_bulk_in(usb_diag_dev_t *, int, size_t); 45 int usb_diag_stress_isoch_out(usb_diag_dev_t *, int, size_t); 46 int usb_diag_stress_isoch_in(usb_diag_dev_t *, int, size_t); 45 47 46 48 #endif /* USB_DIAG_TESTS_H_ */
Note:
See TracChangeset
for help on using the changeset viewer.
