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.
This commit is contained in:
		
							parent
							
								
									ce46257ff2
								
							
						
					
					
						commit
						c9148f9b47
					
				
					 15 changed files with 102 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -90,12 +90,21 @@ void EVENT_USB_Device_ConfigurationChanged(void)
 | 
			
		|||
	LEDs_SetAllLEDs(LEDMASK_USB_READY);
 | 
			
		||||
 | 
			
		||||
	/* 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_BANK_SINGLE)))
 | 
			
		||||
	{
 | 
			
		||||
		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. */
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +114,7 @@ void Process_AVRISP_Commands(void)
 | 
			
		|||
	if (USB_DeviceState != DEVICE_STATE_Configured)
 | 
			
		||||
	  return;
 | 
			
		||||
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_EPNUM);
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM);
 | 
			
		||||
	
 | 
			
		||||
	/* Check to see if a V2 Protocol command has been received */
 | 
			
		||||
	if (Endpoint_IsOUTReceived())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -273,5 +273,12 @@
 | 
			
		|||
 *    <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>  
 | 
			
		||||
 *   </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>
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,7 +106,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
		{
 | 
			
		||||
			.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),
 | 
			
		||||
			.EndpointSize           = AVRISP_DATA_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0x00
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +116,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
		{
 | 
			
		||||
			.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),
 | 
			
		||||
			.EndpointSize           = AVRISP_DATA_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0x00
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,11 +42,22 @@
 | 
			
		|||
		#include <LUFA/Drivers/USB/USB.h>
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Endpoint number of the AVRISP bidirectional data endpoint. */
 | 
			
		||||
		#define AVRISP_DATA_EPNUM              2
 | 
			
		||||
		#if !defined(WIN_LIBUSB_COMPAT)
 | 
			
		||||
			/** 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. */
 | 
			
		||||
		#define AVRISP_DATA_EPSIZE             64	
 | 
			
		||||
		#define AVRISP_DATA_EPSIZE             64
 | 
			
		||||
 | 
			
		||||
	/* Type Defines: */
 | 
			
		||||
		/** Type define for the device configuration descriptor structure. This must be defined in the
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,6 +57,7 @@ void ISPProtocol_EnterISPMode(void)
 | 
			
		|||
	Endpoint_Read_Stream_LE(&Enter_ISP_Params, sizeof(Enter_ISP_Params), NO_STREAM_CALLBACK);
 | 
			
		||||
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
 | 
			
		||||
	uint8_t ResponseStatus = STATUS_CMD_FAILED;
 | 
			
		||||
| 
						 | 
				
			
			@ -117,6 +118,7 @@ void ISPProtocol_LeaveISPMode(void)
 | 
			
		|||
	Endpoint_Read_Stream_LE(&Leave_ISP_Params, sizeof(Leave_ISP_Params), NO_STREAM_CALLBACK);
 | 
			
		||||
	
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
 | 
			
		||||
	/* 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)
 | 
			
		|||
	if (Write_Memory_Params.BytesToWrite > sizeof(Write_Memory_Params.ProgData))
 | 
			
		||||
	{
 | 
			
		||||
		Endpoint_ClearOUT();
 | 
			
		||||
		Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
		Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
 | 
			
		||||
		Endpoint_Write_Byte(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_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
 | 
			
		||||
	uint8_t  ProgrammingStatus = STATUS_CMD_OK;	
 | 
			
		||||
| 
						 | 
				
			
			@ -305,6 +309,7 @@ void ISPProtocol_ReadMemory(uint8_t V2Command)
 | 
			
		|||
	Read_Memory_Params.BytesToRead = SwapEndian_16(Read_Memory_Params.BytesToRead);
 | 
			
		||||
	
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	Endpoint_Write_Byte(V2Command);
 | 
			
		||||
| 
						 | 
				
			
			@ -375,6 +380,7 @@ void ISPProtocol_ChipErase(void)
 | 
			
		|||
	Endpoint_Read_Stream_LE(&Erase_Chip_Params, sizeof(Erase_Chip_Params), NO_STREAM_CALLBACK);
 | 
			
		||||
	
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	uint8_t ResponseStatus = STATUS_CMD_OK;
 | 
			
		||||
| 
						 | 
				
			
			@ -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_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
 | 
			
		||||
	uint8_t ResponseBytes[4];
 | 
			
		||||
| 
						 | 
				
			
			@ -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_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
 | 
			
		||||
	/* Send the Fuse or Lock byte program commands as given by the host to the device */
 | 
			
		||||
| 
						 | 
				
			
			@ -467,6 +475,7 @@ void ISPProtocol_SPIMulti(void)
 | 
			
		|||
	Endpoint_Read_Stream_LE(&SPI_Multi_Params.TxData, SPI_Multi_Params.TxBytes, NO_STREAM_CALLBACK);
 | 
			
		||||
	
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	Endpoint_Write_Byte(CMD_SPI_MULTI);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -131,6 +131,7 @@ void V2Protocol_ProcessCommand(void)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	Endpoint_WaitUntilReady();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -149,6 +150,7 @@ static void V2Protocol_UnknownCommand(const uint8_t V2Command)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
 | 
			
		||||
	Endpoint_Write_Byte(V2Command);
 | 
			
		||||
| 
						 | 
				
			
			@ -160,6 +162,7 @@ static void V2Protocol_UnknownCommand(const uint8_t V2Command)
 | 
			
		|||
static void V2Protocol_SignOn(void)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
 | 
			
		||||
	Endpoint_Write_Byte(CMD_SIGN_ON);
 | 
			
		||||
| 
						 | 
				
			
			@ -175,6 +178,7 @@ static void V2Protocol_SignOn(void)
 | 
			
		|||
static void V2Protocol_ResetProtection(void)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	Endpoint_Write_Byte(CMD_RESET_PROTECTION);
 | 
			
		||||
| 
						 | 
				
			
			@ -197,6 +201,7 @@ static void V2Protocol_GetSetParam(const uint8_t V2Command)
 | 
			
		|||
	  ParamValue = Endpoint_Read_Byte();
 | 
			
		||||
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	Endpoint_Write_Byte(V2Command);
 | 
			
		||||
| 
						 | 
				
			
			@ -230,6 +235,7 @@ static void V2Protocol_LoadAddress(void)
 | 
			
		|||
	Endpoint_Read_Stream_BE(&CurrentAddress, sizeof(CurrentAddress), NO_STREAM_CALLBACK);
 | 
			
		||||
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	MustSetAddress = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,6 +72,12 @@
 | 
			
		|||
 | 
			
		||||
		/** MUX mask for the VTARGET ADC channel number */
 | 
			
		||||
		#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: */
 | 
			
		||||
		extern uint32_t CurrentAddress;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,6 +65,7 @@ void XPROGProtocol_SetMode(void)
 | 
			
		|||
	Endpoint_Read_Stream_LE(&SetMode_XPROG_Params, sizeof(SetMode_XPROG_Params), NO_STREAM_CALLBACK);
 | 
			
		||||
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	XPROG_SelectedProtocol = SetMode_XPROG_Params.Protocol;
 | 
			
		||||
| 
						 | 
				
			
			@ -111,6 +112,7 @@ void XPROGProtocol_Command(void)
 | 
			
		|||
static void XPROGProtocol_EnterXPROGMode(void)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	bool NVMBusEnabled;
 | 
			
		||||
| 
						 | 
				
			
			@ -166,6 +168,7 @@ static void XPROGProtocol_EnterXPROGMode(void)
 | 
			
		|||
static void XPROGProtocol_LeaveXPROGMode(void)
 | 
			
		||||
{
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI)
 | 
			
		||||
| 
						 | 
				
			
			@ -210,6 +213,7 @@ static void XPROGProtocol_Erase(void)
 | 
			
		|||
	Erase_XPROG_Params.Address = SwapEndian_32(Erase_XPROG_Params.Address);
 | 
			
		||||
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	uint8_t EraseCommand;
 | 
			
		||||
| 
						 | 
				
			
			@ -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_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
 | 
			
		||||
	if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI)
 | 
			
		||||
| 
						 | 
				
			
			@ -374,6 +379,7 @@ static void XPROGProtocol_ReadMemory(void)
 | 
			
		|||
	ReadMemory_XPROG_Params.Length  = SwapEndian_16(ReadMemory_XPROG_Params.Length);
 | 
			
		||||
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
 | 
			
		||||
	uint8_t ReadBuffer[256];
 | 
			
		||||
| 
						 | 
				
			
			@ -416,6 +422,7 @@ static void XPROGProtocol_ReadCRC(void)
 | 
			
		|||
	Endpoint_Read_Stream_LE(&ReadCRC_XPROG_Params, sizeof(ReadCRC_XPROG_Params), NO_STREAM_CALLBACK);
 | 
			
		||||
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
	
 | 
			
		||||
	uint32_t MemoryCRC;
 | 
			
		||||
| 
						 | 
				
			
			@ -491,6 +498,7 @@ static void XPROGProtocol_SetParam(void)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
 | 
			
		||||
	Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
 | 
			
		||||
		  
 | 
			
		||||
	Endpoint_Write_Byte(CMD_XPROG);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -199,6 +199,7 @@ CDEFS += -DENABLE_ISP_PROTOCOL
 | 
			
		|||
CDEFS += -DENABLE_XPROG_PROTOCOL
 | 
			
		||||
#CDEFS += -DXPROG_VIA_HARDWARE_USART
 | 
			
		||||
#CDEFS += -DNO_VTARGET_DETECT
 | 
			
		||||
#CDEFS += -DWIN_LIBUSB_COMPAT
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Place -D or -U options here for ASM sources
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue