Changes in uspace/lib/usb/src/request.c [4723444:b84e114] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/request.c
r4723444 rb84e114 36 36 #include <errno.h> 37 37 #include <assert.h> 38 #include <usb/debug.h>39 38 40 39 #define MAX_DATA_LENGTH ((size_t)(0xFFFF)) … … 210 209 */ 211 210 int usb_request_get_descriptor(usb_endpoint_pipe_t *pipe, 212 usb_request_type_t request_type, usb_request_recipient_t recipient,211 usb_request_type_t request_type, 213 212 uint8_t descriptor_type, uint8_t descriptor_index, 214 213 uint16_t language, … … 225 224 226 225 return usb_control_request_get(pipe, 227 request_type, recipient,226 request_type, USB_REQUEST_RECIPIENT_DEVICE, 228 227 USB_DEVREQ_GET_DESCRIPTOR, 229 228 wValue, language, … … 243 242 */ 244 243 int usb_request_get_descriptor_alloc(usb_endpoint_pipe_t * pipe, 245 usb_request_type_t request_type, usb_request_recipient_t recipient,244 usb_request_type_t request_type, 246 245 uint8_t descriptor_type, uint8_t descriptor_index, 247 246 uint16_t language, … … 259 258 uint8_t tmp_buffer[1]; 260 259 size_t bytes_transfered; 261 rc = usb_request_get_descriptor(pipe, request_type, recipient,260 rc = usb_request_get_descriptor(pipe, request_type, 262 261 descriptor_type, descriptor_index, language, 263 262 &tmp_buffer, 1, &bytes_transfered); … … 284 283 } 285 284 286 rc = usb_request_get_descriptor(pipe, request_type, recipient,285 rc = usb_request_get_descriptor(pipe, request_type, 287 286 descriptor_type, descriptor_index, language, 288 287 buffer, size, &bytes_transfered); … … 321 320 usb_standard_device_descriptor_t descriptor_tmp; 322 321 int rc = usb_request_get_descriptor(pipe, 323 USB_REQUEST_TYPE_STANDARD, USB_ REQUEST_RECIPIENT_DEVICE,324 USB_DESCTYPE_DEVICE,0, 0,322 USB_REQUEST_TYPE_STANDARD, USB_DESCTYPE_DEVICE, 323 0, 0, 325 324 &descriptor_tmp, sizeof(descriptor_tmp), 326 325 &actually_transferred); … … 367 366 usb_standard_configuration_descriptor_t descriptor_tmp; 368 367 int rc = usb_request_get_descriptor(pipe, 369 USB_REQUEST_TYPE_STANDARD, USB_ REQUEST_RECIPIENT_DEVICE,370 USB_DESCTYPE_CONFIGURATION,index, 0,368 USB_REQUEST_TYPE_STANDARD, USB_DESCTYPE_CONFIGURATION, 369 index, 0, 371 370 &descriptor_tmp, sizeof(descriptor_tmp), 372 371 &actually_transferred); … … 407 406 408 407 return usb_request_get_descriptor(pipe, 409 USB_REQUEST_TYPE_STANDARD, USB_ REQUEST_RECIPIENT_DEVICE,410 USB_DESCTYPE_CONFIGURATION,index, 0,408 USB_REQUEST_TYPE_STANDARD, USB_DESCTYPE_CONFIGURATION, 409 index, 0, 411 410 descriptor, descriptor_size, actual_size); 412 }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 411 } 478 412 … … 518 452 size_t string_descriptor_size = 0; 519 453 rc = usb_request_get_descriptor_alloc(pipe, 520 USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE, 521 USB_DESCTYPE_STRING, 0, 0, 454 USB_REQUEST_TYPE_STANDARD, USB_DESCTYPE_STRING, 0, 0, 522 455 (void **) &string_descriptor, &string_descriptor_size); 523 456 if (rc != EOK) { … … 569 502 * 570 503 * @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). 504 * @param[in] index String index (in native endianess). 573 505 * @param[in] lang String language (in native endianess). 574 506 * @param[out] string_ptr Where to store allocated string in native encoding. … … 581 513 return EBADMEM; 582 514 } 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)) { 515 /* Index is actually one byte value. */ 516 if (index > 0xFF) { 588 517 return ERANGE; 589 518 } … … 602 531 size_t string_size; 603 532 rc = usb_request_get_descriptor_alloc(pipe, 604 USB_REQUEST_TYPE_STANDARD, USB_ REQUEST_RECIPIENT_DEVICE,605 USB_DESCTYPE_STRING,index, uint16_host2usb(lang),533 USB_REQUEST_TYPE_STANDARD, USB_DESCTYPE_STRING, 534 index, uint16_host2usb(lang), 606 535 (void **) &string, &string_size); 607 536 if (rc != EOK) {
Note:
See TracChangeset
for help on using the changeset viewer.