Changeset d5e7668 in mainline for uspace/lib/usbvirt/src/ctrlpipe.c


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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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       
Note: See TracChangeset for help on using the changeset viewer.