Ignore:
Timestamp:
2010-10-24T16:43:40Z (15 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
355f7c2
Parents:
b8a3cda
Message:

Virtual USB overhaul almost complete

The virtual HC, hub and keyboard are rewritten after changes to HCD API.
Comments will be added later.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hw/bus/usb/hcd/virtual/hubops.c

    rb8a3cda r7a7bfeb3  
    5959static int on_class_request(struct usbvirt_device *dev,
    6060    usb_device_request_setup_packet_t *request, uint8_t *data);
     61static int on_data_request(struct usbvirt_device *dev,
     62    usb_endpoint_t endpoint,
     63    void *buffer, size_t size, size_t *actual_size);
     64
    6165
    6266static usbvirt_standard_device_request_ops_t standard_request_ops = {
     
    7882        .standard_request_ops = &standard_request_ops,
    7983        .on_class_device_request = on_class_request,
    80         .on_data = NULL
     84        .on_data = NULL,
     85        .on_data_request = on_data_request
    8186};
    8287
     
    8590{
    8691        if (request->value_high == USB_DESCTYPE_HUB) {
    87                 int rc = dev->send_data(dev, 0,
     92                int rc = dev->control_transfer_reply(dev, 0,
    8893                    &hub_descriptor, hub_descriptor.length);
    8994               
     
    196201        uint32_t hub_status = 0;
    197202       
    198         return virthub_dev.send_data(&virthub_dev, 0, &hub_status, 4);
     203        return virthub_dev.control_transfer_reply(&virthub_dev, 0,
     204            &hub_status, 4);
    199205}
    200206
     
    230236        status |= (port->status_change << 16);
    231237       
    232         return virthub_dev.send_data(&virthub_dev, 0, &status, 4);
     238        return virthub_dev.control_transfer_reply(&virthub_dev, 0, &status, 4);
    233239}
    234240
     
    334340{
    335341        port->status_change &= (~change);
    336         hub_check_port_changes();
    337342}
    338343
     
    341346        port->status_change |= change;
    342347}
     348
     349static int on_data_request(struct usbvirt_device *dev,
     350    usb_endpoint_t endpoint,
     351    void *buffer, size_t size, size_t *actual_size)
     352{
     353        uint8_t change_map = 0;
     354       
     355        size_t i;
     356        for (i = 0; i < HUB_PORT_COUNT; i++) {
     357                hub_port_t *port = &hub_dev.ports[i];
     358               
     359                if (port->status_change != 0) {
     360                        change_map |= (1 << (i + 1));
     361                }
     362        }
     363       
     364        uint8_t *b = (uint8_t *) buffer;
     365        if (size > 0) {
     366                *b = change_map;
     367                *actual_size = 1;
     368        }
     369       
     370        return EOK;
     371}
     372
    343373
    344374/**
Note: See TracChangeset for help on using the changeset viewer.