Changeset 03171de in mainline for uspace/lib/usb/src


Ignore:
Timestamp:
2010-11-24T14:27:33Z (15 years ago)
Author:
smekideki@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2e15ac40, bbe7848
Parents:
8cd1aa5e
Message:

basic hub driver structures

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/src/hcdhubd.c

    r8cd1aa5e r03171de  
    3939#include <bool.h>
    4040#include <errno.h>
     41#include <usb/classes/hub.h>
    4142
    4243#define USB_HUB_DEVICE_NAME "usbhub"
     
    5758};
    5859
     60size_t USB_HUB_MAX_DESCRIPTOR_SIZE = 71;
     61
     62uint8_t USB_HUB_DESCRIPTOR_TYPE = 0x29;
     63
     64//*********************************************
     65//
     66//  various utils
     67//
     68//*********************************************
     69
     70
     71void * usb_serialize_hub_descriptor(usb_hub_descriptor_t * descriptor){
     72        //base size
     73        size_t size = 7;
     74        //variable size according to port count
     75        size_t var_size = descriptor->ports_count / 8 + ((descriptor->ports_count % 8>0)?1:0);
     76        size += 2 * var_size;
     77        uint8_t * result = (uint8_t*) malloc(size);
     78        //size
     79        result[0]=size;
     80        //descriptor type
     81        result[1]=USB_HUB_DESCRIPTOR_TYPE;
     82        result[2]=descriptor->ports_count;
     83        /// @fixme handling of endianness??
     84        result[3]=descriptor->hub_characteristics / 256;
     85        result[4]=descriptor->hub_characteristics % 256;
     86        result[5]=descriptor->pwr_on_2_good_time;
     87        result[6]=descriptor->current_requirement;
     88
     89        size_t i;
     90        for(i=0;i<var_size;++i){
     91                result[7+i]=descriptor->devices_removable[i];
     92        }
     93        for(i=0;i<var_size;++i){
     94                result[7+var_size+i]=255;
     95        }
     96        return result;
     97}
     98
     99usb_hub_descriptor_t * usb_deserialize_hub_desriptor(void * serialized_descriptor){
     100        uint8_t * sdescriptor = (uint8_t*)serialized_descriptor;
     101        if(sdescriptor[1]!=USB_HUB_DESCRIPTOR_TYPE) return NULL;
     102        usb_hub_descriptor_t * result = (usb_hub_descriptor_t*) malloc(sizeof(usb_hub_descriptor_t));
     103        //uint8_t size = sdescriptor[0];
     104        result->ports_count = sdescriptor[2];
     105        /// @fixme handling of endianness??
     106        result->hub_characteristics = sdescriptor[4] + 256 * sdescriptor[3];
     107        result->pwr_on_2_good_time=sdescriptor[5];
     108        result->current_requirement=sdescriptor[6];
     109        size_t var_size = result->ports_count / 8 + ((result->ports_count % 8>0)?1:0);
     110        result->devices_removable = (uint8_t*)malloc(var_size);
     111
     112        size_t i;
     113        for(i=0;i<var_size;++i){
     114                result->devices_removable[i] = sdescriptor[7+i];
     115        }
     116        return result;
     117}
     118
     119
     120//*********************************************
     121//
     122//  hub driver code
     123//
     124//*********************************************
     125
     126
     127
    59128static void set_hub_address(usb_hc_device_t *hc, usb_address_t address);
    60129
     
    62131 *
    63132 * @param dev New device.
    64  * @return Error code.
     133 * @return Error code.hub added, hurrah!\n"
    65134 */
    66135static int add_device(device_t *dev)
     
    109178                 * connected devices.
    110179                 */
     180                //insert hub into list
     181                //find owner hcd
     182                device_t * my_hcd = dev;
     183                while(my_hcd->parent)
     184                    my_hcd = my_hcd->parent;
     185                //dev->
     186                printf("%s: owner hcd found: %s\n",hc_driver->name, my_hcd->name);
     187
    111188
    112189                return ENOTSUP;
Note: See TracChangeset for help on using the changeset viewer.