Changeset 03171de in mainline for uspace/lib/usb/src/hcdhubd.c
- Timestamp:
- 2010-11-24T14:27:33Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2e15ac40, bbe7848
- Parents:
- 8cd1aa5e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/hcdhubd.c
r8cd1aa5e r03171de 39 39 #include <bool.h> 40 40 #include <errno.h> 41 #include <usb/classes/hub.h> 41 42 42 43 #define USB_HUB_DEVICE_NAME "usbhub" … … 57 58 }; 58 59 60 size_t USB_HUB_MAX_DESCRIPTOR_SIZE = 71; 61 62 uint8_t USB_HUB_DESCRIPTOR_TYPE = 0x29; 63 64 //********************************************* 65 // 66 // various utils 67 // 68 //********************************************* 69 70 71 void * 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 99 usb_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 59 128 static void set_hub_address(usb_hc_device_t *hc, usb_address_t address); 60 129 … … 62 131 * 63 132 * @param dev New device. 64 * @return Error code. 133 * @return Error code.hub added, hurrah!\n" 65 134 */ 66 135 static int add_device(device_t *dev) … … 109 178 * connected devices. 110 179 */ 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 111 188 112 189 return ENOTSUP;
Note:
See TracChangeset
for help on using the changeset viewer.