Changes in uspace/drv/usbmid/explore.c [fcafa04:8f74140c] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbmid/explore.c
rfcafa04 r8f74140c 40 40 #include <usb/request.h> 41 41 #include <usb/dp.h> 42 #include <usb/ddfiface.h>43 42 #include "usbmid.h" 44 45 /** Operations of the device itself. */46 static ddf_dev_ops_t mid_device_ops = {47 .interfaces[USB_DEV_IFACE] = &usb_iface_hub_impl48 };49 43 50 44 /** Find starting indexes of all interface descriptors in a configuration. … … 111 105 * @return Whether to accept this device from devman. 112 106 */ 113 bool usbmid_explore_device(usb _device_t *dev)107 bool usbmid_explore_device(usbmid_device_t *dev) 114 108 { 115 int rc; 116 117 int dev_class = dev->descriptors.device.device_class; 118 if (dev_class != USB_CLASS_USE_INTERFACE) { 109 usb_standard_device_descriptor_t device_descriptor; 110 int rc = usb_request_get_device_descriptor(&dev->ctrl_pipe, 111 &device_descriptor); 112 if (rc != EOK) { 113 usb_log_error("Getting device descriptor failed: %s.\n", 114 str_error(rc)); 115 return false; 116 } 117 118 if (device_descriptor.device_class != USB_CLASS_USE_INTERFACE) { 119 119 usb_log_warning( 120 120 "Device class: %d (%s), but expected class 0.\n", 121 dev_class, usb_str_class(dev_class)); 121 device_descriptor.device_class, 122 usb_str_class(device_descriptor.device_class)); 122 123 usb_log_error("Not multi interface device, refusing.\n"); 123 124 return false; 124 125 } 125 126 126 /* Short cuts to save on typing ;-). */ 127 uint8_t *config_descriptor_raw = dev->descriptors.configuration; 128 size_t config_descriptor_size = dev->descriptors.configuration_size; 129 usb_standard_configuration_descriptor_t *config_descriptor = 130 (usb_standard_configuration_descriptor_t *) config_descriptor_raw; 127 size_t config_descriptor_size; 128 uint8_t *config_descriptor_raw = NULL; 129 rc = usb_request_get_full_configuration_descriptor_alloc( 130 &dev->ctrl_pipe, 0, 131 (void **) &config_descriptor_raw, &config_descriptor_size); 132 if (rc != EOK) { 133 usb_log_error("Failed getting full config descriptor: %s.\n", 134 str_error(rc)); 135 return false; 136 } 137 138 usb_standard_configuration_descriptor_t *config_descriptor 139 = (usb_standard_configuration_descriptor_t *) config_descriptor_raw; 131 140 132 141 size_t *interface_descriptors … … 145 154 if (interface_descriptors_count == (size_t) -1) { 146 155 usb_log_error("Problem parsing configuration descriptor.\n"); 156 free(config_descriptor_raw); 147 157 free(interface_descriptors); 148 158 return false; … … 155 165 usb_log_error("Failed to set device configuration: %s.\n", 156 166 str_error(rc)); 167 free(config_descriptor_raw); 157 168 free(interface_descriptors); 158 169 return false; … … 161 172 162 173 /* Create control function */ 163 ddf_fun_t *ctl_fun = ddf_fun_create(dev->d df_dev, fun_exposed, "ctl");174 ddf_fun_t *ctl_fun = ddf_fun_create(dev->dev, fun_exposed, "ctl"); 164 175 if (ctl_fun == NULL) { 165 176 usb_log_error("Failed to create control function.\n"); 166 free(interface_descriptors); 167 return false; 168 } 169 170 ctl_fun->ops = &mid_device_ops; 171 177 free(config_descriptor_raw); 178 free(interface_descriptors); 179 return false; 180 } 172 181 rc = ddf_fun_bind(ctl_fun); 173 182 if (rc != EOK) { 174 183 usb_log_error("Failed to bind control function: %s.\n", 175 184 str_error(rc)); 185 free(config_descriptor_raw); 176 186 free(interface_descriptors); 177 187 return false; … … 189 199 (int) interface->interface_number, 190 200 usb_str_class(interface->interface_class)); 191 rc = usbmid_spawn_interface_child(dev, &dev ->descriptors.device,201 rc = usbmid_spawn_interface_child(dev, &device_descriptor, 192 202 interface); 193 203 if (rc != EOK) { … … 197 207 } 198 208 209 free(config_descriptor_raw); 210 199 211 return true; 200 212 }
Note:
See TracChangeset
for help on using the changeset viewer.