Changeset d5e7668 in mainline


Ignore:
Timestamp:
2010-12-13T14:56:16Z (13 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
266d0871
Parents:
76daaf9f
Message:

virtusb: named callbacks for pipe zero

Location:
uspace
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/virtusbkbd/virtusbkbd.c

    r76daaf9f rd5e7668  
    138138                    USBVIRT_REQUEST_RECIPIENT_DEVICE),
    139139                .request = USB_DEVREQ_GET_DESCRIPTOR,
     140                .name = "GetDescriptor",
    140141                .callback = stdreq_on_get_descriptor
    141142        },
     
    146147                    USBVIRT_REQUEST_RECIPIENT_DEVICE),
    147148                .request = USB_DEVREQ_GET_DESCRIPTOR,
     149                .name = "GetDescriptor",
    148150                .callback = stdreq_on_get_descriptor
    149151        },
     
    268270       
    269271        printf("%s: Simulating keyboard events...\n", NAME);
     272        fibril_sleep(10);
    270273        while (1) {
    271274                kb_process_events(&status, keyboard_events, keyboard_events_count,
  • uspace/drv/vhc/hubops.c

    r76daaf9f rd5e7668  
    519519        {
    520520                STD_REQ(DIR_OUT, REC_DEVICE, USB_DEVREQ_SET_CONFIGURATION),
     521                .name = "SetConfiguration",
    521522                .callback = on_set_configuration
    522523        },
    523524        {
    524525                STD_REQ(DIR_IN, REC_DEVICE, USB_DEVREQ_GET_DESCRIPTOR),
     526                .name = "GetDescriptor",
    525527                .callback = on_get_descriptor
    526528        },
    527529        {
    528530                CLASS_REQ(DIR_IN, REC_DEVICE, USB_DEVREQ_GET_DESCRIPTOR),
     531                .name = "GetDescriptor",
    529532                .callback = on_get_descriptor
    530533        },
    531534        {
    532535                CLASS_REQ(DIR_IN, REC_OTHER, USB_HUB_REQUEST_GET_STATUS),
     536                .name = "GetPortStatus",
    533537                .callback = req_get_port_status
    534538        },
    535539        {
    536540                CLASS_REQ(DIR_OUT, REC_DEVICE, USB_HUB_REQUEST_CLEAR_FEATURE),
     541                .name = "ClearHubFeature",
    537542                .callback = req_clear_hub_feature
    538543        },
    539544        {
    540545                CLASS_REQ(DIR_OUT, REC_OTHER, USB_HUB_REQUEST_CLEAR_FEATURE),
     546                .name = "ClearPortFeature",
    541547                .callback = req_clear_port_feature
    542548        },
    543549        {
    544550                CLASS_REQ(DIR_IN, REC_OTHER, USB_HUB_REQUEST_GET_STATE),
     551                .name = "GetBusState",
    545552                .callback = req_get_bus_state
    546553        },
    547554        {
    548555                CLASS_REQ(DIR_IN, REC_DEVICE, USB_HUB_REQUEST_GET_DESCRIPTOR),
     556                .name = "GetHubDescriptor",
    549557                .callback = req_get_hub_descriptor
    550558        },
    551559        {
    552560                CLASS_REQ(DIR_IN, REC_DEVICE, USB_HUB_REQUEST_GET_STATUS),
     561                .name = "GetHubStatus",
    553562                .callback = req_get_hub_status
    554563        },
    555564        {
    556565                CLASS_REQ(DIR_IN, REC_OTHER, USB_HUB_REQUEST_GET_STATUS),
     566                .name = "GetPortStatus",
    557567                .callback = req_get_port_status
    558568        },
    559569        {
    560570                CLASS_REQ(DIR_OUT, REC_DEVICE, USB_HUB_REQUEST_SET_FEATURE),
     571                .name = "SetHubFeature",
    561572                .callback = req_set_hub_feature
    562573        },
    563574        {
    564575                CLASS_REQ(DIR_OUT, REC_OTHER, USB_HUB_REQUEST_SET_FEATURE),
     576                .name = "SetPortFeature",
    565577                .callback = req_set_port_feature
    566578        },
  • uspace/lib/usbvirt/include/usbvirt/device.h

    r76daaf9f rd5e7668  
    6666        uint8_t request_type;
    6767        uint8_t request;
     68        const char *name;
    6869        usbvirt_control_request_callback_t callback;
    6970} usbvirt_control_transfer_handler_t;
     
    7475        | (((recipient) & 31))
    7576
    76 #define USBVIRT_CONTROL_TRANSFER_HANDLER_LAST { 0, 0, NULL }
     77#define USBVIRT_CONTROL_TRANSFER_HANDLER_LAST { 0, 0, NULL, NULL }
    7778
    7879/** Device operations. */
  • uspace/lib/usbvirt/src/ctrlpipe.c

    r76daaf9f rd5e7668  
    7676}
    7777
     78#define _GET_BIT(byte, bit) \
     79        (((byte) & (1 << (bit))) ? '1' : '0')
     80#define _GET_BITS(byte) \
     81        _GET_BIT(byte, 7), _GET_BIT(byte, 6), _GET_BIT(byte, 5), \
     82        _GET_BIT(byte, 4), _GET_BIT(byte, 3), _GET_BIT(byte, 2), \
     83        _GET_BIT(byte, 1), _GET_BIT(byte, 0)
     84
     85static int find_and_run_handler(usbvirt_device_t *device,
     86    usbvirt_control_transfer_handler_t *handlers,
     87    usb_device_request_setup_packet_t *setup_packet,
     88    uint8_t *data)
     89{
     90        int rc = EFORWARD;
     91        usbvirt_control_transfer_handler_t *suitable_handler
     92            = find_handler(handlers, setup_packet);
     93        if (suitable_handler != NULL) {
     94                const char *callback_name = "user handler";
     95                if (suitable_handler->name != NULL) {
     96                        callback_name = suitable_handler->name;
     97                }
     98                device->lib_debug(device, 1, USBVIRT_DEBUGTAG_CONTROL_PIPE_ZERO,
     99                    "pipe #0 - calling %s " \
     100                        "[%c.%c%c.%c%c%c%c%c, R%d, V%d, I%d, L%d]",
     101                    callback_name,
     102                    _GET_BITS(setup_packet->request_type),
     103                    setup_packet->request, setup_packet->value,
     104                    setup_packet->index, setup_packet->length);
     105                rc = suitable_handler->callback(device, setup_packet, data);
     106        }
     107
     108        return rc;
     109}
     110#undef _GET_BITS
     111#undef _GET_BIT
    78112
    79113
     
    82116int control_pipe(usbvirt_device_t *device, usbvirt_control_transfer_t *transfer)
    83117{
    84         device->lib_debug(device, 1, USBVIRT_DEBUGTAG_CONTROL_PIPE_ZERO,
     118        device->lib_debug(device, 2, USBVIRT_DEBUGTAG_CONTROL_PIPE_ZERO,
    85119            "op on control pipe zero (request_size=%u)", transfer->request_size);
    86120       
     
    91125        usb_device_request_setup_packet_t *request
    92126            = (usb_device_request_setup_packet_t *) transfer->request;
    93         printf("Request: %d,%d\n", request->request_type, request->request);
    94        
     127
    95128        /*
    96129         * First, see whether user provided its own callback.
     
    98131        int rc = EFORWARD;
    99132        if (device->ops) {
    100                 usbvirt_control_transfer_handler_t *user_handler
    101                     = find_handler(device->ops->control_transfer_handlers,
    102                     request);
    103                 if (user_handler != NULL) {
    104                         rc = user_handler->callback(device, request,
    105                             transfer->data);
    106                 }
     133                rc = find_and_run_handler(device,
     134                    device->ops->control_transfer_handlers,
     135                    request, transfer->data);
    107136        }
    108137
     
    112141         */
    113142        if (rc == EFORWARD) {
    114                 usbvirt_control_transfer_handler_t *lib_handler
    115                     = find_handler(control_pipe_zero_local_handlers,
    116                     request);
    117                 if (lib_handler != NULL) {
    118                         rc = lib_handler->callback(device, request,
    119                             transfer->data);
    120                 }
     143                rc = find_and_run_handler(device,
     144                    control_pipe_zero_local_handlers,
     145                    request, transfer->data);
    121146        }
    122147       
  • uspace/lib/usbvirt/src/stdreq.c

    r76daaf9f rd5e7668  
    184184                .request_type = MAKE_BM_REQUEST_DEV(USB_DIRECTION_IN),
    185185                .request = USB_DEVREQ_GET_DESCRIPTOR,
     186                .name = "GetDescriptor()",
    186187                .callback = handle_get_descriptor
    187188        },
     
    189190                .request_type = MAKE_BM_REQUEST_DEV(USB_DIRECTION_OUT),
    190191                .request = USB_DEVREQ_SET_ADDRESS,
     192                .name = "SetAddress()",
    191193                .callback = handle_set_address
    192194        },
     
    194196                .request_type = MAKE_BM_REQUEST_DEV(USB_DIRECTION_OUT),
    195197                .request = USB_DEVREQ_SET_CONFIGURATION,
     198                .name = "SetConfiguration()",
    196199                .callback = handle_set_configuration
    197200        },
Note: See TracChangeset for help on using the changeset viewer.