Ignore:
Timestamp:
2011-10-27T10:45:08Z (14 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
83c3123
Parents:
069b80d
Message:

libusbhost: Merge find_by_address and get_speed.

These functions were almost identical.
Clear handle on address release.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbhost/src/usb_device_manager.c

    r069b80d r4267908  
    3838#include <usb/host/usb_device_manager.h>
    3939
    40 /*----------------------------------------------------------------------------*/
    4140/** Initialize device manager structure.
    4241 *
     
    7776                ++new_address;
    7877                if (new_address > USB11_ADDRESS_MAX)
    79                         new_address = 1;
     78                        new_address = 1; // NOTE it should be safe to put 0 here
     79                                         // TODO Use mod
    8080                if (new_address == instance->last_address) {
    8181                        fibril_mutex_unlock(&instance->guard);
     
    8686        assert(new_address != USB_ADDRESS_DEFAULT);
    8787        assert(instance->devices[new_address].occupied == false);
     88        assert(instance->devices[new_address].handle == 0);
    8889
    8990        instance->devices[new_address].occupied = true;
     
    131132
    132133        instance->devices[address].occupied = false;
     134        instance->devices[address].handle = 0;
    133135        fibril_mutex_unlock(&instance->guard);
    134136}
     
    140142 * @return USB Address, or error code.
    141143 */
    142 usb_address_t usb_device_manager_find(
     144usb_address_t usb_device_manager_find_address(
    143145    usb_device_manager_t *instance, devman_handle_t handle)
    144146{
     
    157159        return ENOENT;
    158160}
    159 
    160 /** Find devman handle assigned to USB address.
    161  * Intentionally refuse to find handle of default address.
     161/*----------------------------------------------------------------------------*/
     162/** Find devman handle and speed assigned to USB address.
     163 * Intentionally refuse to work on default address.
    162164 *
    163165 * @param[in] instance Device manager structure to use.
    164166 * @param[in] address Address the caller wants to find.
    165167 * @param[out] handle Where to store found handle.
    166  * @return Whether such address is currently occupied.
     168 * @param[out] speed Assigned speed.
     169 * @return Error code.
    167170 */
    168 bool usb_device_manager_find_by_address(usb_device_manager_t *instance,
    169     usb_address_t address, devman_handle_t *handle)
     171int usb_device_manager_get_info_by_address(usb_device_manager_t *instance,
     172    usb_address_t address, devman_handle_t *handle, usb_speed_t *speed)
    170173{
    171174        assert(instance);
     175        if ((address <= 0) || (address >= USB_ADDRESS_COUNT)) {
     176                return EINVAL;
     177        }
     178
    172179        fibril_mutex_lock(&instance->guard);
    173         if ((address <= 0) || (address >= USB_ADDRESS_COUNT)) {
    174                 fibril_mutex_unlock(&instance->guard);
    175                 return false;
    176         }
    177180        if (!instance->devices[address].occupied) {
    178181                fibril_mutex_unlock(&instance->guard);
    179                 return false;
     182                return ENOENT;
    180183        }
    181184
     
    183186                *handle = instance->devices[address].handle;
    184187        }
     188        if (speed != NULL) {
     189                *speed = instance->devices[address].speed;
     190        }
    185191
    186192        fibril_mutex_unlock(&instance->guard);
    187         return true;
    188 }
    189 
    190 /*----------------------------------------------------------------------------*/
    191 /** Get speed associated with the address
    192  *
    193  * @param[in] instance Device manager structure to use.
    194  * @param[in] address Address of the device.
    195  * @return USB speed.
    196  */
    197 usb_speed_t usb_device_manager_get_speed(
    198     usb_device_manager_t *instance, usb_address_t address)
    199 {
    200         assert(instance);
    201         assert(address >= 0);
    202         assert(address <= USB11_ADDRESS_MAX);
    203 
    204         return instance->devices[address].speed;
     193        return EOK;
    205194}
    206195/**
Note: See TracChangeset for help on using the changeset viewer.