X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/071e02c6b6b4837fa9cf0b6d4c749994e02638d7..82fa9149d705b70fc6d0e53e3d164fe138ce9a8b:/LUFA/Drivers/USB/USB.h?ds=inline diff --git a/LUFA/Drivers/USB/USB.h b/LUFA/Drivers/USB/USB.h index 8b151b59f..fcb74006f 100644 --- a/LUFA/Drivers/USB/USB.h +++ b/LUFA/Drivers/USB/USB.h @@ -1,21 +1,21 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com + www.lufa-lib.org */ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -37,20 +37,23 @@ * including any headers in the USB/LowLevel/ or USB/HighLevel/ subdirectories. */ -/** @defgroup Group_USB USB - LUFA/Drivers/USB/USB.h +/** @defgroup Group_USB USB Core - LUFA/Drivers/USB/USB.h * * \section Sec_Dependencies Module Source Dependencies * The following files must be built with any user project that uses this module: - * - LUFA/Drivers/USB/LowLevel/DevChapter9.c - * - LUFA/Drivers/USB/LowLevel/Endpoint.c - * - LUFA/Drivers/USB/LowLevel/Host.c - * - LUFA/Drivers/USB/LowLevel/HostChapter9.c - * - LUFA/Drivers/USB/LowLevel/LowLevel.c - * - LUFA/Drivers/USB/LowLevel/Pipe.c - * - LUFA/Drivers/USB/LowLevel/USBInterrupt.c - * - LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c - * - LUFA/Drivers/USB/HighLevel/Events.c - * - LUFA/Drivers/USB/HighLevel/USBTask.c + * - LUFA/Drivers/USB/LowLevel/Device.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/LowLevel/Endpoint.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/LowLevel/Host.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/LowLevel/Pipe.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/LowLevel/USBController.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/LowLevel/USBInterrupt.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/HighLevel/Events.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/HighLevel/EndpointStream.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/HighLevel/HostStandardReq.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/HighLevel/PipeStream.c (Makefile source module name: LUFA_SRC_USB) + * - LUFA/Drivers/USB/HighLevel/USBTask.c (Makefile source module name: LUFA_SRC_USB) * * \section Module Description * Driver and framework for the USB controller hardware on the USB series of AVR microcontrollers. This module @@ -67,8 +70,7 @@ * of USB management functions found \ref Group_USBManagement. */ -/** \ingroup Group_USB - * @defgroup Group_USBClassDrivers USB Class Drivers +/** @defgroup Group_USBClassDrivers USB Class Drivers * * Drivers for both host and device mode of the standard USB classes, for rapid application development. * Class drivers give a framework which sits on top of the low level library API, allowing for standard @@ -84,9 +86,9 @@ * * * - * - * - * + * + * + * * * * @@ -139,10 +141,10 @@ * * \subsection SSec_ClassDriverDevice Device Mode Class Drivers * Implementing a Device Mode Class Driver in a user application requires a number of steps to be followed. Firstly, - * the module configuration and state structure must be added to the project source. These structures are named in a + * the module configuration and state structure must be added to the project source. These structures are named in a * similar manner between classes, that of USB_ClassInfo_{Class Name}_Device_t, and are used to hold the - * complete state and configuration for each class instance. Multiple class instances is where the power of the class - * drivers lie; multiple interfaces of the same class simply require more instances of the Class Driver's ClassInfo + * complete state and configuration for each class instance. Multiple class instances is where the power of the class + * drivers lie; multiple interfaces of the same class simply require more instances of the Class Driver's ClassInfo * structure. * * Inside the ClassInfo structure lies two sections, a Config section, and a State section. The Config @@ -161,7 +163,7 @@ * .Config = * { * .StreamingInterfaceNumber = 1, - * + * * .DataINEndpointNumber = 1, * .DataINEndpointSize = 256, * }, @@ -173,37 +175,37 @@ * * To initialize the Class driver instance, the driver's {Class Name}_Device_ConfigureEndpoints() function * should be called in response to the \ref EVENT_USB_Device_ConfigurationChanged() event. This function will return a - * boolean value if the driver sucessfully initialized the instance. Like all the class driver functions, this function - * takes in the address of the specific instance you wish to initialize - in this manner, multiple seperate instances of + * boolean value if the driver successfully initialized the instance. Like all the class driver functions, this function + * takes in the address of the specific instance you wish to initialize - in this manner, multiple separate instances of * the same class type can be initialized like thus: * * \code * void EVENT_USB_Device_ConfigurationChanged(void) * { * LEDs_SetAllLEDs(LEDMASK_USB_READY); - * + * * if (!(Audio_Device_ConfigureEndpoints(&My_Audio_Interface))) * LEDs_SetAllLEDs(LEDMASK_USB_ERROR); * } * \endcode - * + * * Once initialized, it is important to maintain the class driver's state by repeatedly calling the Class Driver's * {Class Name}_Device_USBTask() function in the main program loop. The exact implementation of this * function varies between class drivers, and can be used for any internal class driver purpose to maintain each * instance. Again, this function uses the address of the instance to operate on, and thus needs to be called for each - * seperate instance, just like the main USB maintenance routine \ref USB_USBTask(): + * separate instance, just like the main USB maintenance routine \ref USB_USBTask(): * * \code * int main(void) * { * SetupHardware(); - * + * * LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); - * + * * for (;;) * { * Create_And_Process_Samples(); - * + * * Audio_Device_USBTask(&My_Audio_Interface); * USB_USBTask(); * } @@ -212,14 +214,14 @@ * * The final standardized Device Class Driver function is the Control Request handler function * {Class Name}_Device_ProcessControlRequest(), which should be called when the - * \ref EVENT_USB_Device_UnhandledControlRequest() event fires. This function should also be - * called for each class driver instance, using the address of the instance to operate on as - * the function's parameter. The request handler will abort if it is determined that the current - * request is not targeted at the given class driver instance, thus these methods can safely be - * called one-after-another in the event handler with no form of error checking: + * \ref EVENT_USB_Device_ControlRequest() event fires. This function should also be called for + * each class driver instance, using the address of the instance to operate on as the function's + * parameter. The request handler will abort if it is determined that the current request is not + * targeted at the given class driver instance, thus these methods can safely be called + * one-after-another in the event handler with no form of error checking: * * \code - * void EVENT_USB_Device_UnhandledControlRequest(void) + * void EVENT_USB_Device_ControlRequest(void) * { * Audio_Device_ProcessControlRequest(&My_Audio_Interface); * } @@ -238,10 +240,10 @@ * * \subsection SSec_ClassDriverHost Host Mode Class Drivers * Implementing a Host Mode Class Driver in a user application requires a number of steps to be followed. Firstly, - * the module configuration and state structure must be added to the project source. These structures are named in a + * the module configuration and state structure must be added to the project source. These structures are named in a * similar manner between classes, that of USB_ClassInfo_{Class Name}_Host_t, and are used to hold the - * complete state and configuration for each class instance. Multiple class instances is where the power of the class - * drivers lie; multiple interfaces of the same class simply require more instances of the Class Driver's ClassInfo + * complete state and configuration for each class instance. Multiple class instances is where the power of the class + * drivers lie; multiple interfaces of the same class simply require more instances of the Class Driver's ClassInfo * structure. * * Inside the ClassInfo structure lies two sections, a Config section, and a State section. The Config @@ -261,7 +263,7 @@ * { * .DataINPipeNumber = 1, * .DataINPipeDoubleBank = false, - * + * * .DataOUTPipeNumber = 2, * .DataOUTPipeDoubleBank = false, * }, @@ -271,9 +273,9 @@ * To initialize the Class driver instance, the driver's {Class Name}_Host_ConfigurePipes() function * should be called in response to the host state machine entering the \ref HOST_STATE_Addressed state. This function * will return an error code from the class driver's {Class Name}_EnumerationFailure_ErrorCodes_t enum - * to indicate if the driver sucessfully initialized the instance and bound it to an interface in the attached device. - * Like all the class driver functions, this function takes in the address of the specific instance you wish to initialize - * - in this manner, multiple seperate instances of the same class type can be initialized. A fragment of a Class Driver + * to indicate if the driver successfully initialized the instance and bound it to an interface in the attached device. + * Like all the class driver functions, this function takes in the address of the specific instance you wish to initialize - + * in this manner, multiple separate instances of the same class type can be initialized. A fragment of a Class Driver * based Host mode application may look like the following: * * \code @@ -281,7 +283,7 @@ * { * case HOST_STATE_Addressed: * LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); - * + * * uint16_t ConfigDescriptorSize; * uint8_t ConfigDescriptorData[512]; * @@ -315,22 +317,22 @@ * {Class Name}_Host_USBTask() function in the main program loop. The exact implementation of this * function varies between class drivers, and can be used for any internal class driver purpose to maintain each * instance. Again, this function uses the address of the instance to operate on, and thus needs to be called for each - * seperate instance, just like the main USB maintenance routine \ref USB_USBTask(): + * separate instance, just like the main USB maintenance routine \ref USB_USBTask(): * * \code * int main(void) * { * SetupHardware(); - * + * * LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); - * + * * for (;;) * { * switch (USB_HostState) * { * // Host state machine handling here - * } - * + * } + * * MIDI_Host_USBTask(&My_Audio_Interface); * USB_USBTask(); * } @@ -348,7 +350,7 @@ * read and write routines. See each driver's individual documentation for more information on the * class-specific functions. */ - + #ifndef __USB_H__ #define __USB_H__ @@ -360,36 +362,47 @@ /* Includes: */ #include "HighLevel/USBMode.h" - /* Preprocessor Checks: */ + /* Preprocessor Checks: */ #if (!defined(USB_SERIES_2_AVR) && !defined(USB_SERIES_4_AVR) && \ !defined(USB_SERIES_6_AVR) && !defined(USB_SERIES_7_AVR)) #error The currently selected AVR model is not supported under the USB component of the LUFA library. #endif - + /* Includes: */ #include "HighLevel/USBTask.h" #include "HighLevel/Events.h" #include "HighLevel/StdDescriptors.h" #include "HighLevel/ConfigDescriptor.h" - #include "LowLevel/LowLevel.h" + #include "LowLevel/USBController.h" #include "LowLevel/USBInterrupt.h" - + #if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__) #include "LowLevel/Host.h" - #include "LowLevel/HostChapter9.h" #include "LowLevel/Pipe.h" + #include "HighLevel/HostStandardReq.h" + #include "HighLevel/PipeStream.h" #endif - + #if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__) #include "LowLevel/Device.h" - #include "LowLevel/DevChapter9.h" #include "LowLevel/Endpoint.h" + #include "HighLevel/DeviceStandardReq.h" + #include "HighLevel/EndpointStream.h" #endif - + #if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__) #include "LowLevel/OTG.h" #endif - + + #include "Class/Audio.h" + #include "Class/CDC.h" + #include "Class/HID.h" + #include "Class/MassStorage.h" + #include "Class/MIDI.h" + #include "Class/Printer.h" + #include "Class/RNDIS.h" + #include "Class/StillImage.h" + #endif
USB ClassDevice ModeHost ModeUSB ClassDevice ModeHost Mode
Audio