Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/vhc/devices.c

    rbd8c753d r13101d06  
    2727 */
    2828
    29 /** @addtogroup drvusbvhc
     29/** @addtogroup usb
    3030 * @{
    3131 */
     
    5858/** Create virtual device.
    5959 *
     60 * @param address USB address.
    6061 * @param phone Callback phone.
    61  * @param id Device id.
    6262 * @return New device.
    63  * @retval NULL Out of memory.
     63 * @retval NULL Out of memory or address already occupied.
    6464 */
    65 virtdev_connection_t *virtdev_add_device(int phone, sysarg_t id)
     65virtdev_connection_t *virtdev_add_device(int phone)
    6666{
    6767        virtdev_connection_t *dev = (virtdev_connection_t *)
    6868            malloc(sizeof(virtdev_connection_t));
    69         if (dev == NULL) {
    70                 return NULL;
    71         }
    72 
    7369        dev->phone = phone;
    74         dev->id = id;
    7570        list_append(&dev->link, &devices);
    7671       
     
    7873       
    7974        return dev;
    80 }
    81 
    82 /** Find virtual device by id.
    83  *
    84  * @param id Device id.
    85  * @return Device with given id.
    86  * @retval NULL No such device.
    87  */
    88 virtdev_connection_t *virtdev_find(sysarg_t id)
    89 {
    90         link_t *pos;
    91         list_foreach(pos, &devices) {
    92                 virtdev_connection_t *dev
    93                     = list_get_instance(pos, virtdev_connection_t, link);
    94                 if (dev->id == id) {
    95                         return dev;
    96                 }
    97         }
    98 
    99         return NULL;
    10075}
    10176
     
    11590usb_transaction_outcome_t virtdev_send_to_all(transaction_t *transaction)
    11691{
    117         /* For easier debugging. */
    118         switch (transaction->type) {
    119                 case USBVIRT_TRANSACTION_SETUP:
    120                 case USBVIRT_TRANSACTION_OUT:
    121                         transaction->actual_len = transaction->len;
    122                         break;
    123                 case USBVIRT_TRANSACTION_IN:
    124                         transaction->actual_len = 0;
    125                         break;
    126                 default:
    127                         assert(false && "unreachable branch in switch()");
    128         }
    129         usb_transaction_outcome_t outcome = USB_OUTCOME_BABBLE;
    130 
    13192        link_t *pos;
    13293        list_foreach(pos, &devices) {
     
    180141                        rc = (int)answer_rc;
    181142                }
    182 
    183                 /*
    184                  * If at least one device was able to accept this
    185                  * transaction and process it, we can announce success.
    186                  */
    187                 if (rc == EOK) {
    188                         outcome = USB_OUTCOME_OK;
    189                 }
    190143        }
    191144       
     
    212165                                    transaction->buffer, transaction->len,
    213166                                    &tmp);
    214                                 transaction->actual_len = tmp;
     167                                if (tmp < transaction->len) {
     168                                        transaction->len = tmp;
     169                                }
    215170                                break;
    216171                               
     
    223178                }
    224179                dprintf(4, "transaction on hub processed...");
    225                 outcome = USB_OUTCOME_OK;
    226180        }
    227181       
     
    230184         * real-life image.
    231185         */
    232         return outcome;
     186        return USB_OUTCOME_OK;
    233187}
    234188
Note: See TracChangeset for help on using the changeset viewer.