mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 05:12:33 +01:00 
			
		
		
		
	Alter the XPLAINBridge and AVRISP-MKII clone projects so that the descriptors from the AVRISP-MKII clone project can be directly used in the XPLAINBridge project. Add support for RESET_TOGGLES_LIBUSB_COMPAT option in the XPLAINBridge project.
This commit is contained in:
		
							parent
							
								
									32cfb8cf4f
								
							
						
					
					
						commit
						5833b27f80
					
				
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -131,3 +131,24 @@ void AVRISP_Task(void) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
 | ||||||
|  |  *  documentation) by the application code so that the address and size of a requested descriptor can be given | ||||||
|  |  *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function | ||||||
|  |  *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the | ||||||
|  |  *  USB host. | ||||||
|  |  * | ||||||
|  |  *  \param[in]  wValue                 Descriptor type and index to retrieve | ||||||
|  |  *  \param[in]  wIndex                 Sub-index to retrieve (such as a localized string language) | ||||||
|  |  *  \param[out] DescriptorAddress      Address of the retrieved descriptor | ||||||
|  |  *  \param[out] DescriptorMemorySpace  Memory space that the descriptor is stored in | ||||||
|  |  * | ||||||
|  |  *  \return Length of the retrieved descriptor in bytes, or NO_DESCRIPTOR if the descriptor was not found | ||||||
|  |  */ | ||||||
|  | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|  |                                     const uint8_t wIndex, | ||||||
|  |                                     const void** const DescriptorAddress, | ||||||
|  |                                     uint8_t* DescriptorMemorySpace) | ||||||
|  | { | ||||||
|  | 	return AVRISP_GetDescriptor(wValue, wIndex, DescriptorAddress, DescriptorMemorySpace); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | |||||||
| @ -50,7 +50,7 @@ | |||||||
| 			#include <LUFA/Drivers/Peripheral/ADC.h> | 			#include <LUFA/Drivers/Peripheral/ADC.h> | ||||||
| 		#endif | 		#endif | ||||||
| 
 | 
 | ||||||
| 		#include "Descriptors.h" | 		#include "AVRISPDescriptors.h" | ||||||
| 		#include "Lib/V2Protocol.h" | 		#include "Lib/V2Protocol.h" | ||||||
| 
 | 
 | ||||||
| 	/* Macros: */ | 	/* Macros: */ | ||||||
| @ -80,5 +80,11 @@ | |||||||
| 		void EVENT_USB_Device_Disconnect(void); | 		void EVENT_USB_Device_Disconnect(void); | ||||||
| 		void EVENT_USB_Device_ConfigurationChanged(void); | 		void EVENT_USB_Device_ConfigurationChanged(void); | ||||||
| 		 | 		 | ||||||
|  | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|  | 		                                    const uint8_t wIndex, | ||||||
|  | 		                                    const void** const DescriptorAddress, | ||||||
|  | 		                                    uint8_t* const DescriptorMemorySpace) | ||||||
|  | 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3) ATTR_NON_NULL_PTR_ARG(4);		 | ||||||
|  | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -35,7 +35,7 @@ | |||||||
|  *  the device's capabilities and functions. |  *  the device's capabilities and functions. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include "Descriptors.h" | #include "AVRISPDescriptors.h" | ||||||
| 
 | 
 | ||||||
| #if defined(RESET_TOGGLES_LIBUSB_COMPAT) || defined(__DOXYGEN__) | #if defined(RESET_TOGGLES_LIBUSB_COMPAT) || defined(__DOXYGEN__) | ||||||
| 	static bool AVRISP_NeedCompatibilitySwitch ATTR_NO_INIT; | 	static bool AVRISP_NeedCompatibilitySwitch ATTR_NO_INIT; | ||||||
| @ -52,7 +52,7 @@ | |||||||
|  *  number of device configurations. The descriptor is read out by the USB host when the enumeration |  *  number of device configurations. The descriptor is read out by the USB host when the enumeration | ||||||
|  *  process begins. |  *  process begins. | ||||||
|  */ |  */ | ||||||
| const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | const USB_Descriptor_Device_t PROGMEM AVRISP_DeviceDescriptor = | ||||||
| { | { | ||||||
| 	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, | 	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, | ||||||
| 
 | 
 | ||||||
| @ -79,13 +79,13 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = | |||||||
|  *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting |  *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting | ||||||
|  *  a configuration so that the host may correctly communicate with the USB device. |  *  a configuration so that the host may correctly communicate with the USB device. | ||||||
|  */ |  */ | ||||||
| USB_Descriptor_Configuration_t ConfigurationDescriptor = | AVRISP_USB_Descriptor_Configuration_t AVRISP_ConfigurationDescriptor = | ||||||
| { | { | ||||||
| 	.Config = | 	.Config = | ||||||
| 		{ | 		{ | ||||||
| 			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, | 			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, | ||||||
| 
 | 
 | ||||||
| 			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), | 			.TotalConfigurationSize = sizeof(AVRISP_USB_Descriptor_Configuration_t), | ||||||
| 			.TotalInterfaces        = 1, | 			.TotalInterfaces        = 1, | ||||||
| 
 | 
 | ||||||
| 			.ConfigurationNumber    = 1, | 			.ConfigurationNumber    = 1, | ||||||
| @ -141,7 +141,7 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor = | |||||||
|  *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate |  *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate | ||||||
|  *  via the language ID table available at USB.org what languages the device supports for its string descriptors. |  *  via the language ID table available at USB.org what languages the device supports for its string descriptors. | ||||||
|  */ |  */ | ||||||
| const USB_Descriptor_String_t PROGMEM LanguageString = | const USB_Descriptor_String_t PROGMEM AVRISP_LanguageString = | ||||||
| { | { | ||||||
| 	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, | 	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, | ||||||
| 
 | 
 | ||||||
| @ -152,7 +152,7 @@ const USB_Descriptor_String_t PROGMEM LanguageString = | |||||||
|  *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device |  *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device | ||||||
|  *  Descriptor. |  *  Descriptor. | ||||||
|  */ |  */ | ||||||
| const USB_Descriptor_String_t PROGMEM ManufacturerString = | const USB_Descriptor_String_t PROGMEM AVRISP_ManufacturerString = | ||||||
| { | { | ||||||
| 	.Header                 = {.Size = USB_STRING_LEN(5), .Type = DTYPE_String}, | 	.Header                 = {.Size = USB_STRING_LEN(5), .Type = DTYPE_String}, | ||||||
| 
 | 
 | ||||||
| @ -163,7 +163,7 @@ const USB_Descriptor_String_t PROGMEM ManufacturerString = | |||||||
|  *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device |  *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device | ||||||
|  *  Descriptor. |  *  Descriptor. | ||||||
|  */ |  */ | ||||||
| const USB_Descriptor_String_t PROGMEM ProductString = | const USB_Descriptor_String_t PROGMEM AVRISP_ProductString = | ||||||
| { | { | ||||||
| 	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String}, | 	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String}, | ||||||
| 
 | 
 | ||||||
| @ -173,7 +173,7 @@ const USB_Descriptor_String_t PROGMEM ProductString = | |||||||
| /** Serial number string. This is a Unicode string containing the device's unique serial number, expressed as a
 | /** Serial number string. This is a Unicode string containing the device's unique serial number, expressed as a
 | ||||||
|  *  series of uppercase hexadecimal digits. |  *  series of uppercase hexadecimal digits. | ||||||
|  */ |  */ | ||||||
| const USB_Descriptor_String_t PROGMEM SerialString = | const USB_Descriptor_String_t PROGMEM AVRISP_SerialString = | ||||||
| { | { | ||||||
| 	.Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String}, | 	.Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String}, | ||||||
| 	 | 	 | ||||||
| @ -186,7 +186,7 @@ const USB_Descriptor_String_t PROGMEM SerialString = | |||||||
|  *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the |  *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the | ||||||
|  *  USB host. |  *  USB host. | ||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t AVRISP_GetDescriptor(const uint16_t wValue, | ||||||
|                               const uint8_t wIndex, |                               const uint8_t wIndex, | ||||||
|                               const void** const DescriptorAddress, |                               const void** const DescriptorAddress, | ||||||
|                               uint8_t* DescriptorMemorySpace) |                               uint8_t* DescriptorMemorySpace) | ||||||
| @ -202,36 +202,36 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | |||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
| 			Address = &DeviceDescriptor; | 			Address = &AVRISP_DeviceDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | 			Size    = sizeof(USB_Descriptor_Device_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_Configuration: | 		case DTYPE_Configuration: | ||||||
| 			*DescriptorMemorySpace = MEMSPACE_RAM; | 			*DescriptorMemorySpace = MEMSPACE_RAM; | ||||||
| 			#if defined(RESET_TOGGLES_LIBUSB_COMPAT)			 | 			#if defined(RESET_TOGGLES_LIBUSB_COMPAT)			 | ||||||
| 				ConfigurationDescriptor.AVRISP_DataInEndpoint.EndpointAddress = AVRISP_CurrDataINEndpointAddress; | 				AVRISP_ConfigurationDescriptor.AVRISP_DataInEndpoint.EndpointAddress = AVRISP_CurrDataINEndpointAddress; | ||||||
| 			#endif | 			#endif | ||||||
| 
 | 
 | ||||||
| 			Address = &ConfigurationDescriptor; | 			Address = &AVRISP_ConfigurationDescriptor; | ||||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | 			Size    = sizeof(AVRISP_USB_Descriptor_Configuration_t); | ||||||
| 			break; | 			break; | ||||||
| 		case DTYPE_String: | 		case DTYPE_String: | ||||||
| 			switch (DescriptorNumber) | 			switch (DescriptorNumber) | ||||||
| 			{ | 			{ | ||||||
| 				case 0x00: | 				case 0x00: | ||||||
| 					Address = &LanguageString; | 					Address = &AVRISP_LanguageString; | ||||||
| 					Size    = pgm_read_byte(&LanguageString.Header.Size); | 					Size    = pgm_read_byte(&AVRISP_LanguageString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x01: | 				case 0x01: | ||||||
| 					Address = &ManufacturerString; | 					Address = &AVRISP_ManufacturerString; | ||||||
| 					Size    = pgm_read_byte(&ManufacturerString.Header.Size); | 					Size    = pgm_read_byte(&AVRISP_ManufacturerString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x02: | 				case 0x02: | ||||||
| 					Address = &ProductString; | 					Address = &AVRISP_ProductString; | ||||||
| 					Size    = pgm_read_byte(&ProductString.Header.Size); | 					Size    = pgm_read_byte(&AVRISP_ProductString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 				case 0x03: | 				case 0x03: | ||||||
| 					Address = &SerialString; | 					Address = &AVRISP_SerialString; | ||||||
| 					Size    = pgm_read_byte(&SerialString.Header.Size); | 					Size    = pgm_read_byte(&AVRISP_SerialString.Header.Size); | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| @ -82,7 +82,7 @@ | |||||||
| 			USB_Descriptor_Interface_t               AVRISP_Interface; | 			USB_Descriptor_Interface_t               AVRISP_Interface; | ||||||
| 			USB_Descriptor_Endpoint_t                AVRISP_DataInEndpoint; | 			USB_Descriptor_Endpoint_t                AVRISP_DataInEndpoint; | ||||||
| 			USB_Descriptor_Endpoint_t                AVRISP_DataOutEndpoint; | 			USB_Descriptor_Endpoint_t                AVRISP_DataOutEndpoint; | ||||||
| 		} USB_Descriptor_Configuration_t; | 		} AVRISP_USB_Descriptor_Configuration_t; | ||||||
| 
 | 
 | ||||||
| 	/* External Variables: */ | 	/* External Variables: */ | ||||||
| 		#if defined(RESET_TOGGLES_LIBUSB_COMPAT) | 		#if defined(RESET_TOGGLES_LIBUSB_COMPAT) | ||||||
| @ -90,7 +90,7 @@ | |||||||
| 		#endif | 		#endif | ||||||
| 		 | 		 | ||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t AVRISP_GetDescriptor(const uint16_t wValue, | ||||||
| 		                              const uint8_t wIndex, | 		                              const uint8_t wIndex, | ||||||
| 		                              const void** const DescriptorAddress, | 		                              const void** const DescriptorAddress, | ||||||
| 		                              uint8_t* const DescriptorMemorySpace) | 		                              uint8_t* const DescriptorMemorySpace) | ||||||
| @ -43,7 +43,7 @@ | |||||||
| 
 | 
 | ||||||
| 		#include <LUFA/Drivers/USB/USB.h> | 		#include <LUFA/Drivers/USB/USB.h> | ||||||
| 
 | 
 | ||||||
| 		#include "../Descriptors.h" | 		#include "../AVRISPDescriptors.h" | ||||||
| 		#include "V2ProtocolConstants.h" | 		#include "V2ProtocolConstants.h" | ||||||
| 		#include "V2ProtocolParams.h" | 		#include "V2ProtocolParams.h" | ||||||
| 		#include "ISP/ISPProtocol.h" | 		#include "ISP/ISPProtocol.h" | ||||||
|  | |||||||
| @ -154,7 +154,7 @@ include $(LUFA_PATH)/LUFA/makefile | |||||||
| 
 | 
 | ||||||
| # List C source files here. (C dependencies are automatically generated.)
 | # List C source files here. (C dependencies are automatically generated.)
 | ||||||
| SRC = $(TARGET).c                                                 \
 | SRC = $(TARGET).c                                                 \
 | ||||||
| 	  Descriptors.c                                               \
 | 	  AVRISPDescriptors.c                                         \
 | ||||||
| 	  Lib/V2Protocol.c                                            \
 | 	  Lib/V2Protocol.c                                            \
 | ||||||
| 	  Lib/V2ProtocolParams.c                                      \
 | 	  Lib/V2ProtocolParams.c                                      \
 | ||||||
| 	  Lib/ISP/ISPProtocol.c                                       \
 | 	  Lib/ISP/ISPProtocol.c                                       \
 | ||||||
|  | |||||||
| @ -1,221 +0,0 @@ | |||||||
| /*
 |  | ||||||
|              LUFA Library |  | ||||||
|      Copyright (C) Dean Camera, 2012. |  | ||||||
| 
 |  | ||||||
|   dean [at] fourwalledcubicle [dot] com |  | ||||||
|            www.lufa-lib.org |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|   Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com) |  | ||||||
| 
 |  | ||||||
|   Permission to use, copy, modify, distribute, and sell this |  | ||||||
|   software and its documentation for any purpose is hereby granted |  | ||||||
|   without fee, provided that the above copyright notice appear in |  | ||||||
|   all copies and that both that the copyright notice and this |  | ||||||
|   permission notice and warranty disclaimer appear in supporting |  | ||||||
|   documentation, and that the name of the author not be used in |  | ||||||
|   advertising or publicity pertaining to distribution of the |  | ||||||
|   software without specific, written prior permission. |  | ||||||
| 
 |  | ||||||
|   The author disclaim all warranties with regard to this |  | ||||||
|   software, including all implied warranties of merchantability |  | ||||||
|   and fitness.  In no event shall the author be liable for any |  | ||||||
|   special, indirect or consequential damages or any damages |  | ||||||
|   whatsoever resulting from loss of use, data or profits, whether |  | ||||||
|   in an action of contract, negligence or other tortious action, |  | ||||||
|   arising out of or in connection with the use or performance of |  | ||||||
|   this software. |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /** \file
 |  | ||||||
|  * |  | ||||||
|  *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special |  | ||||||
|  *  computer-readable structures which the host requests upon device enumeration, to determine |  | ||||||
|  *  the device's capabilities and functions. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #include "AVRISPDescriptors.h" |  | ||||||
| 
 |  | ||||||
| /** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
 |  | ||||||
|  *  device characteristics, including the supported USB version, control endpoint size and the |  | ||||||
|  *  number of device configurations. The descriptor is read out by the USB host when the enumeration |  | ||||||
|  *  process begins. |  | ||||||
|  */ |  | ||||||
| const USB_Descriptor_Device_t PROGMEM AVRISP_DeviceDescriptor = |  | ||||||
| { |  | ||||||
| 	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, |  | ||||||
| 
 |  | ||||||
| 	.USBSpecification       = VERSION_BCD(01.10), |  | ||||||
| 	.Class                  = USB_CSCP_VendorSpecificClass, |  | ||||||
| 	.SubClass               = USB_CSCP_NoDeviceSubclass, |  | ||||||
| 	.Protocol               = USB_CSCP_NoDeviceProtocol, |  | ||||||
| 
 |  | ||||||
| 	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE, |  | ||||||
| 
 |  | ||||||
| 	.VendorID               = 0x03EB, |  | ||||||
| 	.ProductID              = 0x2104, |  | ||||||
| 	.ReleaseNumber          = VERSION_BCD(02.00), |  | ||||||
| 
 |  | ||||||
| 	.ManufacturerStrIndex   = 0x01, |  | ||||||
| 	.ProductStrIndex        = 0x02, |  | ||||||
| 	.SerialNumStrIndex      = 0x03, |  | ||||||
| 
 |  | ||||||
| 	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
 |  | ||||||
|  *  of the device in one of its supported configurations, including information about any device interfaces |  | ||||||
|  *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting |  | ||||||
|  *  a configuration so that the host may correctly communicate with the USB device. |  | ||||||
|  */ |  | ||||||
| const AVRISP_USB_Descriptor_Configuration_t PROGMEM AVRISP_ConfigurationDescriptor = |  | ||||||
| { |  | ||||||
| 	.Config = |  | ||||||
| 		{ |  | ||||||
| 			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, |  | ||||||
| 
 |  | ||||||
| 			.TotalConfigurationSize = sizeof(AVRISP_USB_Descriptor_Configuration_t), |  | ||||||
| 			.TotalInterfaces        = 1, |  | ||||||
| 
 |  | ||||||
| 			.ConfigurationNumber    = 1, |  | ||||||
| 			.ConfigurationStrIndex  = NO_DESCRIPTOR, |  | ||||||
| 
 |  | ||||||
| 			.ConfigAttributes       = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), |  | ||||||
| 
 |  | ||||||
| 			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100) |  | ||||||
| 		}, |  | ||||||
| 
 |  | ||||||
| 	.AVRISP_Interface = |  | ||||||
| 		{ |  | ||||||
| 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, |  | ||||||
| 
 |  | ||||||
| 			.InterfaceNumber        = 0, |  | ||||||
| 			.AlternateSetting       = 0, |  | ||||||
| 
 |  | ||||||
| 			.TotalEndpoints         = 2, |  | ||||||
| 
 |  | ||||||
| 			.Class                  = USB_CSCP_VendorSpecificClass, |  | ||||||
| 			.SubClass               = USB_CSCP_NoDeviceSubclass, |  | ||||||
| 			.Protocol               = USB_CSCP_NoDeviceProtocol, |  | ||||||
| 
 |  | ||||||
| 			.InterfaceStrIndex      = NO_DESCRIPTOR |  | ||||||
| 		}, |  | ||||||
| 
 |  | ||||||
| 	.AVRISP_DataInEndpoint = |  | ||||||
| 		{ |  | ||||||
| 			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, |  | ||||||
| 
 |  | ||||||
| 			.EndpointAddress        = AVRISP_DATA_IN_EPADDR, |  | ||||||
| 			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), |  | ||||||
| 			.EndpointSize           = AVRISP_DATA_EPSIZE, |  | ||||||
| 			.PollingIntervalMS      = 0x0A |  | ||||||
| 		}, |  | ||||||
| 
 |  | ||||||
| 	.AVRISP_DataOutEndpoint = |  | ||||||
| 		{ |  | ||||||
| 			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, |  | ||||||
| 
 |  | ||||||
| 			.EndpointAddress        = AVRISP_DATA_OUT_EPADDR, |  | ||||||
| 			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), |  | ||||||
| 			.EndpointSize           = AVRISP_DATA_EPSIZE, |  | ||||||
| 			.PollingIntervalMS      = 0x0A |  | ||||||
| 		}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
 |  | ||||||
|  *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate |  | ||||||
|  *  via the language ID table available at USB.org what languages the device supports for its string descriptors. |  | ||||||
|  */ |  | ||||||
| const USB_Descriptor_String_t PROGMEM AVRISP_LanguageString = |  | ||||||
| { |  | ||||||
| 	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, |  | ||||||
| 
 |  | ||||||
| 	.UnicodeString          = {LANGUAGE_ID_ENG} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
 |  | ||||||
|  *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device |  | ||||||
|  *  Descriptor. |  | ||||||
|  */ |  | ||||||
| const USB_Descriptor_String_t PROGMEM AVRISP_ManufacturerString = |  | ||||||
| { |  | ||||||
| 	.Header                 = {.Size = USB_STRING_LEN(5), .Type = DTYPE_String}, |  | ||||||
| 
 |  | ||||||
| 	.UnicodeString          = L"ATMEL" |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
 |  | ||||||
|  *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device |  | ||||||
|  *  Descriptor. |  | ||||||
|  */ |  | ||||||
| const USB_Descriptor_String_t PROGMEM AVRISP_ProductString = |  | ||||||
| { |  | ||||||
| 	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String}, |  | ||||||
| 
 |  | ||||||
| 	.UnicodeString          = L"AVRISP mkII" |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /** 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 = |  | ||||||
| { |  | ||||||
| 	.Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String}, |  | ||||||
| 
 |  | ||||||
| 	.UnicodeString          = L"000200053650\0" |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
 |  | ||||||
|  *  documentation) by the application code so that the address and size of a requested descriptor can be given |  | ||||||
|  *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function |  | ||||||
|  *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the |  | ||||||
|  *  USB host. |  | ||||||
|  */ |  | ||||||
| uint16_t AVRISP_GetDescriptor(const uint16_t wValue, |  | ||||||
|                               const uint8_t wIndex, |  | ||||||
|                               const void** const DescriptorAddress) |  | ||||||
| { |  | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); |  | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); |  | ||||||
| 
 |  | ||||||
| 	const void* Address = NULL; |  | ||||||
| 	uint16_t    Size    = NO_DESCRIPTOR; |  | ||||||
| 
 |  | ||||||
| 	switch (DescriptorType) |  | ||||||
| 	{ |  | ||||||
| 		case DTYPE_Device: |  | ||||||
| 			Address = &AVRISP_DeviceDescriptor; |  | ||||||
| 			Size    = sizeof(USB_Descriptor_Device_t); |  | ||||||
| 			break; |  | ||||||
| 		case DTYPE_Configuration: |  | ||||||
| 			Address = &AVRISP_ConfigurationDescriptor; |  | ||||||
| 			Size    = sizeof(AVRISP_USB_Descriptor_Configuration_t); |  | ||||||
| 			break; |  | ||||||
| 		case DTYPE_String: |  | ||||||
| 			switch (DescriptorNumber) |  | ||||||
| 			{ |  | ||||||
| 				case 0x00: |  | ||||||
| 					Address = &AVRISP_LanguageString; |  | ||||||
| 					Size    = pgm_read_byte(&AVRISP_LanguageString.Header.Size); |  | ||||||
| 					break; |  | ||||||
| 				case 0x01: |  | ||||||
| 					Address = &AVRISP_ManufacturerString; |  | ||||||
| 					Size    = pgm_read_byte(&AVRISP_ManufacturerString.Header.Size); |  | ||||||
| 					break; |  | ||||||
| 				case 0x02: |  | ||||||
| 					Address = &AVRISP_ProductString; |  | ||||||
| 					Size    = pgm_read_byte(&AVRISP_ProductString.Header.Size); |  | ||||||
| 					break; |  | ||||||
| 				case 0x03: |  | ||||||
| 					Address = &AVRISP_SerialString; |  | ||||||
| 					Size    = pgm_read_byte(&AVRISP_SerialString.Header.Size); |  | ||||||
| 					break; |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			break; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	*DescriptorAddress = Address; |  | ||||||
| 	return Size; |  | ||||||
| } |  | ||||||
| @ -1,80 +0,0 @@ | |||||||
| /*
 |  | ||||||
|              LUFA Library |  | ||||||
|      Copyright (C) Dean Camera, 2012. |  | ||||||
| 
 |  | ||||||
|   dean [at] fourwalledcubicle [dot] com |  | ||||||
|            www.lufa-lib.org |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|   Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com) |  | ||||||
| 
 |  | ||||||
|   Permission to use, copy, modify, distribute, and sell this |  | ||||||
|   software and its documentation for any purpose is hereby granted |  | ||||||
|   without fee, provided that the above copyright notice appear in |  | ||||||
|   all copies and that both that the copyright notice and this |  | ||||||
|   permission notice and warranty disclaimer appear in supporting |  | ||||||
|   documentation, and that the name of the author not be used in |  | ||||||
|   advertising or publicity pertaining to distribution of the |  | ||||||
|   software without specific, written prior permission. |  | ||||||
| 
 |  | ||||||
|   The author disclaim all warranties with regard to this |  | ||||||
|   software, including all implied warranties of merchantability |  | ||||||
|   and fitness.  In no event shall the author be liable for any |  | ||||||
|   special, indirect or consequential damages or any damages |  | ||||||
|   whatsoever resulting from loss of use, data or profits, whether |  | ||||||
|   in an action of contract, negligence or other tortious action, |  | ||||||
|   arising out of or in connection with the use or performance of |  | ||||||
|   this software. |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /** \file
 |  | ||||||
|  * |  | ||||||
|  *  Header file for AVRISPDescriptors.c. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #ifndef _AVRISP_DESCRIPTORS_H_ |  | ||||||
| #define _AVRISP_DESCRIPTORS_H_ |  | ||||||
| 
 |  | ||||||
| 	/* Includes: */ |  | ||||||
| 		#include <avr/pgmspace.h> |  | ||||||
| 
 |  | ||||||
| 		#include <LUFA/Drivers/USB/USB.h> |  | ||||||
| 
 |  | ||||||
| 	/* Macros: */ |  | ||||||
| 		#if !defined(LIBUSB_DRIVER_COMPAT) || defined(__DOXYGEN__) |  | ||||||
| 			/** Endpoint address of the AVRISP data OUT endpoint. */ |  | ||||||
| 			#define AVRISP_DATA_OUT_EPADDR     (ENDPOINT_DIR_OUT | 2) |  | ||||||
| 
 |  | ||||||
| 			/** Endpoint address of the AVRISP data IN endpoint. */ |  | ||||||
| 			#define AVRISP_DATA_IN_EPADDR      (ENDPOINT_DIR_IN  | 2) |  | ||||||
| 		#else |  | ||||||
| 			#define AVRISP_DATA_OUT_EPADDR     (ENDPOINT_DIR_OUT | 2) |  | ||||||
| 			#define AVRISP_DATA_IN_EPADDR      (ENDPOINT_DIR_IN  | 3) |  | ||||||
| 		#endif |  | ||||||
| 
 |  | ||||||
| 		/** Size in bytes of the AVRISP data endpoint. */ |  | ||||||
| 		#define AVRISP_DATA_EPSIZE             64 |  | ||||||
| 
 |  | ||||||
| 	/* Type Defines: */ |  | ||||||
| 		/** Type define for the device configuration descriptor structure. This must be defined in the
 |  | ||||||
| 		 *  application code, as the configuration descriptor contains several sub-descriptors which |  | ||||||
| 		 *  vary between devices, and which describe the device's usage to the host. |  | ||||||
| 		 */ |  | ||||||
| 		typedef struct |  | ||||||
| 		{ |  | ||||||
| 			USB_Descriptor_Configuration_Header_t    Config; |  | ||||||
| 
 |  | ||||||
| 			// Atmel AVRISP-MKII Interface
 |  | ||||||
| 			USB_Descriptor_Interface_t               AVRISP_Interface; |  | ||||||
| 			USB_Descriptor_Endpoint_t                AVRISP_DataInEndpoint; |  | ||||||
| 			USB_Descriptor_Endpoint_t                AVRISP_DataOutEndpoint; |  | ||||||
| 		} AVRISP_USB_Descriptor_Configuration_t; |  | ||||||
| 
 |  | ||||||
| 	/* Function Prototypes: */ |  | ||||||
| 		uint16_t AVRISP_GetDescriptor(const uint16_t wValue, |  | ||||||
| 		                              const uint8_t wIndex, |  | ||||||
| 		                              const void** const DescriptorAddress); |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| @ -224,7 +224,8 @@ const USB_Descriptor_String_t PROGMEM USART_ProductString = | |||||||
|  */ |  */ | ||||||
| uint16_t USART_GetDescriptor(const uint16_t wValue, | uint16_t USART_GetDescriptor(const uint16_t wValue, | ||||||
|                              const uint8_t wIndex, |                              const uint8_t wIndex, | ||||||
|                              const void** const DescriptorAddress) |                              const void** const DescriptorAddress, | ||||||
|  |                              uint8_t* const DescriptorMemorySpace) | ||||||
| { | { | ||||||
| 	const uint8_t  DescriptorType   = (wValue >> 8); | 	const uint8_t  DescriptorType   = (wValue >> 8); | ||||||
| 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | 	const uint8_t  DescriptorNumber = (wValue & 0xFF); | ||||||
| @ -232,6 +233,8 @@ uint16_t USART_GetDescriptor(const uint16_t wValue, | |||||||
| 	const void* Address = NULL; | 	const void* Address = NULL; | ||||||
| 	uint16_t    Size    = NO_DESCRIPTOR; | 	uint16_t    Size    = NO_DESCRIPTOR; | ||||||
| 
 | 
 | ||||||
|  | 	*DescriptorMemorySpace = MEMSPACE_FLASH; | ||||||
|  | 	 | ||||||
| 	switch (DescriptorType) | 	switch (DescriptorType) | ||||||
| 	{ | 	{ | ||||||
| 		case DTYPE_Device: | 		case DTYPE_Device: | ||||||
|  | |||||||
| @ -82,7 +82,8 @@ | |||||||
| 	/* Function Prototypes: */ | 	/* Function Prototypes: */ | ||||||
| 		uint16_t USART_GetDescriptor(const uint16_t wValue, | 		uint16_t USART_GetDescriptor(const uint16_t wValue, | ||||||
| 		                             const uint8_t wIndex, | 		                             const uint8_t wIndex, | ||||||
| 		                             const void** const DescriptorAddress); | 		                             const void** const DescriptorAddress, | ||||||
|  | 									 uint8_t* const DescriptorMemorySpace); | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -176,11 +176,6 @@ void SetupHardware(void) | |||||||
| 	/* Disable clock division */ | 	/* Disable clock division */ | ||||||
| 	clock_prescale_set(clock_div_1); | 	clock_prescale_set(clock_div_1); | ||||||
| 
 | 
 | ||||||
| 	/* Hardware Initialization */ |  | ||||||
| 	SoftUART_Init(); |  | ||||||
| 	LEDs_Init(); |  | ||||||
| 	USB_Init(); |  | ||||||
| 
 |  | ||||||
| 	/* Disable JTAG debugging */ | 	/* Disable JTAG debugging */ | ||||||
| 	MCUCR |= (1 << JTD); | 	MCUCR |= (1 << JTD); | ||||||
| 	MCUCR |= (1 << JTD); | 	MCUCR |= (1 << JTD); | ||||||
| @ -195,6 +190,16 @@ void SetupHardware(void) | |||||||
| 	/* Re-enable JTAG debugging */ | 	/* Re-enable JTAG debugging */ | ||||||
| 	MCUCR &= ~(1 << JTD); | 	MCUCR &= ~(1 << JTD); | ||||||
| 	MCUCR &= ~(1 << JTD); | 	MCUCR &= ~(1 << JTD); | ||||||
|  | 
 | ||||||
|  | 	/* Hardware Initialization */ | ||||||
|  | 	SoftUART_Init(); | ||||||
|  | 	LEDs_Init(); | ||||||
|  | 	#if defined(RESET_TOGGLES_LIBUSB_COMPAT) | ||||||
|  | 	UpdateCurrentCompatibilityMode(); | ||||||
|  | 	#endif | ||||||
|  | 	 | ||||||
|  | 	/* USB Stack Initialization */	 | ||||||
|  | 	USB_Init(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** Event handler for the library USB Configuration Changed event. */ | /** Event handler for the library USB Configuration Changed event. */ | ||||||
| @ -270,17 +275,19 @@ void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCI | |||||||
|  *  \param[in]  wValue                 Descriptor type and index to retrieve |  *  \param[in]  wValue                 Descriptor type and index to retrieve | ||||||
|  *  \param[in]  wIndex                 Sub-index to retrieve (such as a localized string language) |  *  \param[in]  wIndex                 Sub-index to retrieve (such as a localized string language) | ||||||
|  *  \param[out] DescriptorAddress      Address of the retrieved descriptor |  *  \param[out] DescriptorAddress      Address of the retrieved descriptor | ||||||
|  |  *  \param[out] DescriptorMemorySpace  Memory space that the descriptor is stored in | ||||||
|  * |  * | ||||||
|  *  \return Length of the retrieved descriptor in bytes, or NO_DESCRIPTOR if the descriptor was not found |  *  \return Length of the retrieved descriptor in bytes, or NO_DESCRIPTOR if the descriptor was not found | ||||||
|  */ |  */ | ||||||
| uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
|                                     const uint8_t wIndex, |                                     const uint8_t wIndex, | ||||||
|                                     const void** const DescriptorAddress) |                                     const void** const DescriptorAddress, | ||||||
|  | 		                            uint8_t* const DescriptorMemorySpace) | ||||||
| { | { | ||||||
| 	/* Return the correct descriptors based on the selected mode */ | 	/* Return the correct descriptors based on the selected mode */ | ||||||
| 	if (CurrentFirmwareMode == MODE_USART_BRIDGE) | 	if (CurrentFirmwareMode == MODE_USART_BRIDGE) | ||||||
| 	  return USART_GetDescriptor(wValue, wIndex, DescriptorAddress); | 	  return USART_GetDescriptor(wValue, wIndex, DescriptorAddress, DescriptorMemorySpace); | ||||||
| 	else | 	else | ||||||
| 	  return AVRISP_GetDescriptor(wValue, wIndex, DescriptorAddress); | 	  return AVRISP_GetDescriptor(wValue, wIndex, DescriptorAddress, DescriptorMemorySpace); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -43,9 +43,9 @@ | |||||||
| 		#include <avr/interrupt.h> | 		#include <avr/interrupt.h> | ||||||
| 		#include <util/delay.h> | 		#include <util/delay.h> | ||||||
| 
 | 
 | ||||||
| 		#include "AVRISPDescriptors.h" |  | ||||||
| 		#include "USARTDescriptors.h" | 		#include "USARTDescriptors.h" | ||||||
| 
 | 
 | ||||||
|  | 		#include "AVRISPDescriptors.h"		 | ||||||
| 		#include "Lib/V2Protocol.h" | 		#include "Lib/V2Protocol.h" | ||||||
| 		#include "Lib/SoftUART.h" | 		#include "Lib/SoftUART.h" | ||||||
| 
 | 
 | ||||||
| @ -95,8 +95,9 @@ | |||||||
| 
 | 
 | ||||||
| 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | 		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||||
| 		                                    const uint8_t wIndex, | 		                                    const uint8_t wIndex, | ||||||
| 		                                    const void** const DescriptorAddress) | 		                                    const void** const DescriptorAddress, | ||||||
| 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); | 		                                    uint8_t* const DescriptorMemorySpace) | ||||||
|  | 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3) ATTR_NON_NULL_PTR_ARG(4);		 | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -82,7 +82,21 @@ | |||||||
|  *    <td>LIBUSB_DRIVER_COMPAT</td> |  *    <td>LIBUSB_DRIVER_COMPAT</td> | ||||||
|  *    <td>Makefile LUFA_OPTS</td> |  *    <td>Makefile LUFA_OPTS</td> | ||||||
|  *    <td>Define to switch to a non-standard endpoint scheme, breaking compatibility with AVRStudio under Windows but making |  *    <td>Define to switch to a non-standard endpoint scheme, breaking compatibility with AVRStudio under Windows but making | ||||||
|  *        the code compatible with software such as avrdude (all platforms) that use the libUSB driver.</td> |  *        the code compatible with software such as avrdude (all platforms) that use the libUSB driver. | ||||||
|  |  * | ||||||
|  |  *        \note This option is incompatible with \c RESET_TOGGLES_LIBUSB_COMPAT.</td> | ||||||
|  |  *   </tr> | ||||||
|  |  *   <tr> | ||||||
|  |  *    <td>RESET_TOGGLES_LIBUSB_COMPAT</td> | ||||||
|  |  *    <td>Makefile LUFA_OPTS</td> | ||||||
|  |  *    <td>Define to make the /RESET line of the AVR toggle between Jungo and libUSB driver compatibility modes. Each time the AVR is | ||||||
|  |  *        reset externally via the reset pin, the compatibility mode will be toggled. The compatibility mode is preserved between | ||||||
|  |  *        power cycles and is not toggled via other forms of reset such as Watchdog or Brown Out. | ||||||
|  |  * | ||||||
|  |  *        When this option is enabled, all board LEDs will flash twice on startup for Jungo compatibility mode, and five times for | ||||||
|  |  *        libUSB compatibility mode. | ||||||
|  |  * | ||||||
|  |  *        \note This option is incompatible with \c LIBUSB_DRIVER_COMPAT.</td> | ||||||
|  *   </tr> |  *   </tr> | ||||||
|  *   <tr> |  *   <tr> | ||||||
|  *    <td>FIRMWARE_VERSION_MINOR</td> |  *    <td>FIRMWARE_VERSION_MINOR</td> | ||||||
|  | |||||||
| @ -129,7 +129,6 @@ LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR=0 | |||||||
| LUFA_OPTS += -D ORDERED_EP_CONFIG | LUFA_OPTS += -D ORDERED_EP_CONFIG | ||||||
| LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=16 | LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=16 | ||||||
| LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1 | LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1 | ||||||
| LUFA_OPTS += -D USE_FLASH_DESCRIPTORS |  | ||||||
| LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" | LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" | ||||||
| LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP | LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP | ||||||
| LUFA_OPTS += -D NO_DEVICE_SELF_POWER | LUFA_OPTS += -D NO_DEVICE_SELF_POWER | ||||||
| @ -141,6 +140,7 @@ LUFA_OPTS += -D AUX_LINE_MASK="(1 << 4)" | |||||||
| LUFA_OPTS += -D VTARGET_ADC_CHANNEL=2 | LUFA_OPTS += -D VTARGET_ADC_CHANNEL=2 | ||||||
| LUFA_OPTS += -D VTARGET_REF_VOLTS=3.3 | LUFA_OPTS += -D VTARGET_REF_VOLTS=3.3 | ||||||
| LUFA_OPTS += -D VTARGET_SCALE_FACTOR=2 | LUFA_OPTS += -D VTARGET_SCALE_FACTOR=2 | ||||||
|  | #LUFA_OPTS += -D RESET_TOGGLES_LIBUSB_COMPAT
 | ||||||
| #LUFA_OPTS += -D LIBUSB_DRIVER_COMPAT
 | #LUFA_OPTS += -D LIBUSB_DRIVER_COMPAT
 | ||||||
| #LUFA_OPTS += -D FIRMWARE_VERSION_MINOR=0x11
 | #LUFA_OPTS += -D FIRMWARE_VERSION_MINOR=0x11
 | ||||||
| 
 | 
 | ||||||
| @ -150,9 +150,9 @@ include $(LUFA_PATH)/LUFA/makefile | |||||||
| 
 | 
 | ||||||
| # List C source files here. (C dependencies are automatically generated.)
 | # List C source files here. (C dependencies are automatically generated.)
 | ||||||
| SRC = $(TARGET).c                                                 \
 | SRC = $(TARGET).c                                                 \
 | ||||||
| 	  AVRISPDescriptors.c                                         \
 |  | ||||||
| 	  USARTDescriptors.c                                          \
 |  | ||||||
| 	  Lib/SoftUART.c                                              \
 | 	  Lib/SoftUART.c                                              \
 | ||||||
|  | 	  USARTDescriptors.c                                          \
 | ||||||
|  | 	  $(AVRISP_PATH)/AVRISPDescriptors.c                          \
 | ||||||
| 	  $(AVRISP_PATH)/Lib/V2Protocol.c                             \
 | 	  $(AVRISP_PATH)/Lib/V2Protocol.c                             \
 | ||||||
| 	  $(AVRISP_PATH)/Lib/V2ProtocolParams.c                       \
 | 	  $(AVRISP_PATH)/Lib/V2ProtocolParams.c                       \
 | ||||||
| 	  $(AVRISP_PATH)/Lib/ISP/ISPProtocol.c                        \
 | 	  $(AVRISP_PATH)/Lib/ISP/ISPProtocol.c                        \
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera