Cleanup and optimization of the internal serial retrieval routines.

Renamed ATTR_NOINLINE to ATTR_NO_INLINE to fit with the rest of the library function attribute names.
pull/1469/head
Dean Camera 15 years ago
parent ab2ae13d81
commit 840d386deb

@ -87,7 +87,7 @@
/** Prevents the compiler from considering a specified function for inlining. When applied, the given /** Prevents the compiler from considering a specified function for inlining. When applied, the given
* function will not be inlined under any circumstances. * function will not be inlined under any circumstances.
*/ */
#define ATTR_NOINLINE __attribute__ ((noinline)) #define ATTR_NO_INLINE __attribute__ ((noinline))
/** Forces the compiler to inline the specified function. When applied, the given function will be /** Forces the compiler to inline the specified function. When applied, the given function will be
* inlined under all circumstances. * inlined under all circumstances.

@ -227,6 +227,12 @@ void USB_Device_GetConfiguration(void)
} }
#if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) #if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
static char USB_Device_NibbleToASCII(uint8_t Nibble)
{
Nibble = ((Nibble & 0x0F) + '0');
return (Nibble > '9') ? (Nibble + ('A' - '9' - 1)) : Nibble;
}
static void USB_Device_GetInternalSerialDescriptor(void) static void USB_Device_GetInternalSerialDescriptor(void)
{ {
struct struct
@ -234,9 +240,6 @@ static void USB_Device_GetInternalSerialDescriptor(void)
USB_Descriptor_Header_t Header; USB_Descriptor_Header_t Header;
int16_t UnicodeString[20]; int16_t UnicodeString[20];
} SignatureDescriptor; } SignatureDescriptor;
uint8_t SigReadAddress = 0x0E;
bool OddNibbleRead = false;
#if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES) #if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES)
SignatureDescriptor.Header.Size = sizeof(SignatureDescriptor); SignatureDescriptor.Header.Size = sizeof(SignatureDescriptor);
@ -246,28 +249,19 @@ static void USB_Device_GetInternalSerialDescriptor(void)
SignatureDescriptor.Header.bDescriptorType = DTYPE_String; SignatureDescriptor.Header.bDescriptorType = DTYPE_String;
#endif #endif
uint8_t SigReadAddress = 0x0E;
for (uint8_t SerialCharNum = 0; SerialCharNum < 20; SerialCharNum++) for (uint8_t SerialCharNum = 0; SerialCharNum < 20; SerialCharNum++)
{ {
uint8_t SerialByte = boot_signature_byte_get(SigReadAddress); uint8_t SerialByte = boot_signature_byte_get(SigReadAddress);
if (OddNibbleRead) if (SerialCharNum & 0x01)
{ {
SerialByte >>= 4; SerialByte >>= 4;
SigReadAddress++; SigReadAddress++;
} }
else
{
SerialByte &= 0x0F;
}
OddNibbleRead = !(OddNibbleRead); SignatureDescriptor.UnicodeString[SerialCharNum] = USB_Device_NibbleToASCII(SerialByte);
if (SerialByte < 0x0A)
SerialByte += '0';
else
SerialByte += ('A' - 0x0A);
SignatureDescriptor.UnicodeString[SerialCharNum] = SerialByte;
} }
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();

@ -124,6 +124,7 @@
static void USB_Device_ClearSetFeature(void); static void USB_Device_ClearSetFeature(void);
#if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) #if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
static char USB_Device_NibbleToASCII(uint8_t Nibble) ATTR_ALWAYS_INLINE;
static void USB_Device_GetInternalSerialDescriptor(void); static void USB_Device_GetInternalSerialDescriptor(void);
#endif #endif
#endif #endif

Loading…
Cancel
Save