Changeset 954ea70 in mainline for uspace/lib/usbvirt/ctrlpipe.c


Ignore:
Timestamp:
2010-10-22T14:55:33Z (14 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b8a3cda
Parents:
a498728
Message:

usbvirt: standard requests handled better

Also, SET_ADDRESS works according to specification.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbvirt/ctrlpipe.c

    ra498728 r954ea70  
    4545        ((value & GET_MIDBITS_MASK(size, shift)) >> shift)
    4646
     47usb_address_t dev_new_address = -1;
     48
    4749static int request_get_type(uint8_t request_type)
    4850{
     
    6365        int type = request_get_type(request->request_type);
    6466       
     67        int rc = EOK;
     68       
    6569        switch (type) {
    6670                case REQUEST_TYPE_STANDARD:
    67                         return handle_std_request(request, remaining_data);
     71                        rc = handle_std_request(request, remaining_data);
    6872                        break;
    6973                case REQUEST_TYPE_CLASS:
    7074                        if (DEVICE_HAS_OP(device, on_class_device_request)) {
    71                                 return device->ops->on_class_device_request(device,
     75                                rc = device->ops->on_class_device_request(device,
    7276                                    request, remaining_data);
    7377                        }
     
    7781        }
    7882       
    79         return EOK;
     83        device->send_data(device, 0, NULL, 0);
     84       
     85        if (dev_new_address != -1) {
     86                /*
     87                 * TODO: handle when this request is invalid (e.g.
     88                 * setting address when in configured state).
     89                 */
     90                if (dev_new_address == 0) {
     91                        device->state = USBVIRT_STATE_DEFAULT;
     92                } else {
     93                        device->state = USBVIRT_STATE_ADDRESS;
     94                }
     95                device->address = dev_new_address;
     96               
     97                dev_new_address = -1;
     98        }
     99       
     100        return rc;
    80101}
    81102
Note: See TracChangeset for help on using the changeset viewer.