Changes in uspace/lib/usb/src/request.c [4723444:ad4562c2] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/request.c
r4723444 rad4562c2 412 412 } 413 413 414 /** Retrieve full configuration descriptor, allocate space for it.415 *416 * The function takes care that full configuration descriptor is returned417 * (i.e. the function will fail when less data then descriptor.totalLength418 * 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 479 414 /** Set configuration of USB device. 480 415 * … … 569 504 * 570 505 * @param[in] pipe Control endpoint pipe (session must be already started). 571 * @param[in] index String index (in native endianess), 572 * first index has number 1 (index from descriptors can be used directly). 506 * @param[in] index String index (in native endianess). 573 507 * @param[in] lang String language (in native endianess). 574 508 * @param[out] string_ptr Where to store allocated string in native encoding. … … 581 515 return EBADMEM; 582 516 } 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)) { 517 /* Index is actually one byte value. */ 518 if (index > 0xFF) { 588 519 return ERANGE; 589 520 }
Note:
See TracChangeset
for help on using the changeset viewer.