Added WIN_LIBUSB_COMPAT compile time option to the AVRISP programmer project to make...
authorDean Camera <dean@fourwalledcubicle.com>
Wed, 31 Mar 2010 09:20:24 +0000 (09:20 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Wed, 31 Mar 2010 09:20:24 +0000 (09:20 +0000)
15 files changed:
LUFA/ManPages/ChangeLog.txt
Projects/AVRISP-MKII/AVRISP.c
Projects/AVRISP-MKII/AVRISP.txt
Projects/AVRISP-MKII/Descriptors.c
Projects/AVRISP-MKII/Descriptors.h
Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
Projects/AVRISP-MKII/Lib/V2Protocol.c
Projects/AVRISP-MKII/Lib/V2Protocol.h
Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
Projects/AVRISP-MKII/makefile
Projects/XPLAINBridge/AVRISPDescriptors.c
Projects/XPLAINBridge/AVRISPDescriptors.h
Projects/XPLAINBridge/XPLAINBridge.c
Projects/XPLAINBridge/XPLAINBridge.txt
Projects/XPLAINBridge/makefile

index 370963e..c8eddc1 100644 (file)
@@ -24,6 +24,8 @@
   *  - Standardized the naming scheme given to configuration descriptor sub-elements in the Device mode demos, bootloaders\r
   *    and projects\r
   *  - All Class Driver Host mode demos now correctly set the board LEDs to READY once the enumeration process has completed\r
+  *  - Added WIN_LIBUSB_COMPAT compile time option to the AVRISP programmer project to make the code compatible with Windows\r
+  *    builds of avrdude at the expense of AVRStudio compatibility\r
   *\r
   *  <b>Fixed:</b>\r
   *  - Fixed software PDI/TPI programming mode in the AVRISP project not correctly toggling just the clock pin\r
index b78923f..ed101b8 100644 (file)
@@ -90,12 +90,21 @@ void EVENT_USB_Device_ConfigurationChanged(void)
        LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
 \r
        /* Setup AVRISP data Endpoints */\r
-       if (!(Endpoint_ConfigureEndpoint(AVRISP_DATA_EPNUM, EP_TYPE_BULK,\r
+       if (!(Endpoint_ConfigureEndpoint(AVRISP_DATA_OUT_EPNUM, EP_TYPE_BULK,\r
                                             ENDPOINT_DIR_OUT, AVRISP_DATA_EPSIZE,\r
                                         ENDPOINT_BANK_SINGLE)))\r
        {\r
                LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
        }\r
+\r
+       #if defined(WIN_LIBUSB_COMPAT)\r
+       if (!(Endpoint_ConfigureEndpoint(AVRISP_DATA_IN_EPNUM, EP_TYPE_BULK,\r
+                                            ENDPOINT_DIR_IN, AVRISP_DATA_EPSIZE,\r
+                                        ENDPOINT_BANK_SINGLE)))\r
+       {\r
+               LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+       }\r
+       #endif\r
 }\r
 \r
 /** Processes incoming V2 Protocol commands from the host, returning a response when required. */\r
@@ -105,7 +114,7 @@ void Process_AVRISP_Commands(void)
        if (USB_DeviceState != DEVICE_STATE_Configured)\r
          return;\r
 \r
-       Endpoint_SelectEndpoint(AVRISP_DATA_EPNUM);\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM);\r
        \r
        /* Check to see if a V2 Protocol command has been received */\r
        if (Endpoint_IsOUTReceived())\r
index feccfca..b541257 100644 (file)
  *    <td>Define to disable VTARGET sampling and reporting on AVR models with an ADC converter. This will cause the programmer\r
  *        to report a fixed 5V target voltage to the host regardless of the real target voltage.</td>  \r
  *   </tr>\r
+ *   <tr>\r
+ *    <td>WIN_LIBUSB_COMPAT</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>Define to switch to a non-standard endpoint scheme, breaking compatibility with AVRStudio under Windows but making\r
+ *        the code compatible with Windows builds of avrdude using the libUSB driver. Linux platforms are not affected by this\r
+ *        option.\r
+ *   </tr>\r
  *  </table>\r
  */\r
index f756e29..af28b4b 100644 (file)
@@ -106,7 +106,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
                {\r
                        .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
                        \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | AVRISP_DATA_EPNUM),\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | AVRISP_DATA_IN_EPNUM),\r
                        .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
                        .EndpointSize           = AVRISP_DATA_EPSIZE,\r
                        .PollingIntervalMS      = 0x00\r
@@ -116,7 +116,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
                {\r
                        .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
                        \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | AVRISP_DATA_EPNUM),\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | AVRISP_DATA_OUT_EPNUM),\r
                        .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
                        .EndpointSize           = AVRISP_DATA_EPSIZE,\r
                        .PollingIntervalMS      = 0x00\r
index ced4738..9f6a412 100644 (file)
                #include <LUFA/Drivers/USB/USB.h>\r
 \r
        /* Macros: */\r
-               /** Endpoint number of the AVRISP bidirectional data endpoint. */\r
-               #define AVRISP_DATA_EPNUM              2\r
+               #if !defined(WIN_LIBUSB_COMPAT)\r
+                       /** Endpoint number of the AVRISP data OUT endpoint. */\r
+                       #define AVRISP_DATA_OUT_EPNUM      2\r
+\r
+                       /** Endpoint number of the AVRISP data IN endpoint. */\r
+                       #define AVRISP_DATA_IN_EPNUM       2\r
+               #else\r
+                       /** Endpoint number of the AVRISP data OUT endpoint. */\r
+                       #define AVRISP_DATA_OUT_EPNUM      2\r
+\r
+                       /** Endpoint number of the AVRISP data IN endpoint. */\r
+                       #define AVRISP_DATA_IN_EPNUM       3\r
+               #endif\r
 \r
                /** Size in bytes of the AVRISP data endpoint. */\r
-               #define AVRISP_DATA_EPSIZE             64       \r
+               #define AVRISP_DATA_EPSIZE             64\r
 \r
        /* Type Defines: */\r
                /** Type define for the device configuration descriptor structure. This must be defined in the\r
index 85b31fb..9d0a26c 100644 (file)
@@ -57,6 +57,7 @@ void ISPProtocol_EnterISPMode(void)
        Endpoint_Read_Stream_LE(&Enter_ISP_Params, sizeof(Enter_ISP_Params), NO_STREAM_CALLBACK);\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
 \r
        uint8_t ResponseStatus = STATUS_CMD_FAILED;\r
@@ -117,6 +118,7 @@ void ISPProtocol_LeaveISPMode(void)
        Endpoint_Read_Stream_LE(&Leave_ISP_Params, sizeof(Leave_ISP_Params), NO_STREAM_CALLBACK);\r
        \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
 \r
        /* Perform pre-exit delay, release the target /RESET, disable the SPI bus and perform the post-exit delay */\r
@@ -163,6 +165,7 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
        if (Write_Memory_Params.BytesToWrite > sizeof(Write_Memory_Params.ProgData))\r
        {\r
                Endpoint_ClearOUT();\r
+               Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
                Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
 \r
                Endpoint_Write_Byte(V2Command);\r
@@ -174,6 +177,7 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
        Endpoint_Read_Stream_LE(&Write_Memory_Params.ProgData, Write_Memory_Params.BytesToWrite, NO_STREAM_CALLBACK);\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
 \r
        uint8_t  ProgrammingStatus = STATUS_CMD_OK;     \r
@@ -305,6 +309,7 @@ void ISPProtocol_ReadMemory(uint8_t V2Command)
        Read_Memory_Params.BytesToRead = SwapEndian_16(Read_Memory_Params.BytesToRead);\r
        \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        Endpoint_Write_Byte(V2Command);\r
@@ -375,6 +380,7 @@ void ISPProtocol_ChipErase(void)
        Endpoint_Read_Stream_LE(&Erase_Chip_Params, sizeof(Erase_Chip_Params), NO_STREAM_CALLBACK);\r
        \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        uint8_t ResponseStatus = STATUS_CMD_OK;\r
@@ -410,6 +416,7 @@ void ISPProtocol_ReadFuseLockSigOSCCAL(uint8_t V2Command)
        Endpoint_Read_Stream_LE(&Read_FuseLockSigOSCCAL_Params, sizeof(Read_FuseLockSigOSCCAL_Params), NO_STREAM_CALLBACK);\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
 \r
        uint8_t ResponseBytes[4];\r
@@ -440,6 +447,7 @@ void ISPProtocol_WriteFuseLock(uint8_t V2Command)
        Endpoint_Read_Stream_LE(&Write_FuseLockSig_Params, sizeof(Write_FuseLockSig_Params), NO_STREAM_CALLBACK);\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
 \r
        /* Send the Fuse or Lock byte program commands as given by the host to the device */\r
@@ -467,6 +475,7 @@ void ISPProtocol_SPIMulti(void)
        Endpoint_Read_Stream_LE(&SPI_Multi_Params.TxData, SPI_Multi_Params.TxBytes, NO_STREAM_CALLBACK);\r
        \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        Endpoint_Write_Byte(CMD_SPI_MULTI);\r
index 3df8045..431f9c2 100644 (file)
@@ -131,6 +131,7 @@ void V2Protocol_ProcessCommand(void)
        }\r
 \r
        Endpoint_WaitUntilReady();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT);\r
 }\r
 \r
@@ -149,6 +150,7 @@ static void V2Protocol_UnknownCommand(const uint8_t V2Command)
        }\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
 \r
        Endpoint_Write_Byte(V2Command);\r
@@ -160,6 +162,7 @@ static void V2Protocol_UnknownCommand(const uint8_t V2Command)
 static void V2Protocol_SignOn(void)\r
 {\r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
 \r
        Endpoint_Write_Byte(CMD_SIGN_ON);\r
@@ -175,6 +178,7 @@ static void V2Protocol_SignOn(void)
 static void V2Protocol_ResetProtection(void)\r
 {\r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        Endpoint_Write_Byte(CMD_RESET_PROTECTION);\r
@@ -197,6 +201,7 @@ static void V2Protocol_GetSetParam(const uint8_t V2Command)
          ParamValue = Endpoint_Read_Byte();\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        Endpoint_Write_Byte(V2Command);\r
@@ -230,6 +235,7 @@ static void V2Protocol_LoadAddress(void)
        Endpoint_Read_Stream_BE(&CurrentAddress, sizeof(CurrentAddress), NO_STREAM_CALLBACK);\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        MustSetAddress = true;\r
index 26c42ab..43dee1e 100644 (file)
 \r
                /** MUX mask for the VTARGET ADC channel number */\r
                #define VTARGET_ADC_CHANNEL_MASK   _GETADCMUXMASK(ADC_CHANNEL, VTARGET_ADC_CHANNEL)\r
+               \r
+               #if !defined(WIN_AVRDUDE_COMPAT)\r
+                       #define SELECT_DATA_OUT_ENDPOINT() Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT);\r
+               #else\r
+                       #define SELECT_DATA_OUT_ENDPOINT() Endpoint_SelectEndpoint();\r
+               #endif\r
 \r
        /* External Variables: */\r
                extern uint32_t CurrentAddress;\r
index 07dce50..ef86e30 100644 (file)
@@ -65,6 +65,7 @@ void XPROGProtocol_SetMode(void)
        Endpoint_Read_Stream_LE(&SetMode_XPROG_Params, sizeof(SetMode_XPROG_Params), NO_STREAM_CALLBACK);\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        XPROG_SelectedProtocol = SetMode_XPROG_Params.Protocol;\r
@@ -111,6 +112,7 @@ void XPROGProtocol_Command(void)
 static void XPROGProtocol_EnterXPROGMode(void)\r
 {\r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        bool NVMBusEnabled;\r
@@ -166,6 +168,7 @@ static void XPROGProtocol_EnterXPROGMode(void)
 static void XPROGProtocol_LeaveXPROGMode(void)\r
 {\r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI)\r
@@ -210,6 +213,7 @@ static void XPROGProtocol_Erase(void)
        Erase_XPROG_Params.Address = SwapEndian_32(Erase_XPROG_Params.Address);\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        uint8_t EraseCommand;\r
@@ -291,6 +295,7 @@ static void XPROGProtocol_WriteMemory(void)
        Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params.ProgData, WriteMemory_XPROG_Params.Length, NO_STREAM_CALLBACK);\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
 \r
        if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI)\r
@@ -374,6 +379,7 @@ static void XPROGProtocol_ReadMemory(void)
        ReadMemory_XPROG_Params.Length  = SwapEndian_16(ReadMemory_XPROG_Params.Length);\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
 \r
        uint8_t ReadBuffer[256];\r
@@ -416,6 +422,7 @@ static void XPROGProtocol_ReadCRC(void)
        Endpoint_Read_Stream_LE(&ReadCRC_XPROG_Params, sizeof(ReadCRC_XPROG_Params), NO_STREAM_CALLBACK);\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
        uint32_t MemoryCRC;\r
@@ -491,6 +498,7 @@ static void XPROGProtocol_SetParam(void)
        }\r
 \r
        Endpoint_ClearOUT();\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
                  \r
        Endpoint_Write_Byte(CMD_XPROG);\r
index b0b26c2..1ea3b8d 100644 (file)
@@ -199,6 +199,7 @@ CDEFS += -DENABLE_ISP_PROTOCOL
 CDEFS += -DENABLE_XPROG_PROTOCOL\r
 #CDEFS += -DXPROG_VIA_HARDWARE_USART\r
 #CDEFS += -DNO_VTARGET_DETECT\r
+#CDEFS += -DWIN_LIBUSB_COMPAT\r
 \r
 \r
 # Place -D or -U options here for ASM sources\r
index e191783..30e72e9 100644 (file)
@@ -106,7 +106,7 @@ AVRISP_USB_Descriptor_Configuration_t PROGMEM AVRISP_ConfigurationDescriptor =
                {\r
                        .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
                        \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | AVRISP_DATA_EPNUM),\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | AVRISP_DATA_IN_EPNUM),\r
                        .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
                        .EndpointSize           = AVRISP_DATA_EPSIZE,\r
                        .PollingIntervalMS      = 0x00\r
@@ -116,7 +116,7 @@ AVRISP_USB_Descriptor_Configuration_t PROGMEM AVRISP_ConfigurationDescriptor =
                {\r
                        .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
                        \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | AVRISP_DATA_EPNUM),\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | AVRISP_DATA_OUT_EPNUM),\r
                        .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
                        .EndpointSize           = AVRISP_DATA_EPSIZE,\r
                        .PollingIntervalMS      = 0x00\r
index 7287ce6..2fa1809 100644 (file)
                #include <LUFA/Drivers/USB/USB.h>\r
 \r
        /* Macros: */\r
-               /** Endpoint number of the AVRISP bidirectional data endpoint. */\r
-               #define AVRISP_DATA_EPNUM              2\r
+               #if !defined(LIBUSB_FILTERDRV_COMPAT)\r
+                       /** Endpoint number of the AVRISP data OUT endpoint. */\r
+                       #define AVRISP_DATA_OUT_EPNUM      2\r
 \r
+                       /** Endpoint number of the AVRISP data IN endpoint. */\r
+                       #define AVRISP_DATA_IN_EPNUM       2\r
+               #else\r
+                       /** Endpoint number of the AVRISP data OUT endpoint. */\r
+                       #define AVRISP_DATA_OUT_EPNUM      2\r
+\r
+                       /** Endpoint number of the AVRISP data IN endpoint. */\r
+                       #define AVRISP_DATA_IN_EPNUM       3\r
+               #endif\r
+               \r
                /** Size in bytes of the AVRISP data endpoint. */\r
                #define AVRISP_DATA_EPSIZE             64       \r
 \r
index e5b282e..7ca94b2 100644 (file)
@@ -99,7 +99,7 @@ void AVRISP_Task(void)
        if (USB_DeviceState != DEVICE_STATE_Configured)\r
          return;\r
 \r
-       Endpoint_SelectEndpoint(AVRISP_DATA_EPNUM);\r
+       Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM);\r
        \r
        /* Check to see if a V2 Protocol command has been received */\r
        if (Endpoint_IsOUTReceived())\r
@@ -178,18 +178,24 @@ void SetupHardware(void)
 /** Event handler for the library USB Configuration Changed event. */\r
 void EVENT_USB_Device_ConfigurationChanged(void)\r
 {\r
-       bool EndpointConfigSuccess;\r
+       bool EndpointConfigSuccess = true;\r
 \r
        /* Configure the device endpoints according to the selected mode */\r
        if (CurrentFirmwareMode == MODE_USART_BRIDGE)\r
        {\r
-               EndpointConfigSuccess = CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);\r
+               EndpointConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);\r
        }\r
        else\r
        {\r
-               EndpointConfigSuccess = Endpoint_ConfigureEndpoint(AVRISP_DATA_EPNUM, EP_TYPE_BULK,\r
-                                                                                                  ENDPOINT_DIR_OUT, AVRISP_DATA_EPSIZE,\r
-                                                                                                  ENDPOINT_BANK_SINGLE);\r
+               EndpointConfigSuccess &= Endpoint_ConfigureEndpoint(AVRISP_DATA_OUT_EPNUM, EP_TYPE_BULK,\r
+                                                                                                   ENDPOINT_DIR_OUT, AVRISP_DATA_EPSIZE,\r
+                                                                                                   ENDPOINT_BANK_SINGLE);\r
+\r
+               #if defined(WIN_LIBUSB_COMPAT)\r
+               EndpointConfigSuccess &= Endpoint_ConfigureEndpoint(AVRISP_DATA_IN_EPNUM, EP_TYPE_BULK,\r
+                                                                   ENDPOINT_DIR_IN, AVRISP_DATA_EPSIZE,\r
+                                                                   ENDPOINT_BANK_SINGLE);\r
+               #endif\r
        }\r
 \r
        if (EndpointConfigSuccess)\r
index f967d3b..cd8efbc 100644 (file)
  *    <td>RingBuff.h</td>\r
  *    <td>Defines the maximum number of bytes which can be buffered in each Ring Buffer.</td>\r
  *   </tr>\r
+ *   <tr>\r
+ *    <td>WIN_LIBUSB_COMPAT</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>Define to switch to a non-standard endpoint scheme, breaking compatibility with AVRStudio under Windows but making\r
+ *        the code compatible with Windows builds of avrdude using the libUSB driver. Linux platforms are not affected by this\r
+ *        option.\r
+ *   </tr>\r
  *  </table>\r
  */
\ No newline at end of file
index ba87e8a..dfecaa2 100644 (file)
@@ -202,6 +202,8 @@ CDEFS += -DAUX_LINE_PIN=PINB
 CDEFS += -DAUX_LINE_DDR=DDRB\r
 CDEFS += -DAUX_LINE_MASK="(1 << 4)"\r
 CDEFS += -DVTARGET_ADC_CHANNEL=2\r
+#CDEFS += -DLIBUSB_FILTERDRV_COMPAT\r
+\r
 \r
 # Place -D or -U options here for ASM sources\r
 ADEFS = -DF_CPU=$(F_CPU)\r