Changes in uspace/drv/usbhid/usbhid.c [e3b5129:aaf6155] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/usbhid.c
re3b5129 raaf6155 67 67 static int usb_hid_set_boot_kbd_subdriver(usb_hid_dev_t *hid_dev) 68 68 { 69 assert(hid_dev != NULL && hid_dev->subdriver_count == 0);69 assert(hid_dev->subdriver_count == 0); 70 70 71 71 hid_dev->subdrivers = (usb_hid_subdriver_t *)malloc( … … 97 97 static int usb_hid_set_boot_mouse_subdriver(usb_hid_dev_t *hid_dev) 98 98 { 99 assert(hid_dev != NULL && hid_dev->subdriver_count == 0);99 assert(hid_dev->subdriver_count == 0); 100 100 101 101 hid_dev->subdrivers = (usb_hid_subdriver_t *)malloc( … … 127 127 static int usb_hid_set_generic_hid_subdriver(usb_hid_dev_t *hid_dev) 128 128 { 129 assert(hid_dev != NULL && hid_dev->subdriver_count == 0);129 assert(hid_dev->subdriver_count == 0); 130 130 131 131 hid_dev->subdrivers = (usb_hid_subdriver_t *)malloc( … … 164 164 165 165 static bool usb_hid_path_matches(usb_hid_dev_t *hid_dev, 166 const usb_hid_subdriver_ mapping_t *mapping)166 const usb_hid_subdriver_usage_t *path, int path_size, int compare) 167 167 { 168 168 assert(hid_dev != NULL); 169 assert( mapping!= NULL);169 assert(path != NULL); 170 170 171 171 usb_hid_report_path_t *usage_path = usb_hid_report_path(); … … 174 174 return false; 175 175 } 176 int i = 0; 177 while (mapping->usage_path[i].usage != 0 178 || mapping->usage_path[i].usage_page != 0) { 176 int i; 177 for (i = 0; i < path_size; ++i) { 179 178 if (usb_hid_report_path_append_item(usage_path, 180 mapping->usage_path[i].usage_page, 181 mapping->usage_path[i].usage) != EOK) { 179 path[i].usage_page, path[i].usage) != EOK) { 182 180 usb_log_debug("Failed to append to usage path.\n"); 183 181 usb_hid_report_path_free(usage_path); 184 182 return false; 185 183 } 186 ++i;187 }188 189 if (mapping->report_id >= 0) {190 usb_hid_report_path_set_report_id(usage_path,191 mapping->report_id);192 184 } 193 185 194 186 assert(hid_dev->parser != NULL); 195 187 196 usb_log_debug("Compare flags: %d\n", mapping->compare);188 usb_log_debug("Compare flags: %d\n", compare); 197 189 size_t size = usb_hid_report_input_length(hid_dev->parser, usage_path, 198 mapping->compare);190 compare); 199 191 usb_log_debug("Size of the input report: %d\n", size); 200 192 … … 239 231 static int usb_hid_find_subdrivers(usb_hid_dev_t *hid_dev) 240 232 { 241 assert(hid_dev != NULL);242 243 233 const usb_hid_subdriver_t *subdrivers[USB_HID_MAX_SUBDRIVERS]; 244 234 245 235 int i = 0, count = 0; 246 236 const usb_hid_subdriver_mapping_t *mapping = &usb_hid_subdrivers[i]; 247 248 bool ids_matched;249 bool matched;250 237 251 238 while (count < USB_HID_MAX_SUBDRIVERS && 252 239 (mapping->usage_path != NULL 253 || mapping->vendor_id != 0 || mapping->product_id != 0)) { 240 || mapping->vendor_id != NULL 241 || mapping->product_id != NULL)) { 254 242 // check the vendor & product ID 255 if (mapping->vendor_id != 0 && mapping->product_id == 0) {256 usb_log_warning("Missing Product ID for Vendor ID % u\n",243 if (mapping->vendor_id != NULL && mapping->product_id == NULL) { 244 usb_log_warning("Missing Product ID for Vendor ID %s\n", 257 245 mapping->vendor_id); 258 246 return EINVAL; 259 247 } 260 if (mapping->product_id != 0 && mapping->vendor_id == 0) {261 usb_log_warning("Missing Vendor ID for Product ID % u\n",248 if (mapping->product_id != NULL && mapping->vendor_id == NULL) { 249 usb_log_warning("Missing Vendor ID for Product ID %s\n", 262 250 mapping->product_id); 263 251 return EINVAL; 264 252 } 265 253 266 ids_matched = false; 267 matched = false; 268 269 if (mapping->vendor_id != 0) { 270 assert(mapping->product_id != 0); 271 usb_log_debug("Comparing device against vendor ID %u" 272 " and product ID %u.\n", mapping->vendor_id, 254 if (mapping->vendor_id != NULL) { 255 assert(mapping->product_id != NULL); 256 usb_log_debug("Comparing device against vendor ID %s" 257 " and product ID %s.\n", mapping->vendor_id, 273 258 mapping->product_id); 274 259 if (usb_hid_ids_match(hid_dev, mapping)) { 275 usb_log_debug("IDs matched.\n"); 276 ids_matched = true; 260 usb_log_debug("Matched.\n"); 261 subdrivers[count++] = &mapping->subdriver; 262 // skip the checking of usage path 263 goto next; 277 264 } 278 265 } … … 280 267 if (mapping->usage_path != NULL) { 281 268 usb_log_debug("Comparing device against usage path.\n"); 282 if (usb_hid_path_matches(hid_dev, mapping)) { 283 // does not matter if IDs were matched 284 matched = true; 269 if (usb_hid_path_matches(hid_dev, 270 mapping->usage_path, mapping->path_size, 271 mapping->compare)) { 272 subdrivers[count++] = &mapping->subdriver; 273 } else { 274 usb_log_debug("Not matched.\n"); 285 275 } 286 } else { 287 // matched only if IDs were matched and there is no path 288 matched = ids_matched; 289 } 290 291 if (matched) { 292 subdrivers[count++] = &mapping->subdriver; 293 } 294 276 } 277 next: 295 278 mapping = &usb_hid_subdrivers[++i]; 296 279 } … … 304 287 static int usb_hid_check_pipes(usb_hid_dev_t *hid_dev, usb_device_t *dev) 305 288 { 306 assert(hid_dev != NULL && dev != NULL);307 308 289 int rc = EOK; 309 290 … … 379 360 rc = usb_hid_check_pipes(hid_dev, dev); 380 361 if (rc != EOK) { 381 usb_hid_free(&hid_dev);362 //usb_hid_free(&hid_dev); 382 363 return rc; 383 364 } … … 387 368 if (rc != EOK) { 388 369 usb_log_error("Failed to initialize report parser.\n"); 389 usb_hid_free(&hid_dev);370 //usb_hid_free(&hid_dev); 390 371 return rc; 391 372 } … … 405 386 " device.\n"); 406 387 fallback = true; 388 assert(hid_dev->subdrivers == NULL); 389 assert(hid_dev->subdriver_count == 0); 407 390 } 408 391 } else { … … 445 428 usb_log_error("No subdriver for handling this device could be" 446 429 " initialized: %s.\n", str_error(rc)); 447 usb_hid_free(&hid_dev); 430 usb_log_debug("Subdriver count: %d\n", 431 hid_dev->subdriver_count); 432 //usb_hid_free(&hid_dev); 448 433 } else { 449 434 bool ok = false; … … 569 554 } 570 555 556 usb_log_debug("Subdrivers: %p, subdriver count: %d\n", 557 (*hid_dev)->subdrivers, (*hid_dev)->subdriver_count); 558 571 559 assert((*hid_dev)->subdrivers != NULL 572 560 || (*hid_dev)->subdriver_count == 0);
Note:
See TracChangeset
for help on using the changeset viewer.