Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: frdm_Slider_Keyboard idd_hw2_figlax_PanType idd_hw2_appachu_finger_chording idd_hw3_AngieWangAntonioDeLimaFernandesDanielLim_BladeSymphony ... more
Fork of USBDevice by
Revision 54:2e181d51495a, committed 2017-03-17
- Comitter:
- mjr
- Date:
- Fri Mar 17 22:01:47 2017 +0000
- Parent:
- 53:c8110529c24b
- Commit message:
- Comments
Changed in this revision
| USBDevice/USBDevice.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/USBDevice/USBDevice.cpp Thu Jun 02 18:58:24 2016 +0000
+++ b/USBDevice/USBDevice.cpp Fri Mar 17 22:01:47 2017 +0000
@@ -80,19 +80,19 @@
bool USBDevice::requestGetDescriptor(void)
{
+ const uint8_t *p;
bool success = false;
printd("get descr: type: %d\r\n", DESCRIPTOR_TYPE(transfer.setup.wValue));
switch (DESCRIPTOR_TYPE(transfer.setup.wValue))
{
case DEVICE_DESCRIPTOR:
- if (deviceDesc() != NULL)
+ if ((p = deviceDesc()) != NULL)
{
- if ((deviceDesc()[0] == DEVICE_DESCRIPTOR_LENGTH) \
- && (deviceDesc()[1] == DEVICE_DESCRIPTOR))
+ if (p[0] == DEVICE_DESCRIPTOR_LENGTH && p[1] == DEVICE_DESCRIPTOR)
{
printd("device descr\r\n");
transfer.remaining = DEVICE_DESCRIPTOR_LENGTH;
- transfer.ptr = deviceDesc();
+ transfer.ptr = p;
transfer.direction = DEVICE_TO_HOST;
success = true;
}
@@ -100,16 +100,15 @@
break;
case CONFIGURATION_DESCRIPTOR:
- if (configurationDesc() != NULL)
+ if ((p = configurationDesc()) != NULL)
{
- if ((configurationDesc()[0] == CONFIGURATION_DESCRIPTOR_LENGTH)
- && (configurationDesc()[1] == CONFIGURATION_DESCRIPTOR))
+ if (p[0] == CONFIGURATION_DESCRIPTOR_LENGTH && p[1] == CONFIGURATION_DESCRIPTOR)
{
printd("conf descr request\r\n");
/* Get wTotalLength */
- transfer.remaining = configurationDesc()[2] | (configurationDesc()[3] << 8);
- transfer.ptr = configurationDesc();
+ transfer.remaining = p[2] | (p[3] << 8);
+ transfer.ptr = p;
transfer.direction = DEVICE_TO_HOST;
success = true;
}
@@ -122,48 +121,48 @@
{
case STRING_OFFSET_LANGID:
printd("1\r\n");
- transfer.remaining = stringLangidDesc()[0];
transfer.ptr = stringLangidDesc();
+ transfer.remaining = transfer.ptr[0];
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
case STRING_OFFSET_IMANUFACTURER:
printd("2\r\n");
- transfer.remaining = stringImanufacturerDesc()[0];
transfer.ptr = stringImanufacturerDesc();
+ transfer.remaining = transfer.ptr[0];
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
case STRING_OFFSET_IPRODUCT:
printd("3\r\n");
- transfer.remaining = stringIproductDesc()[0];
transfer.ptr = stringIproductDesc();
+ transfer.remaining = transfer.ptr[0];
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
case STRING_OFFSET_ISERIAL:
printd("4\r\n");
- transfer.remaining = stringIserialDesc()[0];
transfer.ptr = stringIserialDesc();
+ transfer.remaining = transfer.ptr[0];
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
case STRING_OFFSET_ICONFIGURATION:
printd("5\r\n");
- transfer.remaining = stringIConfigurationDesc()[0];
transfer.ptr = stringIConfigurationDesc();
+ transfer.remaining = transfer.ptr[0];
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
case STRING_OFFSET_IINTERFACE:
printd("6\r\n");
- transfer.remaining = stringIinterfaceDesc()[0];
transfer.ptr = stringIinterfaceDesc();
+ transfer.remaining = transfer.ptr[0];
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
@@ -789,22 +788,25 @@
return realiseEndpoint(endpoint, maxPacket, RATE_FEEDBACK_MODE);
}
+/*
+ * Find a descriptor within the list of descriptors following a
+ * configuration descriptor
+ */
const uint8_t *USBDevice::findDescriptor(uint8_t descriptorType, int idx)
{
- /* Find a descriptor within the list of descriptors */
- /* following a configuration descriptor. */
- uint16_t wTotalLength;
- const uint8_t *ptr;
-
- if (configurationDesc() == NULL)
+ /* get the start of the configuration descriptor */
+ const uint8_t *ptr = configurationDesc();
+ if (ptr == NULL)
return NULL;
- /* Check this is a configuration descriptor */
- if ((configurationDesc()[0] != CONFIGURATION_DESCRIPTOR_LENGTH) \
- || (configurationDesc()[1] != CONFIGURATION_DESCRIPTOR))
+ /* make sure it matches the expected length for a config descriptor */
+ if (ptr[0] != CONFIGURATION_DESCRIPTOR_LENGTH
+ || ptr[1] != CONFIGURATION_DESCRIPTOR)
return NULL;
- wTotalLength = configurationDesc()[2] | (configurationDesc()[3] << 8);
+ /* figure the total length of the descriptor */
+ uint16_t wTotalLength = ptr[2] | (ptr[3] << 8);
+ const uint8_t *endPtr = ptr + wTotalLength;
/* Check there are some more descriptors to follow */
/* (+2 is for bLength and bDescriptorType of next descriptor) */
@@ -812,7 +814,7 @@
return NULL;
/* Start at first descriptor after the configuration descriptor */
- ptr = &(configurationDesc()[CONFIGURATION_DESCRIPTOR_LENGTH]);
+ ptr += CONFIGURATION_DESCRIPTOR_LENGTH;
/* Scan until we find the idx'th descriptor of the specified type */
do {
@@ -828,7 +830,7 @@
/* Skip to next descriptor */
ptr += ptr[0]; /* bLength */
- } while (ptr < (configurationDesc() + wTotalLength));
+ } while (ptr < endPtr);
/* Reached end of the descriptors - not found */
return NULL;
