Changeset fd312d5 in mainline for uspace/drv/bus/usb/usbdiag/device.c


Ignore:
Timestamp:
2017-12-20T16:06:56Z (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:
cec130b
Parents:
f98f4b7
Message:

usbdiag: more robust testing framework, added bulk in stress test, refactored remote usbdiag interface, new command for tmon

File:
1 edited

Legend:

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

    rf98f4b7 rfd312d5  
    4141
    4242#include "device.h"
     43#include "tests.h"
    4344
    4445#define NAME "usbdiag"
    4546
    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);\
    5953        }
    6054
    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 }
     55TRANSLATE_FUNC(usb_diag_stress_bulk_out)
     56TRANSLATE_FUNC(usb_diag_stress_bulk_in)
    8657
    8758static 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)
    8961};
     62
     63#undef TRANSLATE_FUNC_NAME
     64#undef TRANSLATE_FUNC
    9065
    9166static ddf_dev_ops_t diag_ops = {
     
    10580        dev->fun = fun;
    10681
    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);
    10991
    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);
    11598
    116         dev->bulk_out = &epm_out->pipe;
    117         dev->bulk_in = &epm_in->pipe;
     99#undef _MAP_EP
    118100
    119101        return EOK;
Note: See TracChangeset for help on using the changeset viewer.