Simplify the internal serial extraction routines for each architecture.
[pub/lufa.git] / LUFA / Drivers / USB / Core / AVR8 / Device_AVR8.h
index dc86302..f822d0b 100644 (file)
                                 *  number for the device.
                                 */
                                #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
                                #define USE_INTERNAL_SERIAL           NO_DESCRIPTOR
+
+                               #define INTERNAL_SERIAL_LENGTH_BITS   0
                        #endif                  
                        
                /* Function Prototypes: */
                                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)
                                {
                                        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);
 
                                                if (SerialCharNum & 0x01)
                                                                                           (('A' - 10) + SerialByte) : ('0' + SerialByte));
                                        }
                                }
-                               
-                               return SerialCharNum;
                        }
                
        #endif