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/devices.c

    rb8a3cda r7a7bfeb3  
    126126                aid_t req;
    127127                int rc = EOK;
    128                
    129                 req = async_send_4(dev->phone,
    130                     IPC_M_USBVIRT_DATA_TO_DEVICE,
     128                int method = IPC_M_USBVIRT_TRANSACTION_SETUP;
     129               
     130                switch (transaction->type) {
     131                        case USBVIRT_TRANSACTION_SETUP:
     132                                method = IPC_M_USBVIRT_TRANSACTION_SETUP;
     133                                break;
     134                        case USBVIRT_TRANSACTION_IN:
     135                                method = IPC_M_USBVIRT_TRANSACTION_IN;
     136                                break;
     137                        case USBVIRT_TRANSACTION_OUT:
     138                                method = IPC_M_USBVIRT_TRANSACTION_OUT;
     139                                break;
     140                }
     141               
     142                req = async_send_3(dev->phone,
     143                    method,
    131144                    transaction->target.address,
    132145                    transaction->target.endpoint,
    133                     transaction->type,
    134146                    transaction->len,
    135147                    &answer_data);
    136148               
    137149                if (transaction->len > 0) {
    138                         rc = async_data_write_start(dev->phone,
    139                             transaction->buffer, transaction->len);
    140                 }
     150                        if (transaction->type == USBVIRT_TRANSACTION_IN) {
     151                                rc = async_data_read_start(dev->phone,
     152                                    transaction->buffer, transaction->len);
     153                        } else {
     154                                rc = async_data_write_start(dev->phone,
     155                                    transaction->buffer, transaction->len);
     156                        }
     157                }
     158               
    141159                if (rc != EOK) {
    142160                        async_wait_for(req, NULL);
     
    152170         */
    153171        if (virthub_dev.address == transaction->target.address) {
    154                 virthub_dev.receive_data(&virthub_dev, transaction->target.endpoint,
    155                     transaction->buffer, transaction->len);
     172                size_t tmp;
     173                switch (transaction->type) {
     174                        case USBVIRT_TRANSACTION_SETUP:
     175                                virthub_dev.transaction_setup(&virthub_dev,
     176                                    transaction->target.endpoint,
     177                                    transaction->buffer, transaction->len);
     178                                break;
     179                               
     180                        case USBVIRT_TRANSACTION_IN:
     181                                virthub_dev.transaction_in(&virthub_dev,
     182                                    transaction->target.endpoint,
     183                                    transaction->buffer, transaction->len,
     184                                    &tmp);
     185                                if (tmp < transaction->len) {
     186                                        transaction->len = tmp;
     187                                }
     188                                break;
     189                               
     190                        case USBVIRT_TRANSACTION_OUT:
     191                                virthub_dev.transaction_out(&virthub_dev,
     192                                    transaction->target.endpoint,
     193                                    transaction->buffer, transaction->len);
     194                                break;
     195                }
    156196        }
    157197       
Note: See TracChangeset for help on using the changeset viewer.