diff options
| author | tmk <hasu@tmk-kbd.com> | 2015-05-13 11:13:10 +0900 | 
|---|---|---|
| committer | tmk <hasu@tmk-kbd.com> | 2015-05-13 11:13:10 +0900 | 
| commit | f6d56675f9f981c5464f0ca7a1fbb0162154e8c5 (patch) | |
| tree | 57c9d4b3808a26116ae0ee7956fc00b84841aa2b /protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate | |
| parent | 4d116a04e94cf0d19317d5b44e4fa9f34a3e5594 (diff) | |
Squashed 'tmk_core/' changes from caca2c0..dc0e46e
dc0e46e Rename LUFA to LUFA-git
3bfa7fa Remove LUFA-120730
215b764 Merge commit 'afa0f22a9299686fd88f58ce09c5b521ac917e8f' as 'protocol/lufa/LUFA'
afa0f22 Squashed 'protocol/lufa/LUFA/' content from commit def7fca
c0c42fa Remove submodule of LUFA
30f897d Merge commit '87ced33feb74e79c3281dda36eb6d6d153399b41' as 'protocol/usb_hid/USB_Host_Shield_2.0'
87ced33 Squashed 'protocol/usb_hid/USB_Host_Shield_2.0/' content from commit aab4a69
14f6d49 Remove submodule of USB_Host_Shield_2.0
git-subtree-dir: tmk_core
git-subtree-split: dc0e46eaa4367d4e218f8816e3c117895820f07c
Diffstat (limited to 'protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate')
6 files changed, 453 insertions, 0 deletions
| diff --git a/protocol/lufa/LUFA-git b/protocol/lufa/LUFA-git deleted file mode 160000 -Subproject b6c18b2a7c544653efbe12a1d4e8ba65e7d83c3 diff --git a/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/Descriptors.c b/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/Descriptors.c new file mode 100644 index 0000000000..71cebe8911 --- /dev/null +++ b/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/Descriptors.c @@ -0,0 +1,180 @@ +/* +             LUFA Library +     Copyright (C) Dean Camera, 2014. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +*/ + +/* +  Copyright 2014  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 disclaims 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 "Descriptors.h" + +/** Device descriptor structure. This descriptor 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 DeviceDescriptor = +{ +	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, + +	.USBSpecification       = VERSION_BCD(2,0,0), +	.Class                  = USB_CSCP_NoDeviceClass, +	.SubClass               = USB_CSCP_NoDeviceSubclass, +	.Protocol               = USB_CSCP_NoDeviceProtocol, + +	.Endpoint0Size          = 64, + +	.VendorID               = 0x0000, +	.ProductID              = 0x0000, +	.ReleaseNumber          = VERSION_BCD(0,0,2), + +	.ManufacturerStrIndex   = 0x01, +	.ProductStrIndex        = 0x02, +	.SerialNumStrIndex      = NO_DESCRIPTOR, + +	.NumberOfConfigurations = 1 +}; + +/** 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 USB_Descriptor_Configuration_t ConfigurationDescriptor = +{ +	.Config = +		{ +			.Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, + +			.TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t), +			.TotalInterfaces          = 0, + +			.ConfigurationNumber      = 1, +			.ConfigurationStrIndex    = NO_DESCRIPTOR, + +			.ConfigAttributes         = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), + +			.MaxPowerConsumption      = USB_CONFIG_POWER_MA(100) +		}, +}; + +/** 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 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 ManufacturerString = +{ +	.Header                 = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String}, + +	.UnicodeString          = L"Your Name Here" +}; + +/** 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 ProductString = +{ +	.Header                 = {.Size = USB_STRING_LEN(15), .Type = DTYPE_String}, + +	.UnicodeString          = L"LUFA USB Device" +}; + +/** 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 CALLBACK_USB_GetDescriptor(const uint16_t wValue, +                                    const uint8_t wIndex, +                                    const void** const DescriptorAddress +									#if defined(HAS_MULTIPLE_DESCRIPTOR_ADDRESS_SPACES) +									, uint8_t* const DescriptorMemorySpace +									#endif +									) +{ +	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 = &DeviceDescriptor; +			Size    = sizeof(USB_Descriptor_Device_t); +			break; +		case DTYPE_Configuration: +			Address = &ConfigurationDescriptor; +			Size    = sizeof(USB_Descriptor_Configuration_t); +			break; +		case DTYPE_String: +			switch (DescriptorNumber) +			{ +				case 0x00: +					Address = &LanguageString; +					Size    = pgm_read_byte(&LanguageString.Header.Size); +					break; +				case 0x01: +					Address = &ManufacturerString; +					Size    = pgm_read_byte(&ManufacturerString.Header.Size); +					break; +				case 0x02: +					Address = &ProductString; +					Size    = pgm_read_byte(&ProductString.Header.Size); +					break; +			} + +			break; +	} + +	#if defined(HAS_MULTIPLE_DESCRIPTOR_ADDRESS_SPACES) +	*DescriptorMemorySpace = MEMSPACE_RAM; +	#endif + +	*DescriptorAddress = Address; +	return Size; +} + diff --git a/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/Descriptors.h b/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/Descriptors.h new file mode 100644 index 0000000000..6d8145d0cc --- /dev/null +++ b/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/Descriptors.h @@ -0,0 +1,59 @@ +/* +             LUFA Library +     Copyright (C) Dean Camera, 2014. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +*/ + +/* +  Copyright 2014  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 disclaims 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 Descriptors.c. + */ + +#ifndef _DESCRIPTORS_H_ +#define _DESCRIPTORS_H_ + +	/* Includes: */ +		#include <LUFA/Drivers/USB/USB.h> + +  /* Macros: */ +    #if (defined(ARCH_HAS_MULTI_ADDRESS_SPACE) && \ +         !(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS))) +      #define HAS_MULTIPLE_DESCRIPTOR_ADDRESS_SPACES +    #endif + +	/* 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; +		} USB_Descriptor_Configuration_t; + +#endif + diff --git a/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.c b/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.c new file mode 100644 index 0000000000..ddaa9d0893 --- /dev/null +++ b/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.c @@ -0,0 +1,106 @@ +/* +             LUFA Library +     Copyright (C) Dean Camera, 2014. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +*/ + +/* +  Copyright 2014  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 disclaims 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 + * + *  Main source file for the USB device application. This file contains the + *  main tasks of the application and is responsible for the initial + *  application hardware configuration. + */ + +#include "DeviceApplication.h" + +/** Main program entry point. This routine contains the overall program flow, including initial + *  setup of all components and the main program loop. + */ +int main(void) +{ +	SetupHardware(); + +	GlobalInterruptEnable(); + +	for (;;) +	{ +		USB_USBTask(); +	} +} + +/** Configures the board hardware and chip peripherals for the demo's functionality. */ +void SetupHardware(void) +{ +	#if (ARCH == ARCH_AVR8) +		/* Disable watchdog if enabled by bootloader/fuses */ +		MCUSR &= ~(1 << WDRF); +		wdt_disable(); + +		/* Disable clock division */ +		clock_prescale_set(clock_div_1); + +		/* Hardware Initialization */ +		USB_Init(USB_MODE_Device, USB_DEVICE_OPT_FULLSPEED | USB_OPT_AUTO_PLL); +	#elif (ARCH == ARCH_XMEGA) +		/* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ +		XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); +		XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); + +		/* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ +		XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); +		XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); + +		PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; + +		/* Hardware Initialization */ +		USB_Init(USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH); +	#endif +} + +/** Event handler for the library USB Connection event. */ +void EVENT_USB_Device_Connect(void) +{ + +} + +/** Event handler for the library USB Disconnection event. */ +void EVENT_USB_Device_Disconnect(void) +{ + +} + +/** Event handler for the library USB Configuration Changed event. */ +void EVENT_USB_Device_ConfigurationChanged(void) +{ + +} + +/** Event handler for the library USB Control Request reception event. */ +void EVENT_USB_Device_ControlRequest(void) +{ + +} diff --git a/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.h b/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.h new file mode 100644 index 0000000000..325176c537 --- /dev/null +++ b/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.h @@ -0,0 +1,53 @@ +/* +             LUFA Library +     Copyright (C) Dean Camera, 2014. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +*/ + +/* +  Copyright 2014  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 disclaims 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 DeviceApplication.c. + */ + +#ifndef _USB_DEVICE_APPLICATION_H_ +#define _USB_DEVICE_APPLICATION_H_ + +	/* Includes: */ +		#include <avr/io.h> +		#include <avr/wdt.h> +		#include <avr/power.h> + +		#include <LUFA/Platform/Platform.h> +		#include <LUFA/Drivers/USB/USB.h> + +		#include "Descriptors.h" + +	/* Function Prototypes: */ +		void SetupHardware(void); + +#endif + diff --git a/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml b/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml new file mode 100644 index 0000000000..fd65db283f --- /dev/null +++ b/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml @@ -0,0 +1,55 @@ +<asf xmlversion="1.0">
 +	<project caption="USB Device Template" id="lufa.templates.device.project.avr8">
 +		<require idref="lufa.templates.device"/>
 +		<require idref="lufa.boards.dummy.avr8"/>
 +		<generator value="as5_8_template"/>
 +
 +		<device-support value="at90usb1287"/>
 +		<config name="lufa.drivers.board.name" value="usbkey"/>
 +
 +		<build type="define" name="F_CPU" value="8000000UL"/>
 +		<build type="define" name="F_USB" value="8000000UL"/>
 +	</project>
 +
 +	<project caption="USB Device Template" id="lufa.templates.device.project.xmega">
 +		<require idref="lufa.templates.device"/>
 +		<require idref="lufa.boards.dummy.xmega"/>
 +		<generator value="as5_8_template"/>
 +
 +		<device-support value="atxmega256a3bu"/>
 +		<config name="lufa.drivers.board.name" value="a3bu_xplained"/>
 +
 +		<build type="define" name="F_CPU" value="32000000UL"/>
 +		<build type="define" name="F_USB" value="48000000UL"/>
 +	</project>
 +
 +	<module type="application" id="lufa.templates.device" caption="USB Device Template">
 +		<info type="description" value="summary">
 +		Template for a LUFA USB device mode application.
 +		</info>
 +
 + 		<info type="gui-flag" value="move-to-root"/>
 +
 +		<info type="keyword" value="Technology">
 +			<keyword value="USB Device"/>
 +			<keyword value="Template Projects"/>
 +		</info>
 +
 +		<device-support-alias value="lufa_avr8"/>
 +		<device-support-alias value="lufa_xmega"/>
 +		<device-support-alias value="lufa_uc3"/>
 +
 +		<build type="c-source" value="DeviceApplication.c"/>
 +		<build type="c-source" value="Descriptors.c"/>
 +		<build type="header-file" value="DeviceApplication.h"/>
 +		<build type="header-file" value="Descriptors.h"/>
 +
 +		<build type="module-config" subtype="path" value=".."/>
 +		<build type="header-file" value="../LUFAConfig.h"/>
 +
 +		<require idref="lufa.common"/>
 +		<require idref="lufa.platform"/>
 +		<require idref="lufa.drivers.usb"/>
 +		<require idref="lufa.drivers.board"/>
 +	</module>
 +</asf>
 | 
