Fix flip-ee DFU build target accidentally erasing the target FLASH memory space.
[pub/USBasp.git] / Projects / AVRISP-MKII / AVRISPDescriptors.c
index ab30c0e..066dcf4 100644 (file)
@@ -38,7 +38,7 @@
 #include "AVRISPDescriptors.h"
 
 #if defined(RESET_TOGGLES_LIBUSB_COMPAT) || defined(__DOXYGEN__)
-       /** Indicates if an external reset has ocurred and the compatibility mode needs to be altered */
+       /** Indicates if an external reset has occurred and the compatibility mode needs to be altered */
        static bool AVRISP_NeedCompatibilitySwitch ATTR_NO_INIT;
 
        /** Current AVRISP data IN endpoint address. */
@@ -174,7 +174,7 @@ const USB_Descriptor_String_t PROGMEM AVRISP_ProductString =
 /** Serial number string. This is a Unicode string containing the device's unique serial number, expressed as a
  *  series of uppercase hexadecimal digits.
  */
-const USB_Descriptor_String_t PROGMEM AVRISP_SerialString =
+USB_Descriptor_String_t AVRISP_SerialString =
 {
        .Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},
        
@@ -233,7 +233,12 @@ uint16_t AVRISP_GetDescriptor(const uint16_t wValue,
                                        break;
                                case 0x03:
                                        Address = &AVRISP_SerialString;
-                                       Size    = pgm_read_byte(&AVRISP_SerialString.Header.Size);
+                                       Size    = AVRISP_SerialString.Header.Size;
+                                       
+                                       /* Update serial number to have a different serial based on the current endpoint address */
+                                       ((uint16_t*)&AVRISP_SerialString.UnicodeString)[6] = cpu_to_le16('0' + (AVRISP_DATA_IN_EPADDR & ENDPOINT_EPNUM_MASK));
+                                       
+                                       *DescriptorMemorySpace = MEMSPACE_RAM;
                                        break;
                        }
 
@@ -255,7 +260,7 @@ uint16_t AVRISP_GetDescriptor(const uint16_t wValue,
  */
 void CheckExternalReset(void)
 {      
-       /* If an external reset occured, we need to change compatibility mode */
+       /* If an external reset occurred, we need to change compatibility mode */
        AVRISP_NeedCompatibilitySwitch = (MCUSR == (1 << EXTRF));
 
        MCUSR = 0;