diff --git a/Bootloaders/CDC/BootloaderCDC.txt b/Bootloaders/CDC/BootloaderCDC.txt index cb6f9f01f1..1f8970d57e 100644 --- a/Bootloaders/CDC/BootloaderCDC.txt +++ b/Bootloaders/CDC/BootloaderCDC.txt @@ -5,15 +5,10 @@ */ /** \mainpage CDC Class USB AVR Bootloader - * - * This bootloader enumerates to the host as a CDC Class device (virtual serial port), allowing for AVR109 - * protocol compatible programming software to load firmware onto the AVR. - * - * Out of the box this bootloader builds for the USB1287, and will fit into 4KB of bootloader space. If - * you wish to enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU - * values in the accompanying makefile. - * - * This bootloader is compatible with the open source application AVRDUDE, or Atmel's AVRPROG. + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -37,4 +32,27 @@ * * *
Full Speed Mode
- */ + * + * \section SSec_Description Project Description: + * + * This bootloader enumerates to the host as a CDC Class device (virtual serial port), allowing for AVR109 + * protocol compatible programming software to load firmware onto the AVR. + * + * Out of the box this bootloader builds for the USB1287, and will fit into 4KB of bootloader space. If + * you wish to enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU + * values in the accompanying makefile. + * + * This bootloader is compatible with the open source application AVRDUDE, or Atmel's AVRPROG. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
+ */ \ No newline at end of file diff --git a/Bootloaders/DFU/BootloaderDFU.txt b/Bootloaders/DFU/BootloaderDFU.txt index 091ce40839..7107cc1232 100644 --- a/Bootloaders/DFU/BootloaderDFU.txt +++ b/Bootloaders/DFU/BootloaderDFU.txt @@ -5,27 +5,10 @@ */ /** \mainpage DFU Class USB AVR Bootloader - * - * This bootloader enumerates to the host as a DFU Class device, allowing for DFU-compatible programming - * software to load firmware onto the AVR. - * - * This bootloader is compatible with Atmel's FLIP application. However, it requires the use of Atmel's - * DFU drivers. You will need to install Atmel's DFU drivers prior to using this bootloader. - * - * As an open-source option, this bootloader is also compatible with the Linux Atmel USB DFU Programmer - * software, available for download at http://sourceforge.net/projects/dfu-programmer/. - * - * If SECURE_MODE is defined as true, upon startup the bootloader will be locked, with only the chip erase - * function available (similar to Atmel's DFU bootloader). If SECURE_MODE is defined as false, all functions - * are usable on startup without the prerequisite firmware erase. - * - * Out of the box this bootloader builds for the USB1287, and should fit into 4KB of bootloader space. If - * you wish to enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU - * values in the accompanying makefile. - * - * NOTE: This device spoofs Atmel's DFU Bootloader USB VID and PID so that the Atmel DFU bootloader - * drivers included with FLIP will work. If you do not wish to use Atmel's ID codes, please - * manually change them in Descriptors.c and alter your driver's INF file accordingly. + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -49,4 +32,46 @@ * * *
Full Speed Mode
- */ + * + * \section SSec_Description Project Description: + * + * This bootloader enumerates to the host as a DFU Class device, allowing for DFU-compatible programming + * software to load firmware onto the AVR. + * + * This bootloader is compatible with Atmel's FLIP application. However, it requires the use of Atmel's + * DFU drivers. You will need to install Atmel's DFU drivers prior to using this bootloader. + * + * As an open-source option, this bootloader is also compatible with the Linux Atmel USB DFU Programmer + * software, available for download at http://sourceforge.net/projects/dfu-programmer/. + * + * If SECURE_MODE is defined as true, upon startup the bootloader will be locked, with only the chip erase + * function available (similar to Atmel's DFU bootloader). If SECURE_MODE is defined as false, all functions + * are usable on startup without the prerequisite firmware erase. + * + * Out of the box this bootloader builds for the USB1287, and should fit into 4KB of bootloader space. If + * you wish to enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU + * values in the accompanying makefile. + * + * NOTE: This device spoofs Atmel's DFU Bootloader USB VID and PID so that the Atmel DFU bootloader + * drivers included with FLIP will work. If you do not wish to use Atmel's ID codes, please + * manually change them in Descriptors.c and alter your driver's INF file accordingly. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + * + * + * + * + * + * + * + *
Define Name:Location:Description:
SECURE_MODEBootloaderDFU.hIf defined to true, the bootloader will not accept any memory commands other than a chip erase on statup, until an + * erase has been perfomed. This can be used in conjunction with the AVR's lockbits to prevent the AVRs firmware from + * being dumped by unauthorized persons.
+ */ \ No newline at end of file diff --git a/Bootloaders/TeensyHID/TeensyHID.h b/Bootloaders/TeensyHID/TeensyHID.h index a4773f8f54..ae180f7781 100644 --- a/Bootloaders/TeensyHID/TeensyHID.h +++ b/Bootloaders/TeensyHID/TeensyHID.h @@ -57,9 +57,9 @@ /* Macros: */ /** HID Class specific request to send the next HID report to the device. */ - #define REQ_SetReport 0x09 + #define REQ_SetReport 0x09 - #define TEENSY_STARTAPPLICATION 0xFFFF + #define TEENSY_STARTAPPLICATION 0xFFFF /* Event Handlers: */ /** Indicates that this module will catch the USB_Disconnect event when thrown by the library. */ diff --git a/Bootloaders/TeensyHID/TeensyHID.txt b/Bootloaders/TeensyHID/TeensyHID.txt index 973819cf87..1d83510d89 100644 --- a/Bootloaders/TeensyHID/TeensyHID.txt +++ b/Bootloaders/TeensyHID/TeensyHID.txt @@ -5,15 +5,11 @@ */ /** \mainpage Teensy HID Class USB AVR Bootloader - * - * This bootloader enumerates to the host as a HID Class device, allowing for Teensy compatible programming - * software to load firmware onto the AVR, such as the official software at http://www.pjrc.com/teensy/. - * - * Out of the box this bootloader builds for the USB162, and will fit into 2KB of bootloader space. * - * This spoofs (with permission) the offical Teensy bootloader's VID and PID, so that the software remains - * compatible with no changes. - * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. + * * * * @@ -38,4 +34,26 @@ * * *
USB Mode:Full Speed Mode
- */ + * + * \section SSec_Description Project Description: + * + * This bootloader enumerates to the host as a HID Class device, allowing for Teensy compatible programming + * software to load firmware onto the AVR, such as the official software at http://www.pjrc.com/teensy/. + * + * Out of the box this bootloader builds for the USB162, and will fit into 2KB of bootloader space. + * + * This spoofs (with permission) the offical Teensy bootloader's VID and PID, so that the software remains + * compatible with no changes. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
+ */ \ No newline at end of file diff --git a/Demos/AudioInput/AudioInput.c b/Demos/AudioInput/AudioInput.c index 6ead7a0153..f41306f3b2 100644 --- a/Demos/AudioInput/AudioInput.c +++ b/Demos/AudioInput/AudioInput.c @@ -33,10 +33,6 @@ * Main source file for the Audio Input demo. This file contains the main tasks of the demo and * is responsible for the initial application hardware configuration. */ - -/* --- Project Configuration --- */ -//#define MICROPHONE_BIASED_TO_HALF_RAIL -/* --- --- --- --- --- --- --- --- */ #include "AudioInput.h" diff --git a/Demos/AudioInput/AudioInput.txt b/Demos/AudioInput/AudioInput.txt index 09b77f7ec9..36e71e9750 100644 --- a/Demos/AudioInput/AudioInput.txt +++ b/Demos/AudioInput/AudioInput.txt @@ -5,21 +5,10 @@ */ /** \mainpage Audio Input Device Demo - * - * Audio demonstration application. This gives a simple reference - * application for implementing a USB Audio Input device using the - * basic USB Audio drivers in all modern OSes (i.e. no special drivers - * required). - * - * On startup the system will automatically enumerate and function - * as a USB microphone. Incomming audio from the ADC channel 1 will - * be sampled and sent to the host computer. - * - * To use, connect a microphone to the ADC channel 2. - * - * Under Windows, if a driver request dialogue pops up, select the option - * to automatically install the appropriate drivers. - * + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -45,4 +34,37 @@ * * *
Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Audio demonstration application. This gives a simple reference + * application for implementing a USB Audio Input device using the + * basic USB Audio drivers in all modern OSes (i.e. no special drivers + * required). + * + * On startup the system will automatically enumerate and function + * as a USB microphone. Incomming audio from the ADC channel 1 will + * be sampled and sent to the host computer. + * + * To use, connect a microphone to the ADC channel 2. + * + * Under Windows, if a driver request dialogue pops up, select the option + * to automatically install the appropriate drivers. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + * + * + * + * + * + * + * + *
Define Name:Location:Description:
MICROPHONE_BIASED_TO_HALF_RAILMakefile CDEFSWhen defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.
*/ \ No newline at end of file diff --git a/Demos/AudioOutput/AudioOutput.c b/Demos/AudioOutput/AudioOutput.c index 87afd36062..0f390f0019 100644 --- a/Demos/AudioOutput/AudioOutput.c +++ b/Demos/AudioOutput/AudioOutput.c @@ -34,13 +34,6 @@ * is responsible for the initial application hardware configuration. */ -/* --- Project Configuration (Choose ONE) --- */ -//#define AUDIO_OUT_MONO -#define AUDIO_OUT_STEREO -//#define AUDIO_OUT_LEDS -//#define AUDIO_OUT_PORTC -/* --- --- --- --- --- --- --- --- --- --- --- */ - #include "AudioOutput.h" /* Project Tags, for reading out using the ButtLoad project */ diff --git a/Demos/AudioOutput/AudioOutput.txt b/Demos/AudioOutput/AudioOutput.txt index ce7d4ed943..0638c47f96 100644 --- a/Demos/AudioOutput/AudioOutput.txt +++ b/Demos/AudioOutput/AudioOutput.txt @@ -5,7 +5,38 @@ */ /** \mainpage Audio Output Device Demo - * + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
USB Mode:Device
USB Class:Audio Class
USB Subclass:Standard Audio Device
Relevant Standards:USBIF Audio Class SpecificationUSBIF Audio Class Terminal Types SpecificationUSBIF Audio Data Formats Specification
Usable Speeds:Full Speed Mode
+ * + * \section SSec_Description Project Description: + * * Audio demonstration application. This gives a simple reference * application for implementing a USB Audio Output device using the * basic USB Audio drivers in all modern OSes (i.e. no special drivers @@ -21,30 +52,37 @@ * * Under Windows, if a driver request dialogue pops up, select the option * to automatically install the appropriate drivers. - * + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. * * * - * - * + * + * + * * * - * - * + * + * + * * - * - * - * + * + * + * + * * * - * - * - * - * + * + * + * * * - * - * + * + * + * * *
USB Mode:DeviceDefine Name:Location:Description:
USB Class:Audio ClassAUDIO_OUT_STEREOMakefile CDEFSWhen defined, this outputs the audio samples in stereo to the timer output pins of the microcontroller.
USB Subclass:Standard Audio Device
AUDIO_OUT_MONOMakefile CDEFSWhen defined, this outputs the audio samples in mono to the timer output pin of the microcontroller.
Relevant Standards:USBIF Audio Class SpecificationUSBIF Audio Class Terminal Types SpecificationUSBIF Audio Data Formats SpecificationAUDIO_OUT_LEDSMakefile CDEFSWhen defined, this outputs the audio samples in stereo to the board LEDs.
Usable Speeds:Full Speed ModeAUDIO_OUT_PORTCMakefile CDEFSWhen defined, this outputs the audio samples in mono to port C of the microcontroller, for connection to an + * external DAC.
*/ \ No newline at end of file diff --git a/Demos/AudioOutput/makefile b/Demos/AudioOutput/makefile index 3584d55f90..af99358f5a 100644 --- a/Demos/AudioOutput/makefile +++ b/Demos/AudioOutput/makefile @@ -176,7 +176,7 @@ CSTANDARD = -std=gnu99 CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD) CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" - +CDEFS += -DAUDIO_OUT_STEREO # Place -D or -U options here for ASM sources ADEFS = -DF_CPU=$(F_CPU) diff --git a/Demos/CDC/CDC.txt b/Demos/CDC/CDC.txt index 34e1c82a19..8e13b55b45 100644 --- a/Demos/CDC/CDC.txt +++ b/Demos/CDC/CDC.txt @@ -6,19 +6,9 @@ /** \mainpage Communications Device Class Device (Virtual Serial Port) * - * Communications Device Class demonstration application. - * This gives a simple reference application for implementing - * a CDC device acting as a virtual serial port. Joystick - * actions are transmitted to the host as strings. The device - * does not respond to serial data sent from the host. - * - * After running this demo for the first time on a new computer, - * you will need to supply the .INF file located in this demo - * project's directory as the device's driver when running under - * Windows. This will enable Windows to use its inbuilt CDC drivers, - * negating the need for custom drivers for the device. Other - * Operating Systems should automatically use their own inbuilt - * CDC-ACM drivers. + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -42,4 +32,32 @@ * * *
Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Communications Device Class demonstration application. + * This gives a simple reference application for implementing + * a CDC device acting as a virtual serial port. Joystick + * actions are transmitted to the host as strings. The device + * does not respond to serial data sent from the host. + * + * After running this demo for the first time on a new computer, + * you will need to supply the .INF file located in this demo + * project's directory as the device's driver when running under + * Windows. This will enable Windows to use its inbuilt CDC drivers, + * negating the need for custom drivers for the device. Other + * Operating Systems should automatically use their own inbuilt + * CDC-ACM drivers. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/CDCHost/CDCHost.txt b/Demos/CDCHost/CDCHost.txt index 5f8dc8cc02..39e2357bae 100644 --- a/Demos/CDCHost/CDCHost.txt +++ b/Demos/CDCHost/CDCHost.txt @@ -5,17 +5,10 @@ */ /** \mainpage CDC Host Demo - * - * CDC host demonstration application. This gives a simple reference application - * for implementing a USB CDC host, for CDC devices using the standard ACM profile. - * - * This demo prints out received CDC data through the serial port. - * - * Not that this demo is only compatible with devices which report the correct CDC - * and ACM class, subclass and protocol values. Most USB-Serial cables have vendor - * specific features, thus use vendor-specfic class/subclass/protocol codes to force - * the user to use specialized drivers. This demo is not compaible with such devices. - * + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -39,4 +32,28 @@ * * *
Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * CDC host demonstration application. This gives a simple reference application + * for implementing a USB CDC host, for CDC devices using the standard ACM profile. + * + * This demo prints out received CDC data through the serial port. + * + * Not that this demo is only compatible with devices which report the correct CDC + * and ACM class, subclass and protocol values. Most USB-Serial cables have vendor + * specific features, thus use vendor-specfic class/subclass/protocol codes to force + * the user to use specialized drivers. This demo is not compaible with such devices. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/DualCDC/DualCDC.txt b/Demos/DualCDC/DualCDC.txt index aebbec3531..6e086029b0 100644 --- a/Demos/DualCDC/DualCDC.txt +++ b/Demos/DualCDC/DualCDC.txt @@ -5,6 +5,38 @@ */ /** \mainpage Dual Communications Device Class Device (Dual Virtual Serial Port) + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
USB Mode:Device
USB Class:Miscellaneous Device Class( Sub-Interface: Communications Device Class (CDC) )
USB Subclass:Common Class( Sub-Interface: Abstract Control Model (ACM) )
Relevant Standards:USBIF Interface Association Descriptor ECNUSBIF CDC Class Standard
Usable Speeds:Full Speed Mode
+ * + * \section SSec_Description Project Description: * * Dual Communications Device Class demonstration application. * This gives a simple reference application for implementing @@ -29,29 +61,15 @@ * Operating Systems should automatically use their own inbuilt * CDC-ACM drivers. * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * * * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * + * * *
USB Mode:Device
USB Class:Miscellaneous Device Class( Sub-Interface: Communications Device Class (CDC) )
USB Subclass:Common Class( Sub-Interface: Abstract Control Model (ACM) )
Relevant Standards:USBIF Interface Association Descriptor ECNUSBIF CDC Class Standard
Usable Speeds:Full Speed Mode + * None + *
*/ \ No newline at end of file diff --git a/Demos/Joystick/Joystick.txt b/Demos/Joystick/Joystick.txt index 6229aa042d..7d47ae92fc 100644 --- a/Demos/Joystick/Joystick.txt +++ b/Demos/Joystick/Joystick.txt @@ -6,18 +6,9 @@ /** \mainpage Joystick Device Demo * - * Joystick demonstration application. This gives a simple reference - * application for implementing a USB Keyboard device, for USB Joysticks - * using the standard Keyboard HID profile. - * - * This device will show up as a generic joystick device, with two buttons. - * Pressing the joystick inwards is the first button, and the HWB button - * is the second. - * - * Moving the joystick on the selected board moves the joystick location on - * the host computer. - * - * Currently only single interface joysticks are supported. + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -41,4 +32,31 @@ * * *
Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Joystick demonstration application. This gives a simple reference + * application for implementing a USB Keyboard device, for USB Joysticks + * using the standard Keyboard HID profile. + * + * This device will show up as a generic joystick device, with two buttons. + * Pressing the joystick inwards is the first button, and the HWB button + * is the second. + * + * Moving the joystick on the selected board moves the joystick location on + * the host computer. + * + * Currently only single interface joysticks are supported. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/Keyboard/Keyboard.c b/Demos/Keyboard/Keyboard.c index 3884eeb163..f506070c0f 100644 --- a/Demos/Keyboard/Keyboard.c +++ b/Demos/Keyboard/Keyboard.c @@ -140,6 +140,15 @@ EVENT_HANDLER(USB_Reset) */ EVENT_HANDLER(USB_Disconnect) { + /* Stop running keyboard reporting and USB management tasks */ + #if !defined(INTERRUPT_DATA_ENDPOINT) + Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_STOP); + #endif + + #if !defined(INTERRUPT_CONTROL_ENDPOINT) + Scheduler_SetTaskMode(USB_USBTask, TASK_STOP); + #endif + /* Indicate USB not ready */ UpdateStatus(Status_USBNotReady); } @@ -171,6 +180,11 @@ EVENT_HANDLER(USB_ConfigurationChanged) /* Indicate USB connected and ready */ UpdateStatus(Status_USBReady); + + #if !defined(INTERRUPT_DATA_ENDPOINT) + /* Start running keyboard reporting task */ + Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_RUN); + #endif } /** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific diff --git a/Demos/Keyboard/Keyboard.txt b/Demos/Keyboard/Keyboard.txt index 7939035a0a..a09d83507e 100644 --- a/Demos/Keyboard/Keyboard.txt +++ b/Demos/Keyboard/Keyboard.txt @@ -34,6 +34,7 @@ * * * \section SSec_Description Project Description: + * * Keyboard demonstration application. This gives a simple reference application * for implementing a USB Keyboard using the basic USB HID drivers in all modern * OSes (i.e. no special drivers required). It is boot protocol compatible, and thus diff --git a/Demos/KeyboardHost/KeyboardHost.txt b/Demos/KeyboardHost/KeyboardHost.txt index 92e380789d..db0e14ad66 100644 --- a/Demos/KeyboardHost/KeyboardHost.txt +++ b/Demos/KeyboardHost/KeyboardHost.txt @@ -5,21 +5,10 @@ */ /** \mainpage Keyboard Host Demo - * - * Keyboard host demonstration application. This gives a simple reference - * application for implementing a USB Mouse keyboard, for USB keyboards using - * the standard keyboard HID profile. - * - * Pressed alpha-numeric, enter or space key is transmitted through the serial - * USART at serial settings 9600, 8, N, 1. - * - * This uses a naive method where the keyboard is set to Boot Protocol mode, so - * that the report structure is fixed and known. A better implementation - * uses the HID report parser for correct report data processing across - * all compatable mice with advanced characteristics, as shown in the - * KeyboardHostWithParser demo application. - * - * Currently only single interface keyboards are supported. + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -43,4 +32,33 @@ * * *
Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Keyboard host demonstration application. This gives a simple reference + * application for implementing a USB Mouse keyboard, for USB keyboards using + * the standard keyboard HID profile. + * + * Pressed alpha-numeric, enter or space key is transmitted through the serial + * USART at serial settings 9600, 8, N, 1. + * + * This uses a naive method where the keyboard is set to Boot Protocol mode, so + * that the report structure is fixed and known. A better implementation + * uses the HID report parser for correct report data processing across + * all compatable mice with advanced characteristics, as shown in the + * KeyboardHostWithParser demo application. + * + * Currently only single interface keyboards are supported. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/KeyboardHostViaInt/KeyboardHostViaInt.h b/Demos/KeyboardHostViaInt/KeyboardHostViaInt.h index 7ae54e6ada..06cd02a9f8 100644 --- a/Demos/KeyboardHostViaInt/KeyboardHostViaInt.h +++ b/Demos/KeyboardHostViaInt/KeyboardHostViaInt.h @@ -59,7 +59,7 @@ #define KEYBOARD_DATAPIPE 1 /** HID Class Specific request to set the report protocol mode */ - #define REQ_SetProtocol 0x0B + #define REQ_SetProtocol 0x0B /* Type Defines: */ /** Type define for a standard Boot Protocol Keyboard report */ diff --git a/Demos/KeyboardHostViaInt/KeyboardHostViaInt.txt b/Demos/KeyboardHostViaInt/KeyboardHostViaInt.txt index 07c1108489..de61d32fea 100644 --- a/Demos/KeyboardHostViaInt/KeyboardHostViaInt.txt +++ b/Demos/KeyboardHostViaInt/KeyboardHostViaInt.txt @@ -4,23 +4,11 @@ * documentation pages. It is not a project source file. */ -/** \mainpage Keyboard Host Demo - * - * Keyboard host demonstration application, using pipe interrupts. This gives - * a simple reference application for implementing a USB Keyboard host utilizing - * the LUFA pipe interrupt system, for USB keyboards using the standard Keyboard - * HID profile. - * - * Pressed alpha-numeric, enter or space key is transmitted through the serial - * USART at serial settings 9600, 8, N, 1. - * - * This uses a naive method where the keyboard is set to Boot Protocol mode, so - * that the report structure is fixed and known. A better implementation - * uses the HID report parser for correct report data processing across - * all compatable mice with advanced characteristics, as shown in the - * KeyboardHostWithParser demo application. - * - * Currently only single interface keyboards are supported. +/** \mainpage Keyboard Host Demo (via interrupts) + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -44,4 +32,34 @@ * * *
Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Keyboard host demonstration application, using pipe interrupts. This gives + * a simple reference application for implementing a USB Keyboard host utilizing + * the LUFA pipe interrupt system, for USB keyboards using the standard Keyboard + * HID profile. + * + * Pressed alpha-numeric, enter or space key is transmitted through the serial + * USART at serial settings 9600, 8, N, 1. + * + * This uses a naive method where the keyboard is set to Boot Protocol mode, so + * that the report structure is fixed and known. A better implementation + * uses the HID report parser for correct report data processing across + * all compatable mice with advanced characteristics, as shown in the + * KeyboardHostWithParser demo application. + * + * Currently only single interface keyboards are supported. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/KeyboardHostWithParser/KeyboardHostWithParser.txt b/Demos/KeyboardHostWithParser/KeyboardHostWithParser.txt index 09a83ca570..cd36706739 100644 --- a/Demos/KeyboardHostWithParser/KeyboardHostWithParser.txt +++ b/Demos/KeyboardHostWithParser/KeyboardHostWithParser.txt @@ -5,19 +5,10 @@ */ /** \mainpage Keyboard Host With HID Descriptor Parser Demo - * - * Keyboard host demonstration application. This gives a simple reference - * application for implementing a USB Keyboard host, for USB keyboards using - * the standard Keyboard HID profile. It uses a HID parser for the HID reports, - * allowing for correct operation across all USB keyboards. This demo supports - * keyboards with a single HID report. - * - * Pressed alpha-numeric, enter or space key is transmitted through the serial - * USART at serial settings 9600, 8, N, 1. On connection to a USB keyboard, the - * report items will be processed and printed as a formatted list through the - * USART before the keyboard is fully enumerated. - * - * Currently only single interface keyboards are supported. + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -41,4 +32,31 @@ * * *
Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Keyboard host demonstration application. This gives a simple reference + * application for implementing a USB Keyboard host, for USB keyboards using + * the standard Keyboard HID profile. It uses a HID parser for the HID reports, + * allowing for correct operation across all USB keyboards. This demo supports + * keyboards with a single HID report. + * + * Pressed alpha-numeric, enter or space key is transmitted through the serial + * USART at serial settings 9600, 8, N, 1. On connection to a USB keyboard, the + * report items will be processed and printed as a formatted list through the + * USART before the keyboard is fully enumerated. + * + * Currently only single interface keyboards are supported. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/KeyboardMouse/KeyboardMouse.txt b/Demos/KeyboardMouse/KeyboardMouse.txt index 969e2871b4..6388e9803d 100644 --- a/Demos/KeyboardMouse/KeyboardMouse.txt +++ b/Demos/KeyboardMouse/KeyboardMouse.txt @@ -6,22 +6,9 @@ /** \mainpage Dual HID Keyboard and Mouse Device Demo * - * Keyboard/Mouse demonstration application. This gives a simple reference - * application for implementing a composite device containing both USB Keyboard - * and USB Mouse functionality using the basic USB HID drivers in all modern OSes - * (i.e. no special drivers required). This example uses two seperate HID - * interfaces for each function. It is boot protocol compatible, and thus works under - * compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2). - * - * On startup the system will automatically enumerate and function - * as a keyboard when the USB connection to a host is present and the HWB is not - * pressed. When enabled, manipulate the joystick to send the letters - * a, b, c, d and e. See the USB HID documentation for more information - * on sending keyboard event and keypresses. - * - * When the HWB is pressed, the mouse mode is enabled. When enabled, move the - * joystick to move the pointer, and push the joystick inwards to simulate a - * left-button click. + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -45,4 +32,35 @@ * * *
Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Keyboard/Mouse demonstration application. This gives a simple reference + * application for implementing a composite device containing both USB Keyboard + * and USB Mouse functionality using the basic USB HID drivers in all modern OSes + * (i.e. no special drivers required). This example uses two seperate HID + * interfaces for each function. It is boot protocol compatible, and thus works under + * compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2). + * + * On startup the system will automatically enumerate and function + * as a keyboard when the USB connection to a host is present and the HWB is not + * pressed. When enabled, manipulate the joystick to send the letters + * a, b, c, d and e. See the USB HID documentation for more information + * on sending keyboard event and keypresses. + * + * When the HWB is pressed, the mouse mode is enabled. When enabled, move the + * joystick to move the pointer, and push the joystick inwards to simulate a + * left-button click. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/MIDI/MIDI.txt b/Demos/MIDI/MIDI.txt index 0b34ccb66d..3eb60cdc61 100644 --- a/Demos/MIDI/MIDI.txt +++ b/Demos/MIDI/MIDI.txt @@ -5,21 +5,10 @@ */ /** \mainpage MIDI Input Device Demo - * - * MIDI demonstration application. This gives a simple reference - * application for implementing the USB-MIDI class in USB devices. - * It is built upon the USB Audio class. - * - * Joystick movements are translated into note on/off messages and - * are sent to the host PC as MIDI streams which can be read by any - * MIDI program supporting MIDI IN devices. - * - * If the HWB is not pressed, channel 1 (default piano) is used. If - * the HWB is set, then channel 10 (default percussion) is selected. - * - * This device implements MIDI-THRU mode, with the IN MIDI data being - * generated by the device itself. OUT MIDI data is discarded. - * + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -45,4 +34,32 @@ * * *
Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * MIDI demonstration application. This gives a simple reference + * application for implementing the USB-MIDI class in USB devices. + * It is built upon the USB Audio class. + * + * Joystick movements are translated into note on/off messages and + * are sent to the host PC as MIDI streams which can be read by any + * MIDI program supporting MIDI IN devices. + * + * If the HWB is not pressed, channel 1 (default piano) is used. If + * the HWB is set, then channel 10 (default percussion) is selected. + * + * This device implements MIDI-THRU mode, with the IN MIDI data being + * generated by the device itself. OUT MIDI data is discarded. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/MassStorage/MassStorage.h b/Demos/MassStorage/MassStorage.h index 3525340ffd..a30e7f7466 100644 --- a/Demos/MassStorage/MassStorage.h +++ b/Demos/MassStorage/MassStorage.h @@ -62,8 +62,9 @@ /** Maximum length of a SCSI command which can be issued by the device or host in a Mass Storage bulk wrapper. */ #define MAX_SCSI_COMMAND_LENGTH 16 - /** Total number of Logical Units (drives) in the device. By default, the total device capacity is shared equally between - * each drive - this can be set to any positive non-zero amount. */ + /** Total number of Logical Units (drives) in the device. The total device capacity is shared equally between + * each drive - this can be set to any positive non-zero amount. + */ #define TOTAL_LUNS 2 /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */ diff --git a/Demos/MassStorage/MassStorage.txt b/Demos/MassStorage/MassStorage.txt index 428faa8e04..4e8adadbc9 100644 --- a/Demos/MassStorage/MassStorage.txt +++ b/Demos/MassStorage/MassStorage.txt @@ -6,25 +6,9 @@ /** \mainpage Mass Storage Device Demo * - * Dual LUN Mass Storage demonstration application. This gives a simple - * reference application for implementing a multiple LUN USB Mass Storage - * device using the basic USB UFI drivers in all modern OSes (i.e. no - * special drivers required). - * - * On startup the system will automatically enumerate and function as an - * external mass storage device with two LUNs (seperate disks) which may - * be formatted and used in the same manner as commercial USB Mass Storage - * devices. - * - * You will need to format the mass storage drives upon first run of this - * demonstration - as the device acts only as a data block transport between - * the host and the storage media, it does not matter what file system is used, - * as the data interpretation is performed by the host and not the USB device. - * - * This demo is not restricted to only two LUNs; by changing the TOTAL_LUNS - * value in MassStorageDualLUN.h, any number of LUNs can be used (from 1 to - * 255), with each LUN being allocated an equal portion of the available - * Dataflash memory. + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -51,4 +35,44 @@ * * *
Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Dual LUN Mass Storage demonstration application. This gives a simple + * reference application for implementing a multiple LUN USB Mass Storage + * device using the basic USB UFI drivers in all modern OSes (i.e. no + * special drivers required). + * + * On startup the system will automatically enumerate and function as an + * external mass storage device with two LUNs (seperate disks) which may + * be formatted and used in the same manner as commercial USB Mass Storage + * devices. + * + * You will need to format the mass storage drives upon first run of this + * demonstration - as the device acts only as a data block transport between + * the host and the storage media, it does not matter what file system is used, + * as the data interpretation is performed by the host and not the USB device. + * + * This demo is not restricted to only two LUNs; by changing the TOTAL_LUNS + * value in MassStorageDualLUN.h, any number of LUNs can be used (from 1 to + * 255), with each LUN being allocated an equal portion of the available + * Dataflash memory. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + * + * + * + * + * + * + * + *
Define Name:Location:Description:
TOTAL_LUNSMassStorage.hTotal number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive + * - this can be set to any positive non-zero amount.
*/ \ No newline at end of file diff --git a/Demos/MassStorageHost/MassStorageHost.txt b/Demos/MassStorageHost/MassStorageHost.txt index 2defd7fe8e..88b42e9373 100644 --- a/Demos/MassStorageHost/MassStorageHost.txt +++ b/Demos/MassStorageHost/MassStorageHost.txt @@ -5,15 +5,10 @@ */ /** \mainpage Mass Storage Host Demo - * - * Mass Storage host demonstration application. This gives a simple reference - * application for implementing a USB Mass Storage host, for USB storage devices - * using the standard Mass Storage USB profile. - * - * The first 512 bytes (boot sector) of an attached disk's memory will be dumped - * out of the serial port in HEX and ASCII form when it is attached to the AT90USB1287 - * AVR. The device will then wait for HWB to be pressed, whereupon the entire ASCII contents - * of the disk will be dumped to the serial port. + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -40,4 +35,27 @@ * * *
Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Mass Storage host demonstration application. This gives a simple reference + * application for implementing a USB Mass Storage host, for USB storage devices + * using the standard Mass Storage USB profile. + * + * The first 512 bytes (boot sector) of an attached disk's memory will be dumped + * out of the serial port in HEX and ASCII form when it is attached to the AT90USB1287 + * AVR. The device will then wait for HWB to be pressed, whereupon the entire ASCII contents + * of the disk will be dumped to the serial port. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/Mouse/Mouse.c b/Demos/Mouse/Mouse.c index f8ec0a0f5b..b61850abe5 100644 --- a/Demos/Mouse/Mouse.c +++ b/Demos/Mouse/Mouse.c @@ -45,8 +45,13 @@ BUTTLOADTAG(LUFAVersion, "LUFA V" LUFA_VERSION_STRING); /* Scheduler Task List */ TASK_LIST { + #if !defined(INTERRUPT_CONTROL_ENDPOINT) { Task: USB_USBTask , TaskStatus: TASK_STOP }, + #endif + + #if !defined(INTERRUPT_DATA_ENDPOINT) { Task: USB_Mouse_Report , TaskStatus: TASK_STOP }, + #endif }; /* Global Variables */ @@ -118,14 +123,34 @@ EVENT_HANDLER(USB_Connect) UsingReportProtocol = true; } +/** Event handler for the USB_Reset event. This fires when the USB interface is reset by the USB host, before the + * enumeration process begins, and enables the control endpoint interrupt so that control requests can be handled + * asynchronously when they arrive rather than when the control endpoint is polled manually. + */ +EVENT_HANDLER(USB_Reset) +{ + #if defined(INTERRUPT_CONTROL_ENDPOINT) + /* Select the control endpoint */ + Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); + + /* Enable the endpoint SETUP interrupt ISR for the control endpoint */ + USB_INT_Enable(ENDPOINT_INT_SETUP); + #endif +} + /** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via * the status LEDs and stops the USB management and Mouse reporting tasks. */ EVENT_HANDLER(USB_Disconnect) { - /* Stop running mouse reporting and USB management tasks */ + /* Stop running keyboard reporting and USB management tasks */ + #if !defined(INTERRUPT_DATA_ENDPOINT) Scheduler_SetTaskMode(USB_Mouse_Report, TASK_STOP); + #endif + + #if !defined(INTERRUPT_CONTROL_ENDPOINT) Scheduler_SetTaskMode(USB_USBTask, TASK_STOP); + #endif /* Indicate USB not ready */ UpdateStatus(Status_USBNotReady); @@ -141,11 +166,18 @@ EVENT_HANDLER(USB_ConfigurationChanged) ENDPOINT_DIR_IN, MOUSE_EPSIZE, ENDPOINT_BANK_SINGLE); + #if defined(INTERRUPT_DATA_ENDPOINT) + /* Enable the endpoint IN interrupt ISR for the report endpoint */ + USB_INT_Enable(ENDPOINT_INT_IN); + #endif + /* Indicate USB connected and ready */ UpdateStatus(Status_USBReady); + #if !defined(INTERRUPT_DATA_ENDPOINT) /* Start running mouse reporting task */ Scheduler_SetTaskMode(USB_Mouse_Report, TASK_RUN); + #endif } /** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific @@ -163,7 +195,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) USB_MouseReport_Data_t MouseReportData; /* Create the next mouse report for transmission to the host */ - GetNextReport(&MouseReportData); + CreateMouseReport(&MouseReportData); /* Ignore report type and ID number value */ Endpoint_Discard_Word(); @@ -278,7 +310,7 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) * * \return Boolean true if the new report differs from the last report, false otherwise */ -bool GetNextReport(USB_MouseReport_Data_t* ReportData) +bool CreateMouseReport(USB_MouseReport_Data_t* ReportData) { static uint8_t PrevJoyStatus = 0; static bool PrevHWBStatus = false; @@ -315,6 +347,45 @@ bool GetNextReport(USB_MouseReport_Data_t* ReportData) return InputChanged; } +/** Sends the next HID report to the host, via the keyboard data endpoint. */ +static inline void SendNextReport(void) +{ + USB_MouseReport_Data_t MouseReportData; + bool SendReport = true; + + /* Create the next mouse report for transmission to the host */ + CreateMouseReport(&MouseReportData); + + /* Check if the idle period is set*/ + if (IdleCount) + { + /* Determine if the idle period has elapsed */ + if (!(IdleMSRemaining)) + { + /* Reset the idle time remaining counter, must multiply by 4 to get the duration in milliseconds */ + IdleMSRemaining = (IdleCount << 2); + } + else + { + /* Idle period not elapsed, indicate that a report must not be sent */ + SendReport = false; + } + } + + /* Select the Mouse Report Endpoint */ + Endpoint_SelectEndpoint(MOUSE_EPNUM); + + /* Check if Mouse Endpoint Ready for Read/Write and if we should send a new report */ + if (Endpoint_ReadWriteAllowed() && SendReport) + { + /* Write Mouse Report Data */ + Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData)); + + /* Finalize the stream transfer to send the last packet */ + Endpoint_ClearCurrentBank(); + } +} + /** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to * log to a serial port, or anything else that is suitable for status updates. * @@ -342,45 +413,57 @@ void UpdateStatus(uint8_t CurrentStatus) LEDs_SetAllLEDs(LEDMask); } +#if !defined(INTERRUPT_DATA_ENDPOINT) /** Task to manage HID report generation and transmission to the host, when in report mode. */ TASK(USB_Mouse_Report) { - USB_MouseReport_Data_t MouseReportData; - bool SendReport = true; - - /* Create the next mouse report for transmission to the host */ - GetNextReport(&MouseReportData); - - /* Check if the idle period is set*/ - if (IdleCount) + /* Check if the USB system is connected to a host */ + if (USB_IsConnected) { - /* Determine if the idle period has elapsed */ - if (!(IdleMSRemaining)) - { - /* Reset the idle time remaining counter, must multiply by 4 to get the duration in milliseconds */ - IdleMSRemaining = (IdleCount << 2); - } - else - { - /* Idle period not elapsed, indicate that a report must not be sent */ - SendReport = false; - } + /* Send the next mouse report to the host */ + SendNextReport(); } +} +#endif + +/** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when an endpoint's status changes (such as + * a packet has been received) on an endpoint with its corresponding ISR enabling bits set. This is used to send + * HID packets to the host each time the HID interrupt endpoints polling period elapses, as managed by the USB + * controller. It is also used to respond to standard and class specific requests send to the device on the control + * endpoint, by handing them off to the LUFA library when they are received. + */ +ISR(ENDPOINT_PIPE_vect, ISR_BLOCK) +{ + #if defined(INTERRUPT_CONTROL_ENDPOINT) + /* Check if the control endpoint has received a request */ + if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP)) + { + /* Clear the endpoint interrupt */ + Endpoint_ClearEndpointInterrupt(ENDPOINT_CONTROLEP); + + /* Process the control request */ + USB_USBTask(); + + /* Handshake the endpoint setup interrupt - must be after the call to USB_USBTask() */ + USB_INT_Clear(ENDPOINT_INT_SETUP); + } + #endif - /* Check if the USB system is connected to a host */ - if (USB_IsConnected) + #if defined(INTERRUPT_DATA_ENDPOINT) + /* Check if mouse endpoint has interrupted */ + if (Endpoint_HasEndpointInterrupted(MOUSE_EPNUM)) { /* Select the Mouse Report Endpoint */ Endpoint_SelectEndpoint(MOUSE_EPNUM); - /* Check if Mouse Endpoint Ready for Read/Write and if we should send a new report */ - if (Endpoint_ReadWriteAllowed() && SendReport) - { - /* Write Mouse Report Data */ - Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData)); - - /* Finalize the stream transfer to send the last packet */ - Endpoint_ClearCurrentBank(); - } + /* Clear the endpoint IN interrupt flag */ + USB_INT_Clear(ENDPOINT_INT_IN); + + /* Clear the Mouse Report endpoint interrupt and select the endpoint */ + Endpoint_ClearEndpointInterrupt(MOUSE_EPNUM); + + /* Send the next mouse report to the host */ + SendNextReport(); } + #endif } diff --git a/Demos/Mouse/Mouse.h b/Demos/Mouse/Mouse.h index 50908129aa..8723b78409 100644 --- a/Demos/Mouse/Mouse.h +++ b/Demos/Mouse/Mouse.h @@ -103,6 +103,9 @@ /** Indicates that this module will catch the USB_Disconnect event when thrown by the library. */ HANDLES_EVENT(USB_Disconnect); + /** Indicates that this module will catch the USB_Reset event when thrown by the library. */ + HANDLES_EVENT(USB_Reset); + /** Indicates that this module will catch the USB_ConfigurationChanged event when thrown by the library. */ HANDLES_EVENT(USB_ConfigurationChanged); @@ -110,7 +113,7 @@ HANDLES_EVENT(USB_UnhandledControlPacket); /* Function Prototypes: */ - bool GetNextReport(USB_MouseReport_Data_t* ReportData); + bool CreateMouseReport(USB_MouseReport_Data_t* ReportData); void UpdateStatus(uint8_t CurrentStatus); #endif diff --git a/Demos/Mouse/Mouse.txt b/Demos/Mouse/Mouse.txt index 7b7360f0ea..6764275ce8 100644 --- a/Demos/Mouse/Mouse.txt +++ b/Demos/Mouse/Mouse.txt @@ -6,17 +6,9 @@ /** \mainpage Mouse Device Demo * - * Mouse demonstration application. This gives a simple reference - * application for implementing a USB Mouse using the basic USB HID - * drivers in all modern OSes (i.e. no special drivers required). It is - * boot protocol compatible, and thus works under compatible BIOS as if - * it was a native mouse (e.g. PS/2). - * - * On startup the system will automatically enumerate and function - * as a mouse when the USB connection to a host is present. To use - * the mouse, move the joystick to move the pointer, and push the - * joystick inwards to simulate a left-button click. The HWB serves as - * the right mouse button. + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -40,4 +32,44 @@ * * *
Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Mouse demonstration application. This gives a simple reference + * application for implementing a USB Mouse using the basic USB HID + * drivers in all modern OSes (i.e. no special drivers required). It is + * boot protocol compatible, and thus works under compatible BIOS as if + * it was a native mouse (e.g. PS/2). + * + * On startup the system will automatically enumerate and function + * as a mouse when the USB connection to a host is present. To use + * the mouse, move the joystick to move the pointer, and push the + * joystick inwards to simulate a left-button click. The HWB serves as + * the right mouse button. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Define Name:Location:Description:
INTERRUPT_CONTROL_ENDPOINTMakefile CDEFSWhen defined, this causes the demo to enable interrupts for the control endpoint, + * which services control requests from the host. If not defined, the control endpoint + * is serviced via polling using the task scheduler.
INTERRUPT_DATA_ENDPOINTMakefile CDEFSWhen defined, this causes the demo to enable interrupts for the data endpoint, + * which services outgoing mouse button and movement reports to the host. If not defined, + * the data endpoint is serviced via polling using the task scheduler.
*/ \ No newline at end of file diff --git a/Demos/Mouse/makefile b/Demos/Mouse/makefile index a731e205eb..27ca1d8096 100644 --- a/Demos/Mouse/makefile +++ b/Demos/Mouse/makefile @@ -177,7 +177,6 @@ CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD) CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" - # Place -D or -U options here for ASM sources ADEFS = -DF_CPU=$(F_CPU) diff --git a/Demos/MouseHost/MouseHost.txt b/Demos/MouseHost/MouseHost.txt index 11c434c696..a6d1ba8283 100644 --- a/Demos/MouseHost/MouseHost.txt +++ b/Demos/MouseHost/MouseHost.txt @@ -5,22 +5,10 @@ */ /** \mainpage Mouse Host Demo - * - * Mouse host demonstration application. This gives a simple reference - * application for implementing a USB Mouse host, for USB mice using - * the standard mouse HID profile. - * - * Mouse movement and button presses are displayed on the board LEDs, - * as well as printed out the serial terminal as formatted dY, dY and - * button status information. - * - * This uses a naive method where the mouse is set to Boot Protocol mode, so - * that the report structure is fixed and known. A better implementation - * uses the HID report parser for correct report data processing across - * all compatable mice with advanced characteristics, as shown in the - * MouseHostWithParser demo application. - * - * Currently only single interface mice are supported. + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -44,4 +32,34 @@ * * *
Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Mouse host demonstration application. This gives a simple reference + * application for implementing a USB Mouse host, for USB mice using + * the standard mouse HID profile. + * + * Mouse movement and button presses are displayed on the board LEDs, + * as well as printed out the serial terminal as formatted dY, dY and + * button status information. + * + * This uses a naive method where the mouse is set to Boot Protocol mode, so + * that the report structure is fixed and known. A better implementation + * uses the HID report parser for correct report data processing across + * all compatable mice with advanced characteristics, as shown in the + * MouseHostWithParser demo application. + * + * Currently only single interface mice are supported. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/MouseHostViaInt/MouseHostViaInt.txt b/Demos/MouseHostViaInt/MouseHostViaInt.txt index 72ee1dbeee..7498655443 100644 --- a/Demos/MouseHostViaInt/MouseHostViaInt.txt +++ b/Demos/MouseHostViaInt/MouseHostViaInt.txt @@ -4,24 +4,9 @@ * documentation pages. It is not a project source file. */ -/** \mainpage Mouse Host Demo - * - * Mouse host demonstration application, using pipe interrupts. This - * gives a simple reference application for implementing a USB Mouse - * host utilizing the LUFA pipe interrupt system, for USB mice using - * the standard mouse HID profile. - * - * Mouse movement and button presses are displayed on the board LEDs, - * as well as printed out the serial terminal as formatted dY, dY and - * button status information. - * - * This uses a naive method where the mouse is set to Boot Protocol mode, so - * that the report structure is fixed and known. A better implementation - * uses the HID report parser for correct report data processing across - * all compatable mice with advanced characteristics, as shown in the - * MouseHostWithParser demo application. - * - * Currently only single interface mice are supported. +/** \mainpage Mouse Host Demo (via interrupts) + * + * \section SSec_Info USB Information: * * * @@ -45,4 +30,37 @@ * * *
Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * The following table gives a rundown of the USB utilization of this demo. + * + * Mouse host demonstration application, using pipe interrupts. This + * gives a simple reference application for implementing a USB Mouse + * host utilizing the LUFA pipe interrupt system, for USB mice using + * the standard mouse HID profile. + * + * Mouse movement and button presses are displayed on the board LEDs, + * as well as printed out the serial terminal as formatted dY, dY and + * button status information. + * + * This uses a naive method where the mouse is set to Boot Protocol mode, so + * that the report structure is fixed and known. A better implementation + * uses the HID report parser for correct report data processing across + * all compatable mice with advanced characteristics, as shown in the + * MouseHostWithParser demo application. + * + * Currently only single interface mice are supported. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/MouseHostWithParser/MouseHostWithParser.txt b/Demos/MouseHostWithParser/MouseHostWithParser.txt index 97ee8bfb86..3c83341a27 100644 --- a/Demos/MouseHostWithParser/MouseHostWithParser.txt +++ b/Demos/MouseHostWithParser/MouseHostWithParser.txt @@ -5,19 +5,10 @@ */ /** \mainpage Mouse Host With HID Descriptor Parser Demo - * - * Mouse host demonstration application. This gives a simple reference - * application for implementing a USB Mouse host, for USB mice using - * the standard mouse HID profile. It uses a HID parser for the HID - * reports, allowing for correct operation across all USB mice. This - * demo supports mice with a single HID report. - * - * Mouse movement and button presses are displayed on the board LEDs. - * On connection to a USB mouse, the report items will be processed and - * printed as a formatted list through the USART before the mouse is - * fully enumerated. - * - * Currently only single interface mice are supported. + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -41,4 +32,31 @@ * * *
Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Mouse host demonstration application. This gives a simple reference + * application for implementing a USB Mouse host, for USB mice using + * the standard mouse HID profile. It uses a HID parser for the HID + * reports, allowing for correct operation across all USB mice. This + * demo supports mice with a single HID report. + * + * Mouse movement and button presses are displayed on the board LEDs. + * On connection to a USB mouse, the report items will be processed and + * printed as a formatted list through the USART before the mouse is + * fully enumerated. + * + * Currently only single interface mice are supported. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/RNDISEthernet/RNDISEthernet.txt b/Demos/RNDISEthernet/RNDISEthernet.txt index bd4ff69e81..306cf85261 100644 --- a/Demos/RNDISEthernet/RNDISEthernet.txt +++ b/Demos/RNDISEthernet/RNDISEthernet.txt @@ -5,7 +5,11 @@ */ /** \mainpage RNDIS Class Ethernet Demo (with Webserver/Telnet) - * + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. + * * Remote Network Driver Interface demonstration application. * This gives a simple reference application for implementing * a CDC RNDIS device acting as a simple network interface for @@ -37,6 +41,8 @@ * recommended that it be replaced with an external open source TCP/IP * stack that is feature complete, such as the uIP stack. * + * \section SSec_Description Project Description: + * * * * @@ -59,4 +65,51 @@ * * *
USB Mode:Full Speed Mode
+ * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Define Name:Location:Description:
NO_DECODE_ETHERNETMakefile CDEFSWhen defined, received Ethernet headers will not be decoded and printed to the device serial port.
NO_DECODE_ARPMakefile CDEFSWhen defined, received ARP headers will not be decoded and printed to the device serial port.
NO_DECODE_IPMakefile CDEFSWhen defined, received IP headers will not be decoded and printed to the device serial port.
NO_DECODE_ICMPMakefile CDEFSWhen defined, received ICMP headers will not be decoded and printed to the device serial port.
NO_DECODE_TCPMakefile CDEFSWhen defined, received TCP headers will not be decoded and printed to the device serial port.
NO_DECODE_UDPMakefile CDEFSWhen defined, received UDP headers will not be decoded and printed to the device serial port.
NO_DECODE_DHCPMakefile CDEFSWhen defined, received DHCP headers will not be decoded and printed to the device serial port.
*/ \ No newline at end of file diff --git a/Demos/StillImageHost/StillImageHost.txt b/Demos/StillImageHost/StillImageHost.txt index 6e2657be69..4cdfe63466 100644 --- a/Demos/StillImageHost/StillImageHost.txt +++ b/Demos/StillImageHost/StillImageHost.txt @@ -5,14 +5,10 @@ */ /** \mainpage Still Image Host Demo - * - * Still Image host demonstration application. This gives a simple reference - * application for implementing a Still Image host, for USB devices such as - * digital cameras. - * - * This demo will enumerate an attached USB Still Image device, print out its - * information structure, open a session with the device and finally close the - * session. + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -37,4 +33,26 @@ * * *
Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Still Image host demonstration application. This gives a simple reference + * application for implementing a Still Image host, for USB devices such as + * digital cameras. + * + * This demo will enumerate an attached USB Still Image device, print out its + * information structure, open a session with the device and finally close the + * session. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/TestApp/TestApp.txt b/Demos/TestApp/TestApp.txt index e5b268aa54..aef55b761a 100644 --- a/Demos/TestApp/TestApp.txt +++ b/Demos/TestApp/TestApp.txt @@ -6,25 +6,9 @@ /** \mainpage Test Application for the LUFA library * - * Test application. Demonstrates several aspects of the LUFA - * Library. On startup the current temperature will be printed - * through the USART every 10 seconds, and the current joystick - * position will be indicated via the LEDs on the selected board. - * Pressing the HWB will initiate the USB subsystem, enumerating - * the device (which has no actual functionality beyond - * enumeration as a device or as a host in this demo, and serves - * only to demonstrate the USB portion of the library). It will - * also suspend the joystick and temperature monitoring tasks. - * - * Pressing the HWB a second time will turn off the USB system - * and resume the temperature printing task (but not the joystick - * monitoring task). - * - * When activated, the USB events will be printed through the - * serial USART. + * \section SSec_Info USB Information: * - * When the USB subsystem is activated, the board LEDs will show - * the current USB status. + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -48,4 +32,38 @@ * * *
Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Test application. Demonstrates several aspects of the LUFA + * Library. On startup the current temperature will be printed + * through the USART every 10 seconds, and the current joystick + * position will be indicated via the LEDs on the selected board. + * Pressing the HWB will initiate the USB subsystem, enumerating + * the device (which has no actual functionality beyond + * enumeration as a device or as a host in this demo, and serves + * only to demonstrate the USB portion of the library). It will + * also suspend the joystick and temperature monitoring tasks. + * + * Pressing the HWB a second time will turn off the USB system + * and resume the temperature printing task (but not the joystick + * monitoring task). + * + * When activated, the USB events will be printed through the + * serial USART. + * + * When the USB subsystem is activated, the board LEDs will show + * the current USB status. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + *
+ * None + *
*/ \ No newline at end of file diff --git a/Demos/USBtoSerial/USBtoSerial.txt b/Demos/USBtoSerial/USBtoSerial.txt index 992f00f472..e334672178 100644 --- a/Demos/USBtoSerial/USBtoSerial.txt +++ b/Demos/USBtoSerial/USBtoSerial.txt @@ -6,19 +6,9 @@ /** \mainpage USB to Serial Converter Demo (via CDC-ACM class) * - * Communications Device Class demonstration application. - * This gives a simple reference application for implementing - * a USB to Serial converter using the CDC class. Sent and - * received data on the serial port is communicated to the USB - * host. - * - * After running this demo for the first time on a new computer, - * you will need to supply the .INF file located in this demo - * project's directory as the device's driver when running under - * Windows. This will enable Windows to use its inbuilt CDC drivers, - * negating the need for custom drivers for the device. Other - * Operating Systems should automatically use their own inbuilt - * CDC-ACM drivers. + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. * * * @@ -42,4 +32,37 @@ * * *
Full Speed Mode
+ * + * \section SSec_Description Project Description: + * + * Communications Device Class demonstration application. + * This gives a simple reference application for implementing + * a USB to Serial converter using the CDC class. Sent and + * received data on the serial port is communicated to the USB + * host. + * + * After running this demo for the first time on a new computer, + * you will need to supply the .INF file located in this demo + * project's directory as the device's driver when running under + * Windows. This will enable Windows to use its inbuilt CDC drivers, + * negating the need for custom drivers for the device. Other + * Operating Systems should automatically use their own inbuilt + * CDC-ACM drivers. + * + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + * + * + * + * + * + * + * + *
Define Name:Location:Description:
BUFF_STATICSIZERingBuff.hDefines the maximum number of bytes which can be buffered in each Ring Buffer.
*/ \ No newline at end of file diff --git a/Demos/makefile b/Demos/makefile index 2fd957a364..8f441461ad 100644 --- a/Demos/makefile +++ b/Demos/makefile @@ -58,12 +58,6 @@ all: make -C Mouse clean make -C Mouse all - - make -C MouseFullInt clean - make -C MouseFullInt all - - make -C MouseViaInt clean - make -C MouseViaInt all make -C MouseHost clean make -C MouseHost all @@ -102,8 +96,6 @@ all: make -C MassStorageHost $@ make -C MIDI $@ make -C Mouse $@ - make -C MouseFullInt $@ - make -C MouseViaInt $@ make -C MouseHost $@ make -C MouseHostWithParser $@ make -C MouseHostViaInt $@ diff --git a/LUFA.pnproj b/LUFA.pnproj index 3e21d735c9..77cdbe3630 100644 --- a/LUFA.pnproj +++ b/LUFA.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/LUFA/ChangeLog.txt b/LUFA/ChangeLog.txt index c1de86f1b9..ad7f7bb5ea 100644 --- a/LUFA/ChangeLog.txt +++ b/LUFA/ChangeLog.txt @@ -8,7 +8,6 @@ * * \section Sec_ChangeLogXXXXXX Version XXXXXX * - * - Added new incomplete BluetoothHost demo * - Changed AVRISP Programmer descriptors to use a newly allocated 0x204F PID value * - Fixed MagStripe project configuration descriptor containing an unused (blank) endpoint descriptor * - Incorporated makefile changes by Denver Gingerich to retain compatibility with stock (non-WinAVR) AVR-GCC installations @@ -37,9 +36,10 @@ * to Kenneth Clubb) * - Added DataflashManager_WriteBlocks_RAM() and DataflashManager_ReadBlocks_RAM() functions to the MassStorage demo, to allow for easy * interfacing with a FAT library for dataflash file level access - * - Incomplete non-functional BluetoothHost demo removed until it has reached a stable state to prevent confusion * - Corrected CDC class bootloader to fix a few bugs, changed address counter to store x2 addresses for convenience * - Fixed typos in the SPI driver SPI_SPEED_FCPU_DIV_64 and SPI_SPEED_FCPU_DIV_128 masks (thanks to Markus Zocholl) + * - Keyboard and Mouse demos (normal, data interrupt and fully interrupt driven) combined into unified keyboard and mouse demos + * - Removed AVRISP_Programmer project due to code quality concerns * * \section Sec_ChangeLog090209 Version 090209 * diff --git a/Projects/AVRISP_Programmer/AVRISP_Firmware_Design.txt b/Projects/AVRISP_Programmer/AVRISP_Firmware_Design.txt deleted file mode 100644 index 643454d481..0000000000 --- a/Projects/AVRISP_Programmer/AVRISP_Firmware_Design.txt +++ /dev/null @@ -1,176 +0,0 @@ -Instructions for converting the LUFA USBtoSerial Demo to an AVR ISP Programmer. -By Opendous Inc., Copyright under the Creative Commons Attribution License: -http://creativecommons.org/licenses/by/3.0/ - -1) Start with the LUFA/Demos/USBtoSerial firmware. - - rename USBtoSerial.c, USBtoSerial.h, and USBtoSerial.aps to - AVRISP_Programmer.* - - edit AVRISP_Programmer.aps and rename all instances of "USBtoSerial" to - "AVRISP_Programmer" - - copy AVRISP_Programmer.txt from an older version of AVRISP_Programmer - -2) Edit makefile by changing TARGET from "USBtoSerial" to "AVRISP_Programmer" - -3) Edit AVRISP_Programmer.h: - - change ifdef _USB_TO_SERIAL_H to _AVRISP_PROGRAMMER_H_ - - rename ReconfigureUSART(void) to ReconfigureSPI(void) - - add void processHostSPIRequest(void); & void delay_ms(uint8_t dly); - - replace the define for Serial.h with one for SPI.h: - #include - -4) Make alterations to Descriptors.c - - change manufacturer string to "www.AVRopendous.org", length=19 - - change product string to "LUFA-Based AVR ISP Programmer", length=29 - -5) Edit Ringbuff.h to enable the Peek Command: #define BUFF_USEPEEK - -6) Edit AVRISP_Programmer.c: - - change #include "USBtoSerial.h" to #include "AVRISP_Programmer.h" - - change BUTTLOADTAG(ProjName to "LUFA AVR910 ISP Programmer" - - in main(), rename ReconfigureUSART() to Reconfigure(); - - in EVENT_HANDLER(USB_UnhandledControlPacket), rename ReconfigureUSART - - delete the ISRs: ISR(USART1_RX_vect) & ISR(USART1_TX_vect) - - delete ReconfigureUSART(void) - - add void ReconfigureSPI(void), void processHostSPIRequest(void), - and void delay_ms(uint8_t dly) from a previous version - - add Timer1 and SPI initialization code to main(): - /* Hardware Initialization */ - //LEDs_Init(); - DDRB = 0; - PORTB = 0; - DDRC |= ((1 << PC2) | (1 << PC4) | (1 << PC5) | (1 << PC6) | (1 << PC7)); //AT90USBxx2 - // PC2 is also used for RESET, so set it HIGH initially - note 'P' command sets it to LOW (Active) - PORTC |= ((1 << PC2) | (1 << PC4) | (1 << PC5) | (1 << PC6) | (1 << PC7)); //AT90USBxx2 - DDRD = 0; - PORTD = (1 << PB7); // only PB7(HWB) should be High as this is the bootloader pin - // Prepare PortB for SPI - set PB0(^SS), PB1(SCK), PB2(MOSI) as output as well as all other pins except PB3(MISO) - DDRB = (1 << PB0) | (1 << PB1) | (1 << PB2) | (0 << PB3) | (1 << PB4) | (1 << PB5) | (1 << PB6) | (1 << PB7); - PORTB |= (1 << PB0); - - // initialize Timer1 for use in delay function - TCCR1A = 0; - //TCCR1B = (1 << CS10); // no prescaling, use CLK - TCCR1B = ((1 << CS12) | (1 << CS10)); // prescale by CLK/1024 - // 8MHz/1024 = 7813 ticks per second --> ~8 ticks per millisecond (ms) - timerval = TCNT1; // start timer1 - - - In TASK(CDC_Task) in the - if (USB_IsConnected) { - if (Endpoint_ReadWriteAllowed()) { - while (Endpoint_BytesInEndpoint()) { - ... - structure, after Buffer_StoreElement(&Rx_Buffer, Endpoint_Read_Byte()): - - /* Each time there is an element, check which comand should be - run and if enough data is available to run that command. - There are 1-byte, 2-byte, 3-byte, 4-byte commands, and 5-byte commands - Remember that the "which command" byte counts as 1 */ - if (Rx_Buffer.Elements == 0) { - // do nothing, wait for data - } else { - tempByte = Buffer_PeekElement(&Rx_Buffer); // peek at first element - - /* make sure the issued command and associated data are all ready */ - if (Rx_Buffer.Elements == 1) { // zero data byte command - if ((tempByte == 'P') | (tempByte == 'a') | (tempByte == 'm') | - (tempByte == 'R') | (tempByte == 'd') | (tempByte == 'e') | - (tempByte == 'L') | (tempByte == 's') | (tempByte == 't') | - (tempByte == 'S') | (tempByte == 'V') | (tempByte == 'v') | - (tempByte == 'p') | (tempByte == 'F')) { - processHostSPIRequest(); // command has enough data, process it - } - } else if (Rx_Buffer.Elements == 2) { // one data byte command - if ((tempByte == 'T') | (tempByte == 'c') | (tempByte == 'C') | - (tempByte == 'D') | (tempByte == 'l') | (tempByte == 'f') | - (tempByte == 'x') | (tempByte == 'y')) { - processHostSPIRequest(); // command has enough data, process it - } - } else if (Rx_Buffer.Elements == 3) { // two data byte command - if ((tempByte == 'A') | (tempByte == 'Z')) { - processHostSPIRequest(); // command has enough data, process it - } - } else if (Rx_Buffer.Elements == 4) { // three data byte command - if ((tempByte == ':')) { - processHostSPIRequest(); // command has enough data, process it - } - } else if (Rx_Buffer.Elements == 5) { // four data byte command - if ((tempByte == '.')) { - processHostSPIRequest(); // command has enough data, process it - } - } else { - // do nothing - } - } - - - need to add code to flush the buffer. Change: - /* Check if Rx buffer contains data */ - if (Rx_Buffer.Elements) - { - /* Initiate the transmission of the buffer contents if USART idle*/ - if (!(Transmitting)) - { - Transmitting = true; - Serial_TxByte(Buffer_GetElement(&Rx_Buffer)); - } - } - To: - /* Check if Rx buffer contains data */ - if (Rx_Buffer.Elements) - { - /* Initiate the transmission of the buffer contents if USART idle*/ - if (!(Transmitting)) - { - Transmitting = true; - /* The following flushes the receive buffer to prepare for new - data and commands. Need to flush the buffer as the command - byte which is peeked above needs to be dealt with, otherwise - the command bytes will overflow the buffer eventually */ - //Buffer_GetElement(&Rx_Buffer); // also works - Buffer_Initialize(&Rx_Buffer); - } - } - - - need to add the following defines and globals: - #define RESETPORT PORTB - #define RESETPIN PB0 - #define RESETPORT2 PORTC - #define RESETPIN2 PC2 - #define CR_HEX '\r' - - #define DELAY_VERYSHORT 0x01 - #define DELAY_SHORT 0x02 - #define DELAY_MEDIUM 0x03 - #define DELAY_LONG 0x05 - #define DELAY_MULTIPLE 0x04 - - /* AVR Device Codes - Can have a maximum of 14 but can be any you want. - Note that these are completely irrelevent. If AVRdude supports a - device, then that device is programmable. Use -F switch to ignore - device codes. */ - #define AVRDEVCODE01 0x55 /* ATtiny12 */ - #define AVRDEVCODE02 0x56 /* ATtiny15 */ - #define AVRDEVCODE03 0x5E /* ATtiny261 */ - #define AVRDEVCODE04 0x76 /* ATmega8 */ - #define AVRDEVCODE05 0x74 /* ATmega16 */ - #define AVRDEVCODE06 0x72 /* ATmega32 */ - #define AVRDEVCODE07 0x45 /* ATmega64 */ - #define AVRDEVCODE08 0x74 /* ATmega644 */ - #define AVRDEVCODE09 0x43 /* ATmega128 */ - #define AVRDEVCODE10 0x63 /* ATmega162 */ - #define AVRDEVCODE11 0x78 /* ATmega169 */ - #define AVRDEVCODE12 0x6C /* AT90S4434 */ - #define AVRDEVCODE13 0x38 /* AT90S8515A */ - #define AVRDEVCODE14 0x65 /* AT90S8555 */ - - /* some global variables used throughout */ - uint8_t tempIOreg = 0; - uint8_t tempIOreg2 = 0; - uint8_t tempIOreg3 = 0; - uint8_t tempIOreg4 = 0; - uint8_t dataWidth = 0; - uint8_t firstRun = 1; - uint8_t deviceCode = 0; - uint8_t tempByte = 0; - uint16_t currAddress = 0; - uint16_t timerval = 0; - diff --git a/Projects/AVRISP_Programmer/AVRISP_Programmer.aps b/Projects/AVRISP_Programmer/AVRISP_Programmer.aps deleted file mode 100644 index 7480023174..0000000000 --- a/Projects/AVRISP_Programmer/AVRISP_Programmer.aps +++ /dev/null @@ -1 +0,0 @@ -AVRISP_Programmer30-Sep-2008 14:18:3930-Sep-2008 14:18:52241030-Sep-2008 14:18:3944, 14, 0, 589AVR GCCC:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AVRISP_Programmer\falseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000Descriptors.cRingBuff.cAVRISP_Programmer.cDescriptors.hRingBuff.hAVRISP_Programmer.hmakefiledefaultYESmakefileatmega128111AVRISP_Programmer.elfdefault\1-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault1C:\WinAVR-20080512\bin\avr-gcc.exeC:\WinAVR-20080512\utils\bin\make.exe diff --git a/Projects/AVRISP_Programmer/AVRISP_Programmer.c b/Projects/AVRISP_Programmer/AVRISP_Programmer.c deleted file mode 100644 index 58593670e0..0000000000 --- a/Projects/AVRISP_Programmer/AVRISP_Programmer.c +++ /dev/null @@ -1,763 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2009. - - dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com -*/ - -/* - Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) - AVR ISP Programmer code Copyright 2009 Opendous Inc. (www.opendous.org) - For more info and usage instructions for this firmware, visit: - http://code.google.com/p/avropendous/wiki/AVR_ISP_Programmer - - Note that this firmware is designed to work with AVRdude: - http://savannah.nongnu.org/projects/avrdude - But should work with other software that supports the AVR910 ISP - programmer or STK200 hardware. - - Permission to use, copy, modify, and distribute this software - and its documentation for any purpose and without fee is hereby - granted, provided that the above copyright notice appear in all - copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaim all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/* - Usage: - avrdude -vv -F -P COM7 -c avr910 -p t261 - Note -F flag which overrides signature check and enables programming - of any "In-System Programmable via SPI Port" AVR MCU. Part number, - t261, should be set to your target device. - avrdude -vv -F -P COM7 -c avr910 -p t261 -U flash:w:PROG.hex - PROG.hex is the hex file to program your t261 AVR with - avrdude -vv -F -P COM7 -b 115200 -c avr910 -p t261 -U flash:w:test.hex - The -b 115200 sets the SPI clock to 62.5kHz from the default 125kHz and may - work when the default programming speed fails. - AVROSP.exe -dATtiny261 -cCOM7 -rf - AVRosp is the Open Source AVR ISP Programming Software available from Atmel.com - - Note: on Linux systems, COM7 should be replaced with someting like /dev/ttyACM0 - You can determine this value by running dmesg after plugging in the device - Note: you must RESET the programmer after each use (AVRdude session). - - Note: If you experience errors with older devices, try changing the DELAY defines - - MISO, MOSI, and SCK are connected directly from the AVRopendous board - to the pin of the same functionality on the target. RESET pin on the target - can be connected either to SS (PB0), or PC2. Do not have any other pins - connected - especially HWB pin, to avoid unintentional behaviour. - - AVR910 functionality was overlayed on USBtoSerial functionality. - Keep this in mind when looking over the code. - Default target speed is 125kHz and corresponds to 19200 baud, which - is the default setting for AVRdude. - - Changing "Baud-Rate" will change the SPI speed. Defualt SPI clock speed - is 8Mhz / 4 = 2MHz. 8Mhz is the device clock speed. This is the setting at - 9600 baud. The following is a table of baud-rate vs. SPI Speed that will result - 9600 = 2Mhz - 14400 = 1MHz - 19200 = 125kHz (AVRdude Default) - 38400 = 250kHz - 57600 = 500kHz - 115200 = 62.5kHz - - Before running, you will need to install the INF file that - is located in the project directory. This will enable - Windows to use its inbuilt CDC drivers, negating the need - for special Windows drivers for the device. To install, - right-click the .INF file and choose the Install option. -*/ - -/* TODO: - fix the requirement that a RESET must be performed after each session, which - is only an issue under Windows. Everything works fine under Linux -*/ - -#include "AVRISP_Programmer.h" - -/* Project Tags, for reading out using the ButtLoad project */ -BUTTLOADTAG(ProjName, "LUFA AVR910 ISP Programmer"); -BUTTLOADTAG(BuildTime, __TIME__); -BUTTLOADTAG(BuildDate, __DATE__); -BUTTLOADTAG(LUFAVersion, "LUFA V" LUFA_VERSION_STRING); - - -#define RESETPORT PORTB -#define RESETPIN PB0 -#define RESETPORT2 PORTC -#define RESETPIN2 PC2 -#define CR_HEX '\r' - -#define DELAY_VERYSHORT 0x01 -#define DELAY_SHORT 0x02 -#define DELAY_MEDIUM 0x03 -#define DELAY_LONG 0x05 -#define DELAY_MULTIPLE 0x02 - - -/* AVR Device Codes - Can have a maximum of 14 but can be any you want. - Note that these are completely irrelevent. If AVRdude supports a device, - then that device is programmable. Use -F switch to ignore device codes. */ -#define AVRDEVCODE01 0x55 /* ATtiny12 */ -#define AVRDEVCODE02 0x56 /* ATtiny15 */ -#define AVRDEVCODE03 0x5E /* ATtiny261 */ -#define AVRDEVCODE04 0x76 /* ATmega8 */ -#define AVRDEVCODE05 0x74 /* ATmega16 */ -#define AVRDEVCODE06 0x72 /* ATmega32 */ -#define AVRDEVCODE07 0x45 /* ATmega64 */ -#define AVRDEVCODE08 0x74 /* ATmega644 */ -#define AVRDEVCODE09 0x43 /* ATmega128 */ -#define AVRDEVCODE10 0x63 /* ATmega162 */ -#define AVRDEVCODE11 0x78 /* ATmega169 */ -#define AVRDEVCODE12 0x6C /* AT90S4434 */ -#define AVRDEVCODE13 0x38 /* AT90S8515A */ -#define AVRDEVCODE14 0x65 /* AT90S8555 */ - - -/* Scheduler Task List */ -TASK_LIST -{ - { Task: USB_USBTask , TaskStatus: TASK_STOP }, - { Task: CDC_Task , TaskStatus: TASK_STOP }, -}; - -/* Globals: */ -/** Contains the current baud rate and other settings of the virtual serial port. - * - These values are set by the host via a class-specific request, and the physical USART should be reconfigured to match the - new settings each time they are changed by the host. - */ -CDC_Line_Coding_t LineCoding = { BaudRateBPS: 9600, - CharFormat: OneStopBit, - ParityType: Parity_None, - DataBits: 8 }; - -/** Ring (circular) buffer to hold the RX data - data from the host to the attached device on the serial port. */ -RingBuff_t Rx_Buffer; - -/** Ring (circular) buffer to hold the TX data - data from the attached device on the serial port to the host. */ -RingBuff_t Tx_Buffer; - -/** Flag to indicate if the USART is currently transmitting data from the Rx_Buffer circular buffer. */ -volatile bool Transmitting = false; - -/* some global variables used throughout */ -uint16_t currAddress = 0; - -/** Main program entry point. This routine configures the hardware required by the application, then - starts the scheduler to run the application tasks. - */ -int main(void) -{ - /* Disable watchdog if enabled by bootloader/fuses */ - MCUSR &= ~(1 << WDRF); - wdt_disable(); - - /* Disable clock division */ - clock_prescale_set(clock_div_1); - - /* Hardware Initialization */ - LEDs_Init(); - ReconfigureSPI(); - - DDRC |= ((1 << PC2) | (1 << PC4) | (1 << PC5) | (1 << PC6) | (1 << PC7)); //AT90USBxx2 - // PC2 is also used for RESET, so set it HIGH initially - note 'P' command sets it to LOW (Active) - PORTC |= ((1 << PC2) | (1 << PC4) | (1 << PC5) | (1 << PC6) | (1 << PC7)); //AT90USBxx2 - DDRD = 0; - PORTD = (1 << PB7); // only PB7(HWB) should be High as this is the bootloader pin - // Prepare PortB for SPI - set PB0(^SS), PB1(SCK), PB2(MOSI) as output as well as all other pins except PB3(MISO) - DDRB = (1 << PB0) | (1 << PB1) | (1 << PB2) | (0 << PB3) | (1 << PB4) | (1 << PB5) | (1 << PB6) | (1 << PB7); - PORTB |= (1 << PB0); - // make sure DataFlash devices to not interfere - deselect them by setting PE0 and PE1 HIGH: - PORTE = 0xFF; - DDRE = 0xFF; - - /* Ringbuffer Initialization */ - Buffer_Initialize(&Rx_Buffer); - Buffer_Initialize(&Tx_Buffer); - - /* Indicate USB not ready */ - UpdateStatus(Status_USBNotReady); - - /* Initialize Scheduler so that it can be used */ - Scheduler_Init(); - - /* Initialize USB Subsystem */ - USB_Init(); - - /* Scheduling - routine never returns, so put this last in the main function */ - Scheduler_Start(); -} - -/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and - starts the library USB task to begin the enumeration and USB management process. - */ -EVENT_HANDLER(USB_Connect) -{ - /* Start USB management task */ - Scheduler_SetTaskMode(USB_USBTask, TASK_RUN); - - /* Indicate USB enumerating */ - UpdateStatus(Status_USBEnumerating); -} - -/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via - the status LEDs and stops the USB management and CDC management tasks. - */ -EVENT_HANDLER(USB_Disconnect) -{ - /* Stop running CDC and USB management tasks */ - Scheduler_SetTaskMode(CDC_Task, TASK_STOP); - Scheduler_SetTaskMode(USB_USBTask, TASK_STOP); - - /* Indicate USB not ready */ - UpdateStatus(Status_USBNotReady); -} - -/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration - of the USB device after enumeration - the device endpoints are configured and the CDC management task started. - */ -EVENT_HANDLER(USB_ConfigurationChanged) -{ - /* Setup CDC Notification, Rx and Tx Endpoints */ - Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT, - ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE, - ENDPOINT_BANK_SINGLE); - - Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK, - ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE, - ENDPOINT_BANK_SINGLE); - - Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK, - ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE, - ENDPOINT_BANK_SINGLE); - - /* Indicate USB connected and ready */ - UpdateStatus(Status_USBReady); - - /* Start CDC task */ - Scheduler_SetTaskMode(CDC_Task, TASK_RUN); -} - -/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific - control requests that are not handled internally by the USB library (including the CDC control commands, - which are all issued via the control endpoint), so that they can be handled appropriately for the application. - */ -EVENT_HANDLER(USB_UnhandledControlPacket) -{ - uint8_t* LineCodingData = (uint8_t*)&LineCoding; - - /* Process CDC specific control requests */ - switch (bRequest) - { - case REQ_GetLineEncoding: - if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - { - /* Acknowledge the SETUP packet, ready for data transfer */ - Endpoint_ClearSetupReceived(); - - /* Write the line coding data to the control endpoint */ - Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(LineCoding)); - - /* Finalize the stream transfer to send the last packet or clear the host abort */ - Endpoint_ClearSetupOUT(); - } - - break; - case REQ_SetLineEncoding: - if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - { - /* Acknowledge the SETUP packet, ready for data transfer */ - Endpoint_ClearSetupReceived(); - - /* Read the line coding data in from the host into the global struct */ - Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(LineCoding)); - - /* Finalize the stream transfer to clear the last packet from the host */ - Endpoint_ClearSetupIN(); - - /* Reconfigure the USART with the new settings */ - ReconfigureSPI(); - } - - break; - case REQ_SetControlLineState: - if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - { - /* Acknowledge the SETUP packet, ready for data transfer */ - Endpoint_ClearSetupReceived(); - - /* Acknowledge status stage */ - while (!(Endpoint_IsSetupINReady())); - Endpoint_ClearSetupIN(); - } - - break; - } -} - -/** Task to manage CDC data transmission and reception to and from the host, from and to the physical USART. */ -TASK(CDC_Task) -{ - if (USB_IsConnected) - { - /* Select the Serial Rx Endpoint */ - Endpoint_SelectEndpoint(CDC_RX_EPNUM); - - if (Endpoint_ReadWriteAllowed()) - { - /* Read the received data endpoint into the transmission buffer */ - while (Endpoint_BytesInEndpoint()) - { - /* Wait until the buffer has space for a new character */ - while (!((BUFF_STATICSIZE - Rx_Buffer.Elements))); - - /* Store each character from the endpoint */ - Buffer_StoreElement(&Rx_Buffer, Endpoint_Read_Byte()); - - /* Run the given command once enough data is available. */ - if (Rx_Buffer.Elements) - { - const uint8_t ZeroDataByteCommands[] = {'P', 'a', 'm', 'R', 'd', 'e', 'L', 's', 't', 'S', 'V', 'v', 'p', 'F'}; - const uint8_t OneDataByteCommands[] = {'T', 'c', 'C', 'D', 'l', 'f', 'x', 'y'}; - const uint8_t TwoDataByteCommands[] = {'A', 'Z'}; - const uint8_t ThreeDataByteCommands[] = {':'}; - const uint8_t FourDataByteCommands[] = {'.'}; - - const struct - { - const uint8_t TotalCommands; - const uint8_t* CommandBytes; - } AVR910Commands[] = {{sizeof(ZeroDataByteCommands), ZeroDataByteCommands}, - {sizeof(OneDataByteCommands), OneDataByteCommands}, - {sizeof(TwoDataByteCommands), TwoDataByteCommands}, - {sizeof(ThreeDataByteCommands), ThreeDataByteCommands}, - {sizeof(FourDataByteCommands), FourDataByteCommands}}; - - /* Determine the data length of the issued command */ - uint8_t CommandDataLength = (Rx_Buffer.Elements - 1); - - /* Loop through each of the possible command bytes allowable from the given command data length */ - for (uint8_t CurrentCommand = 0; CurrentCommand < AVR910Commands[CommandDataLength].TotalCommands; CurrentCommand++) - { - /* If issues command matches an allowable command, process it */ - if (Buffer_PeekElement(&Rx_Buffer) == AVR910Commands[CommandDataLength].CommandBytes[CurrentCommand]) - processHostSPIRequest(); - } - } - } - - /* Clear the endpoint buffer */ - Endpoint_ClearCurrentBank(); - } - - /* Select the Serial Tx Endpoint */ - Endpoint_SelectEndpoint(CDC_TX_EPNUM); - - /* Check if the Tx buffer contains anything to be sent to the host */ - if (Tx_Buffer.Elements) - { - /* Wait until Serial Tx Endpoint Ready for Read/Write */ - while (!(Endpoint_ReadWriteAllowed())); - - /* Check before sending the data if the endpoint is completely full */ - bool IsFull = (Endpoint_BytesInEndpoint() == CDC_TXRX_EPSIZE); - - /* Write the transmission buffer contents to the received data endpoint */ - while (Tx_Buffer.Elements && (Endpoint_BytesInEndpoint() < CDC_TXRX_EPSIZE)) - Endpoint_Write_Byte(Buffer_GetElement(&Tx_Buffer)); - - /* Send the data */ - Endpoint_ClearCurrentBank(); - - /* If a full endpoint was sent, we need to send an empty packet afterwards to terminate the transfer */ - if (IsFull) - { - /* Wait until Serial Tx Endpoint Ready for Read/Write */ - while (!(Endpoint_ReadWriteAllowed())); - - /* Send an empty packet to terminate the transfer */ - Endpoint_ClearCurrentBank(); - } - } - } -} - -/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to - * log to a serial port, or anything else that is suitable for status updates. - * - * \param CurrentStatus Current status of the system, from the USBtoSerial_StatusCodes_t enum - */ -void UpdateStatus(uint8_t CurrentStatus) -{ - uint8_t LEDMask = LEDS_NO_LEDS; - - /* Set the LED mask to the appropriate LED mask based on the given status code */ - switch (CurrentStatus) - { - case Status_USBNotReady: - LEDMask = (LEDS_LED1); - break; - case Status_USBEnumerating: - LEDMask = (LEDS_LED1 | LEDS_LED2); - break; - case Status_USBReady: - LEDMask = (LEDS_LED2 | LEDS_LED4); - break; - } - - /* Set the board LEDs to the new LED mask */ - LEDs_SetAllLEDs(LEDMask); -} - -/** Reconfigures SPI to match the current serial port settings issued by the host. */ -void ReconfigureSPI(void) -{ - uint8_t SPCRmask = (1 << SPE) | (1 << MSTR); // always enable SPI as Master - uint8_t SPSRmask = 0; - - /* Determine stop bits - 1.5 stop bits is set as 1 stop bit due to hardware limitations */ - /* For SPI, determine whether format is LSB or MSB */ - if (LineCoding.CharFormat == TwoStopBits) { - SPCRmask |= (1 << DORD); - } else if (LineCoding.CharFormat == OneStopBit) { - SPCRmask |= (0 << DORD); - } - - /* Determine data size - 5, 6, 7, or 8 bits are supported */ - /* Changing line coding changes SPI Mode - CPOL=0, CPHA=0 Sample (Rising) Setup (Falling) SPI-Mode0 == 8 bits line coding - CPOL=0, CPHA=1 Setup (Rising) Sample (Falling) SPI-Mode1 == 7 bits line coding - CPOL=1, CPHA=0 Sample (Falling) Setup (Rising) SPI-Mode2 == 6 bits line coding - CPOL=1, CPHA=1 Setup (Falling) Sample (Rising) SPI-Mode3 == 5 bits line coding - */ - if (LineCoding.DataBits == 5) { - SPCRmask |= ((1 << CPOL) | (1 << CPHA)); - } else if (LineCoding.DataBits == 6) { - SPCRmask |= ((1 << CPOL) | (0 << CPHA)); - } else if (LineCoding.DataBits == 7) { - SPCRmask |= ((0 << CPOL) | (1 << CPHA)); - } else if (LineCoding.DataBits == 8) { - SPCRmask |= ((0 << CPOL) | (0 << CPHA)); - } - - - /* Set the USART baud rate register to the desired baud rate value */ - /* also alter the SPI speed via value of baud rate */ - if (LineCoding.BaudRateBPS == 9600) { // 2Mhz SPI (Fosc / 4) - SPCRmask |= ((0 << SPR1) | (0 << SPR0)); - SPSRmask |= (0 << SPI2X); - } else if (LineCoding.BaudRateBPS == 14400) { // 1Mhz SPI (Fosc / 8) - SPCRmask |= ((0 << SPR1) | (1 << SPR0)); - SPSRmask |= (1 << SPI2X); - } else if (LineCoding.BaudRateBPS == 57600) { // 500kHz SPI (Fosc / 16) - SPCRmask |= ((0 << SPR1) | (1 << SPR0)); - SPSRmask |= (0 << SPI2X); - } else if (LineCoding.BaudRateBPS == 38400) { // 250kHz SPI (Fosc / 32) - SPCRmask |= ((1 << SPR1) | (0 << SPR0)); - SPSRmask |= (1 << SPI2X); - } else if (LineCoding.BaudRateBPS == 19200) { // 125kHz SPI (Fosc / 64) - SPCRmask |= ((1 << SPR1) | (0 << SPR0)); - SPSRmask |= (0 << SPI2X); - } else if (LineCoding.BaudRateBPS == 115200) { // 62.5kHz SPI (Fosc / 128) - SPCRmask |= ((1 << SPR1) | (1 << SPR0)); - SPSRmask |= (0 << SPI2X); - } - - SPCR = SPCRmask; - SPSR = SPSRmask; -} - - -/* process data according to AVR910 protocol */ -void processHostSPIRequest(void) { - - uint8_t readByte1 = 0; - uint8_t readByte2 = 0; - uint8_t readByte3 = 0; - uint8_t readByte4 = 0; - uint8_t firstByte = 0; - - /* Taken from a90isp_ver23.asm: - +-------------+------------+------+ - ;* Commands | Host writes | Host reads | | - ;* -------- +-----+-------+------+-----+ | - ;* | ID | data | data | | Note | - ;* +-----------------------------------+-----+-------+------+-----+------+ - ;* | Enter programming mode | 'P' | | | 13d | 1 | - ;* | Report autoincrement address | 'a' | | | 'Y' | | - ;* | Set address | 'A' | ah al | | 13d | 2 | - ;* | Write program memory, low byte | 'c' | dd | | 13d | 3 | - ;* | Write program memory, high byte | 'C' | dd | | 13d | 3 | - ;* | Issue Page Write | 'm' | | | 13d | | - ;* | Read program memory | 'R' | |dd(dd)| | 4 | - ;* | Write data memory | 'D' | dd | | 13d | | - ;* | Read data memory | 'd' | | dd | | | - ;* | Chip erase | 'e' | | | 13d | | - ;* | Write lock bits | 'l' | dd | | 13d | | - ;* | Write fuse bits | 'f' | dd | | 13d | 11 | - ;* | Read fuse and lock bits | 'F' | | dd | | 11 | - ;* | Leave programming mode | 'L' | | | 13d | 5 | - ;* | Select device type | 'T' | dd | | 13d | 6 | - ;* | Read signature bytes | 's' | | 3*dd | | | - ;* | Return supported device codes | 't' | | n*dd | 00d | 7 | - ;* | Return software identifier | 'S' | | s[7] | | 8 | - ;* | Return sofware version | 'V' | |dd dd | | 9 | - ;* | Return hardware version | 'v' | |dd dd | | 9 | - ;* | Return programmer type | 'p' | | dd | | 10 | - ;* | Set LED | 'x' | dd | | 13d | 12 | - ;* | Clear LED | 'y' | dd | | 13d | 12 | - ;* | Universial command | ':' | 3*dd | dd | 13d | | - ;* | New universal command | '.' | 4*dd | dd | 13d | | - ;* | Special test command | 'Z' | 2*dd | dd | | | - */ - - firstByte = Buffer_GetElement(&Rx_Buffer); - Buffer_Initialize(&Tx_Buffer); // make sure the buffer is clear before proceeding - - if (firstByte == 'P') { // enter Programming mode - // enable SPI -- already done - // enter programming mode on target: - //PORTB = 0; // set clock to zero - RESETPORT = (1 << RESETPIN); // set RESET pin on target to 1 - RESETPORT2 = (1 << RESETPIN2); - _delay_ms(DELAY_SHORT); - //RESETPORT = (RESETPORT & ~(1 << RESETPIN)); // set RESET pin on target to 0 - Active - RESETPORT = 0x00; - RESETPORT2 = 0; - _delay_ms(DELAY_SHORT); - SPI_SendByte(0xAC); - SPI_SendByte(0x53); - SPI_SendByte(0x00); - SPI_SendByte(0x00); - _delay_ms(DELAY_VERYSHORT); - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'T') { // Select device type - Buffer_GetElement(&Rx_Buffer); // set device type - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'a') { // Report autoincrement address - Buffer_StoreElement(&Tx_Buffer, 'Y'); // return 'Y' - Auto-increment enabled - - } else if (firstByte == 'A') { //Load Address - // get two bytes over serial and set currAddress to them - readByte1 = Buffer_GetElement(&Rx_Buffer); // high byte - readByte2 = Buffer_GetElement(&Rx_Buffer); // low byte - currAddress = (readByte1 << 8) | (readByte2); - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'c') { // Write program memory, low byte - // send 4 bytes over SPI; 0x40, then Address High Byte, then Low, then data - readByte1 = Buffer_GetElement(&Rx_Buffer); - SPI_SendByte(0x40); - SPI_SendByte((currAddress >> 8)); // high byte - SPI_SendByte((currAddress)); // low byte - SPI_SendByte(readByte1); // data - _delay_ms(DELAY_MEDIUM); // certain MCUs require a delay of about 24585 cycles - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'C') { // Write program memory, high byte - // send 4 bytes over SPI; 0x48, then Address High Byte, then Low, then data - readByte1 = Buffer_GetElement(&Rx_Buffer); - SPI_SendByte(0x48); - SPI_SendByte((currAddress >> 8)); // high byte - SPI_SendByte((currAddress)); // low byte - SPI_SendByte(readByte1); // data - currAddress++; // increment currAddress - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'm') { // Write Program Memory Page - // send 4 bytes over SPI; 0x4c, then Address High Byte, then Low, then 0x00 - SPI_SendByte(0x4C); - SPI_SendByte((currAddress >> 8)); // high byte - SPI_SendByte((currAddress)); // low byte - SPI_SendByte(0x00); - _delay_ms(DELAY_LONG); - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'R') { // Read Program Memory - // send 4 bytes over SPI; 0x28, then Address High Byte, then Low, then send back read data from 4th byte over serial - SPI_SendByte(0x28); - SPI_SendByte((currAddress >> 8)); // high byte - SPI_SendByte((currAddress)); // low byte - readByte1 = SPI_TransferByte(0x00); // read in data - Buffer_StoreElement(&Tx_Buffer, readByte1); - // send 4 bytes over SPI; 0x20, then Address High Byte, then Low, then send back read data from 4th byte over serial - SPI_SendByte(0x20); - SPI_SendByte((currAddress >> 8)); // high byte - SPI_SendByte((currAddress)); // low byte - readByte2 = SPI_TransferByte(0x00); // read in data - Buffer_StoreElement(&Tx_Buffer, readByte2); - currAddress++; // increment currAddress - - } else if (firstByte == 'D') { // Write Data Memory - // send 4 bytes over SPI; 0xc0, then Address High Byte, then Low, then data - readByte1 = Buffer_GetElement(&Rx_Buffer); - SPI_SendByte(0xC0); - SPI_SendByte((currAddress >> 8)); // high byte - SPI_SendByte((currAddress)); // low byte - SPI_SendByte(readByte1); // data - _delay_ms(DELAY_MEDIUM); - currAddress++; // increment currAddress - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'd') { // Read Data Memory - // send 4 bytes over SPI; 0xa0, then Address High Byte, then Low, then send back read data from 4th byte over serial - SPI_SendByte(0xA0); - SPI_SendByte((currAddress >> 8)); // high byte - SPI_SendByte((currAddress)); // low byte - readByte1 = SPI_TransferByte(0x00); // read in data - Buffer_StoreElement(&Tx_Buffer, readByte1); - currAddress++; // increment currAddress - - } else if (firstByte == 'e') { // erase the target device - // send 4 bytes over SPI; 0xac, 0x80, 0x04, 0x00 - SPI_SendByte(0xAC); - SPI_SendByte(0x80); - SPI_SendByte(0x04); - SPI_SendByte(0x00); - _delay_ms(DELAY_LONG); - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'l') { // write lock bits - // send 4 bytes over SPI; 0xac, [andi s_data 0x06], 0xe0, 0x00 - readByte1 = Buffer_GetElement(&Rx_Buffer); // read in lock bits data - SPI_SendByte(0xAC); - SPI_SendByte(((0x06 & readByte1) | 0xE0)); // TODO - is this correct??? - SPI_SendByte(0x00); - SPI_SendByte(0x00); - _delay_ms(DELAY_MEDIUM); - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'f') { // write fuse bits - // ignore this command, but need to remove data from the receive buffer - readByte1 = Buffer_GetElement(&Rx_Buffer); - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'L') { // leave programming mode - RESETPORT |= (1 << RESETPIN); // set RESET pin on target to 1 - RESETPORT2 |= (1 << RESETPIN2); // set RESET pin on target to 1 - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 's') { // Read signature bytes - // send 4 bytes over SPI; 0x30, 0x00, 0x02, read and send last byte over serial - SPI_SendByte(0x30); - SPI_SendByte(0x00); - SPI_SendByte(0x02); - readByte1 = SPI_TransferByte(0x00); // read in data - Buffer_StoreElement(&Tx_Buffer, readByte1); - SPI_SendByte(0x30); - SPI_SendByte(0x00); - SPI_SendByte(0x01); - readByte1 = SPI_TransferByte(0x00); // read in data - Buffer_StoreElement(&Tx_Buffer, readByte1); - SPI_SendByte(0x30); - SPI_SendByte(0x00); - SPI_SendByte(0x00); - readByte1 = SPI_TransferByte(0x00); // read in data - Buffer_StoreElement(&Tx_Buffer, readByte1); - - } else if (firstByte == 't') { // Return supported device codes - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE01); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE02); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE03); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE04); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE05); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE06); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE07); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE08); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE09); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE10); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE11); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE12); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE13); - Buffer_StoreElement(&Tx_Buffer, AVRDEVCODE14); - Buffer_StoreElement(&Tx_Buffer, 0x00); - - } else if (firstByte == 'S') { // Return software identifier - // return string[7] with "AVR ISP" - Buffer_StoreElement(&Tx_Buffer, 'A'); - Buffer_StoreElement(&Tx_Buffer, 'V'); - Buffer_StoreElement(&Tx_Buffer, 'R'); - Buffer_StoreElement(&Tx_Buffer, 0x20); - Buffer_StoreElement(&Tx_Buffer, 'I'); - Buffer_StoreElement(&Tx_Buffer, 'S'); - Buffer_StoreElement(&Tx_Buffer, 'P'); - - } else if (firstByte == 'V') { // Return sofware version - //return two bytes, software Major then Minor - Buffer_StoreElement(&Tx_Buffer, '2'); - Buffer_StoreElement(&Tx_Buffer, '3'); - - } else if (firstByte == 'v') { // Return hardware version - //return two bytes, hardware Major then Minor - Buffer_StoreElement(&Tx_Buffer, ('1')); - Buffer_StoreElement(&Tx_Buffer, ('0')); - - } else if (firstByte == 'p') { // Return programmer type - // return 'S' for Serial Programmer - Buffer_StoreElement(&Tx_Buffer, 'S'); - - } else if (firstByte == 'x') { // set LED - // ignore this command, but need to remove data from the receive buffer - readByte1 = Buffer_GetElement(&Rx_Buffer); - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'y') { // clear LED - // ignore this command, but need to remove data from the receive buffer - readByte1 = Buffer_GetElement(&Rx_Buffer); - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == ':') { // Universal Command - // get 3 bytes over serial - readByte1 = Buffer_GetElement(&Rx_Buffer); - readByte2 = Buffer_GetElement(&Rx_Buffer); - readByte3 = Buffer_GetElement(&Rx_Buffer); - SPI_SendByte(readByte1); - SPI_SendByte(readByte2); - SPI_SendByte(readByte3); - readByte1 = SPI_TransferByte(0x00); - Buffer_StoreElement(&Tx_Buffer, readByte1); - _delay_ms(DELAY_MEDIUM); - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == '.') { // New Universal Command - // get 4 bytes over serial - readByte1 = Buffer_GetElement(&Rx_Buffer); - readByte2 = Buffer_GetElement(&Rx_Buffer); - readByte3 = Buffer_GetElement(&Rx_Buffer); - readByte4 = Buffer_GetElement(&Rx_Buffer); - SPI_SendByte(readByte1); - SPI_SendByte(readByte2); - SPI_SendByte(readByte3); - readByte1 = SPI_TransferByte(readByte4); - Buffer_StoreElement(&Tx_Buffer, readByte1); - _delay_ms(DELAY_MEDIUM); - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - - } else if (firstByte == 'Z') { // Special test command - // do nothing, but need to remove data from the receive buffer - readByte1 = Buffer_GetElement(&Rx_Buffer); - readByte2 = Buffer_GetElement(&Rx_Buffer); - - } else { - // do nothing, but need to return with a carriage return - Buffer_StoreElement(&Tx_Buffer, CR_HEX); // return carriage return (CR_HEX) if successful - } -} - diff --git a/Projects/AVRISP_Programmer/AVRISP_Programmer.h b/Projects/AVRISP_Programmer/AVRISP_Programmer.h deleted file mode 100644 index c6ac13fe7b..0000000000 --- a/Projects/AVRISP_Programmer/AVRISP_Programmer.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2009. - - dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com -*/ - -/* - Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, and distribute this software - and its documentation for any purpose and without fee is hereby - granted, provided that the above copyright notice appear in all - copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaim all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * - * Header file for USBtoSerial.c. - */ - -#ifndef _AVRISP_PROGRAMMER_H_ -#define _AVRISP_PROGRAMMER_H_ - - /* Includes: */ - #include - #include - #include - #include - #include - - #include "Descriptors.h" - #include "RingBuff.h" - - #include // Library Version Information - #include // PROGMEM tags readable by the ButtLoad project - #include // USB Functionality - #include // SPI driver - #include // LEDs driver - #include // Simple scheduler for task management - - /* Macros: */ - /** CDC Class specific request to get the current virtual serial port configuration settings. */ - #define REQ_GetLineEncoding 0x21 - - /** CDC Class specific request to set the current virtual serial port configuration settings. */ - #define REQ_SetLineEncoding 0x20 - - /** CDC Class specific request to set the current virtual serial port handshake line states. */ - #define REQ_SetControlLineState 0x22 - - /** Notification type constant for a change in the virtual serial port handshake line states, for - * use with a USB_Notification_Header_t notification structure when sent to the host via the CDC - * notification endpoint. - */ - #define NOTIF_SerialState 0x20 - - /** Mask for the DTR handshake line for use with the REQ_SetControlLineState class specific request - * from the host, to indicate that the DTR line state should be high. - */ - #define CONTROL_LINE_OUT_DTR (1 << 0) - - /** Mask for the RTS handshake line for use with the REQ_SetControlLineState class specific request - * from the host, to indicate that theRTS line state should be high. - */ - #define CONTROL_LINE_OUT_RTS (1 << 1) - - /** Mask for the DCD handshake line for use with the a NOTIF_SerialState class specific notification - * from the device to the host, to indicate that the DCD line state is currently high. - */ - #define CONTROL_LINE_IN_DCD (1 << 0) - - /** Mask for the DSR handshake line for use with the a NOTIF_SerialState class specific notification - * from the device to the host, to indicate that the DSR line state is currently high. - */ - #define CONTROL_LINE_IN_DSR (1 << 1) - - /** Mask for the BREAK handshake line for use with the a NOTIF_SerialState class specific notification - * from the device to the host, to indicate that the BREAK line state is currently high. - */ - #define CONTROL_LINE_IN_BREAK (1 << 2) - - /** Mask for the RING handshake line for use with the a NOTIF_SerialState class specific notification - * from the device to the host, to indicate that the RING line state is currently high. - */ - #define CONTROL_LINE_IN_RING (1 << 3) - - /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host, - * to indicate that a framing error has ocurred on the virtual serial port. - */ - #define CONTROL_LINE_IN_FRAMEERROR (1 << 4) - - /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host, - * to indicate that a parity error has ocurred on the virtual serial port. - */ - #define CONTROL_LINE_IN_PARITYERROR (1 << 5) - - /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host, - * to indicate that a data overrun error has ocurred on the virtual serial port. - */ - #define CONTROL_LINE_IN_OVERRUNERROR (1 << 6) - - /* Event Handlers: */ - /** Indicates that this module will catch the USB_Connect event when thrown by the library. */ - HANDLES_EVENT(USB_Connect); - - /** Indicates that this module will catch the USB_Disconnect event when thrown by the library. */ - HANDLES_EVENT(USB_Disconnect); - - /** Indicates that this module will catch the USB_ConfigurationChanged event when thrown by the library. */ - HANDLES_EVENT(USB_ConfigurationChanged); - - /** Indicates that this module will catch the USB_UnhandledControlPacket event when thrown by the library. */ - HANDLES_EVENT(USB_UnhandledControlPacket); - - /* Type Defines: */ - /** Type define for the virtual serial port line encoding settings, for storing the current USART configuration - * as set by the host via a class specific request. - */ - typedef struct - { - uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */ - uint8_t CharFormat; /**< Character format of the virtual serial port, a value from the - * CDCDevice_CDC_LineCodingFormats_t enum - */ - uint8_t ParityType; /**< Parity setting of the virtual serial port, a value from the - * CDCDevice_LineCodingParity_t enum - */ - uint8_t DataBits; /**< Bits of data per charater of the virtual serial port */ - } CDC_Line_Coding_t; - - /** Type define for a CDC notification, sent to the host via the CDC notification endpoint to indicate a - * change in the device state asynchronously. - */ - typedef struct - { - uint8_t NotificationType; /**< Notification type, a mask of REQDIR_*, REQTYPE_* and REQREC_* constants - * from the library StdRequestType.h header - */ - uint8_t Notification; /**< Notification value, a NOTIF_* constant */ - uint16_t wValue; /**< Notification wValue, notification-specific */ - uint16_t wIndex; /**< Notification wIndex, notification-specific */ - uint16_t wLength; /**< Notification wLength, notification-specific */ - } USB_Notification_Header_t; - - /* Enums: */ - /** Enum for the possible line encoding formats of a virtual serial port. */ - enum CDCDevice_CDC_LineCodingFormats_t - { - OneStopBit = 0, /**< Each frame contains one stop bit */ - OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */ - TwoStopBits = 2, /**< Each frame contains two stop bits */ - }; - - /** Enum for the possible line encoding parity settings of a virtual serial port. */ - enum CDCDevice_LineCodingParity_t - { - Parity_None = 0, /**< No parity bit mode on each frame */ - Parity_Odd = 1, /**< Odd parity bit mode on each frame */ - Parity_Even = 2, /**< Even parity bit mode on each frame */ - Parity_Mark = 3, /**< Mark parity bit mode on each frame */ - Parity_Space = 4, /**< Space parity bit mode on each frame */ - }; - - /** Enum for the possible status codes for passing to the UpdateStatus() function. */ - enum USBtoSerial_StatusCodes_t - { - Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */ - Status_USBEnumerating = 1, /**< USB interface is enumerating */ - Status_USBReady = 2, /**< USB interface is connected and ready */ - }; - - /* Tasks: */ - TASK(CDC_Task); - - /* Function Prototypes: */ - void ReconfigureSPI(void); - void UpdateStatus(uint8_t CurrentStatus); - void processHostSPIRequest(void); - -#endif diff --git a/Projects/AVRISP_Programmer/AVRISP_Programmer.txt b/Projects/AVRISP_Programmer/AVRISP_Programmer.txt deleted file mode 100644 index 1872cfb5e7..0000000000 --- a/Projects/AVRISP_Programmer/AVRISP_Programmer.txt +++ /dev/null @@ -1,89 +0,0 @@ -/** \file - * - * This file contains special DoxyGen information for the generation of the main page and other special - * documentation pages. It is not a project source file. - */ - -/** \mainpage AVRISP_Programmer - * - * Communications Device Class demonstration application. - * This gives a simple reference application for implementing - * a USB to Serial converter using the CDC class. Data communicated - * over the USB Virtual Serial Port according to Atmel's AVR910 - * protocol is used to program AVR MCUs that are - * "In-System Programmable via SPI Port". - * - * After running this firmware for the first time on a new computer, - * you will need to supply the .INF file located in this demo - * project's directory as the device's driver when running under - * Windows. This will enable Windows to use its inbuilt CDC drivers, - * negating the need for custom drivers for the device. Other - * Operating Systems should automatically use their own inbuilt - * CDC-ACM drivers. - * - * Usage: - * avrdude -vv -F -P COM7 -c avr910 -p t261 - * Note -F flag which overrides signature check and enables programming - * of any "In-System Programmable via SPI Port" AVR MCU. Part number, - * t261, should be set to your target device. - * avrdude -vv -F -P COM7 -c avr910 -p t261 -U flash:w:PROG.hex - * PROG.hex is the hex file to program your t261 AVR with - * avrdude -vv -F -P COM7 -b 115200 -c avr910 -p t261 -U flash:w:test.hex - * The -b 115200 sets the SPI clock to 62.5kHz from the default 125kHz and may - * work when the default programming speed fails. - * AVROSP.exe -dATtiny261 -cCOM7 -rf - * AVRosp is the Open Source AVR ISP Programming Software available from Atmel.com - * - * Note: on Linux systems, COM7 should be replaced with someting like /dev/ttyACM0 - * You can determine this value by running dmesg after plugging in the device - * Note: you must RESET the programmer after each use (AVRdude session). - * - * Note: If you experience errors with older devices, try changing DELAY_LONG - * to a larger value, such as 0xFF in AVRISP_Programmer.c - * - * MISO, MOSI, and SCK are connected directly from the AVRopendous board - * to the pin of the same functionality on the target. RESET pin on the target - * can be connected either to SS (PB0), or PC2. Do not have any other pins - * connected - especially HWB pin, to avoid unintentional behaviour. - * - * AVR910 functionality was overlayed on USBtoSerial functionality. - * Keep this in mind when looking over the code. - * Default target speed is 125kHz and corresponds to 19200 baud, which - * is the default setting for AVRdude. - * - * Changing "Baud-Rate" will change the SPI speed. Defualt SPI clock speed - * is 8Mhz / 4 = 2MHz. 8Mhz is the device clock speed. This is the setting at - * 9600 baud. The following is a table of baud-rate vs. SPI Speed that will result - * 9600 = 2Mhz - * 14400 = 1MHz - * 19200 = 125kHz (AVRdude Default) - * 38400 = 250kHz - * 57600 = 500kHz - * 115200 = 62.5kHz - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
USB Mode:Device
USB Class:Communications Device Class (CDC)
USB Subclass:Abstract Control Model (ACM)
Relevant Standards:USBIF CDC Class Standard
Usable Speeds:Full Speed Mode
- */ diff --git a/Projects/AVRISP_Programmer/AVRISP_Programmer_Picture.jpg b/Projects/AVRISP_Programmer/AVRISP_Programmer_Picture.jpg deleted file mode 100644 index 87ec3d43ee..0000000000 Binary files a/Projects/AVRISP_Programmer/AVRISP_Programmer_Picture.jpg and /dev/null differ diff --git a/Projects/AVRISP_Programmer/Descriptors.c b/Projects/AVRISP_Programmer/Descriptors.c deleted file mode 100644 index 5f3ffca08a..0000000000 --- a/Projects/AVRISP_Programmer/Descriptors.c +++ /dev/null @@ -1,263 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2009. - - dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com -*/ - -/* - Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, and distribute this software - and its documentation for any purpose and without fee is hereby - granted, provided that the above copyright notice appear in all - copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaim all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * - * USB Device Descriptors, for library use when in USB device mode. Descriptors are special - * computer-readable structures which the host requests upon device enumeration, to determine - * the device's capabilities and functions. - */ - -#include "Descriptors.h" - -/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall - * device characteristics, including the supported USB version, control endpoint size and the - * number of device configurations. The descriptor is read out by the USB host when the enumeration - * process begins. - */ -USB_Descriptor_Device_t PROGMEM DeviceDescriptor = -{ - Header: {Size: sizeof(USB_Descriptor_Device_t), Type: DTYPE_Device}, - - USBSpecification: VERSION_BCD(01.10), - Class: 0x02, - SubClass: 0x00, - Protocol: 0x00, - - Endpoint0Size: 8, - - VendorID: 0x03EB, - ProductID: 0x204F, - ReleaseNumber: 0x0000, - - ManufacturerStrIndex: 0x01, - ProductStrIndex: 0x02, - SerialNumStrIndex: NO_DESCRIPTOR, - - NumberOfConfigurations: 1 -}; - -/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage - * of the device in one of its supported configurations, including information about any device interfaces - * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting - * a configuration so that the host may correctly communicate with the USB device. - */ -USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = -{ - Config: - { - Header: {Size: sizeof(USB_Descriptor_Configuration_Header_t), Type: DTYPE_Configuration}, - - TotalConfigurationSize: sizeof(USB_Descriptor_Configuration_t), - TotalInterfaces: 2, - - ConfigurationNumber: 1, - ConfigurationStrIndex: NO_DESCRIPTOR, - - ConfigAttributes: (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED), - - MaxPowerConsumption: USB_CONFIG_POWER_MA(100) - }, - - CCI_Interface: - { - Header: {Size: sizeof(USB_Descriptor_Interface_t), Type: DTYPE_Interface}, - - InterfaceNumber: 0, - AlternateSetting: 0, - - TotalEndpoints: 1, - - Class: 0x02, - SubClass: 0x02, - Protocol: 0x01, - - InterfaceStrIndex: NO_DESCRIPTOR - }, - - CDC_Functional_IntHeader: - { - Header: {Size: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), Type: 0x24}, - SubType: 0x00, - - Data: {0x01, 0x10} - }, - - CDC_Functional_CallManagement: - { - Header: {Size: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), Type: 0x24}, - SubType: 0x01, - - Data: {0x03, 0x01} - }, - - CDC_Functional_AbstractControlManagement: - { - Header: {Size: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), Type: 0x24}, - SubType: 0x02, - - Data: {0x06} - }, - - CDC_Functional_Union: - { - Header: {Size: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), Type: 0x24}, - SubType: 0x06, - - Data: {0x00, 0x01} - }, - - ManagementEndpoint: - { - Header: {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint}, - - EndpointAddress: (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM), - Attributes: EP_TYPE_INTERRUPT, - EndpointSize: CDC_NOTIFICATION_EPSIZE, - PollingIntervalMS: 0xFF - }, - - DCI_Interface: - { - Header: {Size: sizeof(USB_Descriptor_Interface_t), Type: DTYPE_Interface}, - - InterfaceNumber: 1, - AlternateSetting: 0, - - TotalEndpoints: 2, - - Class: 0x0A, - SubClass: 0x00, - Protocol: 0x00, - - InterfaceStrIndex: NO_DESCRIPTOR - }, - - DataOutEndpoint: - { - Header: {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint}, - - EndpointAddress: (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM), - Attributes: EP_TYPE_BULK, - EndpointSize: CDC_TXRX_EPSIZE, - PollingIntervalMS: 0x00 - }, - - DataInEndpoint: - { - Header: {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint}, - - EndpointAddress: (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM), - Attributes: EP_TYPE_BULK, - EndpointSize: CDC_TXRX_EPSIZE, - PollingIntervalMS: 0x00 - } -}; - -/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests - * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate - * via the language ID table available at USB.org what languages the device supports for its string descriptors. - */ -USB_Descriptor_String_t PROGMEM LanguageString = -{ - Header: {Size: USB_STRING_LEN(1), Type: DTYPE_String}, - - UnicodeString: {LANGUAGE_ID_ENG} -}; - -/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable - * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device - * Descriptor. - */ -USB_Descriptor_String_t PROGMEM ManufacturerString = -{ - Header: {Size: USB_STRING_LEN(19), Type: DTYPE_String}, - - UnicodeString: L"www.AVRopendous.org" -}; - -/** Product descriptor string. This is a Unicode string containing the product's details in human readable form, - * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device - * Descriptor. - */ -USB_Descriptor_String_t PROGMEM ProductString = -{ - Header: {Size: USB_STRING_LEN(29), Type: DTYPE_String}, - - UnicodeString: L"LUFA-Based AVR ISP Programmer" -}; - -/** This function is called by the library when in device mode, and must be overridden (see StdDescriptors.h - * documentation) by the application code so that the address and size of a requested descriptor can be given - * to the USB library. When the device recieves a Get Descriptor request on the control endpoint, this function - * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the - * USB host. - */ -uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress) -{ - const uint8_t DescriptorType = (wValue >> 8); - const uint8_t DescriptorNumber = (wValue & 0xFF); - - void* Address = NULL; - uint16_t Size = NO_DESCRIPTOR; - - switch (DescriptorType) - { - case DTYPE_Device: - Address = DESCRIPTOR_ADDRESS(DeviceDescriptor); - Size = sizeof(USB_Descriptor_Device_t); - break; - case DTYPE_Configuration: - Address = DESCRIPTOR_ADDRESS(ConfigurationDescriptor); - Size = sizeof(USB_Descriptor_Configuration_t); - break; - case DTYPE_String: - switch (DescriptorNumber) - { - case 0x00: - Address = DESCRIPTOR_ADDRESS(LanguageString); - Size = pgm_read_byte(&LanguageString.Header.Size); - break; - case 0x01: - Address = DESCRIPTOR_ADDRESS(ManufacturerString); - Size = pgm_read_byte(&ManufacturerString.Header.Size); - break; - case 0x02: - Address = DESCRIPTOR_ADDRESS(ProductString); - Size = pgm_read_byte(&ProductString.Header.Size); - break; - } - - break; - } - - *DescriptorAddress = Address; - return Size; -} diff --git a/Projects/AVRISP_Programmer/Descriptors.h b/Projects/AVRISP_Programmer/Descriptors.h deleted file mode 100644 index bec5e40d4a..0000000000 --- a/Projects/AVRISP_Programmer/Descriptors.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2009. - - dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com -*/ - -/* - Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, and distribute this software - and its documentation for any purpose and without fee is hereby - granted, provided that the above copyright notice appear in all - copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaim all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * - * Header file for Descriptors.c. - */ - -#ifndef _DESCRIPTORS_H_ -#define _DESCRIPTORS_H_ - - /* Includes: */ - #include - - #include - - /* Macros: */ - /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a - * uniform structure but variable sized data payloads, thus cannot be represented accurately by - * a single typedef struct. A macro is used instead so that functional descriptors can be created - * easily by specifying the size of the payload. This allows sizeof() to work correctly. - * - * \param DataSize Size in bytes of the CDC functional descriptor's data payload - */ - #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize) \ - struct \ - { \ - USB_Descriptor_Header_t Header; \ - uint8_t SubType; \ - uint8_t Data[DataSize]; \ - } - - /** Endpoint number of the CDC device-to-host notification IN endpoint. */ - #define CDC_NOTIFICATION_EPNUM 2 - - /** Endpoint number of the CDC device-to-host data IN endpoint. */ - #define CDC_TX_EPNUM 3 - - /** Endpoint number of the CDC host-to-device data OUT endpoint. */ - #define CDC_RX_EPNUM 4 - - /** Size in bytes of the CDC device-to-host notification IN endpoint. */ - #define CDC_NOTIFICATION_EPSIZE 8 - - /** Size in bytes of the CDC data IN and OUT endpoints. */ - #define CDC_TXRX_EPSIZE 16 - - /* Type Defines: */ - /** Type define for the device configuration descriptor structure. This must be defined in the - * application code, as the configuration descriptor contains several sub-descriptors which - * vary between devices, and which describe the device's usage to the host. - */ - typedef struct - { - USB_Descriptor_Configuration_Header_t Config; - USB_Descriptor_Interface_t CCI_Interface; - CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_IntHeader; - CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement; - CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement; - CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union; - USB_Descriptor_Endpoint_t ManagementEndpoint; - USB_Descriptor_Interface_t DCI_Interface; - USB_Descriptor_Endpoint_t DataOutEndpoint; - USB_Descriptor_Endpoint_t DataInEndpoint; - } USB_Descriptor_Configuration_t; - - /* Function Prototypes: */ - uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress) - ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); - -#endif diff --git a/Projects/AVRISP_Programmer/Doxygen.conf b/Projects/AVRISP_Programmer/Doxygen.conf deleted file mode 100644 index 1eb8c5432e..0000000000 --- a/Projects/AVRISP_Programmer/Doxygen.conf +++ /dev/null @@ -1,1485 +0,0 @@ -# Doxyfile 1.5.7.1 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "LUFA Library - USB to Serial Device Demo" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 0.0.0 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ./Documentation/ - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = YES - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, -# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, -# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, -# Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = YES - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = NO - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = NO - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = NO - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -# doxygen. The layout file controls the global structure of the generated output files -# in an output format independent way. The create the layout file that represents -# doxygen's defaults, run doxygen with the -l option. You can optionally specify a -# file name after the option, if omitted DoxygenLayout.xml will be used as the name -# of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = ./ - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = *.h \ - *.c \ - *.txt - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = */LowLevel/USBMode.h - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = __* - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = NO - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = YES - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = YES - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -# are set, an additional index file will be generated that can be used as input for -# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -# HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# Qt Help Project / Namespace. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# Qt Help Project / Virtual Folders. - -QHP_VIRTUAL_FOLDER = doc - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file . - -QHG_LOCATION = - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 1 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to FRAME, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. Other possible values -# for this tag are: HIERARCHIES, which will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list; -# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which -# disables this behavior completely. For backwards compatibility with previous -# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE -# respectively. - -GENERATE_TREEVIEW = YES - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = __DOXYGEN__ - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = BUTTLOADTAG - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = NO - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = NO - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = NO - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = NO - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = NO - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = NO - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = NO - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = "C:/Program Files/Graphviz2.18/bin" - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 15 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 2 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = YES - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Projects/AVRISP_Programmer/LUFA AVRISP_Programmer.inf b/Projects/AVRISP_Programmer/LUFA AVRISP_Programmer.inf deleted file mode 100644 index bd9c8bf142..0000000000 --- a/Projects/AVRISP_Programmer/LUFA AVRISP_Programmer.inf +++ /dev/null @@ -1,55 +0,0 @@ -; Windows LUFA USB to Serial Setup File -; Copyright (c) 2000 Microsoft Corporation - -[Version] -Signature="$Windows NT$" -Class=Ports -ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} -Provider=%COMPANY% -LayoutFile=layout.inf -DriverVer=06/06/2006,1.0.0.0 - -[Manufacturer] -%MFGNAME% = ManufName - -[DestinationDirs] -DefaultDestDir=12 - -[ManufName] -%Modem3% = Modem3, USB\VID_03EB&PID_204B - -;------------------------------------------------------------------------------ -; Windows 2000/XP Sections -;------------------------------------------------------------------------------ - -[Modem3.nt] -CopyFiles=USBModemCopyFileSection -AddReg=Modem3.nt.AddReg - -[USBModemCopyFileSection] -usbser.sys,,,0x20 - -[Modem3.nt.AddReg] -HKR,,DevLoader,,*ntkern -HKR,,NTMPDriver,,usbser.sys -HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" - -[Modem3.nt.Services] -AddService=usbser, 0x00000002, DriverService - -[DriverService] -DisplayName=%SERVICE% -ServiceType=1 -StartType=3 -ErrorControl=1 -ServiceBinary=%12%\usbser.sys - -;------------------------------------------------------------------------------ -; String Definitions -;------------------------------------------------------------------------------ - -[Strings] -COMPANY="LUFA Library" -MFGNAME="Dean Camera" -Modem3="USB Virtual Serial Port" -SERVICE="USB Virtual Serial Port CDC Driver" \ No newline at end of file diff --git a/Projects/AVRISP_Programmer/RingBuff.c b/Projects/AVRISP_Programmer/RingBuff.c deleted file mode 100644 index 1f477f17ab..0000000000 --- a/Projects/AVRISP_Programmer/RingBuff.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2009. - - dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com -*/ - -/* - Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, and distribute this software - and its documentation for any purpose and without fee is hereby - granted, provided that the above copyright notice appear in all - copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaim all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -#include "RingBuff.h" - -void Buffer_Initialize(RingBuff_t* Buffer) -{ - BUFF_ATOMIC_BLOCK - { - Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer; - Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer; - Buffer->Elements = 0; - } -} - -void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data) -{ - BUFF_ATOMIC_BLOCK - { - #if defined(BUFF_DROPOLD) - if (Buffer->Elements == BUFF_LENGTH) - { - Buffer->OutPtr++; - - if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH]) - Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer; - } - else - { - Buffer->Elements++; - } - #elif defined(BUFF_DROPNEW) - if (Buffer->Elements == BUFF_LENGTH) - return; - - Buffer->Elements++; - #elif defined(BUFF_NODROPCHECK) - Buffer->Elements++; - #endif - - *(Buffer->InPtr) = Data; - Buffer->InPtr++; - - if (Buffer->InPtr == &Buffer->Buffer[BUFF_LENGTH]) - Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer; - } -} - -RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer) -{ - RingBuff_Data_t BuffData; - - BUFF_ATOMIC_BLOCK - { -#if defined(BUFF_EMPTYRETURNSZERO) - if (!(Buffer->Elements)) - return 0; -#elif !defined(BUFF_NOEMPTYCHECK) - #error No empty buffer check behaviour specified. -#endif - - BuffData = *(Buffer->OutPtr); - - Buffer->OutPtr++; - Buffer->Elements--; - - if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH]) - Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer; - } - - return BuffData; -} - -#if defined(BUFF_USEPEEK) -RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer) -{ - RingBuff_Data_t BuffData; - - BUFF_ATOMIC_BLOCK - { -#if defined(BUFF_EMPTYRETURNSZERO) - if (!(Buffer->Elements)) - return 0; -#elif !defined(BUFF_NOEMPTYCHECK) - #error No empty buffer check behaviour specified. -#endif - - BuffData = *(Buffer->OutPtr); - } - - return BuffData; -} -#endif diff --git a/Projects/AVRISP_Programmer/RingBuff.h b/Projects/AVRISP_Programmer/RingBuff.h deleted file mode 100644 index 68e4a6e75a..0000000000 --- a/Projects/AVRISP_Programmer/RingBuff.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2009. - - dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com -*/ - -/* - Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, and distribute this software - and its documentation for any purpose and without fee is hereby - granted, provided that the above copyright notice appear in all - copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaim all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/* Buffer Configuration: */ - /* Buffer length - select static size of created ringbuffers: */ - #define BUFF_STATICSIZE 128 // Set to the static ringbuffer size for all ringbuffers (place size after define) - - /* Volatile mode - uncomment to make buffers volatile, for use in ISRs, etc: */ - #define BUFF_VOLATILE // Uncomment to cause all ring buffers to become volatile (and atomic if multi-byte) in access - - /* Drop mode - select behaviour when Buffer_StoreElement called on a full buffer: */ - #define BUFF_DROPOLD // Uncomment to cause full ring buffers to drop the oldest character to make space when full - // #define BUFF_DROPNEW // Uncomment to cause full ring buffers to drop the new character when full - // #define BUFF_NODROPCHECK // Uncomment to ignore full ring buffer checks - checking left to user! - - /* Underflow behaviour - select behaviour when Buffer_GetElement is called with an empty ringbuffer: */ - //#define BUFF_EMPTYRETURNSZERO // Uncomment to return 0 when an empty ringbuffer is read - #define BUFF_NOEMPTYCHECK // Uncomment to disable checking of empty ringbuffers - checking left to user! - - /* Buffer storage type - set the datatype for the stored data */ - #define BUFF_DATATYPE uint8_t // Change to the data type that is going to be stored into the buffer - - /* Peek routine - uncomment to include the peek routine (fetches next byte without removing it from the buffer */ - #define BUFF_USEPEEK - -#ifndef _RINGBUFF_H_ -#define _RINGBUFF_H_ - - /* Includes: */ - #include - #include - #include - #include - - #include - - /* Defines and checks: */ - #if defined(BUFF_STATICSIZE) - #define BUFF_LENGTH BUFF_STATICSIZE - #else - #error No buffer length specified! - #endif - - #if !(defined(BUFF_DROPOLD) || defined(BUFF_DROPNEW) || defined(BUFF_NODROPCHECK)) - #error No buffer drop mode specified. - #endif - - #if !defined(BUFF_DATATYPE) - #error Ringbuffer storage data type not specified. - #endif - - #if defined(BUFF_VOLATILE) - #define BUFF_MODE volatile - #define BUFF_ATOMIC_BLOCK ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - #else - #define BUFF_MODE - #define BUFF_ATOMIC_BLOCK - #endif - - #if (BUFF_STATICSIZE > LONG_MAX) - #define RingBuff_Elements_t uint64_t - #elif (BUFF_STATICSIZE > INT_MAX) - #define RingBuff_Elements_t uint32_t - #elif (BUFF_STATICSIZE > CHAR_MAX) - #define RingBuff_Elements_t uint16_t - #else - #define RingBuff_Elements_t uint8_t - #endif - - /* Type Defines: */ - typedef BUFF_DATATYPE RingBuff_Data_t; - - typedef BUFF_MODE struct - { - RingBuff_Data_t Buffer[BUFF_LENGTH]; - RingBuff_Data_t* InPtr; - RingBuff_Data_t* OutPtr; - RingBuff_Elements_t Elements; - } RingBuff_t; - - /* Function Prototypes: */ - void Buffer_Initialize(RingBuff_t* Buff); - void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data); - RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer); - #if defined(BUFF_USEPEEK) - RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer); - #endif - -#endif diff --git a/Projects/AVRISP_Programmer/Sample_Programming_Session.txt b/Projects/AVRISP_Programmer/Sample_Programming_Session.txt deleted file mode 100644 index b5af76ebb4..0000000000 --- a/Projects/AVRISP_Programmer/Sample_Programming_Session.txt +++ /dev/null @@ -1,104 +0,0 @@ -ubuntu@ubuntu:~/LUFA/Bootloaders/LUFA_DFU_Bootloader_AT90USB162$ sudo avrdude -vv -F -P /dev/ttyACM0 -c avr910 -p usb162 -U flash:w:BootloaderDFU.hex - -avrdude: Version 5.5, compiled on May 9 2008 at 13:04:46 - Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ - - System wide configuration file is "/etc/avrdude.conf" - User configuration file is "/home/ubuntu/.avrduderc" - User configuration file does not exist or is not a regular file, skipping - - Using Port : /dev/ttyACM0 - Using Programmer : avr910 - AVR Part : AT90USB162 - Chip Erase delay : 9000 us - PAGEL : PD7 - BS2 : PA0 - RESET disposition : dedicated - RETRY pulse : SCK - serial program mode : yes - parallel program mode : yes - Timeout : 200 - StabDelay : 100 - CmdexeDelay : 25 - SyncLoops : 32 - ByteDelay : 0 - PollIndex : 3 - PollValue : 0x53 - Memory Detail : - - Block Poll Page Polled - Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack - ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- - eeprom 65 10 8 0 no 512 4 0 9000 9000 0x00 0x00 - flash 65 6 128 0 yes 16384 128 128 4500 4500 0x00 0x00 - lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 - hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 - efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 - lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 - calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 - signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 - - Programmer Type : avr910 - Description : Atmel Low Cost Serial Programmer - -Found programmer: Id = "AVR ISP"; type = S - Software Version = 2.3; Hardware Version = 1.0 -Programmer supports auto addr increment. - -Programmer supports the following devices: - Device code: 0x55 = ATtiny12 - Device code: 0x56 = ATtiny15 - Device code: 0x5e = ATtiny2313 - Device code: 0x76 = ATMEGA8 - Device code: 0x74 = ATMEGA6450 - Device code: 0x72 = ATMEGA32 - Device code: 0x45 = ATMEGA64 - Device code: 0x74 = ATMEGA6450 - Device code: 0x43 = ATMEGA128 - Device code: 0x63 = ATMEGA162 - Device code: 0x78 = ATMEGA169 - Device code: 0x6c = AT90S4434 - Device code: 0x38 = AT90S8515 - Device code: 0x65 = (unknown) - -avrdude: warning: selected device is not supported by programmer: usb162 -avrdude: AVR device initialized and ready to accept instructions - -Reading | ################################################## | 100% 0.00s - -avrdude: Device signature = 0x1e9482 -avrdude: safemode: lfuse reads as 5E -avrdude: safemode: hfuse reads as D9 -avrdude: safemode: efuse reads as F4 -avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed - To disable this feature, specify the -D option. -avrdude: erasing chip -avrdude: reading input file "BootloaderDFU.hex" -avrdude: input file BootloaderDFU.hex auto detected as Intel Hex -avrdude: writing flash (16066 bytes): - -Writing | ################################################## | 100% 33.39s - - - -avrdude: 16066 bytes of flash written -avrdude: verifying flash memory against BootloaderDFU.hex: -avrdude: load data flash data from input file BootloaderDFU.hex: -avrdude: input file BootloaderDFU.hex auto detected as Intel Hex -avrdude: input file BootloaderDFU.hex contains 16066 bytes -avrdude: reading on-chip flash data: - -Reading | ################################################## | 100% 16.07s - - - -avrdude: verifying ... -avrdude: 16066 bytes of flash verified - -avrdude: safemode: lfuse reads as 5E -avrdude: safemode: hfuse reads as D9 -avrdude: safemode: efuse reads as F4 -avrdude: safemode: Fuses OK - -avrdude done. Thank you. - diff --git a/Projects/AVRISP_Programmer/makefile b/Projects/AVRISP_Programmer/makefile deleted file mode 100644 index 0938f05185..0000000000 --- a/Projects/AVRISP_Programmer/makefile +++ /dev/null @@ -1,726 +0,0 @@ -# Hey Emacs, this is a -*- makefile -*- -#---------------------------------------------------------------------------- -# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. -# >> Modified for use with the LUFA project. << -# -# Released to the Public Domain -# -# Additional material for this makefile was written by: -# Peter Fleury -# Tim Henigan -# Colin O'Flynn -# Reiner Patommel -# Markus Pfaff -# Sander Pool -# Frederik Rouleau -# Carlos Lamas -# Dean Camera -# Opendous Inc. -# Denver Gingerich -# -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF. -# -# make extcoff = Convert ELF to AVR Extended COFF. -# -# make program = Download the hex file to the device, using avrdude. -# Please customize the avrdude settings below first! -# -# make dfu = Download the hex file to the device, using dfu-programmer (must -# have dfu-programmer installed). -# -# make flip = Download the hex file to the device, using Atmel FLIP (must -# have Atmel FLIP installed). -# -# make dfu-ee = Download the eeprom file to the device, using dfu-programmer -# (must have dfu-programmer installed). -# -# make flip-ee = Download the eeprom file to the device, using Atmel FLIP -# (must have Atmel FLIP installed). -# -# make doxygen = Generate DoxyGen documentation for the project (must have -# DoxyGen installed) -# -# make debug = Start either simulavr or avarice as specified for debugging, -# with avr-gdb or avr-insight as the front end for debugging. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- - - -# MCU name -MCU = at90usb1287 - - -# Target board (USBKEY, STK525, STK526, RZUSBSTICK, USER or blank for projects not requiring -# LUFA board drivers). If USER is selected, put custom board drivers in a directory called -# "Board" inside the application directory. -BOARD = USBKEY - - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# Typical values are: -# F_CPU = 1000000 -# F_CPU = 1843200 -# F_CPU = 2000000 -# F_CPU = 3686400 -# F_CPU = 4000000 -# F_CPU = 7372800 -# F_CPU = 8000000 -# F_CPU = 11059200 -# F_CPU = 14745600 -# F_CPU = 16000000 -# F_CPU = 18432000 -# F_CPU = 20000000 -F_CPU = 8000000 - - -# Input clock frequency. -# This will define a symbol, F_CLOCK, in all source code files equal to the -# input clock frequency (before any prescaling is performed). This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_CLOCK = 8000000 - - -# Output format. (can be srec, ihex, binary) -FORMAT = ihex - - -# Target file name (without extension). -TARGET = AVRISP_Programmer - - -# Object files directory -# To put object files in current directory, use a dot (.), do NOT make -# this an empty or blank macro! -OBJDIR = . - - -# List C source files here. (C dependencies are automatically generated.) -SRC = $(TARGET).c \ - Descriptors.c \ - RingBuff.c \ - ../../LUFA/Scheduler/Scheduler.c \ - ../../LUFA/Drivers/AT90USBXXX/Serial.c \ - ../../LUFA/Drivers/USB/LowLevel/LowLevel.c \ - ../../LUFA/Drivers/USB/LowLevel/Endpoint.c \ - ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c \ - ../../LUFA/Drivers/USB/HighLevel/USBTask.c \ - ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c \ - ../../LUFA/Drivers/USB/HighLevel/Events.c \ - ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c \ - -# List C++ source files here. (C dependencies are automatically generated.) -CPPSRC = - - -# List Assembler source files here. -# Make them always end in a capital .S. Files ending in a lowercase .s -# will not be considered source files but generated files (assembler -# output from the compiler), and will be deleted upon "make clean"! -# Even though the DOS/Win* filesystem matches both .s and .S the same, -# it will preserve the spelling of the filenames, and gcc itself does -# care about how the name is spelled on its command-line. -ASRC = - - -# Optimization level, can be [0, 1, 2, 3, s]. -# 0 = turn off optimization. s = optimize for size. -# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) -OPT = s - - -# Debugging format. -# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. -# AVR Studio 4.10 requires dwarf-2. -# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. -DEBUG = dwarf-2 - - -# List any extra directories to look for include files here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS = ../../ - - -# Compiler flag to set the C Standard level. -# c89 = "ANSI" C -# gnu89 = c89 plus GCC extensions -# c99 = ISO C99 standard (not yet fully implemented) -# gnu99 = c99 plus GCC extensions -CSTANDARD = -std=gnu99 - - -# Place -D or -U options here for C sources -CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD) -CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY -CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" - - -# Place -D or -U options here for ASM sources -ADEFS = -DF_CPU=$(F_CPU) - - -# Place -D or -U options here for C++ sources -CPPDEFS = -DF_CPU=$(F_CPU)UL -#CPPDEFS += -D__STDC_LIMIT_MACROS -#CPPDEFS += -D__STDC_CONSTANT_MACROS - - - -#---------------- Compiler Options C ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CFLAGS = -g$(DEBUG) -CFLAGS += $(CDEFS) -CFLAGS += -O$(OPT) -CFLAGS += -funsigned-char -CFLAGS += -funsigned-bitfields -CFLAGS += -ffunction-sections -CFLAGS += -fpack-struct -CFLAGS += -fshort-enums -CFLAGS += -finline-limit=20 -CFLAGS += -Wall -CFLAGS += -Wstrict-prototypes -CFLAGS += -Wundef -#CFLAGS += -fno-unit-at-a-time -#CFLAGS += -Wunreachable-code -#CFLAGS += -Wsign-compare -CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) -CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -CFLAGS += $(CSTANDARD) - - -#---------------- Compiler Options C++ ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CPPFLAGS = -g$(DEBUG) -CPPFLAGS += $(CPPDEFS) -CPPFLAGS += -O$(OPT) -CPPFLAGS += -funsigned-char -CPPFLAGS += -funsigned-bitfields -CPPFLAGS += -fpack-struct -CPPFLAGS += -fshort-enums -CPPFLAGS += -fno-exceptions -CPPFLAGS += -Wall -CFLAGS += -Wundef -#CPPFLAGS += -mshort-calls -#CPPFLAGS += -fno-unit-at-a-time -#CPPFLAGS += -Wstrict-prototypes -#CPPFLAGS += -Wunreachable-code -#CPPFLAGS += -Wsign-compare -CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) -CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -#CPPFLAGS += $(CSTANDARD) - - -#---------------- Assembler Options ---------------- -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns: create listing -# -gstabs: have the assembler create line number information; note that -# for use in COFF files, additional information about filenames -# and function names needs to be present in the assembler source -# files -- see avr-libc docs [FIXME: not yet described there] -# -listing-cont-lines: Sets the maximum number of continuation lines of hex -# dump that will be displayed for a given single line of source input. -ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 - - -#---------------- Library Options ---------------- -# Minimalistic printf version -PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min - -# Floating point printf version (requires MATH_LIB = -lm below) -PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt - -# If this is left blank, then it will use the Standard printf version. -PRINTF_LIB = -#PRINTF_LIB = $(PRINTF_LIB_MIN) -#PRINTF_LIB = $(PRINTF_LIB_FLOAT) - - -# Minimalistic scanf version -SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min - -# Floating point + %[ scanf version (requires MATH_LIB = -lm below) -SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt - -# If this is left blank, then it will use the Standard scanf version. -SCANF_LIB = -#SCANF_LIB = $(SCANF_LIB_MIN) -#SCANF_LIB = $(SCANF_LIB_FLOAT) - - -MATH_LIB = -lm - - -# List any extra directories to look for libraries here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRALIBDIRS = - - - -#---------------- External Memory Options ---------------- - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# used for variables (.data/.bss) and heap (malloc()). -#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# only used for heap (malloc()). -#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff - -EXTMEMOPTS = - - - -#---------------- Linker Options ---------------- -# -Wl,...: tell GCC to pass this to linker. -# -Map: create map file -# --cref: add cross reference to map file -LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += -Wl,--relax -LDFLAGS += -Wl,--gc-sections -LDFLAGS += $(EXTMEMOPTS) -LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) -LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) -#LDFLAGS += -T linker_script.x - - - -#---------------- Programming Options (avrdude) ---------------- - -# Programming hardware: alf avr910 avrisp bascom bsd -# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 -# -# Type: avrdude -c ? -# to get a full listing. -# -AVRDUDE_PROGRAMMER = jtagmkII - -# com1 = serial port. Use lpt1 to connect to parallel port. -AVRDUDE_PORT = usb - -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex -#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep - - -# Uncomment the following if you want avrdude's erase cycle counter. -# Note that this counter needs to be initialized first using -Yn, -# see avrdude manual. -#AVRDUDE_ERASE_COUNTER = -y - -# Uncomment the following if you do /not/ wish a verification to be -# performed after programming the device. -#AVRDUDE_NO_VERIFY = -V - -# Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See -# to submit bug reports. -#AVRDUDE_VERBOSE = -v -v - -AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - - - -#---------------- Debugging Options ---------------- - -# For simulavr only - target MCU frequency. -DEBUG_MFREQ = $(F_CPU) - -# Set the DEBUG_UI to either gdb or insight. -# DEBUG_UI = gdb -DEBUG_UI = insight - -# Set the debugging back-end to either avarice, simulavr. -DEBUG_BACKEND = avarice -#DEBUG_BACKEND = simulavr - -# GDB Init Filename. -GDBINIT_FILE = __avr_gdbinit - -# When using avarice settings for the JTAG -JTAG_DEV = /dev/com1 - -# Debugging port used to communicate between GDB / avarice / simulavr. -DEBUG_PORT = 4242 - -# Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when -# avarice is running on a different computer. -DEBUG_HOST = localhost - - - -#============================================================================ - - -# Define programs and commands. -SHELL = sh -CC = avr-gcc -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump -SIZE = avr-size -AR = avr-ar rcs -NM = avr-nm -AVRDUDE = avrdude -REMOVE = rm -f -REMOVEDIR = rm -rf -COPY = cp -WINSHELL = cmd - -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_COFF = Converting to AVR COFF: -MSG_EXTENDED_COFF = Converting to AVR Extended COFF: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling C: -MSG_COMPILING_CPP = Compiling C++: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: -MSG_CREATING_LIBRARY = Creating library: - - - - -# Define all object files. -OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) - -# Define all listing files. -LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) - - -# Compiler flags to generate dependency files. -GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d - - -# Combine all necessary flags and optional flags. -# Add target processor to flags. -ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) -ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) -ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) - - - - - -# Default target. -all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end - -# Change the build target to build a HEX file or a library. -build: elf hex eep lss sym -#build: lib - - -elf: $(TARGET).elf -hex: $(TARGET).hex -eep: $(TARGET).eep -lss: $(TARGET).lss -sym: $(TARGET).sym -LIBNAME=lib$(TARGET).a -lib: $(LIBNAME) - - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. -begin: - @echo - @echo $(MSG_BEGIN) - -end: - @echo $(MSG_END) - @echo - - -# Display size of file. -HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex -ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf -MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) -FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) - -sizebefore: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ - 2>/dev/null; echo; fi - -sizeafter: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ - 2>/dev/null; echo; fi - -checkhooks: build - @echo - @echo ------- Unhooked LUFA Events ------- - @$(shell) (grep -s '^Event.*LUFA/.*\\.o' $(TARGET).map | \ - cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \ - echo "(None)" - @echo ------------------------------------ - -checklibmode: - @echo - @echo ----------- Library Mode ----------- - @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \ - | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \ - || echo "No specific mode (both device and host mode allowable)." - @echo ------------------------------------ - -checkboard: - @echo - @echo ---------- Selected Board ---------- - @echo Selected board model is $(BOARD). - @echo ------------------------------------ - -# Display compiler version information. -gccversion : - @$(CC) --version - - - -# Program the device. -program: $(TARGET).hex $(TARGET).eep - $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) - -flip: $(TARGET).hex - batchisp -hardware usb -device $(MCU) -operation erase f - batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 - -dfu: $(TARGET).hex - dfu-programmer $(MCU) erase - dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex - dfu-programmer $(MCU) reset - -flip-ee: $(TARGET).hex $(TARGET).eep - copy $(TARGET).eep $(TARGET)eep.hex - batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase - batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 - -dfu-ee: $(TARGET).hex $(TARGET).eep - dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep - dfu-programmer $(MCU) reset - - -# Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set -# a breakpoint at main(). -gdb-config: - @$(REMOVE) $(GDBINIT_FILE) - @echo define reset >> $(GDBINIT_FILE) - @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) - @echo end >> $(GDBINIT_FILE) - @echo file $(TARGET).elf >> $(GDBINIT_FILE) - @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) -ifeq ($(DEBUG_BACKEND),simulavr) - @echo load >> $(GDBINIT_FILE) -endif - @echo break main >> $(GDBINIT_FILE) - -debug: gdb-config $(TARGET).elf -ifeq ($(DEBUG_BACKEND), avarice) - @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. - @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ - $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) - @$(WINSHELL) /c pause - -else - @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ - $(DEBUG_MFREQ) --port $(DEBUG_PORT) -endif - @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) - - - - -# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. -COFFCONVERT = $(OBJCOPY) --debugging -COFFCONVERT += --change-section-address .data-0x800000 -COFFCONVERT += --change-section-address .bss-0x800000 -COFFCONVERT += --change-section-address .noinit-0x800000 -COFFCONVERT += --change-section-address .eeprom-0x810000 - - - -coff: $(TARGET).elf - @echo - @echo $(MSG_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(TARGET).cof - - -extcoff: $(TARGET).elf - @echo - @echo $(MSG_EXTENDED_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof - - - -# Create final output files (.hex, .eep) from ELF output file. -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ - -%.eep: %.elf - @echo - @echo $(MSG_EEPROM) $@ - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ - --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 - -# Create extended listing file from ELF output file. -%.lss: %.elf - @echo - @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -z -S $< > $@ - -# Create a symbol table from ELF output file. -%.sym: %.elf - @echo - @echo $(MSG_SYMBOL_TABLE) $@ - $(NM) -n $< > $@ - - - -# Create library from object files. -.SECONDARY : $(TARGET).a -.PRECIOUS : $(OBJ) -%.a: $(OBJ) - @echo - @echo $(MSG_CREATING_LIBRARY) $@ - $(AR) $@ $(OBJ) - - -# Link: create ELF output file from object files. -.SECONDARY : $(TARGET).elf -.PRECIOUS : $(OBJ) -%.elf: $(OBJ) - @echo - @echo $(MSG_LINKING) $@ - $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) - - -# Compile: create object files from C source files. -$(OBJDIR)/%.o : %.c - @echo - @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ - - -# Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp - @echo - @echo $(MSG_COMPILING_CPP) $< - $(CC) -c $(ALL_CPPFLAGS) $< -o $@ - - -# Compile: create assembler files from C source files. -%.s : %.c - $(CC) -S $(ALL_CFLAGS) $< -o $@ - - -# Compile: create assembler files from C++ source files. -%.s : %.cpp - $(CC) -S $(ALL_CPPFLAGS) $< -o $@ - - -# Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S - @echo - @echo $(MSG_ASSEMBLING) $< - $(CC) -c $(ALL_ASFLAGS) $< -o $@ - - -# Create preprocessed source for use in sending a bug report. -%.i : %.c - $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ - - -# Target: clean project. -clean: begin clean_list clean_binary end - -clean_binary: - $(REMOVE) $(TARGET).hex - -clean_list: - @echo $(MSG_CLEANING) - $(REMOVE) $(TARGET).eep - $(REMOVE) $(TARGET)eep.hex - $(REMOVE) $(TARGET).cof - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lss - $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) - $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) - $(REMOVE) $(SRC:.c=.s) - $(REMOVE) $(SRC:.c=.d) - $(REMOVE) $(SRC:.c=.i) - $(REMOVEDIR) .dep - - -doxygen: - @echo Generating Project Documentation... - @doxygen Doxygen.conf - @echo Documentation Generation Complete. - -clean_doxygen: - rm -rf Documentation - -# Create object files directory -$(shell mkdir $(OBJDIR) 2>/dev/null) - - -# Include the dependency files. --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - - -# Listing of phony targets. -.PHONY : all checkhooks checklibmode checkboard \ -begin finish end sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff clean \ -clean_list clean_binary program debug gdb-config \ -doxygen dfu flip flip-ee dfu-ee \ No newline at end of file diff --git a/Projects/Magstripe/Magstripe.txt b/Projects/Magstripe/Magstripe.txt index d91fddde7f..af95650593 100644 --- a/Projects/Magstripe/Magstripe.txt +++ b/Projects/Magstripe/Magstripe.txt @@ -5,7 +5,36 @@ */ /** \mainpage Denver Gingerich's USBSnoop Magnetic Card Reader Project - * + * + * \section SSec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
USB Mode:Device
USB Class:Human Interface Device (HID)
USB Subclass:Keyboard
Relevant Standards:USBIF HID Standard, USBIF HID Usage Tables
Usable Speeds:Low Speed Mode, Full Speed Mode
+ * + * \section SSec_Description Project Description: + * * Firmware for a USB AVR powered USB TTL magnetic stripe reader (using a card * reader such as the Omron V3B-4K) by Denver Gingerich. This project is designed * to be used with the open source Stripe Snoop project at http://stripesnoop.sourceforge.net/. @@ -51,7 +80,6 @@ * * * - * * This project is based on the LUFA Keyboard demonstration application, * written by Denver Gingerich. * @@ -60,26 +88,20 @@ * obtained from the magnetic stripe reader is "typed" through the keyboard * driver as 0's and 1's. After every card swipe, the demo will send a return key. * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
USB Mode:Device
USB Class:Human Interface Device (HID)
USB Subclass:Keyboard
Relevant Standards:USBIF HID Standard, USBIF HID Usage Tables
Usable Speeds:Low Speed Mode, Full Speed Mode
- */ + * \section SSec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + * + * + * + * + * + * + * + *
Define Name:Location:Description:
MAX_BITSCircularBitBuffer.hGives the maximum number of bits per track which can be buffered by the device for later transmission to a host.
+ */ \ No newline at end of file diff --git a/Projects/makefile b/Projects/makefile index 50851a3ef6..59de892bf9 100644 --- a/Projects/makefile +++ b/Projects/makefile @@ -16,10 +16,6 @@ all: make -C Magstripe clean make -C Magstripe all - - make -C AVRISP_Programmer clean - make -C AVRISP_Programmer all %: make -C Magstripe $@ - make -C AVRISP_Programmer $@