mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-30 21:02:32 +01:00 
			
		
		
		
	Run wspurify script on /trunk/ and /branches/ C source files, to remove any trailing whitespace at the end of each line.
This commit is contained in:
		
							parent
							
								
									77f354609f
								
							
						
					
					
						commit
						f201f6697b
					
				| @ -40,9 +40,9 @@ | ||||
| 		#include <avr/io.h> | ||||
| 		#include <avr/boot.h> | ||||
| 		#include <stdbool.h> | ||||
| 		 | ||||
| 
 | ||||
| 		#include <LUFA/Common/Common.h> | ||||
| 	 | ||||
| 
 | ||||
| 	/* Function Prototypes: */ | ||||
| 		void    BootloaderAPI_ErasePage(const uint32_t Address); | ||||
| 		void    BootloaderAPI_WritePage(const uint32_t Address); | ||||
|  | ||||
| @ -104,10 +104,10 @@ void SetupHardware(void) | ||||
| 	/* Initialize USB Subsystem */ | ||||
| 	USB_Init(); | ||||
| 	LEDs_Init(); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Bootloader active LED toggle timer initialization */ | ||||
| 	TIMSK1 = (1 << TOIE1); | ||||
| 	TCCR1B = ((1 << CS11) | (1 << CS10));	 | ||||
| 	TCCR1B = ((1 << CS11) | (1 << CS10)); | ||||
| } | ||||
| 
 | ||||
| /** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */ | ||||
| @ -266,7 +266,7 @@ static void ReadWriteMemoryBlock(const uint8_t Command) | ||||
| 				{ | ||||
| 					LowByte = FetchNextCommandByte(); | ||||
| 				} | ||||
| 				 | ||||
| 
 | ||||
| 				HighByte = !HighByte; | ||||
| 			} | ||||
| 			else | ||||
| @ -365,7 +365,7 @@ void CDC_Task(void) | ||||
| 	if (Command == 'E') | ||||
| 	{ | ||||
| 		RunBootloader = false; | ||||
| 	 | ||||
| 
 | ||||
| 		/* Send confirmation byte back to the host */ | ||||
| 		WriteNextResponseByte('\r'); | ||||
| 	} | ||||
|  | ||||
| @ -46,7 +46,7 @@ | ||||
| 		#include <stdbool.h> | ||||
| 
 | ||||
| 		#include "Descriptors.h" | ||||
| 		#include "BootloaderAPI.h"		 | ||||
| 		#include "BootloaderAPI.h" | ||||
| 
 | ||||
| 		#include <LUFA/Drivers/USB/USB.h> | ||||
| 		#include <LUFA/Drivers/Board/LEDs.h> | ||||
|  | ||||
| @ -115,14 +115,14 @@ | ||||
| 		typedef struct | ||||
| 		{ | ||||
| 			USB_Descriptor_Configuration_Header_t    Config; | ||||
| 			 | ||||
| 
 | ||||
| 			// CDC Control Interface
 | ||||
| 			USB_Descriptor_Interface_t               CDC_CCI_Interface; | ||||
| 			USB_CDC_Descriptor_FunctionalHeader_t    CDC_Functional_Header; | ||||
| 			USB_CDC_Descriptor_FunctionalACM_t       CDC_Functional_ACM; | ||||
| 			USB_CDC_Descriptor_FunctionalUnion_t     CDC_Functional_Union; | ||||
| 			USB_Descriptor_Endpoint_t                CDC_NotificationEndpoint; | ||||
| 			 | ||||
| 
 | ||||
| 			// CDC Data Interface
 | ||||
| 			USB_Descriptor_Interface_t               CDC_DCI_Interface; | ||||
| 			USB_Descriptor_Endpoint_t                CDC_DataOutEndpoint; | ||||
|  | ||||
| @ -40,9 +40,9 @@ | ||||
| 		#include <avr/io.h> | ||||
| 		#include <avr/boot.h> | ||||
| 		#include <stdbool.h> | ||||
| 		 | ||||
| 
 | ||||
| 		#include <LUFA/Common/Common.h> | ||||
| 	 | ||||
| 
 | ||||
| 	/* Function Prototypes: */ | ||||
| 		void    BootloaderAPI_ErasePage(const uint32_t Address); | ||||
| 		void    BootloaderAPI_WritePage(const uint32_t Address); | ||||
|  | ||||
| @ -113,10 +113,10 @@ int main(void) | ||||
| 
 | ||||
| 	/* If the TCK pin is not jumpered to ground, start the user application instead */ | ||||
| 	RunBootloader = (!(PINF & (1 << 4))); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Re-enable JTAG debugging */ | ||||
| 	MCUCR &= ~(1 << JTD); | ||||
| 	MCUCR &= ~(1 << JTD);	 | ||||
| 	MCUCR &= ~(1 << JTD); | ||||
| 	#endif | ||||
| 
 | ||||
| 	/* Turn on first LED on the board to indicate that the bootloader has started */ | ||||
| @ -153,7 +153,7 @@ void SetupHardware(void) | ||||
| 	/* Initialize the USB subsystem */ | ||||
| 	USB_Init(); | ||||
| 	LEDs_Init(); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Bootloader active LED toggle timer initialization */ | ||||
| 	TIMSK1 = (1 << TOIE1); | ||||
| 	TCCR1B = ((1 << CS11) | (1 << CS10)); | ||||
| @ -181,7 +181,7 @@ ISR(TIMER1_OVF_vect, ISR_BLOCK) | ||||
|  *  internally. | ||||
|  */ | ||||
| void EVENT_USB_Device_ControlRequest(void) | ||||
| {	 | ||||
| { | ||||
| 	/* Ignore any requests that aren't directed to the DFU interface */ | ||||
| 	if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) != | ||||
| 	    (REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| @ -742,3 +742,4 @@ static void ProcessReadCommand(void) | ||||
| 	else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01))                    // Read signature byte
 | ||||
| 	  ResponseByte = SignatureInfo[DataIndexToRead - 0x30]; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -159,11 +159,11 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||
| 			Address = &DeviceDescriptor; | ||||
| 			Size    = sizeof(USB_Descriptor_Device_t); | ||||
| 			break; | ||||
| 		case DTYPE_Configuration:  | ||||
| 		case DTYPE_Configuration: | ||||
| 			Address = &ConfigurationDescriptor; | ||||
| 			Size    = sizeof(USB_Descriptor_Configuration_t); | ||||
| 			break; | ||||
| 		case DTYPE_String:  | ||||
| 		case DTYPE_String: | ||||
| 			if (!(DescriptorNumber)) | ||||
| 			{ | ||||
| 				Address = &LanguageString; | ||||
| @ -174,10 +174,10 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||
| 				Address = &ProductString; | ||||
| 				Size    = ProductString.Header.Size; | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	*DescriptorAddress = Address; | ||||
| 	return Size; | ||||
| } | ||||
|  | ||||
| @ -161,7 +161,7 @@ | ||||
| 		typedef struct | ||||
| 		{ | ||||
| 			USB_Descriptor_Configuration_Header_t Config; | ||||
| 			 | ||||
| 
 | ||||
| 			// DFU Interface
 | ||||
| 			USB_Descriptor_Interface_t            DFU_Interface; | ||||
| 			USB_Descriptor_DFU_Functional_t       DFU_Functional; | ||||
|  | ||||
| @ -9,13 +9,13 @@ | ||||
| /*
 | ||||
|   Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||||
| 
 | ||||
|   Permission to use, copy, modify, distribute, and sell this  | ||||
|   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  | ||||
|   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  | ||||
|   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 | ||||
| @ -32,7 +32,7 @@ | ||||
|  * | ||||
|  *  Main source file for the HID class bootloader. This file contains the complete bootloader logic. | ||||
|  */ | ||||
|   | ||||
| 
 | ||||
| #include "BootloaderHID.h" | ||||
| 
 | ||||
| /** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
 | ||||
| @ -41,20 +41,20 @@ | ||||
|  */ | ||||
| static bool RunBootloader = true; | ||||
| 
 | ||||
| /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously 
 | ||||
| /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously
 | ||||
|  *  runs the bootloader processing routine until instructed to soft-exit. | ||||
|  */ | ||||
| int main(void) | ||||
| { | ||||
| 	/* Setup hardware required for the bootloader */ | ||||
| 	SetupHardware(); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Enable global interrupts so that the USB stack can function */ | ||||
| 	sei(); | ||||
| 
 | ||||
| 	while (RunBootloader) | ||||
| 	  USB_USBTask(); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Disconnect from the host - USB interface will be reset later along with the AVR */ | ||||
| 	USB_Detach(); | ||||
| 
 | ||||
| @ -108,17 +108,17 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 	{ | ||||
| 		case HID_REQ_SetReport: | ||||
| 			Endpoint_ClearSETUP(); | ||||
| 			 | ||||
| 
 | ||||
| 			/* Wait until the command has been sent by the host */ | ||||
| 			while (!(Endpoint_IsOUTReceived())); | ||||
| 		 | ||||
| 
 | ||||
| 			/* Read in the write destination address */ | ||||
| 			#if (FLASHEND > 0xFFFF) | ||||
| 			uint32_t PageAddress = ((uint32_t)Endpoint_Read_16_LE() << 8); | ||||
| 			#else | ||||
| 			uint16_t PageAddress = Endpoint_Read_16_LE(); | ||||
| 			#endif | ||||
| 			 | ||||
| 
 | ||||
| 			/* Check if the command is a program page command, or a start application command */ | ||||
| 			#if (FLASHEND > 0xFFFF) | ||||
| 			if ((uint16_t)(PageAddress >> 8) == COMMAND_STARTAPPLICATION) | ||||
| @ -133,9 +133,9 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				/* Erase the given FLASH page, ready to be programmed */ | ||||
| 				boot_page_erase(PageAddress); | ||||
| 				boot_spm_busy_wait(); | ||||
| 				 | ||||
| 
 | ||||
| 				/* Write each of the FLASH page's bytes in sequence */ | ||||
| 				for (uint8_t PageWord = 0; PageWord < (SPM_PAGESIZE / 2); PageWord++)				 | ||||
| 				for (uint8_t PageWord = 0; PageWord < (SPM_PAGESIZE / 2); PageWord++) | ||||
| 				{ | ||||
| 					/* Check if endpoint is empty - if so clear it and wait until ready for next packet */ | ||||
| 					if (!(Endpoint_BytesInEndpoint())) | ||||
| @ -162,3 +162,4 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 			break; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -8,14 +8,14 @@ | ||||
| 
 | ||||
| /*
 | ||||
|   Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||||
| 	   | ||||
|   Permission to use, copy, modify, distribute, and sell this  | ||||
| 
 | ||||
|   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  | ||||
|   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  | ||||
|   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 | ||||
| @ -32,7 +32,7 @@ | ||||
|  * | ||||
|  *  Header file for TeensyHID.c. | ||||
|  */ | ||||
|   | ||||
| 
 | ||||
| #ifndef _TEENSYHID_H_ | ||||
| #define _TEENSYHID_H_ | ||||
| 
 | ||||
| @ -47,15 +47,16 @@ | ||||
| 		#include "Descriptors.h" | ||||
| 
 | ||||
| 		#include <LUFA/Drivers/USB/USB.h> | ||||
| 		 | ||||
| 	/* Macros: */		 | ||||
| 
 | ||||
| 	/* Macros: */ | ||||
| 		/** Bootloader special address to start the user application */ | ||||
| 		#define COMMAND_STARTAPPLICATION   0xFFFF | ||||
| 		 | ||||
| 
 | ||||
| 	/* Function Prototypes: */ | ||||
| 		void SetupHardware(void); | ||||
| 
 | ||||
| 		void EVENT_USB_Device_ConfigurationChanged(void); | ||||
| 		void EVENT_USB_Device_UnhandledControlRequest(void); | ||||
| 		 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -8,14 +8,14 @@ | ||||
| 
 | ||||
| /*
 | ||||
|   Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||||
| 	   | ||||
|   Permission to use, copy, modify, distribute, and sell this  | ||||
| 
 | ||||
|   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  | ||||
|   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  | ||||
|   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 | ||||
| @ -30,9 +30,9 @@ | ||||
| 
 | ||||
| /** \file
 | ||||
|  * | ||||
|  *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special  | ||||
|  *  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.   | ||||
|  *  the device's capabilities and functions. | ||||
|  */ | ||||
| 
 | ||||
| #include "Descriptors.h" | ||||
| @ -52,7 +52,7 @@ const USB_Descriptor_HIDReport_Datatype_t HIDReport[] = | ||||
| 	    HID_RI_LOGICAL_MINIMUM(8, 0x00), | ||||
| 	    HID_RI_LOGICAL_MAXIMUM(8, 0xFF), | ||||
| 	    HID_RI_REPORT_SIZE(8, 0x08), | ||||
| 	    HID_RI_REPORT_COUNT(16, (sizeof(uint16_t) + SPM_PAGESIZE)),		 | ||||
| 	    HID_RI_REPORT_COUNT(16, (sizeof(uint16_t) + SPM_PAGESIZE)), | ||||
| 	    HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), | ||||
| 	HID_RI_END_COLLECTION(0), | ||||
| }; | ||||
| @ -91,49 +91,49 @@ const USB_Descriptor_Device_t DeviceDescriptor = | ||||
|  */ | ||||
| const USB_Descriptor_Configuration_t ConfigurationDescriptor = | ||||
| { | ||||
| 	.Config =  | ||||
| 	.Config = | ||||
| 		{ | ||||
| 			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, | ||||
| 
 | ||||
| 			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), | ||||
| 			.TotalInterfaces        = 1, | ||||
| 				 | ||||
| 
 | ||||
| 			.ConfigurationNumber    = 1, | ||||
| 			.ConfigurationStrIndex  = NO_DESCRIPTOR, | ||||
| 				 | ||||
| 
 | ||||
| 			.ConfigAttributes       = USB_CONFIG_ATTR_BUSPOWERED, | ||||
| 			 | ||||
| 
 | ||||
| 			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100) | ||||
| 		}, | ||||
| 		 | ||||
| 	.HID_Interface =  | ||||
| 
 | ||||
| 	.HID_Interface = | ||||
| 		{ | ||||
| 			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, | ||||
| 
 | ||||
| 			.InterfaceNumber        = 0x00, | ||||
| 			.AlternateSetting       = 0x00, | ||||
| 			 | ||||
| 
 | ||||
| 			.TotalEndpoints         = 1, | ||||
| 				 | ||||
| 
 | ||||
| 			.Class                  = HID_CSCP_HIDClass, | ||||
| 			.SubClass               = HID_CSCP_NonBootSubclass, | ||||
| 			.Protocol               = HID_CSCP_NonBootProtocol, | ||||
| 				 | ||||
| 
 | ||||
| 			.InterfaceStrIndex      = NO_DESCRIPTOR | ||||
| 		}, | ||||
| 
 | ||||
| 	.HID_VendorHID =  | ||||
| 		{   | ||||
| 	.HID_VendorHID = | ||||
| 		{ | ||||
| 			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, | ||||
| 			 | ||||
| 
 | ||||
| 			.HIDSpec                = VERSION_BCD(01.11), | ||||
| 			.CountryCode            = 0x00, | ||||
| 			.TotalReportDescriptors = 1, | ||||
| 			.HIDReportType          = HID_DTYPE_Report, | ||||
| 			.HIDReportLength        = sizeof(HIDReport) | ||||
| 		}, | ||||
| 		 | ||||
| 	.HID_ReportINEndpoint =  | ||||
| 
 | ||||
| 	.HID_ReportINEndpoint = | ||||
| 		{ | ||||
| 			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, | ||||
| 
 | ||||
| @ -158,17 +158,17 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||
| 
 | ||||
| 	const void* Address = NULL; | ||||
| 	uint16_t    Size    = NO_DESCRIPTOR; | ||||
| 	 | ||||
| 
 | ||||
| 	/* If/Else If chain compiles slightly smaller than a switch case */ | ||||
| 	if (DescriptorType == DTYPE_Device) | ||||
| 	{ | ||||
| 		Address = &DeviceDescriptor; | ||||
| 		Size    = sizeof(USB_Descriptor_Device_t);	 | ||||
| 		Size    = sizeof(USB_Descriptor_Device_t); | ||||
| 	} | ||||
| 	else if (DescriptorType == DTYPE_Configuration) | ||||
| 	{ | ||||
| 		Address = &ConfigurationDescriptor; | ||||
| 		Size    = sizeof(USB_Descriptor_Configuration_t);	 | ||||
| 		Size    = sizeof(USB_Descriptor_Configuration_t); | ||||
| 	} | ||||
| 	else if (DescriptorType == HID_DTYPE_HID) | ||||
| 	{ | ||||
| @ -184,3 +184,4 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||
| 	*DescriptorAddress = Address; | ||||
| 	return Size; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -8,14 +8,14 @@ | ||||
| 
 | ||||
| /*
 | ||||
|   Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||||
| 	   | ||||
|   Permission to use, copy, modify, distribute, and sell this  | ||||
| 
 | ||||
|   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  | ||||
|   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  | ||||
|   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 | ||||
| @ -47,18 +47,18 @@ | ||||
| 		typedef struct | ||||
| 		{ | ||||
| 			USB_Descriptor_Configuration_Header_t Config; | ||||
| 			 | ||||
| 
 | ||||
| 			// Generic HID Interface
 | ||||
| 			USB_Descriptor_Interface_t            HID_Interface; | ||||
| 			USB_HID_Descriptor_HID_t              HID_VendorHID; | ||||
| 	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; | ||||
| 		} USB_Descriptor_Configuration_t; | ||||
| 					 | ||||
| 
 | ||||
| 	/* Macros: */ | ||||
| 		/** Endpoint number of the HID data IN endpoint. */ | ||||
| 		#define HID_IN_EPNUM                 1 | ||||
| 
 | ||||
| 		/** Size in bytes of the HID reporting IN endpoint. */		 | ||||
| 		/** Size in bytes of the HID reporting IN endpoint. */ | ||||
| 		#define HID_IN_EPSIZE                64 | ||||
| 
 | ||||
| 	/* Function Prototypes: */ | ||||
| @ -68,3 +68,4 @@ | ||||
| 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -710,10 +710,10 @@ int teensy_open(void) | ||||
| { | ||||
| 	teensy_close(); | ||||
| 	uhid_teensy_fd = open_usb_device(0x16C0, 0x0478); | ||||
| 	 | ||||
| 
 | ||||
| 	if (uhid_teensy_fd < 0) | ||||
| 		uhid_teensy_fd = open_usb_device(0x03eb, 0x2067); | ||||
| 	 | ||||
| 
 | ||||
| 	if (uhid_teensy_fd < 0) return 0; | ||||
| 	return 1; | ||||
| } | ||||
| @ -826,7 +826,7 @@ parse_hex_line(char *line) | ||||
| 	int addr, code, num; | ||||
|         int sum, len, cksum, i; | ||||
|         char *ptr; | ||||
|          | ||||
| 
 | ||||
|         num = 0; | ||||
|         if (line[0] != ':') return 0; | ||||
|         if (strlen(line) < 11) return 0; | ||||
|  | ||||
| @ -106,11 +106,11 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 		#if defined(USE_TEST_TONE) | ||||
| 			static uint8_t SquareWaveSampleCount; | ||||
| 			static int16_t CurrentWaveValue; | ||||
| 			 | ||||
| 
 | ||||
| 			/* In test tone mode, generate a square wave at 1/256 of the sample rate */ | ||||
| 			if (SquareWaveSampleCount++ == 0xFF) | ||||
| 			  CurrentWaveValue ^= 0x8000; | ||||
| 			 | ||||
| 
 | ||||
| 			/* Only generate audio if the board button is being pressed */ | ||||
| 			AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; | ||||
| 		#else | ||||
| @ -122,7 +122,7 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 			AudioSample -= (SAMPLE_MAX_RANGE / 2); | ||||
| 			#endif | ||||
| 		#endif | ||||
| 		 | ||||
| 
 | ||||
| 		Audio_Device_WriteSample16(&Microphone_Audio_Interface, AudioSample); | ||||
| 	} | ||||
| 
 | ||||
| @ -211,10 +211,10 @@ bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* | ||||
| 						CurrentAudioSampleFrequency = (((uint32_t)Data[2] << 16) | ((uint32_t)Data[1] << 8) | (uint32_t)Data[0]); | ||||
| 
 | ||||
| 						/* Adjust sample reload timer to the new frequency */ | ||||
| 						OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);				 | ||||
| 						OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); | ||||
| 					} | ||||
| 					 | ||||
| 					return true;				 | ||||
| 
 | ||||
| 					return true; | ||||
| 				case AUDIO_REQ_GetCurrent: | ||||
| 					/* Check if we are just testing for a valid property, or actually reading it */ | ||||
| 					if (DataLength != NULL) | ||||
| @ -223,13 +223,14 @@ bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* | ||||
| 
 | ||||
| 						Data[2] = (CurrentAudioSampleFrequency >> 16); | ||||
| 						Data[1] = (CurrentAudioSampleFrequency >> 8); | ||||
| 						Data[0] = (CurrentAudioSampleFrequency &  0xFF);					 | ||||
| 						Data[0] = (CurrentAudioSampleFrequency &  0xFF); | ||||
| 					} | ||||
| 					 | ||||
| 
 | ||||
| 					return true; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -204,7 +204,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = | ||||
| 
 | ||||
| 			.TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)) | ||||
| 		}, | ||||
| 	 | ||||
| 
 | ||||
| 	.Audio_AudioFormatSampleRates = | ||||
| 		{ | ||||
| 			AUDIO_SAMPLE_FREQ(8000), | ||||
|  | ||||
| @ -91,7 +91,7 @@ void SetupHardware(void) | ||||
| ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| { | ||||
| 	uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Check that the USB bus is ready for the next sample to read */ | ||||
| 	if (Audio_Device_IsSampleReceived(&Speaker_Audio_Interface)) | ||||
| 	{ | ||||
| @ -128,8 +128,8 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 
 | ||||
| 		LEDs_SetAllLEDs(LEDMask); | ||||
| 	} | ||||
| 	 | ||||
| 	Endpoint_SelectEndpoint(PrevEndpoint);	 | ||||
| 
 | ||||
| 	Endpoint_SelectEndpoint(PrevEndpoint); | ||||
| } | ||||
| 
 | ||||
| /** Event handler for the library USB Connection event. */ | ||||
| @ -248,10 +248,10 @@ bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* | ||||
| 						CurrentAudioSampleFrequency = (((uint32_t)Data[2] << 16) | ((uint32_t)Data[1] << 8) | (uint32_t)Data[0]); | ||||
| 
 | ||||
| 						/* Adjust sample reload timer to the new frequency */ | ||||
| 						OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);				 | ||||
| 						OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); | ||||
| 					} | ||||
| 					 | ||||
| 					return true;				 | ||||
| 
 | ||||
| 					return true; | ||||
| 				case AUDIO_REQ_GetCurrent: | ||||
| 					/* Check if we are just testing for a valid property, or actually reading it */ | ||||
| 					if (DataLength != NULL) | ||||
| @ -260,13 +260,14 @@ bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* | ||||
| 
 | ||||
| 						Data[2] = (CurrentAudioSampleFrequency >> 16); | ||||
| 						Data[1] = (CurrentAudioSampleFrequency >> 8); | ||||
| 						Data[0] = (CurrentAudioSampleFrequency &  0xFF);					 | ||||
| 						Data[0] = (CurrentAudioSampleFrequency &  0xFF); | ||||
| 					} | ||||
| 					 | ||||
| 
 | ||||
| 					return true; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -204,7 +204,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = | ||||
| 
 | ||||
| 			.TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)), | ||||
| 		}, | ||||
| 	 | ||||
| 
 | ||||
| 	.Audio_AudioFormatSampleRates = | ||||
| 		{ | ||||
| 			AUDIO_SAMPLE_FREQ(8000), | ||||
|  | ||||
| @ -83,3 +83,4 @@ | ||||
| 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -109,3 +109,4 @@ | ||||
| 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -145,7 +145,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn | ||||
| { | ||||
| 	uint8_t* Data = (uint8_t*)ReportData; | ||||
| 	uint8_t  CurrLEDMask = LEDs_GetLEDs(); | ||||
| 		 | ||||
| 
 | ||||
| 	Data[0] = ((CurrLEDMask & LEDS_LED1) ? 1 : 0); | ||||
| 	Data[1] = ((CurrLEDMask & LEDS_LED2) ? 1 : 0); | ||||
| 	Data[2] = ((CurrLEDMask & LEDS_LED3) ? 1 : 0); | ||||
| @ -171,7 +171,7 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI | ||||
| { | ||||
| 	uint8_t* Data = (uint8_t*)ReportData; | ||||
| 	uint8_t  NewLEDMask = LEDS_NO_LEDS; | ||||
| 	 | ||||
| 
 | ||||
| 	if (Data[0]) | ||||
| 	  NewLEDMask |= LEDS_LED1; | ||||
| 
 | ||||
| @ -183,7 +183,7 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI | ||||
| 
 | ||||
| 	if (Data[3]) | ||||
| 	  NewLEDMask |= LEDS_LED1; | ||||
| 	   | ||||
| 
 | ||||
| 	LEDs_SetAllLEDs(NewLEDMask); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -42,7 +42,7 @@ | ||||
|  *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding) | ||||
|  *  the device will send, and what it may be sent back from the host. Refer to the HID specification for | ||||
|  *  more details on HID report descriptors. | ||||
|  */  | ||||
|  */ | ||||
| const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] = | ||||
| { | ||||
| 	/* Use the HID class driver's standard Joystick report.
 | ||||
|  | ||||
| @ -8,7 +8,7 @@ | ||||
| 
 | ||||
| /*
 | ||||
|   Copyright 2011  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 | ||||
|  | ||||
| @ -279,7 +279,7 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||
| 				Address = &ConfigurationDescriptor.HID2_MouseHID; | ||||
| 				Size    = sizeof(USB_HID_Descriptor_HID_t); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 		case HID_DTYPE_Report: | ||||
| 			if (!(wIndex)) | ||||
|  | ||||
| @ -258,3 +258,4 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI | ||||
| 		LEDs_SetAllLEDs(LEDMask); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -77,7 +77,7 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM HIDReport[] = | ||||
| 	        HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), | ||||
| 	    HID_RI_END_COLLECTION(0), | ||||
| 	HID_RI_END_COLLECTION(0), | ||||
| 	 | ||||
| 
 | ||||
| 	/* Keyboard Report */ | ||||
| 	HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ | ||||
| 	HID_RI_USAGE(8, 0x06), /* Keyboard */ | ||||
| @ -280,7 +280,7 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, | ||||
| 			break; | ||||
| 		case HID_DTYPE_HID: | ||||
| 			Address = &ConfigurationDescriptor.HID_HIDData; | ||||
| 			Size    = sizeof(USB_HID_Descriptor_HID_t);			 | ||||
| 			Size    = sizeof(USB_HID_Descriptor_HID_t); | ||||
| 			break; | ||||
| 		case HID_DTYPE_Report: | ||||
| 			Address = &HIDReport; | ||||
|  | ||||
| @ -62,7 +62,7 @@ | ||||
| 
 | ||||
| 		/** Size in bytes of each of the HID reporting IN endpoint. */ | ||||
| 		#define HID_EPSIZE                8 | ||||
| 	 | ||||
| 
 | ||||
| 	/* Enums: */ | ||||
| 		/** Enum for the HID report IDs used in the device. */ | ||||
| 		enum | ||||
|  | ||||
| @ -148,7 +148,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn | ||||
| 	uint8_t ButtonStatus_LCL = Buttons_GetStatus(); | ||||
| 
 | ||||
| 	if (!(ButtonStatus_LCL & BUTTONS_BUTTON1)) | ||||
| 	{		 | ||||
| 	{ | ||||
| 		USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData; | ||||
| 
 | ||||
| 		KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT; | ||||
| @ -221,3 +221,4 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI | ||||
| 
 | ||||
| 	LEDs_SetAllLEDs(LEDMask); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -287,7 +287,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa | ||||
| 		               SCSI_ASENSE_WRITE_PROTECTED, | ||||
| 		               SCSI_ASENSEQ_NO_QUALIFIER); | ||||
| 
 | ||||
| 		return false;		 | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	/* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */ | ||||
| @ -311,7 +311,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa | ||||
| 	/* Adjust the given block address to the real media address based on the selected LUN */ | ||||
| 	BlockAddress += ((uint32_t)MSInterfaceInfo->State.CommandBlock.LUN * LUN_MEDIA_BLOCKS); | ||||
| 	#endif | ||||
| 	 | ||||
| 
 | ||||
| 	/* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */ | ||||
| 	if (IsDataRead == DATA_READ) | ||||
| 	  DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks); | ||||
| @ -345,3 +345,4 @@ static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfac | ||||
| 
 | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -73,7 +73,7 @@ | ||||
| 
 | ||||
| 		/** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */ | ||||
| 		#define LUN_MEDIA_BLOCKS         (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS) | ||||
| 		 | ||||
| 
 | ||||
| 		/** Indicates if the disk is write protected or not. */ | ||||
| 		#define DISK_READ_ONLY            false | ||||
| 
 | ||||
|  | ||||
| @ -287,7 +287,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa | ||||
| 		               SCSI_ASENSE_WRITE_PROTECTED, | ||||
| 		               SCSI_ASENSEQ_NO_QUALIFIER); | ||||
| 
 | ||||
| 		return false;		 | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	/* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */ | ||||
| @ -345,3 +345,4 @@ static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfac | ||||
| 
 | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -81,7 +81,7 @@ | ||||
| 
 | ||||
| 		/** Indicates if the disk is write protected or not. */ | ||||
| 		#define DISK_READ_ONLY           false | ||||
| 		 | ||||
| 
 | ||||
| 	/* Function Prototypes: */ | ||||
| 		void SetupHardware(void); | ||||
| 
 | ||||
|  | ||||
| @ -87,16 +87,16 @@ int main(void) | ||||
| 		if (RNDIS_Device_IsPacketReceived(&Ethernet_RNDIS_Interface)) | ||||
| 		{ | ||||
| 			LEDs_SetAllLEDs(LEDMASK_USB_BUSY); | ||||
| 			 | ||||
| 
 | ||||
| 			RNDIS_Device_ReadPacket(&Ethernet_RNDIS_Interface, &FrameIN.FrameData, &FrameIN.FrameLength); | ||||
| 			Ethernet_ProcessPacket(&FrameIN, &FrameOUT); | ||||
| 			 | ||||
| 
 | ||||
| 			if (FrameOUT.FrameLength) | ||||
| 			{ | ||||
| 				RNDIS_Device_SendPacket(&Ethernet_RNDIS_Interface, &FrameOUT.FrameData, FrameOUT.FrameLength);				 | ||||
| 				RNDIS_Device_SendPacket(&Ethernet_RNDIS_Interface, &FrameOUT.FrameData, FrameOUT.FrameLength); | ||||
| 				FrameOUT.FrameLength = 0; | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			LEDs_SetAllLEDs(LEDMASK_USB_READY); | ||||
| 		} | ||||
| 
 | ||||
|  | ||||
| @ -287,7 +287,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa | ||||
| 		               SCSI_ASENSE_WRITE_PROTECTED, | ||||
| 		               SCSI_ASENSEQ_NO_QUALIFIER); | ||||
| 
 | ||||
| 		return false;		 | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	/* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */ | ||||
| @ -311,7 +311,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa | ||||
| 	/* Adjust the given block address to the real media address based on the selected LUN */ | ||||
| 	BlockAddress += ((uint32_t)MSInterfaceInfo->State.CommandBlock.LUN * LUN_MEDIA_BLOCKS); | ||||
| 	#endif | ||||
| 	 | ||||
| 
 | ||||
| 	/* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */ | ||||
| 	if (IsDataRead == DATA_READ) | ||||
| 	  DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks); | ||||
| @ -345,3 +345,4 @@ static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfac | ||||
| 
 | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -59,7 +59,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface = | ||||
| 				.NotificationEndpointDoubleBank = false, | ||||
| 			}, | ||||
| 	}; | ||||
| 	 | ||||
| 
 | ||||
| /** LUFA Mass Storage Class driver interface configuration and state information. This structure is
 | ||||
|  *  passed to all Mass Storage Class driver functions, so that multiple instances of the same class | ||||
|  *  within a device can be differentiated from one another. | ||||
| @ -211,3 +211,4 @@ bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSI | ||||
| 
 | ||||
| 	return CommandSuccess; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -47,7 +47,7 @@ | ||||
| 
 | ||||
| 		#include "Lib/SCSI.h" | ||||
| 		#include "Lib/DataflashManager.h" | ||||
| 		 | ||||
| 
 | ||||
| 		#include <LUFA/Version.h> | ||||
| 		#include <LUFA/Drivers/Board/LEDs.h> | ||||
| 		#include <LUFA/Drivers/Board/Joystick.h> | ||||
| @ -74,7 +74,7 @@ | ||||
| 
 | ||||
| 		/** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */ | ||||
| 		#define LUN_MEDIA_BLOCKS         (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS) | ||||
| 		 | ||||
| 
 | ||||
| 		/** Indicates if the disk is write protected or not. */ | ||||
| 		#define DISK_READ_ONLY            false | ||||
| 
 | ||||
|  | ||||
| @ -47,7 +47,7 @@ | ||||
| 		typedef struct | ||||
| 		{ | ||||
| 			USB_Descriptor_Configuration_Header_t Config; | ||||
| 			 | ||||
| 
 | ||||
| 			// SideShow Interface
 | ||||
| 			USB_Descriptor_Interface_t            SSHOW_Interface; | ||||
| 			USB_Descriptor_Endpoint_t             SSHOW_DataInEndpoint; | ||||
|  | ||||
| @ -102,3 +102,4 @@ | ||||
| 		void     SideShow_Discard_Byte_Stream(void); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -125,3 +125,4 @@ | ||||
| 		#endif | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| /*
 | ||||
|              LUFA Library | ||||
|      Copyright (C) Dean Camera, 2011. | ||||
|                | ||||
| 
 | ||||
|   dean [at] fourwalledcubicle [dot] com | ||||
|            www.lufa-lib.org | ||||
| */ | ||||
| @ -9,13 +9,13 @@ | ||||
| /*
 | ||||
|   Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||||
| 
 | ||||
|   Permission to use, copy, modify, distribute, and sell this  | ||||
|   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  | ||||
|   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  | ||||
|   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 | ||||
| @ -38,7 +38,7 @@ TMC_Capabilities_t Capabilities = | ||||
| 	{ | ||||
| 		.Status     = TMC_STATUS_SUCCESS, | ||||
| 		.TMCVersion = VERSION_BCD(1.00), | ||||
| 		 | ||||
| 
 | ||||
| 		.Interface  = | ||||
| 			{ | ||||
| 				.ListenOnly             = false, | ||||
| @ -82,7 +82,7 @@ int main(void) | ||||
| 
 | ||||
| 	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); | ||||
| 	sei(); | ||||
| 	 | ||||
| 
 | ||||
| 	for (;;) | ||||
| 	{ | ||||
| 		TMC_Task(); | ||||
| @ -99,7 +99,7 @@ void SetupHardware(void) | ||||
| 
 | ||||
| 	/* Disable clock division */ | ||||
| 	clock_prescale_set(clock_div_1); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Hardware Initialization */ | ||||
| 	LEDs_Init(); | ||||
| 	USB_Init(); | ||||
| @ -167,43 +167,43 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				{ | ||||
| 					/* Indicate that all in-progress/pending data OUT requests should be aborted */ | ||||
| 					IsTMCBulkOUTReset = true; | ||||
| 					 | ||||
| 
 | ||||
| 					/* Save the split request for later checking when a new request is received */ | ||||
| 					RequestInProgress = Req_InitiateAbortBulkOut; | ||||
| 				} | ||||
| 
 | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 
 | ||||
| 				/* Write the request response byte */ | ||||
| 				Endpoint_Write_8(TMCRequestStatus); | ||||
| 
 | ||||
| 				Endpoint_ClearIN(); | ||||
| 				Endpoint_ClearStatusStage(); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 		case Req_CheckAbortBulkOutStatus: | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT)) | ||||
| 			{ | ||||
| 				/* Check that an ABORT BULK OUT transaction has been requested and that the request has completed */ | ||||
| 				if (RequestInProgress != Req_InitiateAbortBulkOut) | ||||
| 				  TMCRequestStatus = TMC_STATUS_SPLIT_NOT_IN_PROGRESS;				 | ||||
| 				  TMCRequestStatus = TMC_STATUS_SPLIT_NOT_IN_PROGRESS; | ||||
| 				else if (IsTMCBulkOUTReset) | ||||
| 				  TMCRequestStatus = TMC_STATUS_PENDING; | ||||
| 				else | ||||
| 				  RequestInProgress = 0;	 | ||||
| 				  RequestInProgress = 0; | ||||
| 
 | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 								 | ||||
| 
 | ||||
| 				/* Write the request response bytes */ | ||||
| 				Endpoint_Write_8(TMCRequestStatus); | ||||
| 				Endpoint_Write_16_LE(0); | ||||
| 				Endpoint_Write_32_LE(LastTransferLength); | ||||
| 
 | ||||
| 				Endpoint_ClearIN(); | ||||
| 				Endpoint_ClearStatusStage();				 | ||||
| 				Endpoint_ClearStatusStage(); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 		case Req_InitiateAbortBulkIn: | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT)) | ||||
| @ -211,7 +211,7 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				/* Check that no split transaction is already in progress and the data transfer tag is valid */ | ||||
| 				if (RequestInProgress != 0) | ||||
| 				{ | ||||
| 					TMCRequestStatus = TMC_STATUS_SPLIT_IN_PROGRESS;				 | ||||
| 					TMCRequestStatus = TMC_STATUS_SPLIT_IN_PROGRESS; | ||||
| 				} | ||||
| 				else if (USB_ControlRequest.wValue != CurrentTransferTag) | ||||
| 				{ | ||||
| @ -221,13 +221,13 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				{ | ||||
| 					/* Indicate that all in-progress/pending data IN requests should be aborted */ | ||||
| 					IsTMCBulkINReset = true; | ||||
| 					 | ||||
| 
 | ||||
| 					/* Save the split request for later checking when a new request is received */ | ||||
| 					RequestInProgress = Req_InitiateAbortBulkIn; | ||||
| 				} | ||||
| 
 | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 
 | ||||
| 				/* Write the request response bytes */ | ||||
| 				Endpoint_Write_8(TMCRequestStatus); | ||||
| 				Endpoint_Write_8(CurrentTransferTag); | ||||
| @ -235,7 +235,7 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				Endpoint_ClearIN(); | ||||
| 				Endpoint_ClearStatusStage(); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 		case Req_CheckAbortBulkInStatus: | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT)) | ||||
| @ -249,7 +249,7 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				  RequestInProgress = 0; | ||||
| 
 | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 								 | ||||
| 
 | ||||
| 				/* Write the request response bytes */ | ||||
| 				Endpoint_Write_8(TMCRequestStatus); | ||||
| 				Endpoint_Write_16_LE(0); | ||||
| @ -258,7 +258,7 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				Endpoint_ClearIN(); | ||||
| 				Endpoint_ClearStatusStage(); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 		case Req_InitiateClear: | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| @ -266,34 +266,34 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				/* Check that no split transaction is already in progress */ | ||||
| 				if (RequestInProgress != 0) | ||||
| 				{ | ||||
| 					Endpoint_Write_8(TMC_STATUS_SPLIT_IN_PROGRESS);				 | ||||
| 					Endpoint_Write_8(TMC_STATUS_SPLIT_IN_PROGRESS); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					/* Indicate that all in-progress/pending data IN and OUT requests should be aborted */ | ||||
| 					IsTMCBulkINReset  = true; | ||||
| 					IsTMCBulkOUTReset = true; | ||||
| 					 | ||||
| 
 | ||||
| 					/* Save the split request for later checking when a new request is received */ | ||||
| 					RequestInProgress = Req_InitiateClear; | ||||
| 				} | ||||
| 
 | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 
 | ||||
| 				/* Write the request response byte */ | ||||
| 				Endpoint_Write_8(TMCRequestStatus); | ||||
| 
 | ||||
| 				Endpoint_ClearIN(); | ||||
| 				Endpoint_ClearStatusStage(); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 		case Req_CheckClearStatus: | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				/* Check that a CLEAR transaction has been requested and that the request has completed */ | ||||
| 				if (RequestInProgress != Req_InitiateClear) | ||||
| 				  TMCRequestStatus = TMC_STATUS_SPLIT_NOT_IN_PROGRESS;				 | ||||
| 				  TMCRequestStatus = TMC_STATUS_SPLIT_NOT_IN_PROGRESS; | ||||
| 				else if (IsTMCBulkINReset || IsTMCBulkOUTReset) | ||||
| 				  TMCRequestStatus = TMC_STATUS_PENDING; | ||||
| 				else | ||||
| @ -304,22 +304,22 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				/* Write the request response bytes */ | ||||
| 				Endpoint_Write_8(TMCRequestStatus); | ||||
| 				Endpoint_Write_8(0); | ||||
| 				 | ||||
| 
 | ||||
| 				Endpoint_ClearIN(); | ||||
| 				Endpoint_ClearStatusStage();				 | ||||
| 				Endpoint_ClearStatusStage(); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 		case Req_GetCapabilities: | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 					 | ||||
| 
 | ||||
| 				/* Write the device capabilities to the control endpoint */ | ||||
| 				Endpoint_Write_Control_Stream_LE(&Capabilities, sizeof(TMC_Capabilities_t));				 | ||||
| 				Endpoint_Write_Control_Stream_LE(&Capabilities, sizeof(TMC_Capabilities_t)); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 	} | ||||
| } | ||||
| @ -351,16 +351,16 @@ void TMC_Task(void) | ||||
| 	/* Device must be connected and configured for the task to run */ | ||||
| 	if (USB_DeviceState != DEVICE_STATE_Configured) | ||||
| 	  return; | ||||
| 	 | ||||
| 
 | ||||
| 	TMC_MessageHeader_t MessageHeader; | ||||
| 	uint8_t             MessagePayload[128]; | ||||
| 	 | ||||
| 
 | ||||
| 	/* Try to read in a TMC message from the interface, process if one is available */ | ||||
| 	if (ReadTMCHeader(&MessageHeader)) | ||||
| 	{ | ||||
| 		/* Indicate busy */ | ||||
| 		LEDs_SetAllLEDs(LEDMASK_USB_BUSY); | ||||
| 		 | ||||
| 
 | ||||
| 		switch (MessageHeader.MessageID) | ||||
| 		{ | ||||
| 			case TMC_MESSAGEID_DEV_DEP_MSG_OUT: | ||||
| @ -371,15 +371,15 @@ void TMC_Task(void) | ||||
| 					if (IsTMCBulkOUTReset) | ||||
| 					  break; | ||||
| 				} | ||||
| 				 | ||||
| 
 | ||||
| 				Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 				ProcessSentMessage(MessagePayload, LastTransferLength);				 | ||||
| 				ProcessSentMessage(MessagePayload, LastTransferLength); | ||||
| 				break; | ||||
| 			case TMC_MESSAGEID_DEV_DEP_MSG_IN: | ||||
| 				Endpoint_ClearOUT(); | ||||
| 				 | ||||
| 				MessageHeader.TransferSize = GetNextMessage(MessagePayload);				 | ||||
| 
 | ||||
| 				MessageHeader.TransferSize = GetNextMessage(MessagePayload); | ||||
| 				MessageHeader.MessageIDSpecific.DeviceOUT.LastMessageTransaction = true; | ||||
| 				WriteTMCHeader(&MessageHeader); | ||||
| 
 | ||||
| @ -400,7 +400,7 @@ void TMC_Task(void) | ||||
| 
 | ||||
| 		LEDs_SetAllLEDs(LEDMASK_USB_READY); | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	/* All pending data has been processed - reset the data abort flags */ | ||||
| 	IsTMCBulkINReset  = false; | ||||
| 	IsTMCBulkOUTReset = false; | ||||
| @ -419,11 +419,11 @@ bool ReadTMCHeader(TMC_MessageHeader_t* const MessageHeader) | ||||
| 
 | ||||
| 	/* Select the Data Out endpoint */ | ||||
| 	Endpoint_SelectEndpoint(TMC_OUT_EPNUM); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Abort if no command has been sent from the host */ | ||||
| 	if (!(Endpoint_IsOUTReceived())) | ||||
| 	  return false; | ||||
| 	 | ||||
| 
 | ||||
| 	/* Read in the header of the command from the host */ | ||||
| 	BytesTransferred = 0; | ||||
| 	while ((ErrorCode = Endpoint_Read_Stream_LE(MessageHeader, sizeof(TMC_MessageHeader_t), &BytesTransferred)) == | ||||
| @ -435,7 +435,7 @@ bool ReadTMCHeader(TMC_MessageHeader_t* const MessageHeader) | ||||
| 
 | ||||
| 	/* Store the new command tag value for later use */ | ||||
| 	CurrentTransferTag = MessageHeader->Tag; | ||||
| 	 | ||||
| 
 | ||||
| 	/* Indicate if the command has been aborted or not */ | ||||
| 	return (!(IsTMCBulkOUTReset) && (ErrorCode == ENDPOINT_RWSTREAM_NoError)); | ||||
| } | ||||
| @ -464,3 +464,4 @@ bool WriteTMCHeader(TMC_MessageHeader_t* const MessageHeader) | ||||
| 	/* Indicate if the command has been aborted or not */ | ||||
| 	return (!(IsTMCBulkINReset) && (ErrorCode == ENDPOINT_RWSTREAM_NoError)); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -163,16 +163,16 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				/* Extract out the relevant request information to get the target Endpoint address and control being set */ | ||||
| 				uint8_t EndpointAddress = (uint8_t)USB_ControlRequest.wIndex; | ||||
| 				uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8); | ||||
| 				 | ||||
| 
 | ||||
| 				/* Only handle SET CURRENT requests to the audio endpoint's sample frequency property */ | ||||
| 				if ((EndpointAddress == (ENDPOINT_DIR_IN | AUDIO_STREAM_EPNUM)) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)) | ||||
| 				{ | ||||
| 					uint8_t SampleRate[3]; | ||||
| 				 | ||||
| 
 | ||||
| 					Endpoint_ClearSETUP(); | ||||
| 					Endpoint_Read_Control_Stream_LE(SampleRate, sizeof(SampleRate)); | ||||
| 					Endpoint_ClearIN(); | ||||
| 					 | ||||
| 
 | ||||
| 					/* Set the new sampling frequency to the value given by the host */ | ||||
| 					CurrentAudioSampleFrequency = (((uint32_t)SampleRate[2] << 16) | ((uint32_t)SampleRate[1] << 8) | (uint32_t)SampleRate[0]); | ||||
| 
 | ||||
| @ -180,7 +180,7 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 					OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 		case AUDIO_REQ_GetCurrent: | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT)) | ||||
| @ -188,20 +188,20 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				/* Extract out the relevant request information to get the target Endpoint address and control being retrieved */ | ||||
| 				uint8_t EndpointAddress = (uint8_t)USB_ControlRequest.wIndex; | ||||
| 				uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8); | ||||
| 				 | ||||
| 
 | ||||
| 				/* Only handle GET CURRENT requests to the audio endpoint's sample frequency property */ | ||||
| 				if ((EndpointAddress == (ENDPOINT_DIR_IN | AUDIO_STREAM_EPNUM)) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)) | ||||
| 				{ | ||||
| 					uint8_t SampleRate[3]; | ||||
| 					 | ||||
| 
 | ||||
| 					/* Convert the sampling rate value into the 24-bit format the host expects for the property */ | ||||
| 					SampleRate[2] = (CurrentAudioSampleFrequency >> 16); | ||||
| 					SampleRate[1] = (CurrentAudioSampleFrequency >> 8); | ||||
| 					SampleRate[0] = (CurrentAudioSampleFrequency &  0xFF); | ||||
| 				 | ||||
| 
 | ||||
| 					Endpoint_ClearSETUP(); | ||||
| 					Endpoint_Write_Control_Stream_LE(SampleRate, sizeof(SampleRate)); | ||||
| 					Endpoint_ClearOUT();					 | ||||
| 					Endpoint_ClearOUT(); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| @ -225,11 +225,11 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 		#if defined(USE_TEST_TONE) | ||||
| 			static uint8_t SquareWaveSampleCount; | ||||
| 			static int16_t CurrentWaveValue; | ||||
| 			 | ||||
| 
 | ||||
| 			/* In test tone mode, generate a square wave at 1/256 of the sample rate */ | ||||
| 			if (SquareWaveSampleCount++ == 0xFF) | ||||
| 			  CurrentWaveValue ^= 0x8000; | ||||
| 			 | ||||
| 
 | ||||
| 			/* Only generate audio if the board button is being pressed */ | ||||
| 			AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; | ||||
| 		#else | ||||
| @ -239,7 +239,7 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 			#if defined(MICROPHONE_BIASED_TO_HALF_RAIL) | ||||
| 			/* Microphone is biased to half rail voltage, subtract the bias from the sample value */ | ||||
| 			AudioSample -= (SAMPLE_MAX_RANGE / 2); | ||||
| 			#endif		 | ||||
| 			#endif | ||||
| 		#endif | ||||
| 
 | ||||
| 		/* Write the sample to the buffer */ | ||||
|  | ||||
| @ -204,7 +204,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = | ||||
| 
 | ||||
| 			.TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)), | ||||
| 		}, | ||||
| 	 | ||||
| 
 | ||||
| 	.Audio_AudioFormatSampleRates = | ||||
| 		{ | ||||
| 			AUDIO_SAMPLE_FREQ(8000), | ||||
|  | ||||
| @ -189,16 +189,16 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				/* Extract out the relevant request information to get the target Endpoint address and control being set */ | ||||
| 				uint8_t EndpointAddress = (uint8_t)USB_ControlRequest.wIndex; | ||||
| 				uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8); | ||||
| 				 | ||||
| 
 | ||||
| 				/* Only handle SET CURRENT requests to the audio endpoint's sample frequency property */ | ||||
| 				if ((EndpointAddress == (ENDPOINT_DIR_OUT | AUDIO_STREAM_EPNUM)) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)) | ||||
| 				{ | ||||
| 					uint8_t SampleRate[3]; | ||||
| 				 | ||||
| 
 | ||||
| 					Endpoint_ClearSETUP(); | ||||
| 					Endpoint_Read_Control_Stream_LE(SampleRate, sizeof(SampleRate)); | ||||
| 					Endpoint_ClearOUT(); | ||||
| 					 | ||||
| 
 | ||||
| 					/* Set the new sampling frequency to the value given by the host */ | ||||
| 					CurrentAudioSampleFrequency = (((uint32_t)SampleRate[2] << 16) | ((uint32_t)SampleRate[1] << 8) | (uint32_t)SampleRate[0]); | ||||
| 
 | ||||
| @ -206,7 +206,7 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 					OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			break; | ||||
| 		case AUDIO_REQ_GetCurrent: | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT)) | ||||
| @ -214,20 +214,20 @@ void EVENT_USB_Device_ControlRequest(void) | ||||
| 				/* Extract out the relevant request information to get the target Endpoint address and control being retrieved */ | ||||
| 				uint8_t EndpointAddress = (uint8_t)USB_ControlRequest.wIndex; | ||||
| 				uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8); | ||||
| 				 | ||||
| 
 | ||||
| 				/* Only handle GET CURRENT requests to the audio endpoint's sample frequency property */ | ||||
| 				if ((EndpointAddress == (ENDPOINT_DIR_OUT | AUDIO_STREAM_EPNUM)) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)) | ||||
| 				{ | ||||
| 					uint8_t SampleRate[3]; | ||||
| 					 | ||||
| 
 | ||||
| 					/* Convert the sampling rate value into the 24-bit format the host expects for the property */ | ||||
| 					SampleRate[2] = (CurrentAudioSampleFrequency >> 16); | ||||
| 					SampleRate[1] = (CurrentAudioSampleFrequency >> 8); | ||||
| 					SampleRate[0] = (CurrentAudioSampleFrequency &  0xFF); | ||||
| 				 | ||||
| 
 | ||||
| 					Endpoint_ClearSETUP(); | ||||
| 					Endpoint_Write_Control_Stream_LE(SampleRate, sizeof(SampleRate)); | ||||
| 					Endpoint_ClearOUT();					 | ||||
| 					Endpoint_ClearOUT(); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| @ -286,7 +286,7 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 
 | ||||
| 		LEDs_SetAllLEDs(LEDMask); | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	Endpoint_SelectEndpoint(PrevEndpoint); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -204,7 +204,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = | ||||
| 
 | ||||
| 			.TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)), | ||||
| 		}, | ||||
| 	 | ||||
| 
 | ||||
| 	.Audio_AudioFormatSampleRates = | ||||
| 		{ | ||||
| 			AUDIO_SAMPLE_FREQ(8000), | ||||
|  | ||||
| @ -83,3 +83,4 @@ | ||||
| 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -109,3 +109,4 @@ | ||||
| 		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -157,7 +157,7 @@ void ProcessGenericHIDReport(uint8_t* DataArray) | ||||
| 		holding the report sent from the host. | ||||
| 	*/ | ||||
| 
 | ||||
| 	uint8_t NewLEDMask = LEDS_NO_LEDS;	 | ||||
| 	uint8_t NewLEDMask = LEDS_NO_LEDS; | ||||
| 
 | ||||
| 	if (DataArray[0]) | ||||
| 	  NewLEDMask |= LEDS_LED1; | ||||
| @ -170,7 +170,7 @@ void ProcessGenericHIDReport(uint8_t* DataArray) | ||||
| 
 | ||||
| 	if (DataArray[3]) | ||||
| 	  NewLEDMask |= LEDS_LED1; | ||||
| 	   | ||||
| 
 | ||||
| 	LEDs_SetAllLEDs(NewLEDMask); | ||||
| } | ||||
| 
 | ||||
| @ -187,7 +187,7 @@ void CreateGenericHIDReport(uint8_t* DataArray) | ||||
| 	*/ | ||||
| 
 | ||||
| 	uint8_t CurrLEDMask = LEDs_GetLEDs(); | ||||
| 		 | ||||
| 
 | ||||
| 	DataArray[0] = ((CurrLEDMask & LEDS_LED1) ? 1 : 0); | ||||
| 	DataArray[1] = ((CurrLEDMask & LEDS_LED2) ? 1 : 0); | ||||
| 	DataArray[2] = ((CurrLEDMask & LEDS_LED3) ? 1 : 0); | ||||
|  | ||||
| @ -59,7 +59,7 @@ | ||||
| 		typedef struct | ||||
| 		{ | ||||
| 			USB_Descriptor_Configuration_Header_t Config; | ||||
| 			 | ||||
| 
 | ||||
| 			// Mass Storage Interface
 | ||||
| 			USB_Descriptor_Interface_t            MS_Interface; | ||||
| 			USB_Descriptor_Endpoint_t             MS_DataInEndpoint; | ||||
|  | ||||
| @ -287,12 +287,12 @@ static bool SCSI_Command_ReadWrite_10(const bool IsDataRead) | ||||
| 		               SCSI_ASENSE_WRITE_PROTECTED, | ||||
| 		               SCSI_ASENSEQ_NO_QUALIFIER); | ||||
| 
 | ||||
| 		return false;		 | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	BlockAddress = SwapEndian_32(*(uint32_t*)&CommandBlock.SCSICommandData[2]); | ||||
| 	TotalBlocks  = SwapEndian_16(*(uint16_t*)&CommandBlock.SCSICommandData[7]); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Check if the block address is outside the maximum allowable value for the LUN */ | ||||
| 	if (BlockAddress >= LUN_MEDIA_BLOCKS) | ||||
| 	{ | ||||
| @ -340,3 +340,4 @@ static bool SCSI_Command_ModeSense_6(void) | ||||
| 
 | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -309,7 +309,8 @@ static void ReturnCommandStatus(void) | ||||
| 		if (IsMassStoreReset) | ||||
| 		  return; | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	/* Finalize the stream transfer to send the last packet */ | ||||
| 	Endpoint_ClearIN(); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -49,7 +49,7 @@ | ||||
| 		typedef struct | ||||
| 		{ | ||||
| 			USB_Descriptor_Configuration_Header_t Config; | ||||
| 			 | ||||
| 
 | ||||
| 			// Mouse HID Interface
 | ||||
| 			USB_Descriptor_Interface_t            HID_Interface; | ||||
| 			USB_HID_Descriptor_HID_t              HID_MouseHID; | ||||
|  | ||||
| @ -73,9 +73,9 @@ void SetupHardware(void) | ||||
| 	LEDs_Init(); | ||||
| 	Serial_Init(9600, false); | ||||
| 	USB_Init(); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Create a stdio stream for the serial port for stdin and stdout */ | ||||
| 	Serial_CreateStream(NULL);	 | ||||
| 	Serial_CreateStream(NULL); | ||||
| } | ||||
| 
 | ||||
| /** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and
 | ||||
|  | ||||
| @ -49,7 +49,7 @@ | ||||
| 		typedef struct | ||||
| 		{ | ||||
| 			USB_Descriptor_Configuration_Header_t Config; | ||||
| 			 | ||||
| 
 | ||||
| 			// Mouse HID Interface
 | ||||
| 			USB_Descriptor_Interface_t            HID_Interface; | ||||
| 			USB_HID_Descriptor_HID_t              HID_MouseHID; | ||||
|  | ||||
| @ -74,7 +74,7 @@ void EVENT_USB_Host_DeviceUnattached(void) | ||||
|  *  enumerated by the host and is now ready to be used by the application. | ||||
|  */ | ||||
| void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| {	 | ||||
| { | ||||
| 	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); | ||||
| 
 | ||||
| 	uint16_t ConfigDescriptorSize; | ||||
|  | ||||
| @ -225,3 +225,4 @@ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, | ||||
| 	LEDs_SetAllLEDs(LEDMASK_USB_ERROR); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -76,3 +76,4 @@ | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -96,7 +96,7 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 
 | ||||
| 		LEDs_SetAllLEDs(LEDMask); | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	Pipe_SelectPipe(PrevPipe); | ||||
| } | ||||
| 
 | ||||
| @ -193,7 +193,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 	TIMSK0  = (1 << OCIE0A); | ||||
| 	OCR0A   = ((F_CPU / 8 / 48000) - 1); | ||||
| 	TCCR0A  = (1 << WGM01);  // CTC mode
 | ||||
| 	TCCR0B  = (1 << CS01);   // Fcpu/8 speed	
 | ||||
| 	TCCR0B  = (1 << CS01);   // Fcpu/8 speed
 | ||||
| 
 | ||||
| 	/* Set speaker as output */ | ||||
| 	DDRC   |= (1 << 6); | ||||
|  | ||||
| @ -81,11 +81,11 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 		#if defined(USE_TEST_TONE) | ||||
| 			static uint8_t SquareWaveSampleCount; | ||||
| 			static int16_t CurrentWaveValue; | ||||
| 			 | ||||
| 
 | ||||
| 			/* In test tone mode, generate a square wave at 1/256 of the sample rate */ | ||||
| 			if (SquareWaveSampleCount++ == 0xFF) | ||||
| 			  CurrentWaveValue ^= 0x8000; | ||||
| 			 | ||||
| 
 | ||||
| 			/* Only generate audio if the board button is being pressed */ | ||||
| 			AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; | ||||
| 		#else | ||||
| @ -97,11 +97,11 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 			AudioSample -= (SAMPLE_MAX_RANGE / 2); | ||||
| 			#endif | ||||
| 		#endif | ||||
| 		 | ||||
| 		Audio_Host_WriteSample16(&Speaker_Audio_Interface, AudioSample);	 | ||||
| 
 | ||||
| 		Audio_Host_WriteSample16(&Speaker_Audio_Interface, AudioSample); | ||||
| 		Audio_Host_WriteSample16(&Speaker_Audio_Interface, AudioSample); | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	Pipe_SelectPipe(PrevPipe); | ||||
| } | ||||
| 
 | ||||
| @ -185,7 +185,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 		USB_Host_SetDeviceConfiguration(0); | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000); | ||||
| 	if (Audio_Host_GetSetEndpointProperty(&Speaker_Audio_Interface, Speaker_Audio_Interface.Config.DataOUTPipeNumber, | ||||
| 	                                      AUDIO_REQ_SetCurrent, AUDIO_EPCONTROL_SamplingFreq, | ||||
|  | ||||
| @ -140,7 +140,7 @@ void KeyboardHost_Task(void) | ||||
| 			{ | ||||
| 				PressedKey = '\n'; | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			if (PressedKey) | ||||
| 			  putchar(PressedKey); | ||||
| 		} | ||||
|  | ||||
| @ -107,7 +107,7 @@ void KeyboardHost_Task(void) | ||||
| { | ||||
| 	if (USB_HostState != HOST_STATE_Configured) | ||||
| 	  return; | ||||
| 	 | ||||
| 
 | ||||
| 	if (HID_Host_IsReportReceived(&Keyboard_HID_Interface)) | ||||
| 	{ | ||||
| 		uint8_t KeyboardReport[Keyboard_HID_Interface.State.LargestReportSize]; | ||||
|  | ||||
| @ -68,7 +68,7 @@ int main(void) | ||||
| 	for (;;) | ||||
| 	{ | ||||
| 		MassStorageHost_Task(); | ||||
| 		 | ||||
| 
 | ||||
| 		MS_Host_USBTask(&FlashDisk_MS_Interface); | ||||
| 		USB_USBTask(); | ||||
| 	} | ||||
|  | ||||
| @ -70,7 +70,7 @@ | ||||
| 	/* Function Prototypes: */ | ||||
| 		void SetupHardware(void); | ||||
| 		void MassStorageHost_Task(void); | ||||
| 		 | ||||
| 
 | ||||
| 		void EVENT_USB_Host_HostError(const uint8_t ErrorCode); | ||||
| 		void EVENT_USB_Host_DeviceAttached(void); | ||||
| 		void EVENT_USB_Host_DeviceUnattached(void); | ||||
|  | ||||
| @ -102,7 +102,7 @@ void MouseHost_Task(void) | ||||
| { | ||||
| 	if (USB_HostState != HOST_STATE_Configured) | ||||
| 	  return; | ||||
| 	   | ||||
| 
 | ||||
| 	if (HID_Host_IsReportReceived(&Mouse_HID_Interface)) | ||||
| 	{ | ||||
| 		uint8_t LEDMask = LEDS_NO_LEDS; | ||||
|  | ||||
| @ -107,7 +107,7 @@ void MouseHost_Task(void) | ||||
| { | ||||
| 	if (USB_HostState != HOST_STATE_Configured) | ||||
| 	  return; | ||||
| 	 | ||||
| 
 | ||||
| 	if (HID_Host_IsReportReceived(&Mouse_HID_Interface)) | ||||
| 	{ | ||||
| 		uint8_t MouseReport[Mouse_HID_Interface.State.LargestReportSize]; | ||||
|  | ||||
| @ -71,7 +71,7 @@ int main(void) | ||||
| 	for (;;) | ||||
| 	{ | ||||
| 		StillImageHost_Task(); | ||||
| 		 | ||||
| 
 | ||||
| 		SI_Host_USBTask(&DigitalCamera_SI_Interface); | ||||
| 		USB_USBTask(); | ||||
| 	} | ||||
|  | ||||
| @ -62,7 +62,7 @@ USB_ClassInfo_CDC_Host_t VirtualSerial_CDC_Interface = | ||||
| int main(void) | ||||
| { | ||||
| 	SetupHardware(); | ||||
| 	 | ||||
| 
 | ||||
| 	puts_P(PSTR(ESC_FG_CYAN "CDC Host Demo running.\r\n" ESC_FG_WHITE)); | ||||
| 
 | ||||
| 	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); | ||||
|  | ||||
| @ -78,7 +78,7 @@ void SetupHardware(void) | ||||
| void AndroidHost_Task(void) | ||||
| { | ||||
| 	if (USB_HostState != HOST_STATE_Configured) | ||||
| 	  return;	 | ||||
| 	  return; | ||||
| 
 | ||||
| 	/* Select the data IN pipe */ | ||||
| 	Pipe_SelectPipe(ANDROID_DATA_IN_PIPE); | ||||
| @ -148,7 +148,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 
 | ||||
| 	/* Get and process the configuration descriptor data */ | ||||
| 	uint8_t ErrorCode = ProcessDeviceDescriptor(); | ||||
| 	 | ||||
| 
 | ||||
| 	bool RequiresModeSwitch = (ErrorCode == NonAccessoryModeAndroidDevice); | ||||
| 
 | ||||
| 	/* Error out if the device is not an Android device or an error occurred */ | ||||
| @ -166,12 +166,12 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 	} | ||||
| 
 | ||||
| 	printf_P(PSTR("Android Device Detected - %sAccessory mode.\r\n"), (RequiresModeSwitch ? "Non-" : "")); | ||||
| 	 | ||||
| 
 | ||||
| 	/* Check if a valid Android device was attached, but it is not current in Accessory mode */ | ||||
| 	if (RequiresModeSwitch) | ||||
| 	{ | ||||
| 		uint16_t AndroidProtocol; | ||||
| 	 | ||||
| 
 | ||||
| 		/* Fetch the version of the Android Accessory Protocol supported by the device */ | ||||
| 		if ((ErrorCode = Android_GetAccessoryProtocol(&AndroidProtocol)) != HOST_SENDCONTROL_Successful) | ||||
| 		{ | ||||
| @ -181,7 +181,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 			LEDs_SetAllLEDs(LEDMASK_USB_ERROR); | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 
 | ||||
| 		/* Validate the returned protocol version */ | ||||
| 		if (AndroidProtocol != AOA_PROTOCOL_AccessoryV1) | ||||
| 		{ | ||||
| @ -190,7 +190,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 			LEDs_SetAllLEDs(LEDMASK_USB_ERROR); | ||||
| 			return; | ||||
| 		} | ||||
| 	 | ||||
| 
 | ||||
| 		/* Send the device strings and start the Android Accessory Mode */ | ||||
| 		Android_SendString(AOA_STRING_Manufacturer, "Dean Camera"); | ||||
| 		Android_SendString(AOA_STRING_Model,        "LUFA Android Demo"); | ||||
| @ -199,7 +199,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 		Android_SendString(AOA_STRING_URI,          "http://www.lufa-lib.org"); | ||||
| 		Android_SendString(AOA_STRING_Serial,       "0000000012345678"); | ||||
| 
 | ||||
| 		Android_StartAccessoryMode();	 | ||||
| 		Android_StartAccessoryMode(); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -46,7 +46,7 @@ | ||||
| 
 | ||||
| 		#include "DeviceDescriptor.h" | ||||
| 		#include "ConfigDescriptor.h" | ||||
| 		#include "Lib/AndroidAccessoryCommands.h"  | ||||
| 		#include "Lib/AndroidAccessoryCommands.h" | ||||
| 
 | ||||
| 		#include <LUFA/Version.h> | ||||
| 		#include <LUFA/Drivers/Misc/TerminalCodes.h> | ||||
|  | ||||
| @ -66,7 +66,7 @@ uint8_t ProcessConfigurationDescriptor(void) | ||||
| 		default: | ||||
| 			return DevControlError; | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	/* There should be only one compatible Android Accessory Mode interface in the device, attempt to find it */ | ||||
| 	if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, | ||||
| 	                              DCOMP_NextAndroidAccessoryInterface) != DESCRIPTOR_SEARCH_COMP_Found) | ||||
|  | ||||
| @ -33,8 +33,8 @@ | ||||
|  *  Android Accessory Mode utility functions, for the configuration of an attached | ||||
|  *  Android device into Android Accessory Mode ready for general communication. | ||||
|  */ | ||||
|   | ||||
| #include "AndroidAccessoryCommands.h"  | ||||
| 
 | ||||
| #include "AndroidAccessoryCommands.h" | ||||
| 
 | ||||
| uint8_t Android_GetAccessoryProtocol(uint16_t* const Protocol) | ||||
| { | ||||
| @ -79,5 +79,6 @@ uint8_t Android_StartAccessoryMode(void) | ||||
| 	}; | ||||
| 
 | ||||
| 	Pipe_SelectPipe(PIPE_CONTROLPIPE); | ||||
| 	return USB_Host_SendControlRequest(NULL);	 | ||||
| 	return USB_Host_SendControlRequest(NULL); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -41,11 +41,12 @@ | ||||
| 		#include <stdbool.h> | ||||
| 
 | ||||
| 		#include <LUFA/Drivers/USB/USB.h> | ||||
| 	 | ||||
| 
 | ||||
| 	/* Function Prototypes: */ | ||||
| 		uint8_t Android_GetAccessoryProtocol(uint16_t* const Protocol); | ||||
| 		uint8_t Android_SendString(const uint8_t StringIndex, | ||||
| 		                           const char* const String); | ||||
| 		uint8_t Android_StartAccessoryMode(void);	 | ||||
| 	 | ||||
| 		uint8_t Android_StartAccessoryMode(void); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -123,7 +123,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 		LEDs_SetAllLEDs(LEDMASK_USB_ERROR); | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	if ((ErrorCode = USB_Host_SetInterfaceAltSetting(StreamingInterfaceIndex, | ||||
| 	                                                 StreamingInterfaceAltSetting)) != HOST_SENDCONTROL_Successful) | ||||
| 	{ | ||||
| @ -143,7 +143,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 			.wIndex        = StreamingEndpointAddress, | ||||
| 			.wLength       = sizeof(USB_Audio_SampleFreq_t), | ||||
| 		}; | ||||
| 		 | ||||
| 
 | ||||
| 	USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000); | ||||
| 
 | ||||
| 	/* Select the control pipe for the request transfer */ | ||||
| @ -153,7 +153,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 	if ((ErrorCode = USB_Host_SendControlRequest(&SampleRate)) != HOST_SENDCONTROL_Successful) | ||||
| 	{ | ||||
| 		LEDs_SetAllLEDs(LEDMASK_USB_ERROR); | ||||
| 		USB_Host_SetDeviceConfiguration(0);		 | ||||
| 		USB_Host_SetDeviceConfiguration(0); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| @ -161,7 +161,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 	TIMSK0  = (1 << OCIE0A); | ||||
| 	OCR0A   = ((F_CPU / 8 / 48000) - 1); | ||||
| 	TCCR0A  = (1 << WGM01);  // CTC mode
 | ||||
| 	TCCR0B  = (1 << CS01);   // Fcpu/8 speed	
 | ||||
| 	TCCR0B  = (1 << CS01);   // Fcpu/8 speed
 | ||||
| 
 | ||||
| 	/* Set speaker as output */ | ||||
| 	DDRC   |= (1 << 6); | ||||
| @ -169,7 +169,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 	/* PWM speaker timer initialization */ | ||||
| 	TCCR3A  = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)); // Set on match, clear on TOP
 | ||||
| 	TCCR3B  = ((1 << WGM32) | (1 << CS30));  // Fast 8-Bit PWM, F_CPU speed
 | ||||
| 	 | ||||
| 
 | ||||
| 	puts_P(PSTR("Microphone Enumerated.\r\n")); | ||||
| 	LEDs_SetAllLEDs(LEDMASK_USB_READY); | ||||
| } | ||||
| @ -238,7 +238,8 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 
 | ||||
| 		LEDs_SetAllLEDs(LEDMask); | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	Pipe_Freeze(); | ||||
| 	Pipe_SelectPipe(PrevPipe); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -99,7 +99,7 @@ uint8_t ProcessConfigurationDescriptor(void) | ||||
| 				} | ||||
| 
 | ||||
| 				/* Save the interface in case we need to refer back to it later */ | ||||
| 				AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t);			 | ||||
| 				AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); | ||||
| 
 | ||||
| 				/* Find the next Audio Streaming interface within that Audio Control interface */ | ||||
| 				if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, | ||||
| @ -218,3 +218,4 @@ uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor) | ||||
| 
 | ||||
| 	return DESCRIPTOR_SEARCH_NotFound; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -68,7 +68,7 @@ void SetupHardware(void) | ||||
| 	Serial_Init(9600, false); | ||||
| 	Buttons_Init(); | ||||
| 	ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); | ||||
| 	ADC_SetupChannel(MIC_IN_ADC_CHANNEL);	 | ||||
| 	ADC_SetupChannel(MIC_IN_ADC_CHANNEL); | ||||
| 	LEDs_Init(); | ||||
| 	USB_Init(); | ||||
| 
 | ||||
| @ -126,7 +126,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 		LEDs_SetAllLEDs(LEDMASK_USB_ERROR); | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	if ((ErrorCode = USB_Host_SetInterfaceAltSetting(StreamingInterfaceIndex, | ||||
| 	                                                 StreamingInterfaceAltSetting)) != HOST_SENDCONTROL_Successful) | ||||
| 	{ | ||||
| @ -146,7 +146,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 			.wIndex        = StreamingEndpointAddress, | ||||
| 			.wLength       = sizeof(USB_Audio_SampleFreq_t), | ||||
| 		}; | ||||
| 		 | ||||
| 
 | ||||
| 	USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000); | ||||
| 
 | ||||
| 	/* Select the control pipe for the request transfer */ | ||||
| @ -164,8 +164,8 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| 	TIMSK0  = (1 << OCIE0A); | ||||
| 	OCR0A   = ((F_CPU / 8 / 48000) - 1); | ||||
| 	TCCR0A  = (1 << WGM01);  // CTC mode
 | ||||
| 	TCCR0B  = (1 << CS01);   // Fcpu/8 speed	
 | ||||
| 	 | ||||
| 	TCCR0B  = (1 << CS01);   // Fcpu/8 speed
 | ||||
| 
 | ||||
| 	puts_P(PSTR("Speaker Enumerated.\r\n")); | ||||
| 	LEDs_SetAllLEDs(LEDMASK_USB_READY); | ||||
| } | ||||
| @ -207,16 +207,16 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 	/* Check if the current pipe can be written to (device ready for more data) */ | ||||
| 	if (Pipe_IsOUTReady()) | ||||
| 	{ | ||||
| 		int16_t AudioSample;		 | ||||
| 	 | ||||
| 		int16_t AudioSample; | ||||
| 
 | ||||
| 		#if defined(USE_TEST_TONE) | ||||
| 			static uint8_t SquareWaveSampleCount; | ||||
| 			static int16_t CurrentWaveValue; | ||||
| 			 | ||||
| 
 | ||||
| 			/* In test tone mode, generate a square wave at 1/256 of the sample rate */ | ||||
| 			if (SquareWaveSampleCount++ == 0xFF) | ||||
| 			  CurrentWaveValue ^= 0x8000; | ||||
| 			 | ||||
| 
 | ||||
| 			/* Only generate audio if the board button is being pressed */ | ||||
| 			AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; | ||||
| 		#else | ||||
| @ -226,12 +226,12 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 			#if defined(MICROPHONE_BIASED_TO_HALF_RAIL) | ||||
| 			/* Microphone is biased to half rail voltage, subtract the bias from the sample value */ | ||||
| 			AudioSample -= (SAMPLE_MAX_RANGE / 2); | ||||
| 			#endif		 | ||||
| 			#endif | ||||
| 		#endif | ||||
| 		 | ||||
| 
 | ||||
| 		Pipe_Write_16_LE(AudioSample); | ||||
| 		Pipe_Write_16_LE(AudioSample); | ||||
| 		 | ||||
| 
 | ||||
| 		if (!(Pipe_IsReadWriteAllowed())) | ||||
| 		  Pipe_ClearOUT(); | ||||
| 	} | ||||
| @ -239,3 +239,4 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) | ||||
| 	Pipe_Freeze(); | ||||
| 	Pipe_SelectPipe(PrevPipe); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -99,7 +99,7 @@ uint8_t ProcessConfigurationDescriptor(void) | ||||
| 				} | ||||
| 
 | ||||
| 				/* Save the interface in case we need to refer back to it later */ | ||||
| 				AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t);			 | ||||
| 				AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); | ||||
| 
 | ||||
| 				/* Find the next Audio Streaming interface within that Audio Control interface */ | ||||
| 				if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, | ||||
| @ -218,3 +218,4 @@ uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor) | ||||
| 
 | ||||
| 	return DESCRIPTOR_SEARCH_NotFound; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -51,7 +51,7 @@ int main(void) | ||||
| 	for (;;) | ||||
| 	{ | ||||
| 		ReadNextReport(); | ||||
| 		 | ||||
| 
 | ||||
| 		USB_USBTask(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -81,7 +81,7 @@ | ||||
| 		                     const uint8_t ReportIndex, | ||||
| 		                     const uint8_t ReportType, | ||||
| 		                     uint16_t ReportLength); | ||||
| 		 | ||||
| 
 | ||||
| 		void EVENT_USB_Host_HostError(const uint8_t ErrorCode); | ||||
| 		void EVENT_USB_Host_DeviceAttached(void); | ||||
| 		void EVENT_USB_Host_DeviceUnattached(void); | ||||
|  | ||||
| @ -40,7 +40,7 @@ | ||||
| 		#include <LUFA/Drivers/USB/USB.h> | ||||
| 
 | ||||
| 		#include "JoystickHostWithParser.h" | ||||
| 		 | ||||
| 
 | ||||
| 	/* Macros: */ | ||||
| 		/** HID Report Descriptor Usage Page value for a toggle button. */ | ||||
| 		#define USAGE_PAGE_BUTTON           0x09 | ||||
| @ -55,7 +55,7 @@ | ||||
| 		#define USAGE_X                     0x30 | ||||
| 
 | ||||
| 		/** HID Report Descriptor Usage value for a Y axis movement. */ | ||||
| 		#define USAGE_Y                     0x31	 | ||||
| 		#define USAGE_Y                     0x31 | ||||
| 
 | ||||
| 	/* Enums: */ | ||||
| 		/** Enum for the possible return codes of the \ref GetHIDReportData() function. */ | ||||
|  | ||||
| @ -99,7 +99,7 @@ void EVENT_USB_Host_DeviceUnattached(void) | ||||
| void EVENT_USB_Host_DeviceEnumerationComplete(void) | ||||
| { | ||||
| 	puts_P(PSTR("Getting Config Data.\r\n")); | ||||
| 	 | ||||
| 
 | ||||
| 	uint8_t ErrorCode; | ||||
| 
 | ||||
| 	/* Get and process the configuration descriptor data */ | ||||
| @ -179,7 +179,7 @@ void JoystickHost_Task(void) | ||||
| { | ||||
| 	if (USB_HostState != HOST_STATE_Configured) | ||||
| 	  return; | ||||
| 	 | ||||
| 
 | ||||
| 	/* Select and unfreeze joystick data pipe */ | ||||
| 	Pipe_SelectPipe(JOYSTICK_DATA_IN_PIPE); | ||||
| 	Pipe_Unfreeze(); | ||||
| @ -268,3 +268,4 @@ void ProcessJoystickReport(uint8_t* JoystickReport) | ||||
| 	/* Display the button information on the board LEDs */ | ||||
| 	LEDs_SetAllLEDs(LEDMask); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -65,7 +65,7 @@ | ||||
| 
 | ||||
| 		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */ | ||||
| 		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3) | ||||
| 		 | ||||
| 
 | ||||
| 	/* Function Prototypes: */ | ||||
| 		void SetupHardware(void); | ||||
| 		void JoystickHost_Task(void); | ||||
|  | ||||
| @ -181,7 +181,7 @@ void KeyboardHost_Task(void) | ||||
| { | ||||
| 	if (USB_HostState != HOST_STATE_Configured) | ||||
| 	  return; | ||||
| 	 | ||||
| 
 | ||||
| 	/* Select and unfreeze keyboard data pipe */ | ||||
| 	Pipe_SelectPipe(KEYBOARD_DATA_IN_PIPE); | ||||
| 	Pipe_Unfreeze(); | ||||
| @ -259,7 +259,7 @@ void ProcessKeyboardReport(uint8_t* KeyboardReport) | ||||
| 				} | ||||
| 				else if (KeyCode == HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS) | ||||
| 				{ | ||||
| 					PressedKey = '0';						 | ||||
| 					PressedKey = '0'; | ||||
| 				} | ||||
| 				else if (KeyCode == HID_KEYBOARD_SC_SPACE) | ||||
| 				{ | ||||
|  | ||||
| @ -165,7 +165,7 @@ void MIDIHost_Task(void) | ||||
| { | ||||
| 	if (USB_HostState != HOST_STATE_Configured) | ||||
| 	  return; | ||||
| 	   | ||||
| 
 | ||||
| 	Pipe_SelectPipe(MIDI_DATA_IN_PIPE); | ||||
| 
 | ||||
| 	if (Pipe_IsINReceived()) | ||||
| @ -185,7 +185,7 @@ void MIDIHost_Task(void) | ||||
| 			printf_P(PSTR("MIDI Note %s - Channel %d, Pitch %d, Velocity %d\r\n"), NoteOnEvent ? "On" : "Off", | ||||
| 																				   ((MIDIEvent.Data1 & 0x0F) + 1), | ||||
| 																				   MIDIEvent.Data2, MIDIEvent.Data3); | ||||
| 		}				 | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	Pipe_SelectPipe(MIDI_DATA_OUT_PIPE); | ||||
|  | ||||
| @ -108,7 +108,7 @@ static uint8_t MassStore_SendCommand(MS_CommandBlockWrapper_t* const SCSICommand | ||||
| 			return ErrorCode; | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	/* Retrieve the returned SCSI status from the device */ | ||||
| 	MS_CommandStatusWrapper_t SCSIStatusBlock; | ||||
| 	return MassStore_GetReturnedStatus(&SCSIStatusBlock); | ||||
| @ -267,7 +267,7 @@ static uint8_t MassStore_GetReturnedStatus(MS_CommandStatusWrapper_t* const SCSI | ||||
| 	{ | ||||
| 		return ErrorCode; | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	/* Clear the data ready for next reception */ | ||||
| 	Pipe_ClearIN(); | ||||
| 
 | ||||
| @ -302,13 +302,13 @@ uint8_t MassStore_MassStorageReset(void) | ||||
| 
 | ||||
| 	/* Select the control pipe for the request transfer */ | ||||
| 	Pipe_SelectPipe(PIPE_CONTROLPIPE); | ||||
| 	 | ||||
| 
 | ||||
| 	if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful) | ||||
| 	  return ErrorCode; | ||||
| 	 | ||||
| 
 | ||||
| 	/* Select first data pipe to clear STALL condition if one exists */ | ||||
| 	Pipe_SelectPipe(MASS_STORE_DATA_IN_PIPE); | ||||
| 	 | ||||
| 
 | ||||
| 	if ((ErrorCode = USB_Host_ClearEndpointStall(Pipe_GetBoundEndpointAddress())) != HOST_SENDCONTROL_Successful) | ||||
| 	  return ErrorCode; | ||||
| 
 | ||||
| @ -317,7 +317,7 @@ uint8_t MassStore_MassStorageReset(void) | ||||
| 
 | ||||
| 	if ((ErrorCode = USB_Host_ClearEndpointStall(Pipe_GetBoundEndpointAddress())) != HOST_SENDCONTROL_Successful) | ||||
| 	  return ErrorCode; | ||||
| 	 | ||||
| 
 | ||||
| 	return HOST_SENDCONTROL_Successful; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -284,3 +284,4 @@ void ProcessMouseReport(uint8_t* MouseReport) | ||||
| 	/* Display the button information on the board LEDs */ | ||||
| 	LEDs_SetAllLEDs(LEDMask); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -218,7 +218,7 @@ void PrinterHost_Task(void) | ||||
| 	puts_P(PSTR("Test Page Sent.\r\n")); | ||||
| 
 | ||||
| 	/* Indicate device no longer busy */ | ||||
| 	LEDs_SetAllLEDs(LEDMASK_USB_READY);	 | ||||
| 	LEDs_SetAllLEDs(LEDMASK_USB_READY); | ||||
| 	USB_Host_SetDeviceConfiguration(0); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -83,6 +83,6 @@ | ||||
| 		void EVENT_USB_Host_HostError(const uint8_t ErrorCode); | ||||
| 		void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, | ||||
| 		                                            const uint8_t SubErrorCode); | ||||
| 		 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -222,7 +222,7 @@ uint8_t DComp_NextCDCDataInterfaceEndpoint(void* CurrentDescriptor) | ||||
| 		USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); | ||||
| 
 | ||||
| 		/* Check the endpoint type, break out if correct BULK or INTERRUPT type endpoint found */ | ||||
| 		if (((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_BULK) ||  | ||||
| 		if (((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_BULK) || | ||||
| 		    ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_INTERRUPT)) | ||||
| 		{ | ||||
| 			return DESCRIPTOR_SEARCH_Found; | ||||
|  | ||||
| @ -177,7 +177,7 @@ uint8_t DComp_NextStillImageInterfaceDataEndpoint(void* CurrentDescriptor) | ||||
| 		USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); | ||||
| 
 | ||||
| 		/* Check the endpoint type, break out if correct BULK or INTERRUPT type endpoint found */ | ||||
| 		if (((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_BULK) ||  | ||||
| 		if (((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_BULK) || | ||||
| 		    ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_INTERRUPT)) | ||||
| 		{ | ||||
| 			return DESCRIPTOR_SEARCH_Found; | ||||
|  | ||||
| @ -221,7 +221,7 @@ uint8_t DComp_NextCDCDataInterfaceEndpoint(void* CurrentDescriptor) | ||||
| 	{ | ||||
| 		USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); | ||||
| 
 | ||||
| 		if (((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_BULK) ||  | ||||
| 		if (((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_BULK) || | ||||
| 		    ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_INTERRUPT)) | ||||
| 		{ | ||||
| 			return DESCRIPTOR_SEARCH_Found; | ||||
|  | ||||
| @ -35,7 +35,7 @@ | ||||
|    header, copy this into your project's root directory and supply | ||||
|    the \c USE_LUFA_CONFIG_HEADER token to the compiler so that it is | ||||
|    defined in all compiled source files. | ||||
|     | ||||
| 
 | ||||
|    For information on what each token does, refer to the LUFA | ||||
|    manual section "Summary of Compile Tokens". | ||||
| */ | ||||
| @ -85,7 +85,7 @@ | ||||
| //		#define HOST_DEVICE_SETTLE_DELAY_MS	     {Insert Value Here}
 | ||||
| 
 | ||||
| 	#elif (ARCH == ARCH_XMEGA) | ||||
| 	 | ||||
| 
 | ||||
| 		/* Non-USB Related Configuration Tokens: */ | ||||
| //		#define DISABLE_TERMINAL_CODES
 | ||||
| 
 | ||||
| @ -151,6 +151,6 @@ | ||||
| //		#define USB_HOST_TIMEOUT_MS              {Insert Value Here}
 | ||||
| //		#define HOST_DEVICE_SETTLE_DELAY_MS	     {Insert Value Here}
 | ||||
| 
 | ||||
| 	#endif	 | ||||
| 	#endif | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -55,7 +55,7 @@ | ||||
| 		#if !defined(__INCLUDE_FROM_COMMON_H) | ||||
| 			#error Do not include this file directly. Include LUFA/Common/Common.h instead to gain this functionality. | ||||
| 		#endif | ||||
| 		 | ||||
| 
 | ||||
| 	/* Enable C linkage for C++ Compilers: */ | ||||
| 		#if defined(__cplusplus) | ||||
| 			extern "C" { | ||||
| @ -82,7 +82,7 @@ | ||||
| 				                                                  "M" (_SFR_IO_ADDR(MCUCR))          \ | ||||
| 				                                                : "r0");                             \ | ||||
| 				                                        }MACROE | ||||
| 			 | ||||
| 
 | ||||
| 				/** Defines a volatile \c NOP statement which cannot be optimized out by the compiler, and thus can always
 | ||||
| 				 *  be set as a breakpoint in the resulting code. Useful for debugging purposes, where the optimizer | ||||
| 				 *  removes/reorders code to the point where break points cannot reliably be set. | ||||
| @ -136,7 +136,7 @@ | ||||
| 					#define pgm_read_ptr(Address)        (void*)pgm_read_word(Address) | ||||
| 				#endif | ||||
| 			#endif | ||||
| 			 | ||||
| 
 | ||||
| 	/* Disable C linkage for C++ Compilers: */ | ||||
| 		#if defined(__cplusplus) | ||||
| 			} | ||||
|  | ||||
| @ -66,10 +66,10 @@ | ||||
| 
 | ||||
| 			/** Selects the Atmel 32-bit UC3 AVR (AT32UC3* chips) architecture. */ | ||||
| 			#define ARCH_UC3            1 | ||||
| 			 | ||||
| 
 | ||||
| 			/** Selects the Atmel XMEGA AVR (ATXMEGA*U chips) architecture. */ | ||||
| 			#define ARCH_XMEGA          2 | ||||
| 			 | ||||
| 
 | ||||
| 			#if !defined(__DOXYGEN__) | ||||
| 				#define ARCH_           ARCH_AVR8 | ||||
| 
 | ||||
|  | ||||
| @ -133,14 +133,14 @@ | ||||
| 			 *  \param[in] Func  Name of the function which the given function name should alias. | ||||
| 			 */ | ||||
| 			#define ATTR_ALIAS(Func)               __attribute__ ((alias( #Func ))) | ||||
| 			 | ||||
| 
 | ||||
| 			/** Marks a variable or struct element for packing into the smallest space available, omitting any
 | ||||
| 			 *  alignment bytes usually added between fields to optimize field accesses. | ||||
| 			 */ | ||||
| 			#define ATTR_PACKED                     __attribute__ ((packed)) | ||||
| 
 | ||||
| 			/** Indicates the minimum alignment in bytes for a variable or struct element.
 | ||||
| 			 *  | ||||
| 			 * | ||||
| 			 *  \param[in] Bytes  Minimum number of bytes the item should be aligned to. | ||||
| 			 */ | ||||
| 			#define ATTR_ALIGNED(Bytes)            __attribute__ ((aligned(Bytes))) | ||||
|  | ||||
| @ -140,13 +140,13 @@ | ||||
| 
 | ||||
| 			/** Selects the Kernel Concepts USBFOO specific board drivers, including the Button and LEDs drivers. */ | ||||
| 			#define BOARD_USBFOO        25 | ||||
| 			 | ||||
| 
 | ||||
| 			/** Selects the Sparkfun ATMEGA8U2 specific board drivers, including the driver for the board LEDs. */ | ||||
| 			#define BOARD_SPARKFUN8U2   26 | ||||
| 
 | ||||
| 			/** Selects the Atmel EVK1101 specific board drivers, including the Button, Joystick and LED drivers. */ | ||||
| 			#define BOARD_EVK1101       27 | ||||
| 			 | ||||
| 
 | ||||
| 			/** Selects the Busware TUL specific board drivers, including the Button and LED drivers. */ | ||||
| 			#define BOARD_TUL           28 | ||||
| 
 | ||||
| @ -155,7 +155,7 @@ | ||||
| 
 | ||||
| 			/** Selects the Atmel EVK1104 specific board drivers, including the Button and LED drivers. */ | ||||
| 			#define BOARD_EVK1104       30 | ||||
| 			 | ||||
| 
 | ||||
| 			/** Selects the Atmel XMEGA A3BU Xplained specific board drivers, including Dataflash, Button and LED drivers. */ | ||||
| 			#define BOARD_A3BU_XPLAINED 31 | ||||
| 
 | ||||
|  | ||||
| @ -42,7 +42,7 @@ | ||||
|  * | ||||
|  *  @{ | ||||
|  */ | ||||
|   | ||||
| 
 | ||||
| /** \defgroup Group_GlobalInt Global Interrupt Macros
 | ||||
|  *  \brief Convenience macros for the management of interrupts globally within the device. | ||||
|  * | ||||
| @ -54,13 +54,13 @@ | ||||
| 
 | ||||
| 	/* Macros: */ | ||||
| 		#define __INCLUDE_FROM_COMMON_H | ||||
| 		 | ||||
| 
 | ||||
| 	/* Includes: */ | ||||
| 		#include <stdint.h> | ||||
| 		#include <stdbool.h> | ||||
| 		#include <string.h> | ||||
| 		#include <stddef.h> | ||||
| 		 | ||||
| 
 | ||||
| 		#if defined(USE_LUFA_CONFIG_HEADER) | ||||
| 			#include "LUFAConfig.h" | ||||
| 		#endif | ||||
| @ -70,7 +70,7 @@ | ||||
| 		#include "ArchitectureSpecific.h" | ||||
| 		#include "CompilerSpecific.h" | ||||
| 		#include "Attributes.h" | ||||
| 		 | ||||
| 
 | ||||
| 	/* Enable C linkage for C++ Compilers: */ | ||||
| 		#if defined(__cplusplus) | ||||
| 			extern "C" { | ||||
| @ -90,9 +90,9 @@ | ||||
| 			#include <avr/eeprom.h> | ||||
| 			#include <avr/boot.h> | ||||
| 			#include <util/delay.h> | ||||
| 			 | ||||
| 
 | ||||
| 			typedef uint8_t uint_reg_t; | ||||
| 			 | ||||
| 
 | ||||
| 			#define ARCH_HAS_EEPROM_ADDRESS_SPACE | ||||
| 			#define ARCH_HAS_FLASH_ADDRESS_SPACE | ||||
| 			#define ARCH_HAS_MULTI_ADDRESS_SPACE | ||||
| @ -110,7 +110,7 @@ | ||||
| 			// =================================================
 | ||||
| 
 | ||||
| 			typedef uint32_t uint_reg_t; | ||||
| 			 | ||||
| 
 | ||||
| 			#define ARCH_BIG_ENDIAN | ||||
| 
 | ||||
| 			#include "Endianness.h" | ||||
| @ -120,15 +120,15 @@ | ||||
| 			#include <avr/pgmspace.h> | ||||
| 			#include <avr/eeprom.h> | ||||
| 			#include <util/delay.h> | ||||
| 			 | ||||
| 
 | ||||
| 			typedef uint8_t uint_reg_t; | ||||
| 			 | ||||
| 
 | ||||
| 			#define ARCH_HAS_EEPROM_ADDRESS_SPACE | ||||
| 			#define ARCH_HAS_FLASH_ADDRESS_SPACE | ||||
| 			#define ARCH_HAS_MULTI_ADDRESS_SPACE | ||||
| 			#define ARCH_LITTLE_ENDIAN | ||||
| 
 | ||||
| 			#include "Endianness.h"		 | ||||
| 			#include "Endianness.h" | ||||
| 		#else | ||||
| 			#error Unknown device architecture specified. | ||||
| 		#endif | ||||
| @ -176,7 +176,7 @@ | ||||
| 			#if !defined(MIN) || defined(__DOXYGEN__) | ||||
| 				#define MIN(x, y)               (((x) < (y)) ? (x) : (y)) | ||||
| 			#endif | ||||
| 			 | ||||
| 
 | ||||
| 			#if !defined(STRINGIFY) || defined(__DOXYGEN__) | ||||
| 				/** Converts the given input into a string, via the C Preprocessor. This macro puts literal quotation
 | ||||
| 				 *  marks around the input, converting the source into a string literal. | ||||
| @ -256,7 +256,7 @@ | ||||
| 				while (Milliseconds--) | ||||
| 				{ | ||||
| 					__builtin_mtsr(AVR32_COUNT, 0); | ||||
| 					while (__builtin_mfsr(AVR32_COUNT) < (F_CPU / 1000));				 | ||||
| 					while (__builtin_mfsr(AVR32_COUNT) < (F_CPU / 1000)); | ||||
| 				} | ||||
| 				#elif (ARCH == ARCH_XMEGA) | ||||
| 				if (GCC_IS_COMPILE_CONST(Milliseconds)) | ||||
| @ -267,7 +267,7 @@ | ||||
| 				{ | ||||
| 					while (Milliseconds--) | ||||
| 					  _delay_ms(1); | ||||
| 				}				 | ||||
| 				} | ||||
| 				#endif | ||||
| 			} | ||||
| 
 | ||||
| @ -316,12 +316,12 @@ | ||||
| 				else | ||||
| 				  __builtin_csrf(AVR32_SR_GM_OFFSET); | ||||
| 				#elif (ARCH == ARCH_XMEGA) | ||||
| 				SREG = GlobalIntState;				 | ||||
| 				SREG = GlobalIntState; | ||||
| 				#endif | ||||
| 				 | ||||
| 
 | ||||
| 				GCC_MEMORY_BARRIER(); | ||||
| 			} | ||||
| 		 | ||||
| 
 | ||||
| 			/** Enables global interrupt handling for the device, allowing interrupts to be handled.
 | ||||
| 			 * | ||||
| 			 *  \ingroup Group_GlobalInt | ||||
| @ -340,7 +340,7 @@ | ||||
| 				#endif | ||||
| 
 | ||||
| 				GCC_MEMORY_BARRIER(); | ||||
| 			}		 | ||||
| 			} | ||||
| 
 | ||||
| 			/** Disabled global interrupt handling for the device, preventing interrupts from being handled.
 | ||||
| 			 * | ||||
|  | ||||
| @ -43,7 +43,7 @@ | ||||
|  * | ||||
|  *  Compiler specific definitions to expose certain compiler features which may increase the level of code optimization | ||||
|  *  for a specific compiler, or correct certain issues that may be present such as memory barriers for use in conjunction | ||||
|  *  with atomic variable access.  | ||||
|  *  with atomic variable access. | ||||
|  * | ||||
|  *  Where possible, on alternative compilers, these macros will either have no effect, or default to returning a sane value | ||||
|  *  so that they can be used in existing code without the need for extra compiler checks in the user application code. | ||||
| @ -77,7 +77,7 @@ | ||||
| 				 *  assembly output in an unexpected manner on sections of code that are ordering-specific. | ||||
| 				 */ | ||||
| 				#define GCC_MEMORY_BARRIER()                  __asm__ __volatile__("" ::: "memory"); | ||||
| 				 | ||||
| 
 | ||||
| 				/** Evaluates to boolean true if the specified value can be determined at compile time to be a constant value
 | ||||
| 				 *  when compiling under GCC. | ||||
| 				 * | ||||
|  | ||||
| @ -65,7 +65,7 @@ | ||||
| 		#if !defined(__INCLUDE_FROM_COMMON_H) | ||||
| 			#error Do not include this file directly. Include LUFA/Common/Common.h instead to gain this functionality. | ||||
| 		#endif | ||||
| 		 | ||||
| 
 | ||||
| 		#if !(defined(ARCH_BIG_ENDIAN) || defined(ARCH_LITTLE_ENDIAN)) | ||||
| 			#error ARCH_BIG_ENDIAN or ARCH_LITTLE_ENDIAN not set for the specified architecture. | ||||
| 		#endif | ||||
| @ -115,11 +115,11 @@ | ||||
| 				#define CPU_TO_LE16(x)           SWAPENDIAN_16(x) | ||||
| 				#define CPU_TO_LE32(x)           SWAPENDIAN_32(x) | ||||
| 				#define CPU_TO_BE16(x)           (x) | ||||
| 				#define CPU_TO_BE32(x)           (x)			 | ||||
| 				#define CPU_TO_BE32(x)           (x) | ||||
| 			#elif !defined(le16_to_cpu) | ||||
| 				/** \name Run-time endianness conversion */ | ||||
| 				//@{
 | ||||
| 			 | ||||
| 
 | ||||
| 				/** Performs a conversion between a Little Endian encoded 16-bit piece of data and the
 | ||||
| 				 *  Endianness of the currently selected CPU architecture. | ||||
| 				 * | ||||
| @ -398,7 +398,7 @@ | ||||
| 			{ | ||||
| 				if (GCC_IS_COMPILE_CONST(Word)) | ||||
| 				  return SWAPENDIAN_16(Word); | ||||
| 			 | ||||
| 
 | ||||
| 				uint8_t Temp; | ||||
| 
 | ||||
| 				union | ||||
| @ -486,3 +486,4 @@ | ||||
| #endif | ||||
| 
 | ||||
| /** @} */ | ||||
| 
 | ||||
|  | ||||
| @ -124,3 +124,4 @@ | ||||
| #endif | ||||
| 
 | ||||
| /** @} */ | ||||
| 
 | ||||
|  | ||||
| @ -66,7 +66,7 @@ | ||||
| 		/* Macros: */ | ||||
| 			#define JOY_FMASK                 ((1 << 4) | (1 << 5) | (1 << 6) | (1 << 7)) | ||||
| 			#define JOY_CMASK                 (1 << 6) | ||||
| 			 | ||||
| 
 | ||||
| 			#define JOY_PORTC_MASK_SHIFT      3 | ||||
| 	#endif | ||||
| 
 | ||||
|  | ||||
| @ -127,3 +127,4 @@ | ||||
| #endif | ||||
| 
 | ||||
| /** @} */ | ||||
| 
 | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| /*
 | ||||
|              LUFA Library | ||||
|      Copyright (C) Dean Camera, 2011. | ||||
|                | ||||
| 
 | ||||
|   dean [at] fourwalledcubicle [dot] com | ||||
|            www.lufa-lib.org | ||||
| */ | ||||
| @ -9,13 +9,13 @@ | ||||
| /*
 | ||||
|   Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||||
| 
 | ||||
|   Permission to use, copy, modify, distribute, and sell this  | ||||
|   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  | ||||
|   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  | ||||
|   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 | ||||
| @ -82,7 +82,7 @@ | ||||
| 				DDRB  |=  LEDS_ALL_LEDS; | ||||
| 				PORTB &= ~LEDS_ALL_LEDS; | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask) | ||||
| 			{ | ||||
| 				PORTB |= LEDMask; | ||||
| @ -97,18 +97,18 @@ | ||||
| 			{ | ||||
| 				PORTB = ((PORTB & ~LEDS_ALL_LEDS) | LEDMask); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, | ||||
| 			                                   const uint8_t ActiveMask) | ||||
| 			{ | ||||
| 				PORTB = ((PORTB & ~LEDMask) | ActiveMask); | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) | ||||
| 			{ | ||||
| 				PORTB ^= LEDMask; | ||||
| 			} | ||||
| 			 | ||||
| 
 | ||||
| 			static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; | ||||
| 			static inline uint8_t LEDs_GetLEDs(void) | ||||
| 			{ | ||||
| @ -120,7 +120,8 @@ | ||||
| 		#if defined(__cplusplus) | ||||
| 			} | ||||
| 		#endif | ||||
| 		 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /** @} */ | ||||
| 
 | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera