Changeset 51f0e410 in mainline
- Timestamp:
- 2011-02-20T17:58:31Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7f56fb7
- Parents:
- 6e6dc7d
- Location:
- uspace
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbmid/usbmid.c
r6e6dc7d r51f0e410 208 208 child->ops = &child_device_ops; 209 209 210 rc = usb_device_create_match_ids_from_interface(interface_descriptor, 210 rc = usb_device_create_match_ids_from_interface(device_descriptor, 211 interface_descriptor, 211 212 &child->match_ids); 212 213 if (rc != EOK) { -
uspace/lib/usb/include/usb/recognise.h
r6e6dc7d r51f0e410 42 42 43 43 int usb_device_create_match_ids_from_interface( 44 const usb_standard_device_descriptor_t *, 44 45 const usb_standard_interface_descriptor_t *, match_id_list_t *); 45 46 -
uspace/lib/usb/src/recognise.c
r6e6dc7d r51f0e410 130 130 */ 131 131 int usb_device_create_match_ids_from_interface( 132 const usb_standard_interface_descriptor_t *descriptor, 132 const usb_standard_device_descriptor_t *desc_device, 133 const usb_standard_interface_descriptor_t *desc_interface, 133 134 match_id_list_t *matches) 134 135 { 135 if (desc riptor== NULL) {136 if (desc_interface == NULL) { 136 137 return EINVAL; 137 138 } … … 140 141 } 141 142 142 if (desc riptor->interface_class == USB_CLASS_USE_INTERFACE) {143 if (desc_interface->interface_class == USB_CLASS_USE_INTERFACE) { 143 144 return ENOENT; 144 145 } 145 146 146 const char *classname = usb_str_class(desc riptor->interface_class);147 const char *classname = usb_str_class(desc_interface->interface_class); 147 148 assert(classname != NULL); 148 149 149 ADD_MATCHID_OR_RETURN(matches, 50, 150 "usb&interface&class=%s", 151 classname); 152 ADD_MATCHID_OR_RETURN(matches, 70, 153 "usb&interface&class=%s&subclass=0x%02x", 154 classname, descriptor->interface_subclass); 155 ADD_MATCHID_OR_RETURN(matches, 100, 156 "usb&interface&class=%s&subclass=0x%02x&protocol=0x%02x", 157 classname, descriptor->interface_subclass, 158 descriptor->interface_protocol); 150 #define IFACE_PROTOCOL_FMT "interface&class=%s&subclass=0x%02x&protocol=0x%02x" 151 #define IFACE_PROTOCOL_ARGS classname, desc_interface->interface_subclass, \ 152 desc_interface->interface_protocol 153 154 #define IFACE_SUBCLASS_FMT "interface&class=%s&subclass=0x%02x" 155 #define IFACE_SUBCLASS_ARGS classname, desc_interface->interface_subclass 156 157 #define IFACE_CLASS_FMT "interface&class=%s" 158 #define IFACE_CLASS_ARGS classname 159 160 #define VENDOR_RELEASE_FMT "vendor=0x%04x&product=0x%04x&release=" BCD_FMT 161 #define VENDOR_RELEASE_ARGS desc_device->vendor_id, desc_device->product_id, \ 162 BCD_ARGS(desc_device->device_version) 163 164 #define VENDOR_PRODUCT_FMT "vendor=0x%04x&product=0x%04x" 165 #define VENDOR_PRODUCT_ARGS desc_device->vendor_id, desc_device->product_id 166 167 #define VENDOR_ONLY_FMT "vendor=0x%04x" 168 #define VENDOR_ONLY_ARGS desc_device->vendor_id 169 170 /* 171 * If the vendor is specified, create match ids with vendor with 172 * higher score. 173 * Then the same ones without the vendor part. 174 */ 175 if ((desc_device != NULL) && (desc_device->vendor_id != 0)) { 176 /* First, interface matches with device release number. */ 177 ADD_MATCHID_OR_RETURN(matches, 250, 178 "usb&" VENDOR_RELEASE_FMT "&" IFACE_PROTOCOL_FMT, 179 VENDOR_RELEASE_ARGS, IFACE_PROTOCOL_ARGS); 180 ADD_MATCHID_OR_RETURN(matches, 240, 181 "usb&" VENDOR_RELEASE_FMT "&" IFACE_SUBCLASS_FMT, 182 VENDOR_RELEASE_ARGS, IFACE_SUBCLASS_ARGS); 183 ADD_MATCHID_OR_RETURN(matches, 230, 184 "usb&" VENDOR_RELEASE_FMT "&" IFACE_CLASS_FMT, 185 VENDOR_RELEASE_ARGS, IFACE_CLASS_ARGS); 186 187 /* Next, interface matches without release number. */ 188 ADD_MATCHID_OR_RETURN(matches, 220, 189 "usb&" VENDOR_PRODUCT_FMT "&" IFACE_PROTOCOL_FMT, 190 VENDOR_PRODUCT_ARGS, IFACE_PROTOCOL_ARGS); 191 ADD_MATCHID_OR_RETURN(matches, 210, 192 "usb&" VENDOR_PRODUCT_FMT "&" IFACE_SUBCLASS_FMT, 193 VENDOR_PRODUCT_ARGS, IFACE_SUBCLASS_ARGS); 194 ADD_MATCHID_OR_RETURN(matches, 200, 195 "usb&" VENDOR_PRODUCT_FMT "&" IFACE_CLASS_FMT, 196 VENDOR_PRODUCT_ARGS, IFACE_CLASS_ARGS); 197 198 /* Finally, interface matches with only vendor. */ 199 ADD_MATCHID_OR_RETURN(matches, 190, 200 "usb&" VENDOR_ONLY_FMT "&" IFACE_PROTOCOL_FMT, 201 VENDOR_ONLY_ARGS, IFACE_PROTOCOL_ARGS); 202 ADD_MATCHID_OR_RETURN(matches, 180, 203 "usb&" VENDOR_ONLY_FMT "&" IFACE_SUBCLASS_FMT, 204 VENDOR_ONLY_ARGS, IFACE_SUBCLASS_ARGS); 205 ADD_MATCHID_OR_RETURN(matches, 170, 206 "usb&" VENDOR_ONLY_FMT "&" IFACE_CLASS_FMT, 207 VENDOR_ONLY_ARGS, IFACE_CLASS_ARGS); 208 } 209 210 /* Now, the same but without any vendor specification. */ 211 ADD_MATCHID_OR_RETURN(matches, 160, 212 "usb&" IFACE_PROTOCOL_FMT, 213 IFACE_PROTOCOL_ARGS); 214 ADD_MATCHID_OR_RETURN(matches, 150, 215 "usb&" IFACE_SUBCLASS_FMT, 216 IFACE_SUBCLASS_ARGS); 217 ADD_MATCHID_OR_RETURN(matches, 140, 218 "usb&" IFACE_CLASS_FMT, 219 IFACE_CLASS_ARGS); 220 221 #undef IFACE_PROTOCOL_FMT 222 #undef IFACE_PROTOCOL_ARGS 223 #undef IFACE_SUBCLASS_FMT 224 #undef IFACE_SUBCLASS_ARGS 225 #undef IFACE_CLASS_FMT 226 #undef IFACE_CLASS_ARGS 227 #undef VENDOR_RELEASE_FMT 228 #undef VENDOR_RELEASE_ARGS 229 #undef VENDOR_PRODUCT_FMT 230 #undef VENDOR_PRODUCT_ARGS 231 #undef VENDOR_ONLY_FMT 232 #undef VENDOR_ONLY_ARGS 159 233 160 234 return EOK; … … 231 305 return ENOENT; 232 306 } 233 307 234 308 position += cur_descr_len; 235 309 236 310 if (cur_descr_type != USB_DESCTYPE_INTERFACE) { 237 311 continue; 238 312 } 239 313 240 314 /* 241 315 * Finally, we found an interface descriptor. … … 244 318 = (usb_standard_interface_descriptor_t *) 245 319 current_descriptor; 246 320 247 321 ADD_MATCHID_OR_RETURN(matches, 50, 248 322 "usb&interface&class=%s", 249 323 usb_str_class(interface->interface_class)); 250 324 } 251 325 252 326 return EOK; 253 327 } … … 264 338 { 265 339 int final_rc = EOK; 266 340 267 341 int config_index; 268 342 for (config_index = 0; config_index < config_count; config_index++) { … … 292 366 continue; 293 367 } 294 368 295 369 rc = usb_drv_create_match_ids_from_configuration_descriptor( 296 370 matches, … … 300 374 continue; 301 375 } 302 303 } 304 376 377 } 378 305 379 return final_rc; 306 380 }
Note:
See TracChangeset
for help on using the changeset viewer.