mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-06-09 10:24:17 +00:00
Simplify the internal serial extraction routines for each architecture.
This commit is contained in:
parent
a7eca42996
commit
02dfd7dc3d
@ -100,8 +100,15 @@
|
|||||||
* number for the device.
|
* number for the device.
|
||||||
*/
|
*/
|
||||||
#define USE_INTERNAL_SERIAL 0xDC
|
#define USE_INTERNAL_SERIAL 0xDC
|
||||||
|
|
||||||
|
/** Length of the device's unique internal serial number, in bits, if present on the selected microcontroller
|
||||||
|
* model.
|
||||||
|
*/
|
||||||
|
#define INTERNAL_SERIAL_LENGTH_BITS 80
|
||||||
#else
|
#else
|
||||||
#define USE_INTERNAL_SERIAL NO_DESCRIPTOR
|
#define USE_INTERNAL_SERIAL NO_DESCRIPTOR
|
||||||
|
|
||||||
|
#define INTERNAL_SERIAL_LENGTH_BITS 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Function Prototypes: */
|
/* Function Prototypes: */
|
||||||
@ -190,19 +197,14 @@
|
|||||||
return (UDADDR & (1 << ADDEN));
|
return (UDADDR & (1 << ADDEN));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint8_t USB_Device_GetSerialString(uint16_t* UnicodeString, const uint8_t MaxLen)
|
static inline void USB_Device_GetSerialString(uint16_t* UnicodeString)
|
||||||
{
|
{
|
||||||
uint8_t SerialCharNum = 0;
|
|
||||||
|
|
||||||
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
|
||||||
{
|
{
|
||||||
uint8_t SigReadAddress = 0x0E;
|
uint8_t SigReadAddress = 0x0E;
|
||||||
|
|
||||||
for (SerialCharNum = 0; SerialCharNum < MIN(MaxLen, 20); SerialCharNum++)
|
for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BYTES * 2); SerialCharNum++)
|
||||||
{
|
{
|
||||||
if (SerialCharNum == MaxLen)
|
|
||||||
break;
|
|
||||||
|
|
||||||
uint8_t SerialByte = boot_signature_byte_get(SigReadAddress);
|
uint8_t SerialByte = boot_signature_byte_get(SigReadAddress);
|
||||||
|
|
||||||
if (SerialCharNum & 0x01)
|
if (SerialCharNum & 0x01)
|
||||||
@ -217,8 +219,6 @@
|
|||||||
(('A' - 10) + SerialByte) : ('0' + SerialByte));
|
(('A' - 10) + SerialByte) : ('0' + SerialByte));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return SerialCharNum;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -204,12 +204,13 @@ static void USB_Device_GetInternalSerialDescriptor(void)
|
|||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
USB_Descriptor_Header_t Header;
|
USB_Descriptor_Header_t Header;
|
||||||
uint16_t UnicodeString[20];
|
uint16_t UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4];
|
||||||
} SignatureDescriptor;
|
} SignatureDescriptor;
|
||||||
|
|
||||||
SignatureDescriptor.Header.Type = DTYPE_String;
|
SignatureDescriptor.Header.Type = DTYPE_String;
|
||||||
SignatureDescriptor.Header.Size = USB_STRING_LEN(USB_Device_GetSerialString(SignatureDescriptor.UnicodeString,
|
SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4);
|
||||||
sizeof(SignatureDescriptor.UnicodeString) / sizeof(SignatureDescriptor.UnicodeString[0])));
|
|
||||||
|
USB_Device_GetSerialString(SignatureDescriptor.UnicodeString);
|
||||||
|
|
||||||
Endpoint_ClearSETUP();
|
Endpoint_ClearSETUP();
|
||||||
|
|
||||||
|
@ -90,8 +90,15 @@
|
|||||||
* number for the device.
|
* number for the device.
|
||||||
*/
|
*/
|
||||||
#define USE_INTERNAL_SERIAL 0xDC
|
#define USE_INTERNAL_SERIAL 0xDC
|
||||||
|
|
||||||
|
/** Length of the device's unique internal serial number, in bits, if present on the selected microcontroller
|
||||||
|
* model.
|
||||||
|
*/
|
||||||
|
#define INTERNAL_SERIAL_LENGTH_BITS 120
|
||||||
#else
|
#else
|
||||||
#define USE_INTERNAL_SERIAL NO_DESCRIPTOR
|
#define USE_INTERNAL_SERIAL NO_DESCRIPTOR
|
||||||
|
|
||||||
|
#define INTERNAL_SERIAL_LENGTH_BITS 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Function Prototypes: */
|
/* Function Prototypes: */
|
||||||
@ -178,19 +185,14 @@
|
|||||||
return AVR32_USBB.UDCON.adden;
|
return AVR32_USBB.UDCON.adden;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint8_t USB_Device_GetSerialString(uint16_t* UnicodeString, const uint8_t MaxLen)
|
static inline void USB_Device_GetSerialString(uint16_t* UnicodeString)
|
||||||
{
|
{
|
||||||
uint8_t SerialCharNum = 0;
|
|
||||||
|
|
||||||
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
|
||||||
{
|
{
|
||||||
uint32_t* SigReadAddress = 0x80800204;
|
uint8_t* SigReadAddress = (uint8_t*)0x80800204;
|
||||||
|
|
||||||
for (SerialCharNum = 0; SerialCharNum < MIN(MaxLen, 30); SerialCharNum++)
|
for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++)
|
||||||
{
|
{
|
||||||
if (SerialCharNum == MaxLen)
|
|
||||||
break;
|
|
||||||
|
|
||||||
uint8_t SerialByte = *SigReadAddress;
|
uint8_t SerialByte = *SigReadAddress;
|
||||||
|
|
||||||
if (SerialCharNum & 0x01)
|
if (SerialCharNum & 0x01)
|
||||||
@ -205,8 +207,6 @@
|
|||||||
(('A' - 10) + SerialByte) : ('0' + SerialByte));
|
(('A' - 10) + SerialByte) : ('0' + SerialByte));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return SerialCharNum;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user