forked from mfulz_github/qmk_firmware
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.
This commit is contained in:
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…
Reference in New Issue