Changeset cd5b878 in mainline for uspace/drv/usbhub/utils.c
- Timestamp:
- 2011-04-15T11:49:36Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c1693dae
- Parents:
- 3a85a2b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhub/utils.c
r3a85a2b rcd5b878 56 56 //hub descriptor utils 57 57 58 void * usb_serialize_hub_descriptor(usb_hub_descriptor_t * descriptor) { 58 /** 59 * create uint8_t array with serialized descriptor 60 * 61 * @param descriptor 62 * @return newly created serializd descriptor pointer 63 */ 64 void * usb_create_serialized_hub_descriptor(usb_hub_descriptor_t * descriptor) { 59 65 //base size 60 66 size_t size = 7; … … 64 70 uint8_t * result = malloc(size); 65 71 //size 66 result[0] = size; 72 usb_serialize_hub_descriptor(descriptor,result); 73 return result; 74 } 75 76 /** 77 * serialize descriptor into given buffer 78 * 79 * The buffer size is not checked. 80 * @param descriptor 81 * @param serialized_descriptor 82 */ 83 void usb_serialize_hub_descriptor(usb_hub_descriptor_t * descriptor, 84 void * serialized_descriptor) { 85 //base size 86 uint8_t * sdescriptor = serialized_descriptor; 87 size_t size = 7; 88 //variable size according to port count 89 size_t var_size = (descriptor->ports_count+7)/8; 90 size += 2 * var_size; 91 //size 92 sdescriptor[0] = size; 67 93 //descriptor type 68 result[1] = USB_DESCTYPE_HUB;69 result[2] = descriptor->ports_count;94 sdescriptor[1] = USB_DESCTYPE_HUB; 95 sdescriptor[2] = descriptor->ports_count; 70 96 /// @fixme handling of endianness?? 71 result[3] = descriptor->hub_characteristics / 256;72 result[4] = descriptor->hub_characteristics % 256;73 result[5] = descriptor->pwr_on_2_good_time;74 result[6] = descriptor->current_requirement;97 sdescriptor[3] = descriptor->hub_characteristics / 256; 98 sdescriptor[4] = descriptor->hub_characteristics % 256; 99 sdescriptor[5] = descriptor->pwr_on_2_good_time; 100 sdescriptor[6] = descriptor->current_requirement; 75 101 76 102 size_t i; 77 103 for (i = 0; i < var_size; ++i) { 78 result[7 + i] = descriptor->devices_removable[i];104 sdescriptor[7 + i] = descriptor->devices_removable[i]; 79 105 } 80 106 for (i = 0; i < var_size; ++i) { 81 result[7 + var_size + i] = 255;107 sdescriptor[7 + var_size + i] = 255; 82 108 } 83 return result;84 109 } 85 110 86 usb_hub_descriptor_t * usb_deserialize_hub_desriptor( 111 112 /** 113 * create deserialized desriptor structure out of serialized descriptor 114 * 115 * The serialized descriptor must be proper usb hub descriptor, 116 * otherwise an eerror might occur. 117 * 118 * @param sdescriptor serialized descriptor 119 * @return newly created deserialized descriptor pointer 120 */ 121 usb_hub_descriptor_t * usb_create_deserialized_hub_desriptor( 87 122 void * serialized_descriptor) { 88 123 uint8_t * sdescriptor = serialized_descriptor; … … 95 130 96 131 usb_hub_descriptor_t * result = malloc(sizeof(usb_hub_descriptor_t)); 97 132 if(result) 133 usb_deserialize_hub_desriptor(serialized_descriptor,result); 134 return result; 135 } 98 136 99 result->ports_count = sdescriptor[2]; 137 /** 138 * deserialize descriptor into given pointer 139 * 140 * @param serialized_descriptor 141 * @param descriptor 142 * @return 143 */ 144 void usb_deserialize_hub_desriptor( 145 void * serialized_descriptor, usb_hub_descriptor_t * descriptor) { 146 uint8_t * sdescriptor = serialized_descriptor; 147 descriptor->ports_count = sdescriptor[2]; 100 148 /// @fixme handling of endianness?? 101 result->hub_characteristics = sdescriptor[4] + 256 * sdescriptor[3];102 result->pwr_on_2_good_time = sdescriptor[5];103 result->current_requirement = sdescriptor[6];104 size_t var_size = ( result->ports_count+7) / 8;105 result->devices_removable = (uint8_t*) malloc(var_size);149 descriptor->hub_characteristics = sdescriptor[4] + 256 * sdescriptor[3]; 150 descriptor->pwr_on_2_good_time = sdescriptor[5]; 151 descriptor->current_requirement = sdescriptor[6]; 152 size_t var_size = (descriptor->ports_count+7) / 8; 153 //descriptor->devices_removable = (uint8_t*) malloc(var_size); 106 154 107 155 size_t i; 108 156 for (i = 0; i < var_size; ++i) { 109 result->devices_removable[i] = sdescriptor[7 + i];157 descriptor->devices_removable[i] = sdescriptor[7 + i]; 110 158 } 111 return result;112 159 } 113 114 115 160 116 161 /**
Note:
See TracChangeset
for help on using the changeset viewer.