Commit c9148f9b authored by Dean Camera's avatar Dean Camera
Browse files

Added WIN_LIBUSB_COMPAT compile time option to the AVRISP programmer project...

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