Changeset e9d600c2 in mainline for uspace/drv/bus/usb/usbdiag/tests.c


Ignore:
Timestamp:
2017-12-21T09:03:55Z (6 years ago)
Author:
Petr Mánek <petr.manek@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ad2a8b1
Parents:
cec130b
Message:

usbdiag: added interrupt endpoint tests, printing tmon device path

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbdiag/tests.c

    rcec130b re9d600c2  
    4141#define NAME "usbdiag"
    4242
     43
     44int usb_diag_stress_intr_out(usb_diag_dev_t *dev, int cycles, size_t size)
     45{
     46        if (!dev)
     47                return EBADMEM;
     48
     49        char *buffer = (char *) malloc(size);
     50        if (!buffer)
     51                return ENOMEM;
     52
     53        memset(buffer, 42, size);
     54
     55        // TODO: Are we sure that no other test is running on this endpoint?
     56
     57        usb_log_info("Performing interrupt out stress test on device %s.", ddf_fun_get_name(dev->fun));
     58        int rc = EOK;
     59        for (int i = 0; i < cycles; ++i) {
     60                // Write buffer to device.
     61                if ((rc = usb_pipe_write(dev->intr_out, buffer, size))) {
     62                        usb_log_error("Interrupt OUT write failed. %s\n", str_error(rc));
     63                        break;
     64                }
     65        }
     66
     67        free(buffer);
     68        return rc;
     69}
     70
     71int usb_diag_stress_intr_in(usb_diag_dev_t *dev, int cycles, size_t size)
     72{
     73        if (!dev)
     74                return EBADMEM;
     75
     76        char *buffer = (char *) malloc(size);
     77        if (!buffer)
     78                return ENOMEM;
     79
     80        // TODO: Are we sure that no other test is running on this endpoint?
     81
     82        usb_log_info("Performing interrupt in stress test on device %s.", ddf_fun_get_name(dev->fun));
     83        int rc = EOK;
     84        for (int i = 0; i < cycles; ++i) {
     85                // Read device's response.
     86                size_t remaining = size;
     87                size_t transferred;
     88
     89                while (remaining > 0) {
     90                        if ((rc = usb_pipe_read(dev->intr_in, buffer + size - remaining, remaining, &transferred))) {
     91                                usb_log_error("Interrupt IN read failed. %s\n", str_error(rc));
     92                                break;
     93                        }
     94
     95                        if (transferred > remaining) {
     96                                usb_log_error("Interrupt IN read more than expected.\n");
     97                                rc = EINVAL;
     98                                break;
     99                        }
     100
     101                        remaining -= transferred;
     102                }
     103
     104                if (rc)
     105                        break;
     106        }
     107
     108        free(buffer);
     109        return rc;
     110}
    43111
    44112int usb_diag_stress_bulk_out(usb_diag_dev_t *dev, int cycles, size_t size)
Note: See TracChangeset for help on using the changeset viewer.