Changes in uspace/lib/usb/src/request.c [ad4562c2:4723444] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/request.c
rad4562c2 r4723444 412 412 } 413 413 414 /** Retrieve full configuration descriptor, allocate space for it. 415 * 416 * The function takes care that full configuration descriptor is returned 417 * (i.e. the function will fail when less data then descriptor.totalLength 418 * is returned). 419 * 420 * @param[in] pipe Control endpoint pipe (session must be already started). 421 * @param[in] index Configuration index. 422 * @param[out] descriptor_ptr Where to store pointer to allocated buffer. 423 * @param[out] descriptor_size Where to store the size of the descriptor. 424 * @return Error code. 425 */ 426 int usb_request_get_full_configuration_descriptor_alloc( 427 usb_endpoint_pipe_t *pipe, int index, 428 void **descriptor_ptr, size_t *descriptor_size) 429 { 430 int rc; 431 432 if (descriptor_ptr == NULL) { 433 return EBADMEM; 434 } 435 436 usb_standard_configuration_descriptor_t bare_config; 437 rc = usb_request_get_bare_configuration_descriptor(pipe, index, 438 &bare_config); 439 if (rc != EOK) { 440 return rc; 441 } 442 443 if (bare_config.descriptor_type != USB_DESCTYPE_CONFIGURATION) { 444 return ENOENT; 445 } 446 if (bare_config.total_length < sizeof(bare_config)) { 447 return ELIMIT; 448 } 449 450 void *buffer = malloc(bare_config.total_length); 451 if (buffer == NULL) { 452 return ENOMEM; 453 } 454 455 size_t transferred = 0; 456 rc = usb_request_get_full_configuration_descriptor(pipe, index, 457 buffer, bare_config.total_length, &transferred); 458 if (rc != EOK) { 459 free(buffer); 460 return rc; 461 } 462 463 if (transferred != bare_config.total_length) { 464 free(buffer); 465 return ELIMIT; 466 } 467 468 /* Everything looks okay, copy the pointers. */ 469 470 *descriptor_ptr = buffer; 471 472 if (descriptor_size != NULL) { 473 *descriptor_size = bare_config.total_length; 474 } 475 476 return EOK; 477 } 478 414 479 /** Set configuration of USB device. 415 480 * … … 504 569 * 505 570 * @param[in] pipe Control endpoint pipe (session must be already started). 506 * @param[in] index String index (in native endianess). 571 * @param[in] index String index (in native endianess), 572 * first index has number 1 (index from descriptors can be used directly). 507 573 * @param[in] lang String language (in native endianess). 508 574 * @param[out] string_ptr Where to store allocated string in native encoding. … … 515 581 return EBADMEM; 516 582 } 517 /* Index is actually one byte value. */ 518 if (index > 0xFF) { 583 /* 584 * Index is actually one byte value and zero index is used 585 * to retrieve list of supported languages. 586 */ 587 if ((index < 1) || (index > 0xFF)) { 519 588 return ERANGE; 520 589 }
Note:
See TracChangeset
for help on using the changeset viewer.