Commit e53c7397f80b60a0ccf490445e76ab8d1436af7e

Authored by gperson
2 parents ca85a266 194cd0c4

Merge branch 'arduino' of https://archives.plil.fr/gperson/TutoratPersonChemin into arduino

src/question5/PolytechLille/Manette/.Manette.c.swp 0 → 100644
No preview for this file type
src/question5/PolytechLille/Manette/Config/LUFAConfig.h 0 → 100644
... ... @@ -0,0 +1,126 @@
  1 +/*
  2 + LUFA Library
  3 + Copyright (C) Dean Camera, 2017.
  4 +
  5 + dean [at] fourwalledcubicle [dot] com
  6 + www.lufa-lib.org
  7 +*/
  8 +
  9 +/*
  10 + Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com)
  11 +
  12 + Permission to use, copy, modify, distribute, and sell this
  13 + software and its documentation for any purpose is hereby granted
  14 + without fee, provided that the above copyright notice appear in
  15 + all copies and that both that the copyright notice and this
  16 + permission notice and warranty disclaimer appear in supporting
  17 + documentation, and that the name of the author not be used in
  18 + advertising or publicity pertaining to distribution of the
  19 + software without specific, written prior permission.
  20 +
  21 + The author disclaims all warranties with regard to this
  22 + software, including all implied warranties of merchantability
  23 + and fitness. In no event shall the author be liable for any
  24 + special, indirect or consequential damages or any damages
  25 + whatsoever resulting from loss of use, data or profits, whether
  26 + in an action of contract, negligence or other tortious action,
  27 + arising out of or in connection with the use or performance of
  28 + this software.
  29 +*/
  30 +
  31 +/** \file
  32 + * \brief LUFA Library Configuration Header File
  33 + *
  34 + * This header file is used to configure LUFA's compile time options,
  35 + * as an alternative to the compile time constants supplied through
  36 + * a makefile.
  37 + *
  38 + * For information on what each token does, refer to the LUFA
  39 + * manual section "Summary of Compile Tokens".
  40 + */
  41 +
  42 +#ifndef _LUFA_CONFIG_H_
  43 +#define _LUFA_CONFIG_H_
  44 +
  45 + #if (ARCH == ARCH_AVR8)
  46 +
  47 + /* Non-USB Related Configuration Tokens: */
  48 +// #define DISABLE_TERMINAL_CODES
  49 +
  50 + /* USB Class Driver Related Tokens: */
  51 +// #define HID_HOST_BOOT_PROTOCOL_ONLY
  52 +// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here}
  53 +// #define HID_USAGE_STACK_DEPTH {Insert Value Here}
  54 +// #define HID_MAX_COLLECTIONS {Insert Value Here}
  55 +// #define HID_MAX_REPORTITEMS {Insert Value Here}
  56 +// #define HID_MAX_REPORT_IDS {Insert Value Here}
  57 +// #define NO_CLASS_DRIVER_AUTOFLUSH
  58 +
  59 + /* General USB Driver Related Tokens: */
  60 +// #define ORDERED_EP_CONFIG
  61 + #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)
  62 + #define USB_DEVICE_ONLY
  63 +// #define USB_HOST_ONLY
  64 +// #define USB_STREAM_TIMEOUT_MS {Insert Value Here}
  65 +// #define NO_LIMITED_CONTROLLER_CONNECT
  66 +// #define NO_SOF_EVENTS
  67 +
  68 + /* USB Device Mode Driver Related Tokens: */
  69 +// #define USE_RAM_DESCRIPTORS
  70 + #define USE_FLASH_DESCRIPTORS
  71 +// #define USE_EEPROM_DESCRIPTORS
  72 +// #define NO_INTERNAL_SERIAL
  73 + #define FIXED_CONTROL_ENDPOINT_SIZE 8
  74 +// #define DEVICE_STATE_AS_GPIOR {Insert Value Here}
  75 + #define FIXED_NUM_CONFIGURATIONS 1
  76 +// #define CONTROL_ONLY_DEVICE
  77 +// #define INTERRUPT_CONTROL_ENDPOINT
  78 +// #define NO_DEVICE_REMOTE_WAKEUP
  79 +// #define NO_DEVICE_SELF_POWER
  80 +
  81 + /* USB Host Mode Driver Related Tokens: */
  82 +// #define HOST_STATE_AS_GPIOR {Insert Value Here}
  83 +// #define USB_HOST_TIMEOUT_MS {Insert Value Here}
  84 +// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here}
  85 +// #define NO_AUTO_VBUS_MANAGEMENT
  86 +// #define INVERTED_VBUS_ENABLE_LINE
  87 +
  88 + #elif (ARCH == ARCH_XMEGA)
  89 +
  90 + /* Non-USB Related Configuration Tokens: */
  91 +// #define DISABLE_TERMINAL_CODES
  92 +
  93 + /* USB Class Driver Related Tokens: */
  94 +// #define HID_HOST_BOOT_PROTOCOL_ONLY
  95 +// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here}
  96 +// #define HID_USAGE_STACK_DEPTH {Insert Value Here}
  97 +// #define HID_MAX_COLLECTIONS {Insert Value Here}
  98 +// #define HID_MAX_REPORTITEMS {Insert Value Here}
  99 +// #define HID_MAX_REPORT_IDS {Insert Value Here}
  100 +// #define NO_CLASS_DRIVER_AUTOFLUSH
  101 +
  102 + /* General USB Driver Related Tokens: */
  103 + #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH)
  104 +// #define USB_STREAM_TIMEOUT_MS {Insert Value Here}
  105 +// #define NO_LIMITED_CONTROLLER_CONNECT
  106 +// #define NO_SOF_EVENTS
  107 +
  108 + /* USB Device Mode Driver Related Tokens: */
  109 +// #define USE_RAM_DESCRIPTORS
  110 + #define USE_FLASH_DESCRIPTORS
  111 +// #define USE_EEPROM_DESCRIPTORS
  112 +// #define NO_INTERNAL_SERIAL
  113 + #define FIXED_CONTROL_ENDPOINT_SIZE 8
  114 +// #define DEVICE_STATE_AS_GPIOR {Insert Value Here}
  115 + #define FIXED_NUM_CONFIGURATIONS 1
  116 +// #define CONTROL_ONLY_DEVICE
  117 + #define MAX_ENDPOINT_INDEX 1
  118 +// #define NO_DEVICE_REMOTE_WAKEUP
  119 +// #define NO_DEVICE_SELF_POWER
  120 +
  121 + #else
  122 +
  123 + #error Unsupported architecture for this LUFA configuration file.
  124 +
  125 + #endif
  126 +#endif
... ...
src/question5/PolytechLille/Manette/Descriptors.c 0 → 100644
... ... @@ -0,0 +1,220 @@
  1 +/*
  2 + LUFA Library
  3 + Copyright (C) Dean Camera, 2017.
  4 +
  5 + dean [at] fourwalledcubicle [dot] com
  6 + www.lufa-lib.org
  7 +*/
  8 +
  9 +/*
  10 + Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com)
  11 +
  12 + Permission to use, copy, modify, distribute, and sell this
  13 + software and its documentation for any purpose is hereby granted
  14 + without fee, provided that the above copyright notice appear in
  15 + all copies and that both that the copyright notice and this
  16 + permission notice and warranty disclaimer appear in supporting
  17 + documentation, and that the name of the author not be used in
  18 + advertising or publicity pertaining to distribution of the
  19 + software without specific, written prior permission.
  20 +
  21 + The author disclaims all warranties with regard to this
  22 + software, including all implied warranties of merchantability
  23 + and fitness. In no event shall the author be liable for any
  24 + special, indirect or consequential damages or any damages
  25 + whatsoever resulting from loss of use, data or profits, whether
  26 + in an action of contract, negligence or other tortious action,
  27 + arising out of or in connection with the use or performance of
  28 + this software.
  29 +*/
  30 +
  31 +/** \file
  32 + *
  33 + * USB Device Descriptors, for library use when in USB device mode. Descriptors are special
  34 + * computer-readable structures which the host requests upon device enumeration, to determine
  35 + * the device's capabilities and functions.
  36 + */
  37 +
  38 +#include "Descriptors.h"
  39 +
  40 +/** HID class report descriptor. This is a special descriptor constructed with values from the
  41 + * USBIF HID class specification to describe the reports and capabilities of the HID device. This
  42 + * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)
  43 + * the device will send, and what it may be sent back from the host. Refer to the HID specification for
  44 + * more details on HID report descriptors.
  45 + */
  46 +const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =
  47 +{
  48 + /* Use the HID class driver's standard Joystick report.
  49 + * Min X/Y/Z Axis values: -100
  50 + * Max X/Y/Z Axis values: 100
  51 + * Min physical X/Y/Z Axis values (used to determine resolution): -1
  52 + * Max physical X/Y/Z Axis values (used to determine resolution): 1
  53 + * Buttons: 2
  54 + */
  55 + HID_DESCRIPTOR_JOYSTICK(-100, 100, -1, 1, 2)
  56 +};
  57 +
  58 +/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
  59 + * device characteristics, including the supported USB version, control endpoint size and the
  60 + * number of device configurations. The descriptor is read out by the USB host when the enumeration
  61 + * process begins.
  62 + */
  63 +const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
  64 +{
  65 + .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
  66 +
  67 + .USBSpecification = VERSION_BCD(1,1,0),
  68 + .Class = USB_CSCP_NoDeviceClass,
  69 + .SubClass = USB_CSCP_NoDeviceSubclass,
  70 + .Protocol = USB_CSCP_NoDeviceProtocol,
  71 +
  72 + .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
  73 +
  74 + .VendorID = 0x03EB,
  75 + .ProductID = 0x2043,
  76 + .ReleaseNumber = VERSION_BCD(0,0,1),
  77 +
  78 + .ManufacturerStrIndex = STRING_ID_Manufacturer,
  79 + .ProductStrIndex = STRING_ID_Product,
  80 + .SerialNumStrIndex = NO_DESCRIPTOR,
  81 +
  82 + .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
  83 +};
  84 +
  85 +/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
  86 + * of the device in one of its supported configurations, including information about any device interfaces
  87 + * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
  88 + * a configuration so that the host may correctly communicate with the USB device.
  89 + */
  90 +const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
  91 +{
  92 + .Config =
  93 + {
  94 + .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
  95 +
  96 + .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
  97 + .TotalInterfaces = 1,
  98 +
  99 + .ConfigurationNumber = 1,
  100 + .ConfigurationStrIndex = NO_DESCRIPTOR,
  101 +
  102 + .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
  103 +
  104 + .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
  105 + },
  106 +
  107 + .HID_Interface =
  108 + {
  109 + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
  110 +
  111 + .InterfaceNumber = INTERFACE_ID_Joystick,
  112 + .AlternateSetting = 0x00,
  113 +
  114 + .TotalEndpoints = 1,
  115 +
  116 + .Class = HID_CSCP_HIDClass,
  117 + .SubClass = HID_CSCP_NonBootSubclass,
  118 + .Protocol = HID_CSCP_NonBootProtocol,
  119 +
  120 + .InterfaceStrIndex = NO_DESCRIPTOR
  121 + },
  122 +
  123 + .HID_JoystickHID =
  124 + {
  125 + .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
  126 +
  127 + .HIDSpec = VERSION_BCD(1,1,1),
  128 + .CountryCode = 0x00,
  129 + .TotalReportDescriptors = 1,
  130 + .HIDReportType = HID_DTYPE_Report,
  131 + .HIDReportLength = sizeof(JoystickReport)
  132 + },
  133 +
  134 + .HID_ReportINEndpoint =
  135 + {
  136 + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
  137 +
  138 + .EndpointAddress = JOYSTICK_EPADDR,
  139 + .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
  140 + .EndpointSize = JOYSTICK_EPSIZE,
  141 + .PollingIntervalMS = 0x05
  142 + }
  143 +};
  144 +
  145 +/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
  146 + * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
  147 + * via the language ID table available at USB.org what languages the device supports for its string descriptors.
  148 + */
  149 +const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(LANGUAGE_ID_ENG);
  150 +
  151 +/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
  152 + * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
  153 + * Descriptor.
  154 + */
  155 +const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(L"Dean CameRA CHANGED ");
  156 +
  157 +/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
  158 + * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
  159 + * Descriptor.
  160 + */
  161 +const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA CHANGED");
  162 +
  163 +/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
  164 + * documentation) by the application code so that the address and size of a requested descriptor can be given
  165 + * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
  166 + * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
  167 + * USB host.
  168 + */
  169 +uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
  170 + const uint16_t wIndex,
  171 + const void** const DescriptorAddress)
  172 +{
  173 + const uint8_t DescriptorType = (wValue >> 8);
  174 + const uint8_t DescriptorNumber = (wValue & 0xFF);
  175 +
  176 + const void* Address = NULL;
  177 + uint16_t Size = NO_DESCRIPTOR;
  178 +
  179 + switch (DescriptorType)
  180 + {
  181 + case DTYPE_Device:
  182 + Address = &DeviceDescriptor;
  183 + Size = sizeof(USB_Descriptor_Device_t);
  184 + break;
  185 + case DTYPE_Configuration:
  186 + Address = &ConfigurationDescriptor;
  187 + Size = sizeof(USB_Descriptor_Configuration_t);
  188 + break;
  189 + case DTYPE_String:
  190 + switch (DescriptorNumber)
  191 + {
  192 + case STRING_ID_Language:
  193 + Address = &LanguageString;
  194 + Size = pgm_read_byte(&LanguageString.Header.Size);
  195 + break;
  196 + case STRING_ID_Manufacturer:
  197 + Address = &ManufacturerString;
  198 + Size = pgm_read_byte(&ManufacturerString.Header.Size);
  199 + break;
  200 + case STRING_ID_Product:
  201 + Address = &ProductString;
  202 + Size = pgm_read_byte(&ProductString.Header.Size);
  203 + break;
  204 + }
  205 +
  206 + break;
  207 + case HID_DTYPE_HID:
  208 + Address = &ConfigurationDescriptor.HID_JoystickHID;
  209 + Size = sizeof(USB_HID_Descriptor_HID_t);
  210 + break;
  211 + case HID_DTYPE_Report:
  212 + Address = &JoystickReport;
  213 + Size = sizeof(JoystickReport);
  214 + break;
  215 + }
  216 +
  217 + *DescriptorAddress = Address;
  218 + return Size;
  219 +}
  220 +
... ...
src/question5/PolytechLille/Manette/Descriptors.h 0 → 100644
... ... @@ -0,0 +1,93 @@
  1 +/*
  2 + LUFA Library
  3 + Copyright (C) Dean Camera, 2017.
  4 +
  5 + dean [at] fourwalledcubicle [dot] com
  6 + www.lufa-lib.org
  7 +*/
  8 +
  9 +/*
  10 + Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com)
  11 +
  12 + Permission to use, copy, modify, distribute, and sell this
  13 + software and its documentation for any purpose is hereby granted
  14 + without fee, provided that the above copyright notice appear in
  15 + all copies and that both that the copyright notice and this
  16 + permission notice and warranty disclaimer appear in supporting
  17 + documentation, and that the name of the author not be used in
  18 + advertising or publicity pertaining to distribution of the
  19 + software without specific, written prior permission.
  20 +
  21 + The author disclaims all warranties with regard to this
  22 + software, including all implied warranties of merchantability
  23 + and fitness. In no event shall the author be liable for any
  24 + special, indirect or consequential damages or any damages
  25 + whatsoever resulting from loss of use, data or profits, whether
  26 + in an action of contract, negligence or other tortious action,
  27 + arising out of or in connection with the use or performance of
  28 + this software.
  29 +*/
  30 +
  31 +/** \file
  32 + *
  33 + * Header file for Descriptors.c.
  34 + */
  35 +
  36 +#ifndef _DESCRIPTORS_H_
  37 +#define _DESCRIPTORS_H_
  38 +
  39 + /* Includes: */
  40 + #include <avr/pgmspace.h>
  41 +
  42 + #include <LUFA/Drivers/USB/USB.h>
  43 +
  44 + /* Type Defines: */
  45 + /** Type define for the device configuration descriptor structure. This must be defined in the
  46 + * application code, as the configuration descriptor contains several sub-descriptors which
  47 + * vary between devices, and which describe the device's usage to the host.
  48 + */
  49 + typedef struct
  50 + {
  51 + USB_Descriptor_Configuration_Header_t Config;
  52 +
  53 + // Joystick HID Interface
  54 + USB_Descriptor_Interface_t HID_Interface;
  55 + USB_HID_Descriptor_HID_t HID_JoystickHID;
  56 + USB_Descriptor_Endpoint_t HID_ReportINEndpoint;
  57 + } USB_Descriptor_Configuration_t;
  58 +
  59 + /** Enum for the device interface descriptor IDs within the device. Each interface descriptor
  60 + * should have a unique ID index associated with it, which can be used to refer to the
  61 + * interface from other descriptors.
  62 + */
  63 + enum InterfaceDescriptors_t
  64 + {
  65 + INTERFACE_ID_Joystick = 0, /**< Joystick interface desciptor ID */
  66 + };
  67 +
  68 + /** Enum for the device string descriptor IDs within the device. Each string descriptor should
  69 + * have a unique ID index associated with it, which can be used to refer to the string from
  70 + * other descriptors.
  71 + */
  72 + enum StringDescriptors_t
  73 + {
  74 + STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */
  75 + STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
  76 + STRING_ID_Product = 2, /**< Product string ID */
  77 + };
  78 +
  79 + /* Macros: */
  80 + /** Endpoint address of the Joystick HID reporting IN endpoint. */
  81 + #define JOYSTICK_EPADDR (ENDPOINT_DIR_IN | 1)
  82 +
  83 + /** Size in bytes of the Joystick HID reporting IN endpoint. */
  84 + #define JOYSTICK_EPSIZE 8
  85 +
  86 + /* Function Prototypes: */
  87 + uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
  88 + const uint16_t wIndex,
  89 + const void** const DescriptorAddress)
  90 + ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
  91 +
  92 +#endif
  93 +
... ...
src/question5/PolytechLille/Manette/Makefile 0 → 100644
... ... @@ -0,0 +1,43 @@
  1 +#
  2 +# LUFA Library
  3 +# Copyright (C) Dean Camera, 2017.
  4 +#
  5 +# dean [at] fourwalledcubicle [dot] com
  6 +# www.lufa-lib.org
  7 +#
  8 +# --------------------------------------
  9 +# LUFA Project Makefile.
  10 +# --------------------------------------
  11 +
  12 +# Run "make help" for target help.
  13 +#at90usb1287
  14 +MCU = atmega32u4
  15 +ARCH = AVR8
  16 +BOARD = NONE
  17 +F_CPU = 16000000
  18 +F_USB = $(F_CPU)
  19 +OPTIMIZATION = s
  20 +TARGET = Manette
  21 +SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
  22 +LUFA_PATH = /home/pifou/Downloads/lufa-LUFA-170418/LUFA
  23 +CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/
  24 +LD_FLAGS =
  25 +
  26 +# Default target
  27 +all:
  28 +
  29 +# Include LUFA-specific DMBS extension modules
  30 +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
  31 +include $(DMBS_LUFA_PATH)/lufa-sources.mk
  32 +include $(DMBS_LUFA_PATH)/lufa-gcc.mk
  33 +
  34 +# Include common DMBS build system modules
  35 +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS
  36 +include $(DMBS_PATH)/core.mk
  37 +include $(DMBS_PATH)/cppcheck.mk
  38 +include $(DMBS_PATH)/doxygen.mk
  39 +include $(DMBS_PATH)/dfu.mk
  40 +include $(DMBS_PATH)/gcc.mk
  41 +include $(DMBS_PATH)/hid.mk
  42 +include $(DMBS_PATH)/avrdude.mk
  43 +include $(DMBS_PATH)/atprogram.mk
... ...
src/question5/PolytechLille/Manette/Manette.bin 0 → 100755
No preview for this file type
src/question5/PolytechLille/Manette/Manette.c 0 → 100644
... ... @@ -0,0 +1,204 @@
  1 +/*
  2 + LUFA Library
  3 + Copyright (C) Dean Camera, 2017.
  4 +
  5 + dean [at] fourwalledcubicle [dot] com
  6 + www.lufa-lib.org
  7 +*/
  8 +
  9 +/*
  10 + Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com)
  11 +
  12 + Permission to use, copy, modify, distribute, and sell this
  13 + software and its documentation for any purpose is hereby granted
  14 + without fee, provided that the above copyright notice appear in
  15 + all copies and that both that the copyright notice and this
  16 + permission notice and warranty disclaimer appear in supporting
  17 + documentation, and that the name of the author not be used in
  18 + advertising or publicity pertaining to distribution of the
  19 + software without specific, written prior permission.
  20 +
  21 + The author disclaims all warranties with regard to this
  22 + software, including all implied warranties of merchantability
  23 + and fitness. In no event shall the author be liable for any
  24 + special, indirect or consequential damages or any damages
  25 + whatsoever resulting from loss of use, data or profits, whether
  26 + in an action of contract, negligence or other tortious action,
  27 + arising out of or in connection with the use or performance of
  28 + this software.
  29 +*/
  30 +
  31 +/** \file
  32 + *
  33 + * Main source file for the Joystick demo. This file contains the main tasks of
  34 + * the demo and is responsible for the initial application hardware configuration.
  35 + */
  36 +
  37 +#include "Manette.h"
  38 +
  39 +/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */
  40 +static uint8_t PrevJoystickHIDReportBuffer[sizeof(USB_JoystickReport_Data_t)];
  41 +
  42 +/** LUFA HID Class driver interface configuration and state information. This structure is
  43 + * passed to all HID Class driver functions, so that multiple instances of the same class
  44 + * within a device can be differentiated from one another.
  45 + */
  46 +USB_ClassInfo_HID_Device_t Joystick_HID_Interface =
  47 + {
  48 + .Config =
  49 + {
  50 + .InterfaceNumber = INTERFACE_ID_Joystick,
  51 + .ReportINEndpoint =
  52 + {
  53 + .Address = JOYSTICK_EPADDR,
  54 + .Size = JOYSTICK_EPSIZE,
  55 + .Banks = 1,
  56 + },
  57 + .PrevReportINBuffer = PrevJoystickHIDReportBuffer,
  58 + .PrevReportINBufferSize = sizeof(PrevJoystickHIDReportBuffer),
  59 + },
  60 + };
  61 +
  62 +
  63 +/** Main program entry point. This routine contains the overall program flow, including initial
  64 + * setup of all components and the main program loop.
  65 + */
  66 +int main(void)
  67 +{
  68 + SetupHardware();
  69 +
  70 + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
  71 + GlobalInterruptEnable();
  72 +
  73 + for (;;)
  74 + {
  75 + HID_Device_USBTask(&Joystick_HID_Interface);
  76 + USB_USBTask();
  77 + }
  78 +}
  79 +
  80 +/** Configures the board hardware and chip peripherals for the demo's functionality. */
  81 +void SetupHardware(void)
  82 +{
  83 +#if (ARCH == ARCH_AVR8)
  84 + /* Disable watchdog if enabled by bootloader/fuses */
  85 + MCUSR &= ~(1 << WDRF);
  86 + wdt_disable();
  87 +
  88 + /* Disable clock division */
  89 + clock_prescale_set(clock_div_1);
  90 +#elif (ARCH == ARCH_XMEGA)
  91 + /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */
  92 + XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU);
  93 + XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL);
  94 +
  95 + /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */
  96 + XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ);
  97 + XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB);
  98 +
  99 + PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
  100 +#endif
  101 +
  102 + /* Hardware Initialization */
  103 + Joystick_Init();
  104 + LEDs_Init();
  105 + Buttons_Init();
  106 + USB_Init();
  107 +}
  108 +
  109 +/** Event handler for the library USB Connection event. */
  110 +void EVENT_USB_Device_Connect(void)
  111 +{
  112 + LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
  113 +}
  114 +
  115 +/** Event handler for the library USB Disconnection event. */
  116 +void EVENT_USB_Device_Disconnect(void)
  117 +{
  118 + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
  119 +}
  120 +
  121 +/** Event handler for the library USB Configuration Changed event. */
  122 +void EVENT_USB_Device_ConfigurationChanged(void)
  123 +{
  124 + bool ConfigSuccess = true;
  125 +
  126 + ConfigSuccess &= HID_Device_ConfigureEndpoints(&Joystick_HID_Interface);
  127 +
  128 + USB_Device_EnableSOFEvents();
  129 +
  130 + LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
  131 +}
  132 +
  133 +/** Event handler for the library USB Control Request reception event. */
  134 +void EVENT_USB_Device_ControlRequest(void)
  135 +{
  136 + HID_Device_ProcessControlRequest(&Joystick_HID_Interface);
  137 +}
  138 +
  139 +/** Event handler for the USB device Start Of Frame event. */
  140 +void EVENT_USB_Device_StartOfFrame(void)
  141 +{
  142 + HID_Device_MillisecondElapsed(&Joystick_HID_Interface);
  143 +}
  144 +
  145 +/** HID class driver callback function for the creation of HID reports to the host.
  146 + *
  147 + * \param[in] HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced
  148 + * \param[in,out] ReportID Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
  149 + * \param[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature
  150 + * \param[out] ReportData Pointer to a buffer where the created report should be stored
  151 + * \param[out] ReportSize Number of bytes written in the report (or zero if no report is to be sent)
  152 + *
  153 + * \return Boolean \c true to force the sending of the report, \c false to let the library determine if it needs to be sent
  154 + */
  155 +bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
  156 + uint8_t* const ReportID,
  157 + const uint8_t ReportType,
  158 + void* ReportData,
  159 + uint16_t* const ReportSize)
  160 +{
  161 + USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData;
  162 +
  163 + uint8_t JoyStatus_LCL = Joystick_GetStatus();
  164 + uint8_t ButtonStatus_LCL = Buttons_GetStatus();
  165 +
  166 + if (JoyStatus_LCL & JOY_UP)
  167 + JoystickReport->Y = -100;
  168 + else if (JoyStatus_LCL & JOY_DOWN)
  169 + JoystickReport->Y = 100;
  170 +
  171 + if (JoyStatus_LCL & JOY_LEFT)
  172 + JoystickReport->X = -100;
  173 + else if (JoyStatus_LCL & JOY_RIGHT)
  174 + JoystickReport->X = 100;
  175 +
  176 + if (JoyStatus_LCL & JOY_PRESS)
  177 + JoystickReport->Button |= (1 << 1);
  178 +
  179 + if (ButtonStatus_LCL & BUTTONS_BUTTON1)
  180 + JoystickReport->Button |= (1 << 0);
  181 +
  182 + *ReportSize = sizeof(USB_JoystickReport_Data_t);
  183 + return false;
  184 +}
  185 +
  186 +/** HID class driver callback function for the processing of HID reports from the host.
  187 + *
  188 + * \param[in] HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced
  189 + * \param[in] ReportID Report ID of the received report from the host
  190 + * \param[in] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature
  191 + * \param[in] ReportData Pointer to a buffer where the received report has been stored
  192 + * \param[in] ReportSize Size in bytes of the received HID report
  193 + */
  194 +void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
  195 + const uint8_t ReportID,
  196 + const uint8_t ReportType,
  197 + const void* ReportData,
  198 + const uint16_t ReportSize)
  199 +{
  200 + // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
  201 +}
  202 +
  203 +
  204 +
... ...
src/question5/PolytechLille/Manette/Manette.eep 0 → 100644
... ... @@ -0,0 +1 @@
  1 +:00000001FF
... ...
src/question5/PolytechLille/Manette/Manette.elf 0 → 100755
No preview for this file type
src/question5/PolytechLille/Manette/Manette.h 0 → 100644
... ... @@ -0,0 +1,100 @@
  1 +/*
  2 + LUFA Library
  3 + Copyright (C) Dean Camera, 2017.
  4 +
  5 + dean [at] fourwalledcubicle [dot] com
  6 + www.lufa-lib.org
  7 +*/
  8 +
  9 +/*
  10 + Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com)
  11 +
  12 + Permission to use, copy, modify, distribute, and sell this
  13 + software and its documentation for any purpose is hereby granted
  14 + without fee, provided that the above copyright notice appear in
  15 + all copies and that both that the copyright notice and this
  16 + permission notice and warranty disclaimer appear in supporting
  17 + documentation, and that the name of the author not be used in
  18 + advertising or publicity pertaining to distribution of the
  19 + software without specific, written prior permission.
  20 +
  21 + The author disclaims all warranties with regard to this
  22 + software, including all implied warranties of merchantability
  23 + and fitness. In no event shall the author be liable for any
  24 + special, indirect or consequential damages or any damages
  25 + whatsoever resulting from loss of use, data or profits, whether
  26 + in an action of contract, negligence or other tortious action,
  27 + arising out of or in connection with the use or performance of
  28 + this software.
  29 +*/
  30 +
  31 +/** \file
  32 + *
  33 + * Header file for Joystick.c.
  34 + */
  35 +
  36 +#ifndef _JOYSTICK_H_
  37 +#define _JOYSTICK_H_
  38 +
  39 + /* Includes: */
  40 + #include <avr/io.h>
  41 + #include <avr/wdt.h>
  42 + #include <avr/power.h>
  43 + #include <avr/interrupt.h>
  44 + #include <string.h>
  45 +
  46 + #include "Descriptors.h"
  47 +
  48 + #include <LUFA/Drivers/Board/Joystick.h>
  49 + #include <LUFA/Drivers/Board/LEDs.h>
  50 + #include <LUFA/Drivers/Board/Buttons.h>
  51 + #include <LUFA/Drivers/USB/USB.h>
  52 + #include <LUFA/Platform/Platform.h>
  53 +
  54 + /* Type Defines: */
  55 + /** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC.
  56 + * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.
  57 + */
  58 + typedef struct
  59 + {
  60 + int8_t X; /**< Current absolute joystick X position, as a signed 8-bit integer */
  61 + int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */
  62 + int8_t Z; /**< Current absolute joystick Z position, as a signed 8-bit integer */
  63 + uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */
  64 + } USB_JoystickReport_Data_t;
  65 +
  66 + /* Macros: */
  67 + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
  68 + #define LEDMASK_USB_NOTREADY LEDS_LED1
  69 +
  70 + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
  71 + #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)
  72 +
  73 + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */
  74 + #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)
  75 +
  76 + /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
  77 + #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
  78 +
  79 + /* Function Prototypes: */
  80 + void SetupHardware(void);
  81 +
  82 + void EVENT_USB_Device_Connect(void);
  83 + void EVENT_USB_Device_Disconnect(void);
  84 + void EVENT_USB_Device_ConfigurationChanged(void);
  85 + void EVENT_USB_Device_ControlRequest(void);
  86 + void EVENT_USB_Device_StartOfFrame(void);
  87 +
  88 + bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
  89 + uint8_t* const ReportID,
  90 + const uint8_t ReportType,
  91 + void* ReportData,
  92 + uint16_t* const ReportSize);
  93 + void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
  94 + const uint8_t ReportID,
  95 + const uint8_t ReportType,
  96 + const void* ReportData,
  97 + const uint16_t ReportSize);
  98 +
  99 +#endif
  100 +
... ...
src/question5/PolytechLille/Manette/Manette.hex 0 → 100644
... ... @@ -0,0 +1,262 @@
  1 +:10000000B2C00000CBC00000C9C00000C7C00000E3
  2 +:10001000C5C00000C3C00000C1C00000BFC00000D8
  3 +:10002000BDC00000BBC00000AAC30000B7C00000F4
  4 +:10003000B5C00000B3C00000B1C00000AFC00000F8
  5 +:10004000ADC00000ABC00000A9C00000A7C0000008
  6 +:10005000A5C00000A3C00000A1C000009FC0000018
  7 +:100060009DC000009BC0000099C0000097C0000028
  8 +:1000700095C0000093C0000091C000008FC0000038
  9 +:100080008DC000008BC0000089C0000087C0000048
  10 +:1000900085C0000083C0000081C000007FC0000058
  11 +:1000A0007DC000007BC0000079C000001A034C0036
  12 +:1000B00055004600410020004300480041004E002A
  13 +:1000C00047004500440000002A0344006500610029
  14 +:1000D0006E002000430061006D0065005200410089
  15 +:1000E00020004300480041004E0047004500440006
  16 +:1000F000200000000403090409022200010100C0DD
  17 +:10010000320904000001030000000921110100016F
  18 +:10011000223A0007058103080005120110010000C2
  19 +:100120000008EB034320010001020001050109045E
  20 +:10013000A1010901A100093009310932169CFF26ED
  21 +:10014000640036FFFF460100950375088102C00573
  22 +:100150000919012902150025017501950281027511
  23 +:100160000695018101C011241FBECFEFDAE0DEBF8A
  24 +:10017000CDBF11E0A0E0B1E0EEE3F0E102C00590F8
  25 +:100180000D92A031B107D9F721E0A0E1B1E001C0A3
  26 +:100190001D92A132B207E1F71AD04FC731CF84B711
  27 +:1001A000877F84BF0FB6F894A8958091600088611E
  28 +:1001B00080936000109260000FBE90E080E80FB660
  29 +:1001C000F89480936100909361000FBEBBC2E7DF9B
  30 +:1001D000789480E091E05BD6FAD4FBCF089508953F
  31 +:1001E00080E091E041D6E2EEF0E08081846080839F
  32 +:1001F000089580E091E005C580910E0190910F0176
  33 +:10020000009729F0019790930F0180930E010895B4
  34 +:100210000F931F9384E090E0F8019183808380E046
  35 +:100220001F910F9108950895292F33272330310509
  36 +:10023000E1F058F42130310599F02230310569F5AB
  37 +:1002400082E290E028EF30E02CC02132310501F14C
  38 +:100250002232310511F58AE390E02CE231E021C031
  39 +:1002600082E190E02AE131E01CC0992781309105BC
  40 +:1002700049F028F0029789F4ECEAF0E005C0E4EFD9
  41 +:10028000F0E002C0E8ECF0E0849190E09F0109C04A
  42 +:1002900089E090E02AE031E004C080E090E020E0D6
  43 +:1002A00030E0FA01318320830895CF92DF92EF92FC
  44 +:1002B000FF920F931F93CF93DF93EC018B017A0191
  45 +:1002C000CED1811133C0E114F10439F0F7018081FE
  46 +:1002D0009181081B190BC80FD91FC12CD12C0115F6
  47 +:1002E000110519F18091E80085FD16C08091E800A4
  48 +:1002F0008E778093E8006BD4E114F10449F0F701A4
  49 +:1003000080819181C80ED91ED182C08285E00EC045
  50 +:10031000A6D1882321F30AC089918093F10001506E
  51 +:100320001109FFEFCF1ADF0ADACF80E0DF91CF911A
  52 +:100330001F910F91FF90EF90DF90CF900895209143
  53 +:100340001F01309120012617370748F0611571050C
  54 +:1003500039F42091E8002E772093E80001C0B9011C
  55 +:10036000FC0120E06115710579F180911801882365
  56 +:10037000F1F18530F1F18091E80083FD3CC080917E
  57 +:10038000E80082FD2EC08091E80080FFEBCF209135
  58 +:10039000F3008091F20090E0922B6115710551F00D
  59 +:1003A0008830910538F421912093F1006150710952
  60 +:1003B0000196F3CF21E0089709F020E08091E80052
  61 +:1003C0008E778093E800CECF2111CFCF0AC08091E5
  62 +:1003D0001801882361F0853061F08091E80083FD89
  63 +:1003E0000AC08091E80082FFF2CF80E0089582E0A9
  64 +:1003F000089583E0089581E008956115710529F459
  65 +:100400002091E8002B772093E800FC01611571052D
  66 +:1004100041F180911801882361F1853061F180916B
  67 +:10042000E80083FD24C08091E80082FFEFCF209197
  68 +:10043000F3008091F20090E0922B892B31F08091B3
  69 +:10044000F10081936150710991F78091E8008B77F9
  70 +:100450008093E800DBCF80911801882351F085302C
  71 +:1004600051F08091E80080FFF6CF80E0089581E0B0
  72 +:10047000089582E0089583E0089520911F0130914E
  73 +:1004800020012617370748F06115710539F42091CE
  74 +:10049000E8002E772093E80001C0B901FC0120E0BC
  75 +:1004A0006115710591F180911801882309F440C00C
  76 +:1004B000853009F43FC08091E80083FD3DC0809104
  77 +:1004C000E80082FD2FC08091E80080FFE9CF2091F5
  78 +:1004D000F3008091F20090E0922B6115710559F0C4
  79 +:1004E0008830910540F424912093F10031966150B9
  80 +:1004F00071090196F2CF21E0089709F020E0809180
  81 +:10050000E8008E778093E800CBCF2111CCCF0AC0D2
  82 +:1005100080911801882361F0853061F08091E800B6
  83 +:1005200083FD0AC08091E80082FFF2CF80E0089549
  84 +:1005300082E0089583E0089581E00895982F973030
  85 +:1005400068F59093E900981739F07091EC002091CC
  86 +:10055000ED005091F00003C0242F762F50E021FDD4
  87 +:1005600002C09F5FECCF3091EB003E7F3093EB00F9
  88 +:100570003091ED003D7F3093ED003091EB00316024
  89 +:100580003093EB007093EC002093ED005093F0005B
  90 +:100590002091EE0027FDE5CF80E008958F708093D5
  91 +:1005A000E90081E008950F931F93CF93DF93062F07
  92 +:1005B000EC0110E0101771F16881611103C01F5F39
  93 +:1005C0002596F8CF2C81A981BA819B81862F8F70C7
  94 +:1005D000873010F080E01FC0223010F442E001C0EC
  95 +:1005E00046E0E8E0F0E020E0EA17FB0720F42F5FA8
  96 +:1005F000EE0FFF1FF9CF2295207F422B50E4959FED
  97 +:1006000090011124661F6627661F622B97DF8111F8
  98 +:10061000D6CFE0CF81E0DF91CF911F910F91089568
  99 +:100620008091190187FF11C08091E80082FD05C00B
  100 +:10063000809118018111F8CF11C08091E8008B776B
  101 +:100640000BC080911801882349F08091E80080FF59
  102 +:10065000F8CF8091E8008E778093E800089520918C
  103 +:10066000E4003091E50095E64091EC00842F817024
  104 +:1006700040FF23C08091E80080FD1DC080911801DB
  105 +:10068000882399F0853099F08091EB0085FD11C0A9
  106 +:100690004091E4005091E5002417350729F391506B
  107 +:1006A00011F09A01E1CF84E0089582E0089583E09B
  108 +:1006B000089581E0089580E008954091E80042FFA8
  109 +:1006C000DDCF08950F931F93CF93DF934BD052D07C
  110 +:1006D000C8EDD0E088818F7788838881806888839F
  111 +:1006E00088818F7D888319BC1092180110921401A3
  112 +:1006F000109216011092150100EE10E0F8018081B1
  113 +:100700008B7F808388818160888342E060E080E025
  114 +:1007100015DFE1EEF0E080818E7F8083E2EEF0E095
  115 +:10072000808181608083808188608083F8018081FE
  116 +:100730008E7F8083888180618883DF91CF911F9134
  117 +:100740000F910895E8EDF0E080818F7E8083E7EDE2
  118 +:10075000F0E080818160808384E082BF81E08093CB
  119 +:100760001701B0CFE8EDF0E080818E7F808310929A
  120 +:10077000E20008951092DA001092E10008951F92AD
  121 +:100780000F920FB60F9211242F933F934F935F93C5
  122 +:100790006F937F938F939F93AF93BF93EF93FF9349
  123 +:1007A0008091E10082FF0AC08091E20082FF06C0D2
  124 +:1007B0008091E1008B7F8093E1001EDD8091DA0063
  125 +:1007C00080FF1DC08091D80080FF19C08091DA00A1
  126 +:1007D0008E7F8093DA008091D90080FF0CC080E189
  127 +:1007E00089BD82E189BD09B400FEFDCF81E080931F
  128 +:1007F0001801F4DC04C019BC10921801F0DC8091DF
  129 +:10080000E10080FF18C08091E20080FF14C0809159
  130 +:10081000E2008E7F8093E2008091E200806180930D
  131 +:10082000E2008091D80080628093D80019BC85E0F6
  132 +:1008300080931801CBD18091E10084FF2FC080917B
  133 +:10084000E20084FF2BC080E189BD82E189BD09B44B
  134 +:1008500000FEFDCF8091D8008F7D8093D8008091DD
  135 +:10086000E1008F7E8093E1008091E2008F7E809393
  136 +:10087000E2008091E20081608093E20080911401A7
  137 +:10088000882311F084E007C08091E30087FD02C057
  138 +:1008900081E001C083E08093180198D18091E1004C
  139 +:1008A00083FF22C08091E20083FF1EC08091E1009F
  140 +:1008B000877F8093E10082E08093180110921401F9
  141 +:1008C0008091E1008E7F8093E1008091E2008E7F35
  142 +:1008D0008093E2008091E20080618093E20042E038
  143 +:1008E00060E080E02BDE72D1FF91EF91BF91AF917C
  144 +:1008F0009F918F917F916F915F914F913F912F9138
  145 +:100900000F900FBE0F901F9018951F93CF93DF93FA
  146 +:10091000CDB7DEB7AA970FB6F894DEBF0FBECDBF36
  147 +:10092000E9E1F1E08091F100819321E0E132F20709
  148 +:10093000C9F75FDC8091E80083FF30C18091190125
  149 +:1009400090911A01953009F483C030F49130A9F1E7
  150 +:1009500068F0933091F122C1983009F4EFC09930DA
  151 +:1009600009F4FBC0963009F019C194C0803821F019
  152 +:10097000823809F013C108C08091150190911601C9
  153 +:10098000992389F082600FC080911D018F7087309C
  154 +:1009900008F004C18093E9008091EB0085FB882773
  155 +:1009A00080F91092E9009091E800977F9093E80019
  156 +:1009B0008093F1001092F100CCC0282F2D7F09F018
  157 +:1009C000EDC0882319F0823061F0E8C080911B01EE
  158 +:1009D000813009F0E3C0933009F080E08093160184
  159 +:1009E0002EC080911B0181112AC080911D018F7042
  160 +:1009F0002FEF280F263008F0D1C08093E900209116
  161 +:100A0000EB0020FF1CC0933021F48091EB0080624A
  162 +:100A100014C09091EB0090619093EB0021E030E0E6
  163 +:100A2000A90102C0440F551F8A95E2F74093EA00DE
  164 +:100A30001092EA008091EB0088608093EB001092A6
  165 +:100A4000E9008091E800877F8093E800E9DDA6C097
  166 +:100A50008111A4C010911B011F778091E300807861
  167 +:100A6000812B8093E3008091E800877F8093E800EA
  168 +:100A7000D7DD8091E80080FFFCCF8091E3008068A3
  169 +:100A80008093E300111102C082E001C083E08093F3
  170 +:100A9000180184C08058823008F080C080911B010A
  171 +:100AA00090911C018C3D53E0950771F583E08A839A
  172 +:100AB0008AE289834FB7F894DE01139620E03EE086
  173 +:100AC00051E2E32FF0E050935700E49120FF03C080
  174 +:100AD000E295EF703F5FEF708E2F90E0EA3010F0FC
  175 +:100AE000C79601C0C0968D939D932F5F243149F71F
  176 +:100AF0004FBF8091E800877F8093E8006AE270E052
  177 +:100B0000CE0101961CDC14C060911D0170911E0184
  178 +:100B1000AE014F5F5F4F88DBBC01892B09F43EC0FB
  179 +:100B20009091E800977F9093E80089819A81A5DCF5
  180 +:100B30008091E8008B778093E80030C0803871F5B1
  181 +:100B40008091E800877F8093E80080911401809372
  182 +:100B5000F1008091E8008E7777CF81111FC08091DE
  183 +:100B60001B0190911C0199270297C4F48091E80021
  184 +:100B7000877F8093E80080911B018093140150DDF2
  185 +:100B800080911401811106C08091E30087FD02C0AD
  186 +:100B900081E001C084E08093180122DB8091E800AD
  187 +:100BA00083FF0AC08091E800877F8093E8008091EE
  188 +:100BB000EB0080628093EB00AA960FB6F894DEBF3C
  189 +:100BC0000FBECDBFDF91CF911F9108950895CF93B0
  190 +:100BD00080911801882399F0C091E900CF7090911D
  191 +:100BE000EC00892F817090FD80E8C82B1092E900FD
  192 +:100BF0008091E80083FD89DECF70C093E900CF913A
  193 +:100C000008956F927F928F929F92AF92BF92CF92F0
  194 +:100C1000DF92EF92FF920F931F93CF93DF9300D059
  195 +:100C20001F92CDB7DEB77C01ADB6BEB68091E800AD
  196 +:100C300083FF03C1F701808190E020911D01309175
  197 +:100C40001E012817390709F0F8C080911A01833076
  198 +:100C500009F49AC030F4813071F0823009F4D1C0C7
  199 +:100C6000ECC08A3009F4B5C08B3009F49EC08930DD
  200 +:100C700009F0E3C04CC080911901813A09F0DDC050
  201 +:100C80008DB69EB61A82198280911B0110911C01AB
  202 +:100C90008B83F7018085482F50E08DB79EB7841B6A
  203 +:100CA000950B0FB6F8949EBF0FBE8DBFEDB7FEB784
  204 +:100CB00031966F0160E070E0CF01B8D14FEF410F86
  205 +:100CC0008E010F5F1F4F9601BE016D5F7F4FC70101
  206 +:100CD0009FDAF70186819781009721F0408550E0E7
  207 +:100CE000B6019BD11092E9008091E800877F809344
  208 +:100CF000E8008B8181118093F10069817A81C601BE
  209 +:100D00001EDB8091E8008B778093E80037C08091EC
  210 +:100D10001901813209F091C08DB69EB600911F0174
  211 +:100D20001091200170901B0160901C018DB79EB73F
  212 +:100D3000801B910B0FB6F8949EBF0FBE8DBFEDB711
  213 +:100D4000FEB731966F018091E800877F8093E800BD
  214 +:100D5000B801CF0152DB8091E8008E778093E800E4
  215 +:100D600021E0711001C020E030E0021B130B2C0DBC
  216 +:100D70003D1D4FEF460D672DC70155DA0FB6F894AC
  217 +:100D80009EBE0FBE8DBE59C080911901813A09F0F7
  218 +:100D900054C08091E800877F8093E8008091E8004C
  219 +:100DA00080FFFCCFF701818540C08091190181321D
  220 +:100DB00009F043C08091E800877F8093E80030DC31
  221 +:100DC00090911B0181E0911101C080E0F7018187C2
  222 +:100DD00034C080911901813281F58091E800877FCC
  223 +:100DE0008093E8001DDC80911B0190911C018827F5
  224 +:100DF00036E0969587953A95E1F7F70195878487D0
  225 +:100E00001CC080911901813AC1F48091E800877F6C
  226 +:100E10008093E8008091E80080FFFCCFF701848593
  227 +:100E2000958596958795969587958093F100809105
  228 +:100E3000E8008E778093E800F3DB0FB6F894BEBE2F
  229 +:100E40000FBEADBE0F900F900F90DF91CF911F910D
  230 +:100E50000F91FF90EF90DF90CF90BF90AF909F9059
  231 +:100E60008F907F906F900895FC01399627E0DF0105
  232 +:100E70001D922A95E9F721E0FC01218724EF31E05A
  233 +:100E80003587248723E0248361E001968CCB5F9231
  234 +:100E90006F927F928F929F92AF92BF92CF92DF928A
  235 +:100EA000EF92FF920F931F93CF93DF9300D01F9287
  236 +:100EB000CDB7DEB77C01ADB6BEB6809118018430E7
  237 +:100EC00009F086C08091E4009091E500F701228549
  238 +:100ED00033852817390709F47BC081818F7080938F
  239 +:100EE000E9008091E80085FF73C08DB69EB640850D
  240 +:100EF00050E08DB79EB7841B950B0FB6F8949EBF3C
  241 +:100F00000FBE8DBFEDB7FEB731966F011B821A82FF
  242 +:100F1000198260E070E0CF0189D08E010F5F1F4F12
  243 +:100F2000960140E0BE016D5F7F4FC70171D9582E19
  244 +:100F3000F70184859585892B29F011E086859785B1
  245 +:100F4000892B09F010E0F701668077806114710445
  246 +:100F500081F049815A81B301C60152D001E0892B49
  247 +:100F600009F400E0F701408550E0B601C30155D017
  248 +:100F700001C000E089819A81892BF1F0511004C0F1
  249 +:100F8000011102C010FF18C0F7018485958597876D
  250 +:100F9000868781818F708093E9008B818111809396
  251 +:100FA000F10069817A8140E050E0C6017ED98091EC
  252 +:100FB000E8008E778093E8008091E4009091E5004E
  253 +:100FC000F701938782870FB6F8949EBE0FBE8DBE41
  254 +:100FD0000FB6F894BEBE0FBEADBE0F900F900F902F
  255 +:100FE000DF91CF911F910F91FF90EF90DF90CF9005
  256 +:100FF000BF90AF909F908F907F906F905F9008957B
  257 +:10100000FB01DC0104C08D910190801921F4415055
  258 +:101010005040C8F7881B990B0895FB01DC0102C002
  259 +:1010200001900D9241505040D8F70895DC0101C065
  260 +:0E1030006D9341505040E0F70895F894FFCFC3
  261 +:10103E000081080000011001040000000000000003
  262 +:00000001FF
... ...
src/question5/PolytechLille/Manette/Manette.lss 0 → 100644
... ... @@ -0,0 +1,3586 @@
  1 +
  2 +Manette.elf: file format elf32-avr
  3 +
  4 +Sections:
  5 +Idx Name Size VMA LMA File off Algn
  6 + 0 .data 00000010 00800100 0000103e 000010d2 2**0
  7 + CONTENTS, ALLOC, LOAD, DATA
  8 + 1 .text 0000103e 00000000 00000000 00000094 2**1
  9 + CONTENTS, ALLOC, LOAD, READONLY, CODE
  10 + 2 .bss 00000011 00800110 00800110 000010e2 2**0
  11 + ALLOC
  12 + 3 .comment 00000011 00000000 00000000 000010e2 2**0
  13 + CONTENTS, READONLY
  14 + 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 000010f4 2**2
  15 + CONTENTS, READONLY
  16 + 5 .debug_aranges 00000270 00000000 00000000 00001134 2**0
  17 + CONTENTS, READONLY, DEBUGGING
  18 + 6 .debug_info 000057bc 00000000 00000000 000013a4 2**0
  19 + CONTENTS, READONLY, DEBUGGING
  20 + 7 .debug_abbrev 00001b70 00000000 00000000 00006b60 2**0
  21 + CONTENTS, READONLY, DEBUGGING
  22 + 8 .debug_line 00003573 00000000 00000000 000086d0 2**0
  23 + CONTENTS, READONLY, DEBUGGING
  24 + 9 .debug_frame 0000075c 00000000 00000000 0000bc44 2**2
  25 + CONTENTS, READONLY, DEBUGGING
  26 + 10 .debug_str 00002478 00000000 00000000 0000c3a0 2**0
  27 + CONTENTS, READONLY, DEBUGGING
  28 + 11 .debug_loc 00003125 00000000 00000000 0000e818 2**0
  29 + CONTENTS, READONLY, DEBUGGING
  30 + 12 .debug_ranges 00000388 00000000 00000000 0001193d 2**0
  31 + CONTENTS, READONLY, DEBUGGING
  32 +
  33 +Disassembly of section .text:
  34 +
  35 +00000000 <__vectors>:
  36 + 0: b2 c0 rjmp .+356 ; 0x166 <__ctors_end>
  37 + 2: 00 00 nop
  38 + 4: cb c0 rjmp .+406 ; 0x19c <__bad_interrupt>
  39 + 6: 00 00 nop
  40 + 8: c9 c0 rjmp .+402 ; 0x19c <__bad_interrupt>
  41 + a: 00 00 nop
  42 + c: c7 c0 rjmp .+398 ; 0x19c <__bad_interrupt>
  43 + e: 00 00 nop
  44 + 10: c5 c0 rjmp .+394 ; 0x19c <__bad_interrupt>
  45 + 12: 00 00 nop
  46 + 14: c3 c0 rjmp .+390 ; 0x19c <__bad_interrupt>
  47 + 16: 00 00 nop
  48 + 18: c1 c0 rjmp .+386 ; 0x19c <__bad_interrupt>
  49 + 1a: 00 00 nop
  50 + 1c: bf c0 rjmp .+382 ; 0x19c <__bad_interrupt>
  51 + 1e: 00 00 nop
  52 + 20: bd c0 rjmp .+378 ; 0x19c <__bad_interrupt>
  53 + 22: 00 00 nop
  54 + 24: bb c0 rjmp .+374 ; 0x19c <__bad_interrupt>
  55 + 26: 00 00 nop
  56 + 28: aa c3 rjmp .+1876 ; 0x77e <__vector_10>
  57 + 2a: 00 00 nop
  58 + 2c: b7 c0 rjmp .+366 ; 0x19c <__bad_interrupt>
  59 + 2e: 00 00 nop
  60 + 30: b5 c0 rjmp .+362 ; 0x19c <__bad_interrupt>
  61 + 32: 00 00 nop
  62 + 34: b3 c0 rjmp .+358 ; 0x19c <__bad_interrupt>
  63 + 36: 00 00 nop
  64 + 38: b1 c0 rjmp .+354 ; 0x19c <__bad_interrupt>
  65 + 3a: 00 00 nop
  66 + 3c: af c0 rjmp .+350 ; 0x19c <__bad_interrupt>
  67 + 3e: 00 00 nop
  68 + 40: ad c0 rjmp .+346 ; 0x19c <__bad_interrupt>
  69 + 42: 00 00 nop
  70 + 44: ab c0 rjmp .+342 ; 0x19c <__bad_interrupt>
  71 + 46: 00 00 nop
  72 + 48: a9 c0 rjmp .+338 ; 0x19c <__bad_interrupt>
  73 + 4a: 00 00 nop
  74 + 4c: a7 c0 rjmp .+334 ; 0x19c <__bad_interrupt>
  75 + 4e: 00 00 nop
  76 + 50: a5 c0 rjmp .+330 ; 0x19c <__bad_interrupt>
  77 + 52: 00 00 nop
  78 + 54: a3 c0 rjmp .+326 ; 0x19c <__bad_interrupt>
  79 + 56: 00 00 nop
  80 + 58: a1 c0 rjmp .+322 ; 0x19c <__bad_interrupt>
  81 + 5a: 00 00 nop
  82 + 5c: 9f c0 rjmp .+318 ; 0x19c <__bad_interrupt>
  83 + 5e: 00 00 nop
  84 + 60: 9d c0 rjmp .+314 ; 0x19c <__bad_interrupt>
  85 + 62: 00 00 nop
  86 + 64: 9b c0 rjmp .+310 ; 0x19c <__bad_interrupt>
  87 + 66: 00 00 nop
  88 + 68: 99 c0 rjmp .+306 ; 0x19c <__bad_interrupt>
  89 + 6a: 00 00 nop
  90 + 6c: 97 c0 rjmp .+302 ; 0x19c <__bad_interrupt>
  91 + 6e: 00 00 nop
  92 + 70: 95 c0 rjmp .+298 ; 0x19c <__bad_interrupt>
  93 + 72: 00 00 nop
  94 + 74: 93 c0 rjmp .+294 ; 0x19c <__bad_interrupt>
  95 + 76: 00 00 nop
  96 + 78: 91 c0 rjmp .+290 ; 0x19c <__bad_interrupt>
  97 + 7a: 00 00 nop
  98 + 7c: 8f c0 rjmp .+286 ; 0x19c <__bad_interrupt>
  99 + 7e: 00 00 nop
  100 + 80: 8d c0 rjmp .+282 ; 0x19c <__bad_interrupt>
  101 + 82: 00 00 nop
  102 + 84: 8b c0 rjmp .+278 ; 0x19c <__bad_interrupt>
  103 + 86: 00 00 nop
  104 + 88: 89 c0 rjmp .+274 ; 0x19c <__bad_interrupt>
  105 + 8a: 00 00 nop
  106 + 8c: 87 c0 rjmp .+270 ; 0x19c <__bad_interrupt>
  107 + 8e: 00 00 nop
  108 + 90: 85 c0 rjmp .+266 ; 0x19c <__bad_interrupt>
  109 + 92: 00 00 nop
  110 + 94: 83 c0 rjmp .+262 ; 0x19c <__bad_interrupt>
  111 + 96: 00 00 nop
  112 + 98: 81 c0 rjmp .+258 ; 0x19c <__bad_interrupt>
  113 + 9a: 00 00 nop
  114 + 9c: 7f c0 rjmp .+254 ; 0x19c <__bad_interrupt>
  115 + 9e: 00 00 nop
  116 + a0: 7d c0 rjmp .+250 ; 0x19c <__bad_interrupt>
  117 + a2: 00 00 nop
  118 + a4: 7b c0 rjmp .+246 ; 0x19c <__bad_interrupt>
  119 + a6: 00 00 nop
  120 + a8: 79 c0 rjmp .+242 ; 0x19c <__bad_interrupt>
  121 + aa: 00 00 nop
  122 +
  123 +000000ac <ProductString>:
  124 + ac: 1a 03 4c 00 55 00 46 00 41 00 20 00 43 00 48 00 ..L.U.F.A. .C.H.
  125 + bc: 41 00 4e 00 47 00 45 00 44 00 00 00 A.N.G.E.D...
  126 +
  127 +000000c8 <ManufacturerString>:
  128 + c8: 2a 03 44 00 65 00 61 00 6e 00 20 00 43 00 61 00 *.D.e.a.n. .C.a.
  129 + d8: 6d 00 65 00 52 00 41 00 20 00 43 00 48 00 41 00 m.e.R.A. .C.H.A.
  130 + e8: 4e 00 47 00 45 00 44 00 20 00 00 00 N.G.E.D. ...
  131 +
  132 +000000f4 <LanguageString>:
  133 + f4: 04 03 09 04 ....
  134 +
  135 +000000f8 <ConfigurationDescriptor>:
  136 + f8: 09 02 22 00 01 01 00 c0 32 09 04 00 00 01 03 00 ..".....2.......
  137 + 108: 00 00 09 21 11 01 00 01 22 3a 00 07 05 81 03 08 ...!....":......
  138 + 118: 00 05 ..
  139 +
  140 +0000011a <DeviceDescriptor>:
  141 + 11a: 12 01 10 01 00 00 00 08 eb 03 43 20 01 00 01 02 ..........C ....
  142 + 12a: 00 01 ..
  143 +
  144 +0000012c <JoystickReport>:
  145 + 12c: 05 01 09 04 a1 01 09 01 a1 00 09 30 09 31 09 32 ...........0.1.2
  146 + 13c: 16 9c ff 26 64 00 36 ff ff 46 01 00 95 03 75 08 ...&d.6..F....u.
  147 + 14c: 81 02 c0 05 09 19 01 29 02 15 00 25 01 75 01 95 .......)...%.u..
  148 + 15c: 02 81 02 75 06 95 01 81 01 c0 ...u......
  149 +
  150 +00000166 <__ctors_end>:
  151 + 166: 11 24 eor r1, r1
  152 + 168: 1f be out 0x3f, r1 ; 63
  153 + 16a: cf ef ldi r28, 0xFF ; 255
  154 + 16c: da e0 ldi r29, 0x0A ; 10
  155 + 16e: de bf out 0x3e, r29 ; 62
  156 + 170: cd bf out 0x3d, r28 ; 61
  157 +
  158 +00000172 <__do_copy_data>:
  159 + 172: 11 e0 ldi r17, 0x01 ; 1
  160 + 174: a0 e0 ldi r26, 0x00 ; 0
  161 + 176: b1 e0 ldi r27, 0x01 ; 1
  162 + 178: ee e3 ldi r30, 0x3E ; 62
  163 + 17a: f0 e1 ldi r31, 0x10 ; 16
  164 + 17c: 02 c0 rjmp .+4 ; 0x182 <__do_copy_data+0x10>
  165 + 17e: 05 90 lpm r0, Z+
  166 + 180: 0d 92 st X+, r0
  167 + 182: a0 31 cpi r26, 0x10 ; 16
  168 + 184: b1 07 cpc r27, r17
  169 + 186: d9 f7 brne .-10 ; 0x17e <__do_copy_data+0xc>
  170 +
  171 +00000188 <__do_clear_bss>:
  172 + 188: 21 e0 ldi r18, 0x01 ; 1
  173 + 18a: a0 e1 ldi r26, 0x10 ; 16
  174 + 18c: b1 e0 ldi r27, 0x01 ; 1
  175 + 18e: 01 c0 rjmp .+2 ; 0x192 <.do_clear_bss_start>
  176 +
  177 +00000190 <.do_clear_bss_loop>:
  178 + 190: 1d 92 st X+, r1
  179 +
  180 +00000192 <.do_clear_bss_start>:
  181 + 192: a1 32 cpi r26, 0x21 ; 33
  182 + 194: b2 07 cpc r27, r18
  183 + 196: e1 f7 brne .-8 ; 0x190 <.do_clear_bss_loop>
  184 + 198: 1a d0 rcall .+52 ; 0x1ce <main>
  185 + 19a: 4f c7 rjmp .+3742 ; 0x103a <_exit>
  186 +
  187 +0000019c <__bad_interrupt>:
  188 + 19c: 31 cf rjmp .-414 ; 0x0 <__vectors>
  189 +
  190 +0000019e <SetupHardware>:
  191 +/** Configures the board hardware and chip peripherals for the demo's functionality. */
  192 +void SetupHardware(void)
  193 +{
  194 +#if (ARCH == ARCH_AVR8)
  195 + /* Disable watchdog if enabled by bootloader/fuses */
  196 + MCUSR &= ~(1 << WDRF);
  197 + 19e: 84 b7 in r24, 0x34 ; 52
  198 + 1a0: 87 7f andi r24, 0xF7 ; 247
  199 + 1a2: 84 bf out 0x34, r24 ; 52
  200 + );
  201 + }
  202 + else
  203 + {
  204 + uint8_t register temp_reg;
  205 + __asm__ __volatile__ (
  206 + 1a4: 0f b6 in r0, 0x3f ; 63
  207 + 1a6: f8 94 cli
  208 + 1a8: a8 95 wdr
  209 + 1aa: 80 91 60 00 lds r24, 0x0060 ; 0x800060 <__TEXT_REGION_LENGTH__+0x7e0060>
  210 + 1ae: 88 61 ori r24, 0x18 ; 24
  211 + 1b0: 80 93 60 00 sts 0x0060, r24 ; 0x800060 <__TEXT_REGION_LENGTH__+0x7e0060>
  212 + 1b4: 10 92 60 00 sts 0x0060, r1 ; 0x800060 <__TEXT_REGION_LENGTH__+0x7e0060>
  213 + 1b8: 0f be out 0x3f, r0 ; 63
  214 +from 1 to 129. Thus, one does not need to use \c clock_div_t type as argument.
  215 +*/
  216 +void clock_prescale_set(clock_div_t __x)
  217 +{
  218 + uint8_t __tmp = _BV(CLKPCE);
  219 + __asm__ __volatile__ (
  220 + 1ba: 90 e0 ldi r25, 0x00 ; 0
  221 + 1bc: 80 e8 ldi r24, 0x80 ; 128
  222 + 1be: 0f b6 in r0, 0x3f ; 63
  223 + 1c0: f8 94 cli
  224 + 1c2: 80 93 61 00 sts 0x0061, r24 ; 0x800061 <__TEXT_REGION_LENGTH__+0x7e0061>
  225 + 1c6: 90 93 61 00 sts 0x0061, r25 ; 0x800061 <__TEXT_REGION_LENGTH__+0x7e0061>
  226 + 1ca: 0f be out 0x3f, r0 ; 63
  227 +
  228 + /* Hardware Initialization */
  229 + Joystick_Init();
  230 + LEDs_Init();
  231 + Buttons_Init();
  232 + USB_Init();
  233 + 1cc: bb c2 rjmp .+1398 ; 0x744 <USB_Init>
  234 +
  235 +000001ce <main>:
  236 +/** Main program entry point. This routine contains the overall program flow, including initial
  237 + * setup of all components and the main program loop.
  238 + */
  239 +int main(void)
  240 +{
  241 + SetupHardware();
  242 + 1ce: e7 df rcall .-50 ; 0x19e <SetupHardware>
  243 + static inline void GlobalInterruptEnable(void)
  244 + {
  245 + GCC_MEMORY_BARRIER();
  246 +
  247 + #if (ARCH == ARCH_AVR8)
  248 + sei();
  249 + 1d0: 78 94 sei
  250 + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
  251 + GlobalInterruptEnable();
  252 +
  253 + for (;;)
  254 + {
  255 + HID_Device_USBTask(&Joystick_HID_Interface);
  256 + 1d2: 80 e0 ldi r24, 0x00 ; 0
  257 + 1d4: 91 e0 ldi r25, 0x01 ; 1
  258 + USB_USBTask();
  259 + 1d6: 5b d6 rcall .+3254 ; 0xe8e <HID_Device_USBTask>
  260 + 1d8: fa d4 rcall .+2548 ; 0xbce <USB_USBTask>
  261 + 1da: fb cf rjmp .-10 ; 0x1d2 <main+0x4>
  262 +
  263 +000001dc <EVENT_USB_Device_Connect>:
  264 + 1dc: 08 95 ret
  265 +
  266 +000001de <EVENT_USB_Device_Disconnect>:
  267 + LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
  268 +}
  269 +
  270 +/** Event handler for the library USB Disconnection event. */
  271 +void EVENT_USB_Device_Disconnect(void)
  272 +{
  273 + 1de: 08 95 ret
  274 +
  275 +000001e0 <EVENT_USB_Device_ConfigurationChanged>:
  276 +/** Event handler for the library USB Configuration Changed event. */
  277 +void EVENT_USB_Device_ConfigurationChanged(void)
  278 +{
  279 + bool ConfigSuccess = true;
  280 +
  281 + ConfigSuccess &= HID_Device_ConfigureEndpoints(&Joystick_HID_Interface);
  282 + 1e0: 80 e0 ldi r24, 0x00 ; 0
  283 + 1e2: 91 e0 ldi r25, 0x01 ; 1
  284 + 1e4: 41 d6 rcall .+3202 ; 0xe68 <HID_Device_ConfigureEndpoints>
  285 + break;
  286 + case USB_INT_EORSTI:
  287 + UDIEN |= (1 << EORSTE);
  288 + break;
  289 + case USB_INT_SOFI:
  290 + UDIEN |= (1 << SOFE);
  291 + 1e6: e2 ee ldi r30, 0xE2 ; 226
  292 + 1e8: f0 e0 ldi r31, 0x00 ; 0
  293 + 1ea: 80 81 ld r24, Z
  294 + 1ec: 84 60 ori r24, 0x04 ; 4
  295 + 1ee: 80 83 st Z, r24
  296 + 1f0: 08 95 ret
  297 +
  298 +000001f2 <EVENT_USB_Device_ControlRequest>:
  299 +}
  300 +
  301 +/** Event handler for the library USB Control Request reception event. */
  302 +void EVENT_USB_Device_ControlRequest(void)
  303 +{
  304 + HID_Device_ProcessControlRequest(&Joystick_HID_Interface);
  305 + 1f2: 80 e0 ldi r24, 0x00 ; 0
  306 + 1f4: 91 e0 ldi r25, 0x01 ; 1
  307 + 1f6: 05 c5 rjmp .+2570 ; 0xc02 <HID_Device_ProcessControlRequest>
  308 +
  309 +000001f8 <EVENT_USB_Device_StartOfFrame>:
  310 + * \param[in,out] HIDInterfaceInfo Pointer to a structure containing a HID Class configuration and state.
  311 + */
  312 + static inline void HID_Device_MillisecondElapsed(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo) ATTR_ALWAYS_INLINE ATTR_NON_NULL_PTR_ARG(1);
  313 + static inline void HID_Device_MillisecondElapsed(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
  314 + {
  315 + if (HIDInterfaceInfo->State.IdleMSRemaining)
  316 + 1f8: 80 91 0e 01 lds r24, 0x010E ; 0x80010e <Joystick_HID_Interface+0xe>
  317 + 1fc: 90 91 0f 01 lds r25, 0x010F ; 0x80010f <Joystick_HID_Interface+0xf>
  318 + 200: 00 97 sbiw r24, 0x00 ; 0
  319 + 202: 29 f0 breq .+10 ; 0x20e <EVENT_USB_Device_StartOfFrame+0x16>
  320 + HIDInterfaceInfo->State.IdleMSRemaining--;
  321 + 204: 01 97 sbiw r24, 0x01 ; 1
  322 + 206: 90 93 0f 01 sts 0x010F, r25 ; 0x80010f <Joystick_HID_Interface+0xf>
  323 + 20a: 80 93 0e 01 sts 0x010E, r24 ; 0x80010e <Joystick_HID_Interface+0xe>
  324 + 20e: 08 95 ret
  325 +
  326 +00000210 <CALLBACK_HID_Device_CreateHIDReport>:
  327 +bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
  328 + uint8_t* const ReportID,
  329 + const uint8_t ReportType,
  330 + void* ReportData,
  331 + uint16_t* const ReportSize)
  332 +{
  333 + 210: 0f 93 push r16
  334 + 212: 1f 93 push r17
  335 + JoystickReport->Button |= (1 << 1);
  336 +
  337 + if (ButtonStatus_LCL & BUTTONS_BUTTON1)
  338 + JoystickReport->Button |= (1 << 0);
  339 +
  340 + *ReportSize = sizeof(USB_JoystickReport_Data_t);
  341 + 214: 84 e0 ldi r24, 0x04 ; 4
  342 + 216: 90 e0 ldi r25, 0x00 ; 0
  343 + 218: f8 01 movw r30, r16
  344 + 21a: 91 83 std Z+1, r25 ; 0x01
  345 + 21c: 80 83 st Z, r24
  346 + return false;
  347 +}
  348 + 21e: 80 e0 ldi r24, 0x00 ; 0
  349 + 220: 1f 91 pop r17
  350 + 222: 0f 91 pop r16
  351 + 224: 08 95 ret
  352 +
  353 +00000226 <CALLBACK_HID_Device_ProcessHIDReport>:
  354 +void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
  355 + const uint8_t ReportID,
  356 + const uint8_t ReportType,
  357 + const void* ReportData,
  358 + const uint16_t ReportSize)
  359 +{
  360 + 226: 08 95 ret
  361 +
  362 +00000228 <CALLBACK_USB_GetDescriptor>:
  363 + const uint8_t DescriptorNumber = (wValue & 0xFF);
  364 +
  365 + const void* Address = NULL;
  366 + uint16_t Size = NO_DESCRIPTOR;
  367 +
  368 + switch (DescriptorType)
  369 + 228: 29 2f mov r18, r25
  370 + 22a: 33 27 eor r19, r19
  371 + 22c: 23 30 cpi r18, 0x03 ; 3
  372 + 22e: 31 05 cpc r19, r1
  373 + 230: e1 f0 breq .+56 ; 0x26a <CALLBACK_USB_GetDescriptor+0x42>
  374 + 232: 58 f4 brcc .+22 ; 0x24a <CALLBACK_USB_GetDescriptor+0x22>
  375 + 234: 21 30 cpi r18, 0x01 ; 1
  376 + 236: 31 05 cpc r19, r1
  377 + 238: 99 f0 breq .+38 ; 0x260 <CALLBACK_USB_GetDescriptor+0x38>
  378 + 23a: 22 30 cpi r18, 0x02 ; 2
  379 + 23c: 31 05 cpc r19, r1
  380 + 23e: 69 f5 brne .+90 ; 0x29a <CALLBACK_USB_GetDescriptor+0x72>
  381 + Address = &DeviceDescriptor;
  382 + Size = sizeof(USB_Descriptor_Device_t);
  383 + break;
  384 + case DTYPE_Configuration:
  385 + Address = &ConfigurationDescriptor;
  386 + Size = sizeof(USB_Descriptor_Configuration_t);
  387 + 240: 82 e2 ldi r24, 0x22 ; 34
  388 + 242: 90 e0 ldi r25, 0x00 ; 0
  389 + case DTYPE_Device:
  390 + Address = &DeviceDescriptor;
  391 + Size = sizeof(USB_Descriptor_Device_t);
  392 + break;
  393 + case DTYPE_Configuration:
  394 + Address = &ConfigurationDescriptor;
  395 + 244: 28 ef ldi r18, 0xF8 ; 248
  396 + 246: 30 e0 ldi r19, 0x00 ; 0
  397 + Size = sizeof(USB_Descriptor_Configuration_t);
  398 + break;
  399 + 248: 2c c0 rjmp .+88 ; 0x2a2 <CALLBACK_USB_GetDescriptor+0x7a>
  400 + const uint8_t DescriptorNumber = (wValue & 0xFF);
  401 +
  402 + const void* Address = NULL;
  403 + uint16_t Size = NO_DESCRIPTOR;
  404 +
  405 + switch (DescriptorType)
  406 + 24a: 21 32 cpi r18, 0x21 ; 33
  407 + 24c: 31 05 cpc r19, r1
  408 + 24e: 01 f1 breq .+64 ; 0x290 <CALLBACK_USB_GetDescriptor+0x68>
  409 + 250: 22 32 cpi r18, 0x22 ; 34
  410 + 252: 31 05 cpc r19, r1
  411 + 254: 11 f5 brne .+68 ; 0x29a <CALLBACK_USB_GetDescriptor+0x72>
  412 + Address = &ConfigurationDescriptor.HID_JoystickHID;
  413 + Size = sizeof(USB_HID_Descriptor_HID_t);
  414 + break;
  415 + case HID_DTYPE_Report:
  416 + Address = &JoystickReport;
  417 + Size = sizeof(JoystickReport);
  418 + 256: 8a e3 ldi r24, 0x3A ; 58
  419 + 258: 90 e0 ldi r25, 0x00 ; 0
  420 + case HID_DTYPE_HID:
  421 + Address = &ConfigurationDescriptor.HID_JoystickHID;
  422 + Size = sizeof(USB_HID_Descriptor_HID_t);
  423 + break;
  424 + case HID_DTYPE_Report:
  425 + Address = &JoystickReport;
  426 + 25a: 2c e2 ldi r18, 0x2C ; 44
  427 + 25c: 31 e0 ldi r19, 0x01 ; 1
  428 + Size = sizeof(JoystickReport);
  429 + break;
  430 + 25e: 21 c0 rjmp .+66 ; 0x2a2 <CALLBACK_USB_GetDescriptor+0x7a>
  431 +
  432 + switch (DescriptorType)
  433 + {
  434 + case DTYPE_Device:
  435 + Address = &DeviceDescriptor;
  436 + Size = sizeof(USB_Descriptor_Device_t);
  437 + 260: 82 e1 ldi r24, 0x12 ; 18
  438 + 262: 90 e0 ldi r25, 0x00 ; 0
  439 + uint16_t Size = NO_DESCRIPTOR;
  440 +
  441 + switch (DescriptorType)
  442 + {
  443 + case DTYPE_Device:
  444 + Address = &DeviceDescriptor;
  445 + 264: 2a e1 ldi r18, 0x1A ; 26
  446 + 266: 31 e0 ldi r19, 0x01 ; 1
  447 + 268: 1c c0 rjmp .+56 ; 0x2a2 <CALLBACK_USB_GetDescriptor+0x7a>
  448 + case DTYPE_Configuration:
  449 + Address = &ConfigurationDescriptor;
  450 + Size = sizeof(USB_Descriptor_Configuration_t);
  451 + break;
  452 + case DTYPE_String:
  453 + switch (DescriptorNumber)
  454 + 26a: 99 27 eor r25, r25
  455 + 26c: 81 30 cpi r24, 0x01 ; 1
  456 + 26e: 91 05 cpc r25, r1
  457 + 270: 49 f0 breq .+18 ; 0x284 <CALLBACK_USB_GetDescriptor+0x5c>
  458 + 272: 28 f0 brcs .+10 ; 0x27e <CALLBACK_USB_GetDescriptor+0x56>
  459 + 274: 02 97 sbiw r24, 0x02 ; 2
  460 + 276: 89 f4 brne .+34 ; 0x29a <CALLBACK_USB_GetDescriptor+0x72>
  461 + Address = &ManufacturerString;
  462 + Size = pgm_read_byte(&ManufacturerString.Header.Size);
  463 + break;
  464 + case STRING_ID_Product:
  465 + Address = &ProductString;
  466 + Size = pgm_read_byte(&ProductString.Header.Size);
  467 + 278: ec ea ldi r30, 0xAC ; 172
  468 + 27a: f0 e0 ldi r31, 0x00 ; 0
  469 + 27c: 05 c0 rjmp .+10 ; 0x288 <CALLBACK_USB_GetDescriptor+0x60>
  470 + case DTYPE_String:
  471 + switch (DescriptorNumber)
  472 + {
  473 + case STRING_ID_Language:
  474 + Address = &LanguageString;
  475 + Size = pgm_read_byte(&LanguageString.Header.Size);
  476 + 27e: e4 ef ldi r30, 0xF4 ; 244
  477 + 280: f0 e0 ldi r31, 0x00 ; 0
  478 + 282: 02 c0 rjmp .+4 ; 0x288 <CALLBACK_USB_GetDescriptor+0x60>
  479 + break;
  480 + case STRING_ID_Manufacturer:
  481 + Address = &ManufacturerString;
  482 + Size = pgm_read_byte(&ManufacturerString.Header.Size);
  483 + 284: e8 ec ldi r30, 0xC8 ; 200
  484 + 286: f0 e0 ldi r31, 0x00 ; 0
  485 + break;
  486 + case STRING_ID_Product:
  487 + Address = &ProductString;
  488 + Size = pgm_read_byte(&ProductString.Header.Size);
  489 + 288: 84 91 lpm r24, Z
  490 + 28a: 90 e0 ldi r25, 0x00 ; 0
  491 + case STRING_ID_Manufacturer:
  492 + Address = &ManufacturerString;
  493 + Size = pgm_read_byte(&ManufacturerString.Header.Size);
  494 + break;
  495 + case STRING_ID_Product:
  496 + Address = &ProductString;
  497 + 28c: 9f 01 movw r18, r30
  498 + Size = pgm_read_byte(&ProductString.Header.Size);
  499 + break;
  500 + 28e: 09 c0 rjmp .+18 ; 0x2a2 <CALLBACK_USB_GetDescriptor+0x7a>
  501 + }
  502 +
  503 + break;
  504 + case HID_DTYPE_HID:
  505 + Address = &ConfigurationDescriptor.HID_JoystickHID;
  506 + Size = sizeof(USB_HID_Descriptor_HID_t);
  507 + 290: 89 e0 ldi r24, 0x09 ; 9
  508 + 292: 90 e0 ldi r25, 0x00 ; 0
  509 + break;
  510 + }
  511 +
  512 + break;
  513 + case HID_DTYPE_HID:
  514 + Address = &ConfigurationDescriptor.HID_JoystickHID;
  515 + 294: 2a e0 ldi r18, 0x0A ; 10
  516 + 296: 31 e0 ldi r19, 0x01 ; 1
  517 + Size = sizeof(USB_HID_Descriptor_HID_t);
  518 + break;
  519 + 298: 04 c0 rjmp .+8 ; 0x2a2 <CALLBACK_USB_GetDescriptor+0x7a>
  520 +{
  521 + const uint8_t DescriptorType = (wValue >> 8);
  522 + const uint8_t DescriptorNumber = (wValue & 0xFF);
  523 +
  524 + const void* Address = NULL;
  525 + uint16_t Size = NO_DESCRIPTOR;
  526 + 29a: 80 e0 ldi r24, 0x00 ; 0
  527 + 29c: 90 e0 ldi r25, 0x00 ; 0
  528 + const void** const DescriptorAddress)
  529 +{
  530 + const uint8_t DescriptorType = (wValue >> 8);
  531 + const uint8_t DescriptorNumber = (wValue & 0xFF);
  532 +
  533 + const void* Address = NULL;
  534 + 29e: 20 e0 ldi r18, 0x00 ; 0
  535 + 2a0: 30 e0 ldi r19, 0x00 ; 0
  536 + Address = &JoystickReport;
  537 + Size = sizeof(JoystickReport);
  538 + break;
  539 + }
  540 +
  541 + *DescriptorAddress = Address;
  542 + 2a2: fa 01 movw r30, r20
  543 + 2a4: 31 83 std Z+1, r19 ; 0x01
  544 + 2a6: 20 83 st Z, r18
  545 + return Size;
  546 +}
  547 + 2a8: 08 95 ret
  548 +
  549 +000002aa <Endpoint_Write_Stream_LE>:
  550 + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
  551 + return ENDPOINT_RWCSTREAM_BusSuspended;
  552 + }
  553 +
  554 + return ENDPOINT_RWCSTREAM_NoError;
  555 +}
  556 + 2aa: cf 92 push r12
  557 + 2ac: df 92 push r13
  558 + 2ae: ef 92 push r14
  559 + 2b0: ff 92 push r15
  560 + 2b2: 0f 93 push r16
  561 + 2b4: 1f 93 push r17
  562 + 2b6: cf 93 push r28
  563 + 2b8: df 93 push r29
  564 + 2ba: ec 01 movw r28, r24
  565 + 2bc: 8b 01 movw r16, r22
  566 + 2be: 7a 01 movw r14, r20
  567 + 2c0: ce d1 rcall .+924 ; 0x65e <Endpoint_WaitUntilReady>
  568 + 2c2: 81 11 cpse r24, r1
  569 + 2c4: 33 c0 rjmp .+102 ; 0x32c <Endpoint_Write_Stream_LE+0x82>
  570 + 2c6: e1 14 cp r14, r1
  571 + 2c8: f1 04 cpc r15, r1
  572 + 2ca: 39 f0 breq .+14 ; 0x2da <Endpoint_Write_Stream_LE+0x30>
  573 + 2cc: f7 01 movw r30, r14
  574 + 2ce: 80 81 ld r24, Z
  575 + 2d0: 91 81 ldd r25, Z+1 ; 0x01
  576 + 2d2: 08 1b sub r16, r24
  577 + 2d4: 19 0b sbc r17, r25
  578 + 2d6: c8 0f add r28, r24
  579 + 2d8: d9 1f adc r29, r25
  580 + 2da: c1 2c mov r12, r1
  581 + 2dc: d1 2c mov r13, r1
  582 + 2de: 01 15 cp r16, r1
  583 + 2e0: 11 05 cpc r17, r1
  584 + 2e2: 19 f1 breq .+70 ; 0x32a <Endpoint_Write_Stream_LE+0x80>
  585 + 2e4: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  586 + 2e8: 85 fd sbrc r24, 5
  587 + 2ea: 16 c0 rjmp .+44 ; 0x318 <Endpoint_Write_Stream_LE+0x6e>
  588 + 2ec: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  589 + 2f0: 8e 77 andi r24, 0x7E ; 126
  590 + 2f2: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  591 + 2f6: 6b d4 rcall .+2262 ; 0xbce <USB_USBTask>
  592 + 2f8: e1 14 cp r14, r1
  593 + 2fa: f1 04 cpc r15, r1
  594 + 2fc: 49 f0 breq .+18 ; 0x310 <Endpoint_Write_Stream_LE+0x66>
  595 + 2fe: f7 01 movw r30, r14
  596 + 300: 80 81 ld r24, Z
  597 + 302: 91 81 ldd r25, Z+1 ; 0x01
  598 + 304: c8 0e add r12, r24
  599 + 306: d9 1e adc r13, r25
  600 + 308: d1 82 std Z+1, r13 ; 0x01
  601 + 30a: c0 82 st Z, r12
  602 + 30c: 85 e0 ldi r24, 0x05 ; 5
  603 + 30e: 0e c0 rjmp .+28 ; 0x32c <Endpoint_Write_Stream_LE+0x82>
  604 + 310: a6 d1 rcall .+844 ; 0x65e <Endpoint_WaitUntilReady>
  605 + 312: 88 23 and r24, r24
  606 + 314: 21 f3 breq .-56 ; 0x2de <Endpoint_Write_Stream_LE+0x34>
  607 + 316: 0a c0 rjmp .+20 ; 0x32c <Endpoint_Write_Stream_LE+0x82>
  608 + 318: 89 91 ld r24, Y+
  609 + 31a: 80 93 f1 00 sts 0x00F1, r24 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  610 + 31e: 01 50 subi r16, 0x01 ; 1
  611 + 320: 11 09 sbc r17, r1
  612 + 322: ff ef ldi r31, 0xFF ; 255
  613 + 324: cf 1a sub r12, r31
  614 + 326: df 0a sbc r13, r31
  615 + 328: da cf rjmp .-76 ; 0x2de <Endpoint_Write_Stream_LE+0x34>
  616 + 32a: 80 e0 ldi r24, 0x00 ; 0
  617 + 32c: df 91 pop r29
  618 + 32e: cf 91 pop r28
  619 + 330: 1f 91 pop r17
  620 + 332: 0f 91 pop r16
  621 + 334: ff 90 pop r15
  622 + 336: ef 90 pop r14
  623 + 338: df 90 pop r13
  624 + 33a: cf 90 pop r12
  625 + 33c: 08 95 ret
  626 +
  627 +0000033e <Endpoint_Write_Control_Stream_LE>:
  628 + 33e: 20 91 1f 01 lds r18, 0x011F ; 0x80011f <USB_ControlRequest+0x6>
  629 + 342: 30 91 20 01 lds r19, 0x0120 ; 0x800120 <USB_ControlRequest+0x7>
  630 + 346: 26 17 cp r18, r22
  631 + 348: 37 07 cpc r19, r23
  632 + 34a: 48 f0 brcs .+18 ; 0x35e <Endpoint_Write_Control_Stream_LE+0x20>
  633 + 34c: 61 15 cp r22, r1
  634 + 34e: 71 05 cpc r23, r1
  635 + 350: 39 f4 brne .+14 ; 0x360 <Endpoint_Write_Control_Stream_LE+0x22>
  636 + 352: 20 91 e8 00 lds r18, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  637 + 356: 2e 77 andi r18, 0x7E ; 126
  638 + 358: 20 93 e8 00 sts 0x00E8, r18 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  639 + 35c: 01 c0 rjmp .+2 ; 0x360 <Endpoint_Write_Control_Stream_LE+0x22>
  640 + 35e: b9 01 movw r22, r18
  641 + 360: fc 01 movw r30, r24
  642 + 362: 20 e0 ldi r18, 0x00 ; 0
  643 + 364: 61 15 cp r22, r1
  644 + 366: 71 05 cpc r23, r1
  645 + 368: 79 f1 breq .+94 ; 0x3c8 <Endpoint_Write_Control_Stream_LE+0x8a>
  646 + 36a: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  647 + 36e: 88 23 and r24, r24
  648 + 370: f1 f1 breq .+124 ; 0x3ee <Endpoint_Write_Control_Stream_LE+0xb0>
  649 + 372: 85 30 cpi r24, 0x05 ; 5
  650 + 374: f1 f1 breq .+124 ; 0x3f2 <Endpoint_Write_Control_Stream_LE+0xb4>
  651 + 376: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  652 + 37a: 83 fd sbrc r24, 3
  653 + 37c: 3c c0 rjmp .+120 ; 0x3f6 <Endpoint_Write_Control_Stream_LE+0xb8>
  654 + 37e: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  655 + 382: 82 fd sbrc r24, 2
  656 + 384: 2e c0 rjmp .+92 ; 0x3e2 <Endpoint_Write_Control_Stream_LE+0xa4>
  657 + 386: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  658 + 38a: 80 ff sbrs r24, 0
  659 + 38c: eb cf rjmp .-42 ; 0x364 <Endpoint_Write_Control_Stream_LE+0x26>
  660 + 38e: 20 91 f3 00 lds r18, 0x00F3 ; 0x8000f3 <__TEXT_REGION_LENGTH__+0x7e00f3>
  661 + 392: 80 91 f2 00 lds r24, 0x00F2 ; 0x8000f2 <__TEXT_REGION_LENGTH__+0x7e00f2>
  662 + 396: 90 e0 ldi r25, 0x00 ; 0
  663 + 398: 92 2b or r25, r18
  664 + 39a: 61 15 cp r22, r1
  665 + 39c: 71 05 cpc r23, r1
  666 + 39e: 51 f0 breq .+20 ; 0x3b4 <Endpoint_Write_Control_Stream_LE+0x76>
  667 + 3a0: 88 30 cpi r24, 0x08 ; 8
  668 + 3a2: 91 05 cpc r25, r1
  669 + 3a4: 38 f4 brcc .+14 ; 0x3b4 <Endpoint_Write_Control_Stream_LE+0x76>
  670 + 3a6: 21 91 ld r18, Z+
  671 + 3a8: 20 93 f1 00 sts 0x00F1, r18 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  672 + 3ac: 61 50 subi r22, 0x01 ; 1
  673 + 3ae: 71 09 sbc r23, r1
  674 + 3b0: 01 96 adiw r24, 0x01 ; 1
  675 + 3b2: f3 cf rjmp .-26 ; 0x39a <Endpoint_Write_Control_Stream_LE+0x5c>
  676 + 3b4: 21 e0 ldi r18, 0x01 ; 1
  677 + 3b6: 08 97 sbiw r24, 0x08 ; 8
  678 + 3b8: 09 f0 breq .+2 ; 0x3bc <Endpoint_Write_Control_Stream_LE+0x7e>
  679 + 3ba: 20 e0 ldi r18, 0x00 ; 0
  680 + 3bc: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  681 + 3c0: 8e 77 andi r24, 0x7E ; 126
  682 + 3c2: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  683 + 3c6: ce cf rjmp .-100 ; 0x364 <Endpoint_Write_Control_Stream_LE+0x26>
  684 + 3c8: 21 11 cpse r18, r1
  685 + 3ca: cf cf rjmp .-98 ; 0x36a <Endpoint_Write_Control_Stream_LE+0x2c>
  686 + 3cc: 0a c0 rjmp .+20 ; 0x3e2 <Endpoint_Write_Control_Stream_LE+0xa4>
  687 + 3ce: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  688 + 3d2: 88 23 and r24, r24
  689 + 3d4: 61 f0 breq .+24 ; 0x3ee <Endpoint_Write_Control_Stream_LE+0xb0>
  690 + 3d6: 85 30 cpi r24, 0x05 ; 5
  691 + 3d8: 61 f0 breq .+24 ; 0x3f2 <Endpoint_Write_Control_Stream_LE+0xb4>
  692 + 3da: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  693 + 3de: 83 fd sbrc r24, 3
  694 + 3e0: 0a c0 rjmp .+20 ; 0x3f6 <Endpoint_Write_Control_Stream_LE+0xb8>
  695 + 3e2: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  696 + 3e6: 82 ff sbrs r24, 2
  697 + 3e8: f2 cf rjmp .-28 ; 0x3ce <Endpoint_Write_Control_Stream_LE+0x90>
  698 + 3ea: 80 e0 ldi r24, 0x00 ; 0
  699 + 3ec: 08 95 ret
  700 + 3ee: 82 e0 ldi r24, 0x02 ; 2
  701 + 3f0: 08 95 ret
  702 + 3f2: 83 e0 ldi r24, 0x03 ; 3
  703 + 3f4: 08 95 ret
  704 + 3f6: 81 e0 ldi r24, 0x01 ; 1
  705 + 3f8: 08 95 ret
  706 +
  707 +000003fa <Endpoint_Read_Control_Stream_LE>:
  708 + 3fa: 61 15 cp r22, r1
  709 + 3fc: 71 05 cpc r23, r1
  710 + 3fe: 29 f4 brne .+10 ; 0x40a <__LOCK_REGION_LENGTH__+0xa>
  711 + 400: 20 91 e8 00 lds r18, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  712 + 404: 2b 77 andi r18, 0x7B ; 123
  713 + 406: 20 93 e8 00 sts 0x00E8, r18 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  714 + 40a: fc 01 movw r30, r24
  715 + 40c: 61 15 cp r22, r1
  716 + 40e: 71 05 cpc r23, r1
  717 + 410: 41 f1 breq .+80 ; 0x462 <__LOCK_REGION_LENGTH__+0x62>
  718 + 412: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  719 + 416: 88 23 and r24, r24
  720 + 418: 61 f1 breq .+88 ; 0x472 <__LOCK_REGION_LENGTH__+0x72>
  721 + 41a: 85 30 cpi r24, 0x05 ; 5
  722 + 41c: 61 f1 breq .+88 ; 0x476 <__LOCK_REGION_LENGTH__+0x76>
  723 + 41e: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  724 + 422: 83 fd sbrc r24, 3
  725 + 424: 24 c0 rjmp .+72 ; 0x46e <__LOCK_REGION_LENGTH__+0x6e>
  726 + 426: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  727 + 42a: 82 ff sbrs r24, 2
  728 + 42c: ef cf rjmp .-34 ; 0x40c <__LOCK_REGION_LENGTH__+0xc>
  729 + 42e: 20 91 f3 00 lds r18, 0x00F3 ; 0x8000f3 <__TEXT_REGION_LENGTH__+0x7e00f3>
  730 + 432: 80 91 f2 00 lds r24, 0x00F2 ; 0x8000f2 <__TEXT_REGION_LENGTH__+0x7e00f2>
  731 + 436: 90 e0 ldi r25, 0x00 ; 0
  732 + 438: 92 2b or r25, r18
  733 + 43a: 89 2b or r24, r25
  734 + 43c: 31 f0 breq .+12 ; 0x44a <__LOCK_REGION_LENGTH__+0x4a>
  735 + 43e: 80 91 f1 00 lds r24, 0x00F1 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  736 + 442: 81 93 st Z+, r24
  737 + 444: 61 50 subi r22, 0x01 ; 1
  738 + 446: 71 09 sbc r23, r1
  739 + 448: 91 f7 brne .-28 ; 0x42e <__LOCK_REGION_LENGTH__+0x2e>
  740 + 44a: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  741 + 44e: 8b 77 andi r24, 0x7B ; 123
  742 + 450: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  743 + 454: db cf rjmp .-74 ; 0x40c <__LOCK_REGION_LENGTH__+0xc>
  744 + 456: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  745 + 45a: 88 23 and r24, r24
  746 + 45c: 51 f0 breq .+20 ; 0x472 <__LOCK_REGION_LENGTH__+0x72>
  747 + 45e: 85 30 cpi r24, 0x05 ; 5
  748 + 460: 51 f0 breq .+20 ; 0x476 <__LOCK_REGION_LENGTH__+0x76>
  749 + 462: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  750 + 466: 80 ff sbrs r24, 0
  751 + 468: f6 cf rjmp .-20 ; 0x456 <__LOCK_REGION_LENGTH__+0x56>
  752 + 46a: 80 e0 ldi r24, 0x00 ; 0
  753 + 46c: 08 95 ret
  754 + 46e: 81 e0 ldi r24, 0x01 ; 1
  755 + 470: 08 95 ret
  756 + 472: 82 e0 ldi r24, 0x02 ; 2
  757 + 474: 08 95 ret
  758 + 476: 83 e0 ldi r24, 0x03 ; 3
  759 + 478: 08 95 ret
  760 +
  761 +0000047a <Endpoint_Write_Control_PStream_LE>:
  762 + uint16_t Length)
  763 +{
  764 + uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
  765 + bool LastPacketFull = false;
  766 +
  767 + if (Length > USB_ControlRequest.wLength)
  768 + 47a: 20 91 1f 01 lds r18, 0x011F ; 0x80011f <USB_ControlRequest+0x6>
  769 + 47e: 30 91 20 01 lds r19, 0x0120 ; 0x800120 <USB_ControlRequest+0x7>
  770 + 482: 26 17 cp r18, r22
  771 + 484: 37 07 cpc r19, r23
  772 + 486: 48 f0 brcs .+18 ; 0x49a <Endpoint_Write_Control_PStream_LE+0x20>
  773 + Length = USB_ControlRequest.wLength;
  774 + else if (!(Length))
  775 + 488: 61 15 cp r22, r1
  776 + 48a: 71 05 cpc r23, r1
  777 + 48c: 39 f4 brne .+14 ; 0x49c <Endpoint_Write_Control_PStream_LE+0x22>
  778 + */
  779 + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE;
  780 + static inline void Endpoint_ClearIN(void)
  781 + {
  782 + #if !defined(CONTROL_ONLY_DEVICE)
  783 + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON));
  784 + 48e: 20 91 e8 00 lds r18, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  785 + 492: 2e 77 andi r18, 0x7E ; 126
  786 + 494: 20 93 e8 00 sts 0x00E8, r18 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  787 + 498: 01 c0 rjmp .+2 ; 0x49c <Endpoint_Write_Control_PStream_LE+0x22>
  788 + 49a: b9 01 movw r22, r18
  789 + 49c: fc 01 movw r30, r24
  790 + 49e: 20 e0 ldi r18, 0x00 ; 0
  791 + Endpoint_ClearIN();
  792 +
  793 + while (Length || LastPacketFull)
  794 + 4a0: 61 15 cp r22, r1
  795 + 4a2: 71 05 cpc r23, r1
  796 + 4a4: 91 f1 breq .+100 ; 0x50a <Endpoint_Write_Control_PStream_LE+0x90>
  797 + {
  798 + uint8_t USB_DeviceState_LCL = USB_DeviceState;
  799 + 4a6: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  800 +
  801 + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
  802 + 4aa: 88 23 and r24, r24
  803 + 4ac: 09 f4 brne .+2 ; 0x4b0 <Endpoint_Write_Control_PStream_LE+0x36>
  804 + 4ae: 40 c0 rjmp .+128 ; 0x530 <Endpoint_Write_Control_PStream_LE+0xb6>
  805 + return ENDPOINT_RWCSTREAM_DeviceDisconnected;
  806 + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
  807 + 4b0: 85 30 cpi r24, 0x05 ; 5
  808 + 4b2: 09 f4 brne .+2 ; 0x4b6 <Endpoint_Write_Control_PStream_LE+0x3c>
  809 + 4b4: 3f c0 rjmp .+126 ; 0x534 <Endpoint_Write_Control_PStream_LE+0xba>
  810 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise.
  811 + */
  812 + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  813 + static inline bool Endpoint_IsSETUPReceived(void)
  814 + {
  815 + return ((UEINTX & (1 << RXSTPI)) ? true : false);
  816 + 4b6: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  817 + return ENDPOINT_RWCSTREAM_BusSuspended;
  818 + else if (Endpoint_IsSETUPReceived())
  819 + 4ba: 83 fd sbrc r24, 3
  820 + 4bc: 3d c0 rjmp .+122 ; 0x538 <Endpoint_Write_Control_PStream_LE+0xbe>
  821 + * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise.
  822 + */
  823 + static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  824 + static inline bool Endpoint_IsOUTReceived(void)
  825 + {
  826 + return ((UEINTX & (1 << RXOUTI)) ? true : false);
  827 + 4be: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  828 + return ENDPOINT_RWCSTREAM_HostAborted;
  829 + else if (Endpoint_IsOUTReceived())
  830 + 4c2: 82 fd sbrc r24, 2
  831 + 4c4: 2f c0 rjmp .+94 ; 0x524 <Endpoint_Write_Control_PStream_LE+0xaa>
  832 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise.
  833 + */
  834 + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  835 + static inline bool Endpoint_IsINReady(void)
  836 + {
  837 + return ((UEINTX & (1 << TXINI)) ? true : false);
  838 + 4c6: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  839 + break;
  840 +
  841 + if (Endpoint_IsINReady())
  842 + 4ca: 80 ff sbrs r24, 0
  843 + 4cc: e9 cf rjmp .-46 ; 0x4a0 <Endpoint_Write_Control_PStream_LE+0x26>
  844 + static inline uint16_t Endpoint_BytesInEndpoint(void)
  845 + {
  846 + #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
  847 + return UEBCX;
  848 + #elif defined(USB_SERIES_4_AVR)
  849 + return (((uint16_t)UEBCHX << 8) | UEBCLX);
  850 + 4ce: 20 91 f3 00 lds r18, 0x00F3 ; 0x8000f3 <__TEXT_REGION_LENGTH__+0x7e00f3>
  851 + 4d2: 80 91 f2 00 lds r24, 0x00F2 ; 0x8000f2 <__TEXT_REGION_LENGTH__+0x7e00f2>
  852 + 4d6: 90 e0 ldi r25, 0x00 ; 0
  853 + 4d8: 92 2b or r25, r18
  854 + {
  855 + uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint();
  856 +
  857 + while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize))
  858 + 4da: 61 15 cp r22, r1
  859 + 4dc: 71 05 cpc r23, r1
  860 + 4de: 59 f0 breq .+22 ; 0x4f6 <Endpoint_Write_Control_PStream_LE+0x7c>
  861 + 4e0: 88 30 cpi r24, 0x08 ; 8
  862 + 4e2: 91 05 cpc r25, r1
  863 + 4e4: 40 f4 brcc .+16 ; 0x4f6 <Endpoint_Write_Control_PStream_LE+0x7c>
  864 + {
  865 + TEMPLATE_TRANSFER_BYTE(DataStream);
  866 + 4e6: 24 91 lpm r18, Z
  867 + * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer.
  868 + */
  869 + static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE;
  870 + static inline void Endpoint_Write_8(const uint8_t Data)
  871 + {
  872 + UEDATX = Data;
  873 + 4e8: 20 93 f1 00 sts 0x00F1, r18 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  874 + TEMPLATE_BUFFER_MOVE(DataStream, 1);
  875 + 4ec: 31 96 adiw r30, 0x01 ; 1
  876 + Length--;
  877 + 4ee: 61 50 subi r22, 0x01 ; 1
  878 + 4f0: 71 09 sbc r23, r1
  879 + BytesInEndpoint++;
  880 + 4f2: 01 96 adiw r24, 0x01 ; 1
  881 + 4f4: f2 cf rjmp .-28 ; 0x4da <Endpoint_Write_Control_PStream_LE+0x60>
  882 + }
  883 +
  884 + LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize);
  885 + 4f6: 21 e0 ldi r18, 0x01 ; 1
  886 + 4f8: 08 97 sbiw r24, 0x08 ; 8
  887 + 4fa: 09 f0 breq .+2 ; 0x4fe <Endpoint_Write_Control_PStream_LE+0x84>
  888 + 4fc: 20 e0 ldi r18, 0x00 ; 0
  889 + */
  890 + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE;
  891 + static inline void Endpoint_ClearIN(void)
  892 + {
  893 + #if !defined(CONTROL_ONLY_DEVICE)
  894 + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON));
  895 + 4fe: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  896 + 502: 8e 77 andi r24, 0x7E ; 126
  897 + 504: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  898 + 508: cb cf rjmp .-106 ; 0x4a0 <Endpoint_Write_Control_PStream_LE+0x26>
  899 + if (Length > USB_ControlRequest.wLength)
  900 + Length = USB_ControlRequest.wLength;
  901 + else if (!(Length))
  902 + Endpoint_ClearIN();
  903 +
  904 + while (Length || LastPacketFull)
  905 + 50a: 21 11 cpse r18, r1
  906 + 50c: cc cf rjmp .-104 ; 0x4a6 <Endpoint_Write_Control_PStream_LE+0x2c>
  907 + 50e: 0a c0 rjmp .+20 ; 0x524 <Endpoint_Write_Control_PStream_LE+0xaa>
  908 + }
  909 + }
  910 +
  911 + while (!(Endpoint_IsOUTReceived()))
  912 + {
  913 + uint8_t USB_DeviceState_LCL = USB_DeviceState;
  914 + 510: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  915 +
  916 + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
  917 + 514: 88 23 and r24, r24
  918 + 516: 61 f0 breq .+24 ; 0x530 <Endpoint_Write_Control_PStream_LE+0xb6>
  919 + return ENDPOINT_RWCSTREAM_DeviceDisconnected;
  920 + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
  921 + 518: 85 30 cpi r24, 0x05 ; 5
  922 + 51a: 61 f0 breq .+24 ; 0x534 <Endpoint_Write_Control_PStream_LE+0xba>
  923 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise.
  924 + */
  925 + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  926 + static inline bool Endpoint_IsSETUPReceived(void)
  927 + {
  928 + return ((UEINTX & (1 << RXSTPI)) ? true : false);
  929 + 51c: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  930 + return ENDPOINT_RWCSTREAM_BusSuspended;
  931 + else if (Endpoint_IsSETUPReceived())
  932 + 520: 83 fd sbrc r24, 3
  933 + 522: 0a c0 rjmp .+20 ; 0x538 <Endpoint_Write_Control_PStream_LE+0xbe>
  934 + * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise.
  935 + */
  936 + static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  937 + static inline bool Endpoint_IsOUTReceived(void)
  938 + {
  939 + return ((UEINTX & (1 << RXOUTI)) ? true : false);
  940 + 524: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  941 + LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize);
  942 + Endpoint_ClearIN();
  943 + }
  944 + }
  945 +
  946 + while (!(Endpoint_IsOUTReceived()))
  947 + 528: 82 ff sbrs r24, 2
  948 + 52a: f2 cf rjmp .-28 ; 0x510 <Endpoint_Write_Control_PStream_LE+0x96>
  949 + return ENDPOINT_RWCSTREAM_BusSuspended;
  950 + else if (Endpoint_IsSETUPReceived())
  951 + return ENDPOINT_RWCSTREAM_HostAborted;
  952 + }
  953 +
  954 + return ENDPOINT_RWCSTREAM_NoError;
  955 + 52c: 80 e0 ldi r24, 0x00 ; 0
  956 + 52e: 08 95 ret
  957 + while (Length || LastPacketFull)
  958 + {
  959 + uint8_t USB_DeviceState_LCL = USB_DeviceState;
  960 +
  961 + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
  962 + return ENDPOINT_RWCSTREAM_DeviceDisconnected;
  963 + 530: 82 e0 ldi r24, 0x02 ; 2
  964 + 532: 08 95 ret
  965 + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
  966 + return ENDPOINT_RWCSTREAM_BusSuspended;
  967 + 534: 83 e0 ldi r24, 0x03 ; 3
  968 + 536: 08 95 ret
  969 + else if (Endpoint_IsSETUPReceived())
  970 + return ENDPOINT_RWCSTREAM_HostAborted;
  971 + 538: 81 e0 ldi r24, 0x01 ; 1
  972 + else if (Endpoint_IsSETUPReceived())
  973 + return ENDPOINT_RWCSTREAM_HostAborted;
  974 + }
  975 +
  976 + return ENDPOINT_RWCSTREAM_NoError;
  977 +}
  978 + 53a: 08 95 ret
  979 +
  980 +0000053c <Endpoint_ConfigureEndpoint_Prv>:
  981 + UEIENX = 0;
  982 + UEINTX = 0;
  983 + UECFG1X = 0;
  984 + Endpoint_DisableEndpoint();
  985 + }
  986 +}
  987 + 53c: 98 2f mov r25, r24
  988 + 53e: 97 30 cpi r25, 0x07 ; 7
  989 + 540: 68 f5 brcc .+90 ; 0x59c <Endpoint_ConfigureEndpoint_Prv+0x60>
  990 + 542: 90 93 e9 00 sts 0x00E9, r25 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  991 + 546: 98 17 cp r25, r24
  992 + 548: 39 f0 breq .+14 ; 0x558 <Endpoint_ConfigureEndpoint_Prv+0x1c>
  993 + 54a: 70 91 ec 00 lds r23, 0x00EC ; 0x8000ec <__TEXT_REGION_LENGTH__+0x7e00ec>
  994 + 54e: 20 91 ed 00 lds r18, 0x00ED ; 0x8000ed <__TEXT_REGION_LENGTH__+0x7e00ed>
  995 + 552: 50 91 f0 00 lds r21, 0x00F0 ; 0x8000f0 <__TEXT_REGION_LENGTH__+0x7e00f0>
  996 + 556: 03 c0 rjmp .+6 ; 0x55e <Endpoint_ConfigureEndpoint_Prv+0x22>
  997 + 558: 24 2f mov r18, r20
  998 + 55a: 76 2f mov r23, r22
  999 + 55c: 50 e0 ldi r21, 0x00 ; 0
  1000 + 55e: 21 fd sbrc r18, 1
  1001 + 560: 02 c0 rjmp .+4 ; 0x566 <Endpoint_ConfigureEndpoint_Prv+0x2a>
  1002 + 562: 9f 5f subi r25, 0xFF ; 255
  1003 + 564: ec cf rjmp .-40 ; 0x53e <Endpoint_ConfigureEndpoint_Prv+0x2>
  1004 + 566: 30 91 eb 00 lds r19, 0x00EB ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  1005 + 56a: 3e 7f andi r19, 0xFE ; 254
  1006 + 56c: 30 93 eb 00 sts 0x00EB, r19 ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  1007 + 570: 30 91 ed 00 lds r19, 0x00ED ; 0x8000ed <__TEXT_REGION_LENGTH__+0x7e00ed>
  1008 + 574: 3d 7f andi r19, 0xFD ; 253
  1009 + 576: 30 93 ed 00 sts 0x00ED, r19 ; 0x8000ed <__TEXT_REGION_LENGTH__+0x7e00ed>
  1010 + 57a: 30 91 eb 00 lds r19, 0x00EB ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  1011 + 57e: 31 60 ori r19, 0x01 ; 1
  1012 + 580: 30 93 eb 00 sts 0x00EB, r19 ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  1013 + 584: 70 93 ec 00 sts 0x00EC, r23 ; 0x8000ec <__TEXT_REGION_LENGTH__+0x7e00ec>
  1014 + 588: 20 93 ed 00 sts 0x00ED, r18 ; 0x8000ed <__TEXT_REGION_LENGTH__+0x7e00ed>
  1015 + 58c: 50 93 f0 00 sts 0x00F0, r21 ; 0x8000f0 <__TEXT_REGION_LENGTH__+0x7e00f0>
  1016 + 590: 20 91 ee 00 lds r18, 0x00EE ; 0x8000ee <__TEXT_REGION_LENGTH__+0x7e00ee>
  1017 + 594: 27 fd sbrc r18, 7
  1018 + 596: e5 cf rjmp .-54 ; 0x562 <Endpoint_ConfigureEndpoint_Prv+0x26>
  1019 + 598: 80 e0 ldi r24, 0x00 ; 0
  1020 + 59a: 08 95 ret
  1021 + 59c: 8f 70 andi r24, 0x0F ; 15
  1022 + 59e: 80 93 e9 00 sts 0x00E9, r24 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  1023 + 5a2: 81 e0 ldi r24, 0x01 ; 1
  1024 + 5a4: 08 95 ret
  1025 +
  1026 +000005a6 <Endpoint_ConfigureEndpointTable>:
  1027 + 5a6: 0f 93 push r16
  1028 + 5a8: 1f 93 push r17
  1029 + 5aa: cf 93 push r28
  1030 + 5ac: df 93 push r29
  1031 + 5ae: 06 2f mov r16, r22
  1032 + 5b0: ec 01 movw r28, r24
  1033 + 5b2: 10 e0 ldi r17, 0x00 ; 0
  1034 + 5b4: 10 17 cp r17, r16
  1035 + 5b6: 71 f1 breq .+92 ; 0x614 <Endpoint_ConfigureEndpointTable+0x6e>
  1036 + 5b8: 68 81 ld r22, Y
  1037 + 5ba: 61 11 cpse r22, r1
  1038 + 5bc: 03 c0 rjmp .+6 ; 0x5c4 <Endpoint_ConfigureEndpointTable+0x1e>
  1039 + 5be: 1f 5f subi r17, 0xFF ; 255
  1040 + 5c0: 25 96 adiw r28, 0x05 ; 5
  1041 + 5c2: f8 cf rjmp .-16 ; 0x5b4 <Endpoint_ConfigureEndpointTable+0xe>
  1042 + 5c4: 2c 81 ldd r18, Y+4 ; 0x04
  1043 + 5c6: a9 81 ldd r26, Y+1 ; 0x01
  1044 + 5c8: ba 81 ldd r27, Y+2 ; 0x02
  1045 + 5ca: 9b 81 ldd r25, Y+3 ; 0x03
  1046 + 5cc: 86 2f mov r24, r22
  1047 + 5ce: 8f 70 andi r24, 0x0F ; 15
  1048 + 5d0: 87 30 cpi r24, 0x07 ; 7
  1049 + 5d2: 10 f0 brcs .+4 ; 0x5d8 <Endpoint_ConfigureEndpointTable+0x32>
  1050 + 5d4: 80 e0 ldi r24, 0x00 ; 0
  1051 + 5d6: 1f c0 rjmp .+62 ; 0x616 <Endpoint_ConfigureEndpointTable+0x70>
  1052 + 5d8: 22 30 cpi r18, 0x02 ; 2
  1053 + 5da: 10 f4 brcc .+4 ; 0x5e0 <Endpoint_ConfigureEndpointTable+0x3a>
  1054 + 5dc: 42 e0 ldi r20, 0x02 ; 2
  1055 + 5de: 01 c0 rjmp .+2 ; 0x5e2 <Endpoint_ConfigureEndpointTable+0x3c>
  1056 + 5e0: 46 e0 ldi r20, 0x06 ; 6
  1057 + 5e2: e8 e0 ldi r30, 0x08 ; 8
  1058 + 5e4: f0 e0 ldi r31, 0x00 ; 0
  1059 + 5e6: 20 e0 ldi r18, 0x00 ; 0
  1060 + 5e8: ea 17 cp r30, r26
  1061 + 5ea: fb 07 cpc r31, r27
  1062 + 5ec: 20 f4 brcc .+8 ; 0x5f6 <Endpoint_ConfigureEndpointTable+0x50>
  1063 + 5ee: 2f 5f subi r18, 0xFF ; 255
  1064 + 5f0: ee 0f add r30, r30
  1065 + 5f2: ff 1f adc r31, r31
  1066 + 5f4: f9 cf rjmp .-14 ; 0x5e8 <Endpoint_ConfigureEndpointTable+0x42>
  1067 + 5f6: 22 95 swap r18
  1068 + 5f8: 20 7f andi r18, 0xF0 ; 240
  1069 + 5fa: 42 2b or r20, r18
  1070 + 5fc: 50 e4 ldi r21, 0x40 ; 64
  1071 + 5fe: 95 9f mul r25, r21
  1072 + 600: 90 01 movw r18, r0
  1073 + 602: 11 24 eor r1, r1
  1074 + 604: 66 1f adc r22, r22
  1075 + 606: 66 27 eor r22, r22
  1076 + 608: 66 1f adc r22, r22
  1077 + 60a: 62 2b or r22, r18
  1078 + 60c: 97 df rcall .-210 ; 0x53c <Endpoint_ConfigureEndpoint_Prv>
  1079 + 60e: 81 11 cpse r24, r1
  1080 + 610: d6 cf rjmp .-84 ; 0x5be <Endpoint_ConfigureEndpointTable+0x18>
  1081 + 612: e0 cf rjmp .-64 ; 0x5d4 <Endpoint_ConfigureEndpointTable+0x2e>
  1082 + 614: 81 e0 ldi r24, 0x01 ; 1
  1083 + 616: df 91 pop r29
  1084 + 618: cf 91 pop r28
  1085 + 61a: 1f 91 pop r17
  1086 + 61c: 0f 91 pop r16
  1087 + 61e: 08 95 ret
  1088 +
  1089 +00000620 <Endpoint_ClearStatusStage>:
  1090 +
  1091 +void Endpoint_ClearStatusStage(void)
  1092 +{
  1093 + if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST)
  1094 + 620: 80 91 19 01 lds r24, 0x0119 ; 0x800119 <USB_ControlRequest>
  1095 + 624: 87 ff sbrs r24, 7
  1096 + 626: 11 c0 rjmp .+34 ; 0x64a <Endpoint_ClearStatusStage+0x2a>
  1097 + * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise.
  1098 + */
  1099 + static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  1100 + static inline bool Endpoint_IsOUTReceived(void)
  1101 + {
  1102 + return ((UEINTX & (1 << RXOUTI)) ? true : false);
  1103 + 628: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  1104 + {
  1105 + while (!(Endpoint_IsOUTReceived()))
  1106 + 62c: 82 fd sbrc r24, 2
  1107 + 62e: 05 c0 rjmp .+10 ; 0x63a <Endpoint_ClearStatusStage+0x1a>
  1108 + {
  1109 + if (USB_DeviceState == DEVICE_STATE_Unattached)
  1110 + 630: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  1111 + 634: 81 11 cpse r24, r1
  1112 + 636: f8 cf rjmp .-16 ; 0x628 <Endpoint_ClearStatusStage+0x8>
  1113 + 638: 11 c0 rjmp .+34 ; 0x65c <Endpoint_ClearStatusStage+0x3c>
  1114 + */
  1115 + static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE;
  1116 + static inline void Endpoint_ClearOUT(void)
  1117 + {
  1118 + #if !defined(CONTROL_ONLY_DEVICE)
  1119 + UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON));
  1120 + 63a: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  1121 + 63e: 8b 77 andi r24, 0x7B ; 123
  1122 + 640: 0b c0 rjmp .+22 ; 0x658 <Endpoint_ClearStatusStage+0x38>
  1123 + }
  1124 + else
  1125 + {
  1126 + while (!(Endpoint_IsINReady()))
  1127 + {
  1128 + if (USB_DeviceState == DEVICE_STATE_Unattached)
  1129 + 642: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  1130 + 646: 88 23 and r24, r24
  1131 + 648: 49 f0 breq .+18 ; 0x65c <Endpoint_ClearStatusStage+0x3c>
  1132 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise.
  1133 + */
  1134 + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  1135 + static inline bool Endpoint_IsINReady(void)
  1136 + {
  1137 + return ((UEINTX & (1 << TXINI)) ? true : false);
  1138 + 64a: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  1139 +
  1140 + Endpoint_ClearOUT();
  1141 + }
  1142 + else
  1143 + {
  1144 + while (!(Endpoint_IsINReady()))
  1145 + 64e: 80 ff sbrs r24, 0
  1146 + 650: f8 cf rjmp .-16 ; 0x642 <Endpoint_ClearStatusStage+0x22>
  1147 + */
  1148 + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE;
  1149 + static inline void Endpoint_ClearIN(void)
  1150 + {
  1151 + #if !defined(CONTROL_ONLY_DEVICE)
  1152 + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON));
  1153 + 652: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  1154 + 656: 8e 77 andi r24, 0x7E ; 126
  1155 + 658: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  1156 + 65c: 08 95 ret
  1157 +
  1158 +0000065e <Endpoint_WaitUntilReady>:
  1159 + * \return Current USB frame number from the USB controller.
  1160 + */
  1161 + static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
  1162 + static inline uint16_t USB_Device_GetFrameNumber(void)
  1163 + {
  1164 + return UDFNUM;
  1165 + 65e: 20 91 e4 00 lds r18, 0x00E4 ; 0x8000e4 <__TEXT_REGION_LENGTH__+0x7e00e4>
  1166 + 662: 30 91 e5 00 lds r19, 0x00E5 ; 0x8000e5 <__TEXT_REGION_LENGTH__+0x7e00e5>
  1167 + 666: 95 e6 ldi r25, 0x65 ; 101
  1168 + * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask.
  1169 + */
  1170 + static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  1171 + static inline uint8_t Endpoint_GetEndpointDirection(void)
  1172 + {
  1173 + return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT;
  1174 + 668: 40 91 ec 00 lds r20, 0x00EC ; 0x8000ec <__TEXT_REGION_LENGTH__+0x7e00ec>
  1175 + 66c: 84 2f mov r24, r20
  1176 + 66e: 81 70 andi r24, 0x01 ; 1
  1177 + 670: 40 ff sbrs r20, 0
  1178 + 672: 23 c0 rjmp .+70 ; 0x6ba <Endpoint_WaitUntilReady+0x5c>
  1179 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise.
  1180 + */
  1181 + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  1182 + static inline bool Endpoint_IsINReady(void)
  1183 + {
  1184 + return ((UEINTX & (1 << TXINI)) ? true : false);
  1185 + 674: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  1186 +
  1187 + for (;;)
  1188 + {
  1189 + if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN)
  1190 + {
  1191 + if (Endpoint_IsINReady())
  1192 + 678: 80 fd sbrc r24, 0
  1193 + 67a: 1d c0 rjmp .+58 ; 0x6b6 <Endpoint_WaitUntilReady+0x58>
  1194 + {
  1195 + if (Endpoint_IsOUTReceived())
  1196 + return ENDPOINT_READYWAIT_NoError;
  1197 + }
  1198 +
  1199 + uint8_t USB_DeviceState_LCL = USB_DeviceState;
  1200 + 67c: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  1201 +
  1202 + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
  1203 + 680: 88 23 and r24, r24
  1204 + 682: 99 f0 breq .+38 ; 0x6aa <Endpoint_WaitUntilReady+0x4c>
  1205 + return ENDPOINT_READYWAIT_DeviceDisconnected;
  1206 + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
  1207 + 684: 85 30 cpi r24, 0x05 ; 5
  1208 + 686: 99 f0 breq .+38 ; 0x6ae <Endpoint_WaitUntilReady+0x50>
  1209 + * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise.
  1210 + */
  1211 + static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  1212 + static inline bool Endpoint_IsStalled(void)
  1213 + {
  1214 + return ((UECONX & (1 << STALLRQ)) ? true : false);
  1215 + 688: 80 91 eb 00 lds r24, 0x00EB ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  1216 + return ENDPOINT_READYWAIT_BusSuspended;
  1217 + else if (Endpoint_IsStalled())
  1218 + 68c: 85 fd sbrc r24, 5
  1219 + 68e: 11 c0 rjmp .+34 ; 0x6b2 <Endpoint_WaitUntilReady+0x54>
  1220 + 690: 40 91 e4 00 lds r20, 0x00E4 ; 0x8000e4 <__TEXT_REGION_LENGTH__+0x7e00e4>
  1221 + 694: 50 91 e5 00 lds r21, 0x00E5 ; 0x8000e5 <__TEXT_REGION_LENGTH__+0x7e00e5>
  1222 + return ENDPOINT_READYWAIT_EndpointStalled;
  1223 +
  1224 + uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber();
  1225 +
  1226 + if (CurrentFrameNumber != PreviousFrameNumber)
  1227 + 698: 24 17 cp r18, r20
  1228 + 69a: 35 07 cpc r19, r21
  1229 + 69c: 29 f3 breq .-54 ; 0x668 <Endpoint_WaitUntilReady+0xa>
  1230 + 69e: 91 50 subi r25, 0x01 ; 1
  1231 + {
  1232 + PreviousFrameNumber = CurrentFrameNumber;
  1233 +
  1234 + if (!(TimeoutMSRem--))
  1235 + 6a0: 11 f0 breq .+4 ; 0x6a6 <Endpoint_WaitUntilReady+0x48>
  1236 + 6a2: 9a 01 movw r18, r20
  1237 + 6a4: e1 cf rjmp .-62 ; 0x668 <Endpoint_WaitUntilReady+0xa>
  1238 + return ENDPOINT_READYWAIT_Timeout;
  1239 + 6a6: 84 e0 ldi r24, 0x04 ; 4
  1240 + 6a8: 08 95 ret
  1241 + }
  1242 +
  1243 + uint8_t USB_DeviceState_LCL = USB_DeviceState;
  1244 +
  1245 + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
  1246 + return ENDPOINT_READYWAIT_DeviceDisconnected;
  1247 + 6aa: 82 e0 ldi r24, 0x02 ; 2
  1248 + 6ac: 08 95 ret
  1249 + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
  1250 + return ENDPOINT_READYWAIT_BusSuspended;
  1251 + 6ae: 83 e0 ldi r24, 0x03 ; 3
  1252 + 6b0: 08 95 ret
  1253 + else if (Endpoint_IsStalled())
  1254 + return ENDPOINT_READYWAIT_EndpointStalled;
  1255 + 6b2: 81 e0 ldi r24, 0x01 ; 1
  1256 + 6b4: 08 95 ret
  1257 + for (;;)
  1258 + {
  1259 + if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN)
  1260 + {
  1261 + if (Endpoint_IsINReady())
  1262 + return ENDPOINT_READYWAIT_NoError;
  1263 + 6b6: 80 e0 ldi r24, 0x00 ; 0
  1264 + 6b8: 08 95 ret
  1265 + * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise.
  1266 + */
  1267 + static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  1268 + static inline bool Endpoint_IsOUTReceived(void)
  1269 + {
  1270 + return ((UEINTX & (1 << RXOUTI)) ? true : false);
  1271 + 6ba: 40 91 e8 00 lds r20, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  1272 + }
  1273 + else
  1274 + {
  1275 + if (Endpoint_IsOUTReceived())
  1276 + 6be: 42 ff sbrs r20, 2
  1277 + 6c0: dd cf rjmp .-70 ; 0x67c <Endpoint_WaitUntilReady+0x1e>
  1278 +
  1279 + if (!(TimeoutMSRem--))
  1280 + return ENDPOINT_READYWAIT_Timeout;
  1281 + }
  1282 + }
  1283 +}
  1284 + 6c2: 08 95 ret
  1285 +
  1286 +000006c4 <USB_ResetInterface>:
  1287 +
  1288 + USB_IsInitialized = false;
  1289 +}
  1290 +
  1291 +void USB_ResetInterface(void)
  1292 +{
  1293 + 6c4: 0f 93 push r16
  1294 + 6c6: 1f 93 push r17
  1295 + 6c8: cf 93 push r28
  1296 + 6ca: df 93 push r29
  1297 + #if defined(USB_CAN_BE_BOTH)
  1298 + bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0);
  1299 + #endif
  1300 +
  1301 + USB_INT_DisableAllInterrupts();
  1302 + 6cc: 4b d0 rcall .+150 ; 0x764 <USB_INT_DisableAllInterrupts>
  1303 + USB_INT_ClearAllInterrupts();
  1304 + 6ce: 52 d0 rcall .+164 ; 0x774 <USB_INT_ClearAllInterrupts>
  1305 + 6d0: c8 ed ldi r28, 0xD8 ; 216
  1306 + }
  1307 +
  1308 + static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE;
  1309 + static inline void USB_Controller_Reset(void)
  1310 + {
  1311 + USBCON &= ~(1 << USBE);
  1312 + 6d2: d0 e0 ldi r29, 0x00 ; 0
  1313 + 6d4: 88 81 ld r24, Y
  1314 + 6d6: 8f 77 andi r24, 0x7F ; 127
  1315 + 6d8: 88 83 st Y, r24
  1316 + 6da: 88 81 ld r24, Y
  1317 + USBCON |= (1 << USBE);
  1318 + 6dc: 80 68 ori r24, 0x80 ; 128
  1319 + 6de: 88 83 st Y, r24
  1320 + 6e0: 88 81 ld r24, Y
  1321 + }
  1322 +
  1323 + static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE;
  1324 + static inline void USB_CLK_Unfreeze(void)
  1325 + {
  1326 + USBCON &= ~(1 << FRZCLK);
  1327 + 6e2: 8f 7d andi r24, 0xDF ; 223
  1328 + 6e4: 88 83 st Y, r24
  1329 + 6e6: 19 bc out 0x29, r1 ; 41
  1330 + }
  1331 +
  1332 + static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE;
  1333 + static inline void USB_PLL_Off(void)
  1334 + {
  1335 + PLLCSR = 0;
  1336 + 6e8: 10 92 18 01 sts 0x0118, r1 ; 0x800118 <USB_DeviceState>
  1337 +}
  1338 +
  1339 +#if defined(USB_CAN_BE_DEVICE)
  1340 +static void USB_Init_Device(void)
  1341 +{
  1342 + USB_DeviceState = DEVICE_STATE_Unattached;
  1343 + 6ec: 10 92 14 01 sts 0x0114, r1 ; 0x800114 <USB_Device_ConfigurationNumber>
  1344 + USB_Device_ConfigurationNumber = 0;
  1345 + 6f0: 10 92 16 01 sts 0x0116, r1 ; 0x800116 <USB_Device_RemoteWakeupEnabled>
  1346 +
  1347 + #if !defined(NO_DEVICE_REMOTE_WAKEUP)
  1348 + USB_Device_RemoteWakeupEnabled = false;
  1349 + 6f4: 10 92 15 01 sts 0x0115, r1 ; 0x800115 <USB_Device_CurrentlySelfPowered>
  1350 + #endif
  1351 +
  1352 + #if !defined(NO_DEVICE_SELF_POWER)
  1353 + USB_Device_CurrentlySelfPowered = false;
  1354 + 6f8: 00 ee ldi r16, 0xE0 ; 224
  1355 + }
  1356 +
  1357 + static inline void USB_Device_SetFullSpeed(void) ATTR_ALWAYS_INLINE;
  1358 + static inline void USB_Device_SetFullSpeed(void)
  1359 + {
  1360 + UDCON &= ~(1 << LSM);
  1361 + 6fa: 10 e0 ldi r17, 0x00 ; 0
  1362 + 6fc: f8 01 movw r30, r16
  1363 + 6fe: 80 81 ld r24, Z
  1364 + 700: 8b 7f andi r24, 0xFB ; 251
  1365 + 702: 80 83 st Z, r24
  1366 + 704: 88 81 ld r24, Y
  1367 + {
  1368 + switch (Interrupt)
  1369 + {
  1370 + #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
  1371 + case USB_INT_VBUSTI:
  1372 + USBCON |= (1 << VBUSTE);
  1373 + 706: 81 60 ori r24, 0x01 ; 1
  1374 + 708: 88 83 st Y, r24
  1375 + 70a: 42 e0 ldi r20, 0x02 ; 2
  1376 + uint8_t Number = (Address & ENDPOINT_EPNUM_MASK);
  1377 +
  1378 + if (Number >= ENDPOINT_TOTAL_ENDPOINTS)
  1379 + return false;
  1380 +
  1381 + return Endpoint_ConfigureEndpoint_Prv(Number,
  1382 + 70c: 60 e0 ldi r22, 0x00 ; 0
  1383 + 70e: 80 e0 ldi r24, 0x00 ; 0
  1384 + 710: 15 df rcall .-470 ; 0x53c <Endpoint_ConfigureEndpoint_Prv>
  1385 + 712: e1 ee ldi r30, 0xE1 ; 225
  1386 + #if defined(USB_CAN_BE_DEVICE)
  1387 + case USB_INT_WAKEUPI:
  1388 + UDINT &= ~(1 << WAKEUPI);
  1389 + break;
  1390 + case USB_INT_SUSPI:
  1391 + UDINT &= ~(1 << SUSPI);
  1392 + 714: f0 e0 ldi r31, 0x00 ; 0
  1393 + 716: 80 81 ld r24, Z
  1394 + 718: 8e 7f andi r24, 0xFE ; 254
  1395 + 71a: 80 83 st Z, r24
  1396 + 71c: e2 ee ldi r30, 0xE2 ; 226
  1397 + #if defined(USB_CAN_BE_DEVICE)
  1398 + case USB_INT_WAKEUPI:
  1399 + UDIEN |= (1 << WAKEUPE);
  1400 + break;
  1401 + case USB_INT_SUSPI:
  1402 + UDIEN |= (1 << SUSPE);
  1403 + 71e: f0 e0 ldi r31, 0x00 ; 0
  1404 + 720: 80 81 ld r24, Z
  1405 + 722: 81 60 ori r24, 0x01 ; 1
  1406 + 724: 80 83 st Z, r24
  1407 + 726: 80 81 ld r24, Z
  1408 + break;
  1409 + case USB_INT_EORSTI:
  1410 + UDIEN |= (1 << EORSTE);
  1411 + 728: 88 60 ori r24, 0x08 ; 8
  1412 + 72a: 80 83 st Z, r24
  1413 + 72c: f8 01 movw r30, r16
  1414 + * register and despite the datasheet making no mention of its requirement in host mode.
  1415 + */
  1416 + static inline void USB_Attach(void) ATTR_ALWAYS_INLINE;
  1417 + static inline void USB_Attach(void)
  1418 + {
  1419 + UDCON &= ~(1 << DETACH);
  1420 + 72e: 80 81 ld r24, Z
  1421 + 730: 8e 7f andi r24, 0xFE ; 254
  1422 + 732: 80 83 st Z, r24
  1423 + 734: 88 81 ld r24, Y
  1424 +
  1425 + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
  1426 + static inline void USB_OTGPAD_On(void) ATTR_ALWAYS_INLINE;
  1427 + static inline void USB_OTGPAD_On(void)
  1428 + {
  1429 + USBCON |= (1 << OTGPADE);
  1430 + 736: 80 61 ori r24, 0x10 ; 16
  1431 + 738: 88 83 st Y, r24
  1432 + 73a: df 91 pop r29
  1433 + }
  1434 +
  1435 + #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
  1436 + USB_OTGPAD_On();
  1437 + #endif
  1438 +}
  1439 + 73c: cf 91 pop r28
  1440 + 73e: 1f 91 pop r17
  1441 + 740: 0f 91 pop r16
  1442 + 742: 08 95 ret
  1443 +
  1444 +00000744 <USB_Init>:
  1445 + 744: e8 ed ldi r30, 0xD8 ; 216
  1446 + }
  1447 +
  1448 + static inline void USB_OTGPAD_Off(void) ATTR_ALWAYS_INLINE;
  1449 + static inline void USB_OTGPAD_Off(void)
  1450 + {
  1451 + USBCON &= ~(1 << OTGPADE);
  1452 + 746: f0 e0 ldi r31, 0x00 ; 0
  1453 + 748: 80 81 ld r24, Z
  1454 + 74a: 8f 7e andi r24, 0xEF ; 239
  1455 + 74c: 80 83 st Z, r24
  1456 +
  1457 + static inline void USB_REG_On(void) ATTR_ALWAYS_INLINE;
  1458 + static inline void USB_REG_On(void)
  1459 + {
  1460 + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
  1461 + UHWCON |= (1 << UVREGE);
  1462 + 74e: e7 ed ldi r30, 0xD7 ; 215
  1463 + 750: f0 e0 ldi r31, 0x00 ; 0
  1464 + 752: 80 81 ld r24, Z
  1465 + 754: 81 60 ori r24, 0x01 ; 1
  1466 + 756: 80 83 st Z, r24
  1467 + USB_REG_Off();
  1468 +
  1469 + if (!(USB_Options & USB_OPT_MANUAL_PLL))
  1470 + {
  1471 + #if defined(USB_SERIES_4_AVR)
  1472 + PLLFRQ = (1 << PDIV2);
  1473 + 758: 84 e0 ldi r24, 0x04 ; 4
  1474 + 75a: 82 bf out 0x32, r24 ; 50
  1475 + UHWCON &= ~(1 << UIDE);
  1476 + USB_CurrentMode = Mode;
  1477 + }
  1478 + #endif
  1479 +
  1480 + USB_IsInitialized = true;
  1481 + 75c: 81 e0 ldi r24, 0x01 ; 1
  1482 + 75e: 80 93 17 01 sts 0x0117, r24 ; 0x800117 <USB_IsInitialized>
  1483 +
  1484 + USB_ResetInterface();
  1485 + 762: b0 cf rjmp .-160 ; 0x6c4 <USB_ResetInterface>
  1486 +
  1487 +00000764 <USB_INT_DisableAllInterrupts>:
  1488 +void USB_INT_DisableAllInterrupts(void)
  1489 +{
  1490 + #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
  1491 + USBCON &= ~((1 << VBUSTE) | (1 << IDTE));
  1492 + #elif defined(USB_SERIES_4_AVR)
  1493 + USBCON &= ~(1 << VBUSTE);
  1494 + 764: e8 ed ldi r30, 0xD8 ; 216
  1495 + 766: f0 e0 ldi r31, 0x00 ; 0
  1496 + 768: 80 81 ld r24, Z
  1497 + 76a: 8e 7f andi r24, 0xFE ; 254
  1498 + 76c: 80 83 st Z, r24
  1499 + #if defined(USB_CAN_BE_HOST)
  1500 + UHIEN = 0;
  1501 + #endif
  1502 +
  1503 + #if defined(USB_CAN_BE_DEVICE)
  1504 + UDIEN = 0;
  1505 + 76e: 10 92 e2 00 sts 0x00E2, r1 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1506 + 772: 08 95 ret
  1507 +
  1508 +00000774 <USB_INT_ClearAllInterrupts>:
  1509 +}
  1510 +
  1511 +void USB_INT_ClearAllInterrupts(void)
  1512 +{
  1513 + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
  1514 + USBINT = 0;
  1515 + 774: 10 92 da 00 sts 0x00DA, r1 ; 0x8000da <__TEXT_REGION_LENGTH__+0x7e00da>
  1516 + #if defined(USB_CAN_BE_HOST)
  1517 + UHINT = 0;
  1518 + #endif
  1519 +
  1520 + #if defined(USB_CAN_BE_DEVICE)
  1521 + UDINT = 0;
  1522 + 778: 10 92 e1 00 sts 0x00E1, r1 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1523 + 77c: 08 95 ret
  1524 +
  1525 +0000077e <__vector_10>:
  1526 + #endif
  1527 +}
  1528 +
  1529 +ISR(USB_GEN_vect, ISR_BLOCK)
  1530 +{
  1531 + 77e: 1f 92 push r1
  1532 + 780: 0f 92 push r0
  1533 + 782: 0f b6 in r0, 0x3f ; 63
  1534 + 784: 0f 92 push r0
  1535 + 786: 11 24 eor r1, r1
  1536 + 788: 2f 93 push r18
  1537 + 78a: 3f 93 push r19
  1538 + 78c: 4f 93 push r20
  1539 + 78e: 5f 93 push r21
  1540 + 790: 6f 93 push r22
  1541 + 792: 7f 93 push r23
  1542 + 794: 8f 93 push r24
  1543 + 796: 9f 93 push r25
  1544 + 798: af 93 push r26
  1545 + 79a: bf 93 push r27
  1546 + 79c: ef 93 push r30
  1547 + 79e: ff 93 push r31
  1548 + case USB_INT_SUSPI:
  1549 + return (UDINT & (1 << SUSPI));
  1550 + case USB_INT_EORSTI:
  1551 + return (UDINT & (1 << EORSTI));
  1552 + case USB_INT_SOFI:
  1553 + return (UDINT & (1 << SOFI));
  1554 + 7a0: 80 91 e1 00 lds r24, 0x00E1 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1555 + #if defined(USB_CAN_BE_DEVICE)
  1556 + #if !defined(NO_SOF_EVENTS)
  1557 + if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI))
  1558 + 7a4: 82 ff sbrs r24, 2
  1559 + 7a6: 0a c0 rjmp .+20 ; 0x7bc <__vector_10+0x3e>
  1560 + case USB_INT_SUSPI:
  1561 + return (UDIEN & (1 << SUSPE));
  1562 + case USB_INT_EORSTI:
  1563 + return (UDIEN & (1 << EORSTE));
  1564 + case USB_INT_SOFI:
  1565 + return (UDIEN & (1 << SOFE));
  1566 + 7a8: 80 91 e2 00 lds r24, 0x00E2 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1567 + 7ac: 82 ff sbrs r24, 2
  1568 + 7ae: 06 c0 rjmp .+12 ; 0x7bc <__vector_10+0x3e>
  1569 + break;
  1570 + case USB_INT_EORSTI:
  1571 + UDINT &= ~(1 << EORSTI);
  1572 + break;
  1573 + case USB_INT_SOFI:
  1574 + UDINT &= ~(1 << SOFI);
  1575 + 7b0: 80 91 e1 00 lds r24, 0x00E1 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1576 + 7b4: 8b 7f andi r24, 0xFB ; 251
  1577 + 7b6: 80 93 e1 00 sts 0x00E1, r24 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1578 + {
  1579 + USB_INT_Clear(USB_INT_SOFI);
  1580 +
  1581 + EVENT_USB_Device_StartOfFrame();
  1582 + 7ba: 1e dd rcall .-1476 ; 0x1f8 <EVENT_USB_Device_StartOfFrame>
  1583 + {
  1584 + switch (Interrupt)
  1585 + {
  1586 + #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
  1587 + case USB_INT_VBUSTI:
  1588 + return (USBINT & (1 << VBUSTI));
  1589 + 7bc: 80 91 da 00 lds r24, 0x00DA ; 0x8000da <__TEXT_REGION_LENGTH__+0x7e00da>
  1590 + }
  1591 + #endif
  1592 +
  1593 + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
  1594 + if (USB_INT_HasOccurred(USB_INT_VBUSTI) && USB_INT_IsEnabled(USB_INT_VBUSTI))
  1595 + 7c0: 80 ff sbrs r24, 0
  1596 + 7c2: 1d c0 rjmp .+58 ; 0x7fe <__vector_10+0x80>
  1597 + {
  1598 + switch (Interrupt)
  1599 + {
  1600 + #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
  1601 + case USB_INT_VBUSTI:
  1602 + return (USBCON & (1 << VBUSTE));
  1603 + 7c4: 80 91 d8 00 lds r24, 0x00D8 ; 0x8000d8 <__TEXT_REGION_LENGTH__+0x7e00d8>
  1604 + 7c8: 80 ff sbrs r24, 0
  1605 + 7ca: 19 c0 rjmp .+50 ; 0x7fe <__vector_10+0x80>
  1606 + {
  1607 + switch (Interrupt)
  1608 + {
  1609 + #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
  1610 + case USB_INT_VBUSTI:
  1611 + USBINT &= ~(1 << VBUSTI);
  1612 + 7cc: 80 91 da 00 lds r24, 0x00DA ; 0x8000da <__TEXT_REGION_LENGTH__+0x7e00da>
  1613 + 7d0: 8e 7f andi r24, 0xFE ; 254
  1614 + 7d2: 80 93 da 00 sts 0x00DA, r24 ; 0x8000da <__TEXT_REGION_LENGTH__+0x7e00da>
  1615 + * \return Boolean \c true if the VBUS line is currently detecting power from a host, \c false otherwise.
  1616 + */
  1617 + static inline bool USB_VBUS_GetStatus(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  1618 + static inline bool USB_VBUS_GetStatus(void)
  1619 + {
  1620 + return ((USBSTA & (1 << VBUS)) ? true : false);
  1621 + 7d6: 80 91 d9 00 lds r24, 0x00D9 ; 0x8000d9 <__TEXT_REGION_LENGTH__+0x7e00d9>
  1622 + {
  1623 + USB_INT_Clear(USB_INT_VBUSTI);
  1624 +
  1625 + if (USB_VBUS_GetStatus())
  1626 + 7da: 80 ff sbrs r24, 0
  1627 + 7dc: 0c c0 rjmp .+24 ; 0x7f6 <__vector_10+0x78>
  1628 +
  1629 + /* Inline Functions: */
  1630 + static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE;
  1631 + static inline void USB_PLL_On(void)
  1632 + {
  1633 + PLLCSR = USB_PLL_PSC;
  1634 + 7de: 80 e1 ldi r24, 0x10 ; 16
  1635 + 7e0: 89 bd out 0x29, r24 ; 41
  1636 + PLLCSR = (USB_PLL_PSC | (1 << PLLE));
  1637 + 7e2: 82 e1 ldi r24, 0x12 ; 18
  1638 + 7e4: 89 bd out 0x29, r24 ; 41
  1639 + {
  1640 + if (!(USB_Options & USB_OPT_MANUAL_PLL))
  1641 + {
  1642 + USB_PLL_On();
  1643 + while (!(USB_PLL_IsReady()));
  1644 + 7e6: 09 b4 in r0, 0x29 ; 41
  1645 + 7e8: 00 fe sbrs r0, 0
  1646 + 7ea: fd cf rjmp .-6 ; 0x7e6 <__vector_10+0x68>
  1647 + }
  1648 +
  1649 + USB_DeviceState = DEVICE_STATE_Powered;
  1650 + 7ec: 81 e0 ldi r24, 0x01 ; 1
  1651 + 7ee: 80 93 18 01 sts 0x0118, r24 ; 0x800118 <USB_DeviceState>
  1652 + EVENT_USB_Device_Connect();
  1653 + 7f2: f4 dc rcall .-1560 ; 0x1dc <EVENT_USB_Device_Connect>
  1654 + 7f4: 04 c0 rjmp .+8 ; 0x7fe <__vector_10+0x80>
  1655 + }
  1656 +
  1657 + static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE;
  1658 + static inline void USB_PLL_Off(void)
  1659 + {
  1660 + PLLCSR = 0;
  1661 + 7f6: 19 bc out 0x29, r1 ; 41
  1662 + else
  1663 + {
  1664 + if (!(USB_Options & USB_OPT_MANUAL_PLL))
  1665 + USB_PLL_Off();
  1666 +
  1667 + USB_DeviceState = DEVICE_STATE_Unattached;
  1668 + 7f8: 10 92 18 01 sts 0x0118, r1 ; 0x800118 <USB_DeviceState>
  1669 + EVENT_USB_Device_Disconnect();
  1670 + 7fc: f0 dc rcall .-1568 ; 0x1de <EVENT_USB_Device_Disconnect>
  1671 + #endif
  1672 + #if defined(USB_CAN_BE_DEVICE)
  1673 + case USB_INT_WAKEUPI:
  1674 + return (UDINT & (1 << WAKEUPI));
  1675 + case USB_INT_SUSPI:
  1676 + return (UDINT & (1 << SUSPI));
  1677 + 7fe: 80 91 e1 00 lds r24, 0x00E1 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1678 + }
  1679 + }
  1680 + #endif
  1681 +
  1682 + if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI))
  1683 + 802: 80 ff sbrs r24, 0
  1684 + 804: 18 c0 rjmp .+48 ; 0x836 <__vector_10+0xb8>
  1685 + #endif
  1686 + #if defined(USB_CAN_BE_DEVICE)
  1687 + case USB_INT_WAKEUPI:
  1688 + return (UDIEN & (1 << WAKEUPE));
  1689 + case USB_INT_SUSPI:
  1690 + return (UDIEN & (1 << SUSPE));
  1691 + 806: 80 91 e2 00 lds r24, 0x00E2 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1692 + 80a: 80 ff sbrs r24, 0
  1693 + 80c: 14 c0 rjmp .+40 ; 0x836 <__vector_10+0xb8>
  1694 + #if defined(USB_CAN_BE_DEVICE)
  1695 + case USB_INT_WAKEUPI:
  1696 + UDIEN &= ~(1 << WAKEUPE);
  1697 + break;
  1698 + case USB_INT_SUSPI:
  1699 + UDIEN &= ~(1 << SUSPE);
  1700 + 80e: 80 91 e2 00 lds r24, 0x00E2 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1701 + 812: 8e 7f andi r24, 0xFE ; 254
  1702 + 814: 80 93 e2 00 sts 0x00E2, r24 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1703 + USBCON |= (1 << IDTE);
  1704 + break;
  1705 + #endif
  1706 + #if defined(USB_CAN_BE_DEVICE)
  1707 + case USB_INT_WAKEUPI:
  1708 + UDIEN |= (1 << WAKEUPE);
  1709 + 818: 80 91 e2 00 lds r24, 0x00E2 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1710 + 81c: 80 61 ori r24, 0x10 ; 16
  1711 + 81e: 80 93 e2 00 sts 0x00E2, r24 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1712 + #endif
  1713 +
  1714 + static inline void USB_CLK_Freeze(void) ATTR_ALWAYS_INLINE;
  1715 + static inline void USB_CLK_Freeze(void)
  1716 + {
  1717 + USBCON |= (1 << FRZCLK);
  1718 + 822: 80 91 d8 00 lds r24, 0x00D8 ; 0x8000d8 <__TEXT_REGION_LENGTH__+0x7e00d8>
  1719 + 826: 80 62 ori r24, 0x20 ; 32
  1720 + 828: 80 93 d8 00 sts 0x00D8, r24 ; 0x8000d8 <__TEXT_REGION_LENGTH__+0x7e00d8>
  1721 + }
  1722 +
  1723 + static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE;
  1724 + static inline void USB_PLL_Off(void)
  1725 + {
  1726 + PLLCSR = 0;
  1727 + 82c: 19 bc out 0x29, r1 ; 41
  1728 +
  1729 + #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT)
  1730 + USB_DeviceState = DEVICE_STATE_Unattached;
  1731 + EVENT_USB_Device_Disconnect();
  1732 + #else
  1733 + USB_DeviceState = DEVICE_STATE_Suspended;
  1734 + 82e: 85 e0 ldi r24, 0x05 ; 5
  1735 + 830: 80 93 18 01 sts 0x0118, r24 ; 0x800118 <USB_DeviceState>
  1736 + EVENT_USB_Device_Suspend();
  1737 + 834: cb d1 rcall .+918 ; 0xbcc <USB_Event_Stub>
  1738 + case USB_INT_IDTI:
  1739 + return (USBINT & (1 << IDTI));
  1740 + #endif
  1741 + #if defined(USB_CAN_BE_DEVICE)
  1742 + case USB_INT_WAKEUPI:
  1743 + return (UDINT & (1 << WAKEUPI));
  1744 + 836: 80 91 e1 00 lds r24, 0x00E1 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1745 + #endif
  1746 + }
  1747 +
  1748 + if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI))
  1749 + 83a: 84 ff sbrs r24, 4
  1750 + 83c: 2f c0 rjmp .+94 ; 0x89c <__vector_10+0x11e>
  1751 + case USB_INT_IDTI:
  1752 + return (USBCON & (1 << IDTE));
  1753 + #endif
  1754 + #if defined(USB_CAN_BE_DEVICE)
  1755 + case USB_INT_WAKEUPI:
  1756 + return (UDIEN & (1 << WAKEUPE));
  1757 + 83e: 80 91 e2 00 lds r24, 0x00E2 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1758 + 842: 84 ff sbrs r24, 4
  1759 + 844: 2b c0 rjmp .+86 ; 0x89c <__vector_10+0x11e>
  1760 +
  1761 + /* Inline Functions: */
  1762 + static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE;
  1763 + static inline void USB_PLL_On(void)
  1764 + {
  1765 + PLLCSR = USB_PLL_PSC;
  1766 + 846: 80 e1 ldi r24, 0x10 ; 16
  1767 + 848: 89 bd out 0x29, r24 ; 41
  1768 + PLLCSR = (USB_PLL_PSC | (1 << PLLE));
  1769 + 84a: 82 e1 ldi r24, 0x12 ; 18
  1770 + 84c: 89 bd out 0x29, r24 ; 41
  1771 + {
  1772 + if (!(USB_Options & USB_OPT_MANUAL_PLL))
  1773 + {
  1774 + USB_PLL_On();
  1775 + while (!(USB_PLL_IsReady()));
  1776 + 84e: 09 b4 in r0, 0x29 ; 41
  1777 + 850: 00 fe sbrs r0, 0
  1778 + 852: fd cf rjmp .-6 ; 0x84e <__vector_10+0xd0>
  1779 + }
  1780 +
  1781 + static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE;
  1782 + static inline void USB_CLK_Unfreeze(void)
  1783 + {
  1784 + USBCON &= ~(1 << FRZCLK);
  1785 + 854: 80 91 d8 00 lds r24, 0x00D8 ; 0x8000d8 <__TEXT_REGION_LENGTH__+0x7e00d8>
  1786 + 858: 8f 7d andi r24, 0xDF ; 223
  1787 + 85a: 80 93 d8 00 sts 0x00D8, r24 ; 0x8000d8 <__TEXT_REGION_LENGTH__+0x7e00d8>
  1788 + USBINT &= ~(1 << IDTI);
  1789 + break;
  1790 + #endif
  1791 + #if defined(USB_CAN_BE_DEVICE)
  1792 + case USB_INT_WAKEUPI:
  1793 + UDINT &= ~(1 << WAKEUPI);
  1794 + 85e: 80 91 e1 00 lds r24, 0x00E1 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1795 + 862: 8f 7e andi r24, 0xEF ; 239
  1796 + 864: 80 93 e1 00 sts 0x00E1, r24 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1797 + USBCON &= ~(1 << IDTE);
  1798 + break;
  1799 + #endif
  1800 + #if defined(USB_CAN_BE_DEVICE)
  1801 + case USB_INT_WAKEUPI:
  1802 + UDIEN &= ~(1 << WAKEUPE);
  1803 + 868: 80 91 e2 00 lds r24, 0x00E2 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1804 + 86c: 8f 7e andi r24, 0xEF ; 239
  1805 + 86e: 80 93 e2 00 sts 0x00E2, r24 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1806 + #if defined(USB_CAN_BE_DEVICE)
  1807 + case USB_INT_WAKEUPI:
  1808 + UDIEN |= (1 << WAKEUPE);
  1809 + break;
  1810 + case USB_INT_SUSPI:
  1811 + UDIEN |= (1 << SUSPE);
  1812 + 872: 80 91 e2 00 lds r24, 0x00E2 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1813 + 876: 81 60 ori r24, 0x01 ; 1
  1814 + 878: 80 93 e2 00 sts 0x00E2, r24 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1815 + USB_INT_Clear(USB_INT_WAKEUPI);
  1816 +
  1817 + USB_INT_Disable(USB_INT_WAKEUPI);
  1818 + USB_INT_Enable(USB_INT_SUSPI);
  1819 +
  1820 + if (USB_Device_ConfigurationNumber)
  1821 + 87c: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <USB_Device_ConfigurationNumber>
  1822 + 880: 88 23 and r24, r24
  1823 + 882: 11 f0 breq .+4 ; 0x888 <__vector_10+0x10a>
  1824 + USB_DeviceState = DEVICE_STATE_Configured;
  1825 + 884: 84 e0 ldi r24, 0x04 ; 4
  1826 + 886: 07 c0 rjmp .+14 ; 0x896 <__vector_10+0x118>
  1827 + }
  1828 +
  1829 + static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
  1830 + static inline bool USB_Device_IsAddressSet(void)
  1831 + {
  1832 + return (UDADDR & (1 << ADDEN));
  1833 + 888: 80 91 e3 00 lds r24, 0x00E3 ; 0x8000e3 <__TEXT_REGION_LENGTH__+0x7e00e3>
  1834 + else
  1835 + USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Addressed : DEVICE_STATE_Powered;
  1836 + 88c: 87 fd sbrc r24, 7
  1837 + 88e: 02 c0 rjmp .+4 ; 0x894 <__vector_10+0x116>
  1838 + 890: 81 e0 ldi r24, 0x01 ; 1
  1839 + 892: 01 c0 rjmp .+2 ; 0x896 <__vector_10+0x118>
  1840 + 894: 83 e0 ldi r24, 0x03 ; 3
  1841 + 896: 80 93 18 01 sts 0x0118, r24 ; 0x800118 <USB_DeviceState>
  1842 +
  1843 + #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT)
  1844 + EVENT_USB_Device_Connect();
  1845 + #else
  1846 + EVENT_USB_Device_WakeUp();
  1847 + 89a: 98 d1 rcall .+816 ; 0xbcc <USB_Event_Stub>
  1848 + case USB_INT_WAKEUPI:
  1849 + return (UDINT & (1 << WAKEUPI));
  1850 + case USB_INT_SUSPI:
  1851 + return (UDINT & (1 << SUSPI));
  1852 + case USB_INT_EORSTI:
  1853 + return (UDINT & (1 << EORSTI));
  1854 + 89c: 80 91 e1 00 lds r24, 0x00E1 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1855 + #endif
  1856 + }
  1857 +
  1858 + if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI))
  1859 + 8a0: 83 ff sbrs r24, 3
  1860 + 8a2: 22 c0 rjmp .+68 ; 0x8e8 <__vector_10+0x16a>
  1861 + case USB_INT_WAKEUPI:
  1862 + return (UDIEN & (1 << WAKEUPE));
  1863 + case USB_INT_SUSPI:
  1864 + return (UDIEN & (1 << SUSPE));
  1865 + case USB_INT_EORSTI:
  1866 + return (UDIEN & (1 << EORSTE));
  1867 + 8a4: 80 91 e2 00 lds r24, 0x00E2 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1868 + 8a8: 83 ff sbrs r24, 3
  1869 + 8aa: 1e c0 rjmp .+60 ; 0x8e8 <__vector_10+0x16a>
  1870 + break;
  1871 + case USB_INT_SUSPI:
  1872 + UDINT &= ~(1 << SUSPI);
  1873 + break;
  1874 + case USB_INT_EORSTI:
  1875 + UDINT &= ~(1 << EORSTI);
  1876 + 8ac: 80 91 e1 00 lds r24, 0x00E1 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1877 + 8b0: 87 7f andi r24, 0xF7 ; 247
  1878 + 8b2: 80 93 e1 00 sts 0x00E1, r24 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1879 + {
  1880 + USB_INT_Clear(USB_INT_EORSTI);
  1881 +
  1882 + USB_DeviceState = DEVICE_STATE_Default;
  1883 + 8b6: 82 e0 ldi r24, 0x02 ; 2
  1884 + 8b8: 80 93 18 01 sts 0x0118, r24 ; 0x800118 <USB_DeviceState>
  1885 + USB_Device_ConfigurationNumber = 0;
  1886 + 8bc: 10 92 14 01 sts 0x0114, r1 ; 0x800114 <USB_Device_ConfigurationNumber>
  1887 + #if defined(USB_CAN_BE_DEVICE)
  1888 + case USB_INT_WAKEUPI:
  1889 + UDINT &= ~(1 << WAKEUPI);
  1890 + break;
  1891 + case USB_INT_SUSPI:
  1892 + UDINT &= ~(1 << SUSPI);
  1893 + 8c0: 80 91 e1 00 lds r24, 0x00E1 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1894 + 8c4: 8e 7f andi r24, 0xFE ; 254
  1895 + 8c6: 80 93 e1 00 sts 0x00E1, r24 ; 0x8000e1 <__TEXT_REGION_LENGTH__+0x7e00e1>
  1896 + #if defined(USB_CAN_BE_DEVICE)
  1897 + case USB_INT_WAKEUPI:
  1898 + UDIEN &= ~(1 << WAKEUPE);
  1899 + break;
  1900 + case USB_INT_SUSPI:
  1901 + UDIEN &= ~(1 << SUSPE);
  1902 + 8ca: 80 91 e2 00 lds r24, 0x00E2 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1903 + 8ce: 8e 7f andi r24, 0xFE ; 254
  1904 + 8d0: 80 93 e2 00 sts 0x00E2, r24 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1905 + USBCON |= (1 << IDTE);
  1906 + break;
  1907 + #endif
  1908 + #if defined(USB_CAN_BE_DEVICE)
  1909 + case USB_INT_WAKEUPI:
  1910 + UDIEN |= (1 << WAKEUPE);
  1911 + 8d4: 80 91 e2 00 lds r24, 0x00E2 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1912 + 8d8: 80 61 ori r24, 0x10 ; 16
  1913 + 8da: 80 93 e2 00 sts 0x00E2, r24 ; 0x8000e2 <__TEXT_REGION_LENGTH__+0x7e00e2>
  1914 + uint8_t Number = (Address & ENDPOINT_EPNUM_MASK);
  1915 +
  1916 + if (Number >= ENDPOINT_TOTAL_ENDPOINTS)
  1917 + return false;
  1918 +
  1919 + return Endpoint_ConfigureEndpoint_Prv(Number,
  1920 + 8de: 42 e0 ldi r20, 0x02 ; 2
  1921 + 8e0: 60 e0 ldi r22, 0x00 ; 0
  1922 + 8e2: 80 e0 ldi r24, 0x00 ; 0
  1923 + 8e4: 2b de rcall .-938 ; 0x53c <Endpoint_ConfigureEndpoint_Prv>
  1924 +
  1925 + #if defined(INTERRUPT_CONTROL_ENDPOINT)
  1926 + USB_INT_Enable(USB_INT_RXSTPI);
  1927 + #endif
  1928 +
  1929 + EVENT_USB_Device_Reset();
  1930 + 8e6: 72 d1 rcall .+740 ; 0xbcc <USB_Event_Stub>
  1931 + 8e8: ff 91 pop r31
  1932 + USB_ResetInterface();
  1933 +
  1934 + EVENT_USB_UIDChange();
  1935 + }
  1936 + #endif
  1937 +}
  1938 + 8ea: ef 91 pop r30
  1939 + 8ec: bf 91 pop r27
  1940 + 8ee: af 91 pop r26
  1941 + 8f0: 9f 91 pop r25
  1942 + 8f2: 8f 91 pop r24
  1943 + 8f4: 7f 91 pop r23
  1944 + 8f6: 6f 91 pop r22
  1945 + 8f8: 5f 91 pop r21
  1946 + 8fa: 4f 91 pop r20
  1947 + 8fc: 3f 91 pop r19
  1948 + 8fe: 2f 91 pop r18
  1949 + 900: 0f 90 pop r0
  1950 + 902: 0f be out 0x3f, r0 ; 63
  1951 + 904: 0f 90 pop r0
  1952 + 906: 1f 90 pop r1
  1953 + 908: 18 95 reti
  1954 +
  1955 +0000090a <USB_Device_ProcessControlRequest>:
  1956 + 90a: 1f 93 push r17
  1957 +#if !defined(NO_DEVICE_REMOTE_WAKEUP)
  1958 +bool USB_Device_RemoteWakeupEnabled;
  1959 +#endif
  1960 +
  1961 +void USB_Device_ProcessControlRequest(void)
  1962 +{
  1963 + 90c: cf 93 push r28
  1964 + 90e: df 93 push r29
  1965 + 910: cd b7 in r28, 0x3d ; 61
  1966 + 912: de b7 in r29, 0x3e ; 62
  1967 + 914: aa 97 sbiw r28, 0x2a ; 42
  1968 + 916: 0f b6 in r0, 0x3f ; 63
  1969 + 918: f8 94 cli
  1970 + 91a: de bf out 0x3e, r29 ; 62
  1971 + 91c: 0f be out 0x3f, r0 ; 63
  1972 + 91e: cd bf out 0x3d, r28 ; 61
  1973 + 920: e9 e1 ldi r30, 0x19 ; 25
  1974 + 922: f1 e0 ldi r31, 0x01 ; 1
  1975 + * \return Next byte in the currently selected endpoint's FIFO buffer.
  1976 + */
  1977 + static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  1978 + static inline uint8_t Endpoint_Read_8(void)
  1979 + {
  1980 + return UEDATX;
  1981 + 924: 80 91 f1 00 lds r24, 0x00F1 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  1982 + USB_ControlRequest.wLength = Endpoint_Read_16_LE();
  1983 + #else
  1984 + uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest;
  1985 +
  1986 + for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++)
  1987 + *(RequestHeader++) = Endpoint_Read_8();
  1988 + 928: 81 93 st Z+, r24
  1989 + USB_ControlRequest.wIndex = Endpoint_Read_16_LE();
  1990 + USB_ControlRequest.wLength = Endpoint_Read_16_LE();
  1991 + #else
  1992 + uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest;
  1993 +
  1994 + for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++)
  1995 + 92a: 21 e0 ldi r18, 0x01 ; 1
  1996 + 92c: e1 32 cpi r30, 0x21 ; 33
  1997 + 92e: f2 07 cpc r31, r18
  1998 + 930: c9 f7 brne .-14 ; 0x924 <USB_Device_ProcessControlRequest+0x1a>
  1999 + *(RequestHeader++) = Endpoint_Read_8();
  2000 + #endif
  2001 +
  2002 + EVENT_USB_Device_ControlRequest();
  2003 + 932: 5f dc rcall .-1858 ; 0x1f2 <EVENT_USB_Device_ControlRequest>
  2004 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise.
  2005 + */
  2006 + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  2007 + static inline bool Endpoint_IsSETUPReceived(void)
  2008 + {
  2009 + return ((UEINTX & (1 << RXSTPI)) ? true : false);
  2010 + 934: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2011 +
  2012 + if (Endpoint_IsSETUPReceived())
  2013 + 938: 83 ff sbrs r24, 3
  2014 + 93a: 30 c1 rjmp .+608 ; 0xb9c <__stack+0x9d>
  2015 + {
  2016 + uint8_t bmRequestType = USB_ControlRequest.bmRequestType;
  2017 + 93c: 80 91 19 01 lds r24, 0x0119 ; 0x800119 <USB_ControlRequest>
  2018 +
  2019 + switch (USB_ControlRequest.bRequest)
  2020 + 940: 90 91 1a 01 lds r25, 0x011A ; 0x80011a <USB_ControlRequest+0x1>
  2021 + 944: 95 30 cpi r25, 0x05 ; 5
  2022 + 946: 09 f4 brne .+2 ; 0x94a <USB_Device_ProcessControlRequest+0x40>
  2023 + 948: 83 c0 rjmp .+262 ; 0xa50 <USB_Device_ProcessControlRequest+0x146>
  2024 + 94a: 30 f4 brcc .+12 ; 0x958 <USB_Device_ProcessControlRequest+0x4e>
  2025 + 94c: 91 30 cpi r25, 0x01 ; 1
  2026 + 94e: a9 f1 breq .+106 ; 0x9ba <USB_Device_ProcessControlRequest+0xb0>
  2027 + 950: 68 f0 brcs .+26 ; 0x96c <USB_Device_ProcessControlRequest+0x62>
  2028 + 952: 93 30 cpi r25, 0x03 ; 3
  2029 + 954: 91 f1 breq .+100 ; 0x9ba <USB_Device_ProcessControlRequest+0xb0>
  2030 + 956: 22 c1 rjmp .+580 ; 0xb9c <__stack+0x9d>
  2031 + 958: 98 30 cpi r25, 0x08 ; 8
  2032 + 95a: 09 f4 brne .+2 ; 0x95e <USB_Device_ProcessControlRequest+0x54>
  2033 + 95c: ef c0 rjmp .+478 ; 0xb3c <__stack+0x3d>
  2034 + 95e: 99 30 cpi r25, 0x09 ; 9
  2035 + 960: 09 f4 brne .+2 ; 0x964 <USB_Device_ProcessControlRequest+0x5a>
  2036 + 962: fb c0 rjmp .+502 ; 0xb5a <__stack+0x5b>
  2037 + 964: 96 30 cpi r25, 0x06 ; 6
  2038 + 966: 09 f0 breq .+2 ; 0x96a <USB_Device_ProcessControlRequest+0x60>
  2039 + 968: 19 c1 rjmp .+562 ; 0xb9c <__stack+0x9d>
  2040 + 96a: 94 c0 rjmp .+296 ; 0xa94 <USB_Device_ProcessControlRequest+0x18a>
  2041 + {
  2042 + case REQ_GetStatus:
  2043 + if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
  2044 + 96c: 80 38 cpi r24, 0x80 ; 128
  2045 + 96e: 21 f0 breq .+8 ; 0x978 <USB_Device_ProcessControlRequest+0x6e>
  2046 + 970: 82 38 cpi r24, 0x82 ; 130
  2047 + 972: 09 f0 breq .+2 ; 0x976 <USB_Device_ProcessControlRequest+0x6c>
  2048 + 974: 13 c1 rjmp .+550 ; 0xb9c <__stack+0x9d>
  2049 + 976: 08 c0 rjmp .+16 ; 0x988 <USB_Device_ProcessControlRequest+0x7e>
  2050 + Endpoint_ClearOUT();
  2051 +}
  2052 +
  2053 +static void USB_Device_GetStatus(void)
  2054 +{
  2055 + uint8_t CurrentStatus = 0;
  2056 + 978: 80 91 15 01 lds r24, 0x0115 ; 0x800115 <USB_Device_CurrentlySelfPowered>
  2057 + if (USB_Device_CurrentlySelfPowered)
  2058 + CurrentStatus |= FEATURE_SELFPOWERED_ENABLED;
  2059 + #endif
  2060 +
  2061 + #if !defined(NO_DEVICE_REMOTE_WAKEUP)
  2062 + if (USB_Device_RemoteWakeupEnabled)
  2063 + 97c: 90 91 16 01 lds r25, 0x0116 ; 0x800116 <USB_Device_RemoteWakeupEnabled>
  2064 + 980: 99 23 and r25, r25
  2065 + 982: 89 f0 breq .+34 ; 0x9a6 <USB_Device_ProcessControlRequest+0x9c>
  2066 + CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED;
  2067 + 984: 82 60 ori r24, 0x02 ; 2
  2068 + 986: 0f c0 rjmp .+30 ; 0x9a6 <USB_Device_ProcessControlRequest+0x9c>
  2069 + break;
  2070 + }
  2071 + case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT):
  2072 + {
  2073 + #if !defined(CONTROL_ONLY_DEVICE)
  2074 + uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);
  2075 + 988: 80 91 1d 01 lds r24, 0x011D ; 0x80011d <USB_ControlRequest+0x4>
  2076 + 98c: 8f 70 andi r24, 0x0F ; 15
  2077 +
  2078 + if (EndpointIndex >= ENDPOINT_TOTAL_ENDPOINTS)
  2079 + 98e: 87 30 cpi r24, 0x07 ; 7
  2080 + 990: 08 f0 brcs .+2 ; 0x994 <USB_Device_ProcessControlRequest+0x8a>
  2081 + 992: 04 c1 rjmp .+520 ; 0xb9c <__stack+0x9d>
  2082 + */
  2083 + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE;
  2084 + static inline void Endpoint_SelectEndpoint(const uint8_t Address)
  2085 + {
  2086 + #if !defined(CONTROL_ONLY_DEVICE)
  2087 + UENUM = (Address & ENDPOINT_EPNUM_MASK);
  2088 + 994: 80 93 e9 00 sts 0x00E9, r24 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  2089 + * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise.
  2090 + */
  2091 + static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  2092 + static inline bool Endpoint_IsStalled(void)
  2093 + {
  2094 + return ((UECONX & (1 << STALLRQ)) ? true : false);
  2095 + 998: 80 91 eb 00 lds r24, 0x00EB ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  2096 + return;
  2097 +
  2098 + Endpoint_SelectEndpoint(EndpointIndex);
  2099 +
  2100 + CurrentStatus = Endpoint_IsStalled();
  2101 + 99c: 85 fb bst r24, 5
  2102 + 99e: 88 27 eor r24, r24
  2103 + 9a0: 80 f9 bld r24, 0
  2104 + */
  2105 + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE;
  2106 + static inline void Endpoint_SelectEndpoint(const uint8_t Address)
  2107 + {
  2108 + #if !defined(CONTROL_ONLY_DEVICE)
  2109 + UENUM = (Address & ENDPOINT_EPNUM_MASK);
  2110 + 9a2: 10 92 e9 00 sts 0x00E9, r1 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  2111 + * \note This is not applicable for non CONTROL type endpoints.
  2112 + */
  2113 + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;
  2114 + static inline void Endpoint_ClearSETUP(void)
  2115 + {
  2116 + UEINTX &= ~(1 << RXSTPI);
  2117 + 9a6: 90 91 e8 00 lds r25, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2118 + 9aa: 97 7f andi r25, 0xF7 ; 247
  2119 + 9ac: 90 93 e8 00 sts 0x00E8, r25 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2120 + * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer.
  2121 + */
  2122 + static inline void Endpoint_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE;
  2123 + static inline void Endpoint_Write_16_LE(const uint16_t Data)
  2124 + {
  2125 + UEDATX = (Data & 0xFF);
  2126 + 9b0: 80 93 f1 00 sts 0x00F1, r24 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  2127 + UEDATX = (Data >> 8);
  2128 + 9b4: 10 92 f1 00 sts 0x00F1, r1 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  2129 + 9b8: cc c0 rjmp .+408 ; 0xb52 <__stack+0x53>
  2130 + }
  2131 +
  2132 + break;
  2133 + case REQ_ClearFeature:
  2134 + case REQ_SetFeature:
  2135 + if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) ||
  2136 + 9ba: 28 2f mov r18, r24
  2137 + 9bc: 2d 7f andi r18, 0xFD ; 253
  2138 + 9be: 09 f0 breq .+2 ; 0x9c2 <USB_Device_ProcessControlRequest+0xb8>
  2139 + 9c0: ed c0 rjmp .+474 ; 0xb9c <__stack+0x9d>
  2140 + Endpoint_ClearStatusStage();
  2141 +}
  2142 +
  2143 +static void USB_Device_ClearSetFeature(void)
  2144 +{
  2145 + switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT)
  2146 + 9c2: 88 23 and r24, r24
  2147 + 9c4: 19 f0 breq .+6 ; 0x9cc <USB_Device_ProcessControlRequest+0xc2>
  2148 + 9c6: 82 30 cpi r24, 0x02 ; 2
  2149 + 9c8: 61 f0 breq .+24 ; 0x9e2 <USB_Device_ProcessControlRequest+0xd8>
  2150 + 9ca: e8 c0 rjmp .+464 ; 0xb9c <__stack+0x9d>
  2151 + {
  2152 + #if !defined(NO_DEVICE_REMOTE_WAKEUP)
  2153 + case REQREC_DEVICE:
  2154 + {
  2155 + if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup)
  2156 + 9cc: 80 91 1b 01 lds r24, 0x011B ; 0x80011b <USB_ControlRequest+0x2>
  2157 + 9d0: 81 30 cpi r24, 0x01 ; 1
  2158 + 9d2: 09 f0 breq .+2 ; 0x9d6 <USB_Device_ProcessControlRequest+0xcc>
  2159 + 9d4: e3 c0 rjmp .+454 ; 0xb9c <__stack+0x9d>
  2160 + USB_Device_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature);
  2161 + 9d6: 93 30 cpi r25, 0x03 ; 3
  2162 + 9d8: 09 f0 breq .+2 ; 0x9dc <USB_Device_ProcessControlRequest+0xd2>
  2163 + 9da: 80 e0 ldi r24, 0x00 ; 0
  2164 + 9dc: 80 93 16 01 sts 0x0116, r24 ; 0x800116 <USB_Device_RemoteWakeupEnabled>
  2165 + 9e0: 2e c0 rjmp .+92 ; 0xa3e <USB_Device_ProcessControlRequest+0x134>
  2166 + }
  2167 + #endif
  2168 + #if !defined(CONTROL_ONLY_DEVICE)
  2169 + case REQREC_ENDPOINT:
  2170 + {
  2171 + if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt)
  2172 + 9e2: 80 91 1b 01 lds r24, 0x011B ; 0x80011b <USB_ControlRequest+0x2>
  2173 + 9e6: 81 11 cpse r24, r1
  2174 + 9e8: 2a c0 rjmp .+84 ; 0xa3e <USB_Device_ProcessControlRequest+0x134>
  2175 + {
  2176 + uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);
  2177 + 9ea: 80 91 1d 01 lds r24, 0x011D ; 0x80011d <USB_ControlRequest+0x4>
  2178 + 9ee: 8f 70 andi r24, 0x0F ; 15
  2179 +
  2180 + if (EndpointIndex == ENDPOINT_CONTROLEP || EndpointIndex >= ENDPOINT_TOTAL_ENDPOINTS)
  2181 + 9f0: 2f ef ldi r18, 0xFF ; 255
  2182 + 9f2: 28 0f add r18, r24
  2183 + 9f4: 26 30 cpi r18, 0x06 ; 6
  2184 + 9f6: 08 f0 brcs .+2 ; 0x9fa <USB_Device_ProcessControlRequest+0xf0>
  2185 + 9f8: d1 c0 rjmp .+418 ; 0xb9c <__stack+0x9d>
  2186 + */
  2187 + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE;
  2188 + static inline void Endpoint_SelectEndpoint(const uint8_t Address)
  2189 + {
  2190 + #if !defined(CONTROL_ONLY_DEVICE)
  2191 + UENUM = (Address & ENDPOINT_EPNUM_MASK);
  2192 + 9fa: 80 93 e9 00 sts 0x00E9, r24 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  2193 + * \return Boolean \c true if the currently selected endpoint is enabled, \c false otherwise.
  2194 + */
  2195 + static inline bool Endpoint_IsEnabled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  2196 + static inline bool Endpoint_IsEnabled(void)
  2197 + {
  2198 + return ((UECONX & (1 << EPEN)) ? true : false);
  2199 + 9fe: 20 91 eb 00 lds r18, 0x00EB ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  2200 + return;
  2201 +
  2202 + Endpoint_SelectEndpoint(EndpointIndex);
  2203 +
  2204 + if (Endpoint_IsEnabled())
  2205 + a02: 20 ff sbrs r18, 0
  2206 + a04: 1c c0 rjmp .+56 ; 0xa3e <USB_Device_ProcessControlRequest+0x134>
  2207 + {
  2208 + if (USB_ControlRequest.bRequest == REQ_SetFeature)
  2209 + a06: 93 30 cpi r25, 0x03 ; 3
  2210 + a08: 21 f4 brne .+8 ; 0xa12 <USB_Device_ProcessControlRequest+0x108>
  2211 + * \ingroup Group_EndpointPacketManagement_AVR8
  2212 + */
  2213 + static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE;
  2214 + static inline void Endpoint_StallTransaction(void)
  2215 + {
  2216 + UECONX |= (1 << STALLRQ);
  2217 + a0a: 80 91 eb 00 lds r24, 0x00EB ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  2218 + a0e: 80 62 ori r24, 0x20 ; 32
  2219 + a10: 14 c0 rjmp .+40 ; 0xa3a <USB_Device_ProcessControlRequest+0x130>
  2220 + * \ingroup Group_EndpointPacketManagement_AVR8
  2221 + */
  2222 + static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE;
  2223 + static inline void Endpoint_ClearStall(void)
  2224 + {
  2225 + UECONX |= (1 << STALLRQC);
  2226 + a12: 90 91 eb 00 lds r25, 0x00EB ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  2227 + a16: 90 61 ori r25, 0x10 ; 16
  2228 + a18: 90 93 eb 00 sts 0x00EB, r25 ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  2229 + * \param[in] Address Endpoint address whose FIFO buffers are to be reset.
  2230 + */
  2231 + static inline void Endpoint_ResetEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE;
  2232 + static inline void Endpoint_ResetEndpoint(const uint8_t Address)
  2233 + {
  2234 + UERST = (1 << (Address & ENDPOINT_EPNUM_MASK));
  2235 + a1c: 21 e0 ldi r18, 0x01 ; 1
  2236 + a1e: 30 e0 ldi r19, 0x00 ; 0
  2237 + a20: a9 01 movw r20, r18
  2238 + a22: 02 c0 rjmp .+4 ; 0xa28 <USB_Device_ProcessControlRequest+0x11e>
  2239 + a24: 44 0f add r20, r20
  2240 + a26: 55 1f adc r21, r21
  2241 + a28: 8a 95 dec r24
  2242 + a2a: e2 f7 brpl .-8 ; 0xa24 <USB_Device_ProcessControlRequest+0x11a>
  2243 + a2c: 40 93 ea 00 sts 0x00EA, r20 ; 0x8000ea <__TEXT_REGION_LENGTH__+0x7e00ea>
  2244 + UERST = 0;
  2245 + a30: 10 92 ea 00 sts 0x00EA, r1 ; 0x8000ea <__TEXT_REGION_LENGTH__+0x7e00ea>
  2246 +
  2247 + /** Resets the data toggle of the currently selected endpoint. */
  2248 + static inline void Endpoint_ResetDataToggle(void) ATTR_ALWAYS_INLINE;
  2249 + static inline void Endpoint_ResetDataToggle(void)
  2250 + {
  2251 + UECONX |= (1 << RSTDT);
  2252 + a34: 80 91 eb 00 lds r24, 0x00EB ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  2253 + a38: 88 60 ori r24, 0x08 ; 8
  2254 + a3a: 80 93 eb 00 sts 0x00EB, r24 ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  2255 + */
  2256 + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE;
  2257 + static inline void Endpoint_SelectEndpoint(const uint8_t Address)
  2258 + {
  2259 + #if !defined(CONTROL_ONLY_DEVICE)
  2260 + UENUM = (Address & ENDPOINT_EPNUM_MASK);
  2261 + a3e: 10 92 e9 00 sts 0x00E9, r1 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  2262 + * \note This is not applicable for non CONTROL type endpoints.
  2263 + */
  2264 + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;
  2265 + static inline void Endpoint_ClearSETUP(void)
  2266 + {
  2267 + UEINTX &= ~(1 << RXSTPI);
  2268 + a42: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2269 + a46: 87 7f andi r24, 0xF7 ; 247
  2270 + a48: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2271 +
  2272 + Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
  2273 +
  2274 + Endpoint_ClearSETUP();
  2275 +
  2276 + Endpoint_ClearStatusStage();
  2277 + a4c: e9 dd rcall .-1070 ; 0x620 <Endpoint_ClearStatusStage>
  2278 + a4e: a6 c0 rjmp .+332 ; 0xb9c <__stack+0x9d>
  2279 + USB_Device_ClearSetFeature();
  2280 + }
  2281 +
  2282 + break;
  2283 + case REQ_SetAddress:
  2284 + if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
  2285 + a50: 81 11 cpse r24, r1
  2286 + a52: a4 c0 rjmp .+328 ; 0xb9c <__stack+0x9d>
  2287 + }
  2288 +}
  2289 +
  2290 +static void USB_Device_SetAddress(void)
  2291 +{
  2292 + uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F);
  2293 + a54: 10 91 1b 01 lds r17, 0x011B ; 0x80011b <USB_ControlRequest+0x2>
  2294 + a58: 1f 77 andi r17, 0x7F ; 127
  2295 + #endif
  2296 +
  2297 + static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE;
  2298 + static inline void USB_Device_SetDeviceAddress(const uint8_t Address)
  2299 + {
  2300 + UDADDR = (UDADDR & (1 << ADDEN)) | (Address & 0x7F);
  2301 + a5a: 80 91 e3 00 lds r24, 0x00E3 ; 0x8000e3 <__TEXT_REGION_LENGTH__+0x7e00e3>
  2302 + a5e: 80 78 andi r24, 0x80 ; 128
  2303 + a60: 81 2b or r24, r17
  2304 + a62: 80 93 e3 00 sts 0x00E3, r24 ; 0x8000e3 <__TEXT_REGION_LENGTH__+0x7e00e3>
  2305 + a66: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2306 + a6a: 87 7f andi r24, 0xF7 ; 247
  2307 + a6c: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2308 +
  2309 + USB_Device_SetDeviceAddress(DeviceAddress);
  2310 +
  2311 + Endpoint_ClearSETUP();
  2312 +
  2313 + Endpoint_ClearStatusStage();
  2314 + a70: d7 dd rcall .-1106 ; 0x620 <Endpoint_ClearStatusStage>
  2315 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise.
  2316 + */
  2317 + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  2318 + static inline bool Endpoint_IsINReady(void)
  2319 + {
  2320 + return ((UEINTX & (1 << TXINI)) ? true : false);
  2321 + a72: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2322 +
  2323 + while (!(Endpoint_IsINReady()));
  2324 + a76: 80 ff sbrs r24, 0
  2325 + a78: fc cf rjmp .-8 ; 0xa72 <USB_Device_ProcessControlRequest+0x168>
  2326 + static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE;
  2327 + static inline void USB_Device_EnableDeviceAddress(const uint8_t Address)
  2328 + {
  2329 + (void)Address;
  2330 +
  2331 + UDADDR |= (1 << ADDEN);
  2332 + a7a: 80 91 e3 00 lds r24, 0x00E3 ; 0x8000e3 <__TEXT_REGION_LENGTH__+0x7e00e3>
  2333 + a7e: 80 68 ori r24, 0x80 ; 128
  2334 + a80: 80 93 e3 00 sts 0x00E3, r24 ; 0x8000e3 <__TEXT_REGION_LENGTH__+0x7e00e3>
  2335 +
  2336 + USB_Device_EnableDeviceAddress(DeviceAddress);
  2337 +
  2338 + USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
  2339 + a84: 11 11 cpse r17, r1
  2340 + a86: 02 c0 rjmp .+4 ; 0xa8c <USB_Device_ProcessControlRequest+0x182>
  2341 + a88: 82 e0 ldi r24, 0x02 ; 2
  2342 + a8a: 01 c0 rjmp .+2 ; 0xa8e <USB_Device_ProcessControlRequest+0x184>
  2343 + a8c: 83 e0 ldi r24, 0x03 ; 3
  2344 + a8e: 80 93 18 01 sts 0x0118, r24 ; 0x800118 <USB_DeviceState>
  2345 + a92: 84 c0 rjmp .+264 ; 0xb9c <__stack+0x9d>
  2346 + if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
  2347 + USB_Device_SetAddress();
  2348 +
  2349 + break;
  2350 + case REQ_GetDescriptor:
  2351 + if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
  2352 + a94: 80 58 subi r24, 0x80 ; 128
  2353 + a96: 82 30 cpi r24, 0x02 ; 2
  2354 + a98: 08 f0 brcs .+2 ; 0xa9c <USB_Device_ProcessControlRequest+0x192>
  2355 + a9a: 80 c0 rjmp .+256 ; 0xb9c <__stack+0x9d>
  2356 + !(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS))
  2357 + uint8_t DescriptorAddressSpace;
  2358 + #endif
  2359 +
  2360 + #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
  2361 + if (USB_ControlRequest.wValue == ((DTYPE_String << 8) | USE_INTERNAL_SERIAL))
  2362 + a9c: 80 91 1b 01 lds r24, 0x011B ; 0x80011b <USB_ControlRequest+0x2>
  2363 + aa0: 90 91 1c 01 lds r25, 0x011C ; 0x80011c <USB_ControlRequest+0x3>
  2364 + aa4: 8c 3d cpi r24, 0xDC ; 220
  2365 + aa6: 53 e0 ldi r21, 0x03 ; 3
  2366 + aa8: 95 07 cpc r25, r21
  2367 + aaa: 71 f5 brne .+92 ; 0xb08 <__stack+0x9>
  2368 + {
  2369 + USB_Descriptor_Header_t Header;
  2370 + uint16_t UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4];
  2371 + } SignatureDescriptor;
  2372 +
  2373 + SignatureDescriptor.Header.Type = DTYPE_String;
  2374 + aac: 83 e0 ldi r24, 0x03 ; 3
  2375 + aae: 8a 83 std Y+2, r24 ; 0x02
  2376 + SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4);
  2377 + ab0: 8a e2 ldi r24, 0x2A ; 42
  2378 + ab2: 89 83 std Y+1, r24 ; 0x01
  2379 + static inline uint_reg_t GetGlobalInterruptMask(void)
  2380 + {
  2381 + GCC_MEMORY_BARRIER();
  2382 +
  2383 + #if (ARCH == ARCH_AVR8)
  2384 + return SREG;
  2385 + ab4: 4f b7 in r20, 0x3f ; 63
  2386 + static inline void GlobalInterruptDisable(void)
  2387 + {
  2388 + GCC_MEMORY_BARRIER();
  2389 +
  2390 + #if (ARCH == ARCH_AVR8)
  2391 + cli();
  2392 + ab6: f8 94 cli
  2393 + __builtin_ssrf(AVR32_SR_GM_OFFSET);
  2394 + #elif (ARCH == ARCH_XMEGA)
  2395 + cli();
  2396 + #endif
  2397 +
  2398 + GCC_MEMORY_BARRIER();
  2399 + ab8: de 01 movw r26, r28
  2400 + aba: 13 96 adiw r26, 0x03 ; 3
  2401 + uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask();
  2402 + GlobalInterruptDisable();
  2403 +
  2404 + uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS;
  2405 +
  2406 + for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++)
  2407 + abc: 20 e0 ldi r18, 0x00 ; 0
  2408 + static inline void USB_Device_GetSerialString(uint16_t* const UnicodeString)
  2409 + {
  2410 + uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask();
  2411 + GlobalInterruptDisable();
  2412 +
  2413 + uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS;
  2414 + abe: 3e e0 ldi r19, 0x0E ; 14
  2415 +
  2416 + for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++)
  2417 + {
  2418 + uint8_t SerialByte = boot_signature_byte_get(SigReadAddress);
  2419 + ac0: 51 e2 ldi r21, 0x21 ; 33
  2420 + ac2: e3 2f mov r30, r19
  2421 + ac4: f0 e0 ldi r31, 0x00 ; 0
  2422 + ac6: 50 93 57 00 sts 0x0057, r21 ; 0x800057 <__TEXT_REGION_LENGTH__+0x7e0057>
  2423 + aca: e4 91 lpm r30, Z
  2424 +
  2425 + if (SerialCharNum & 0x01)
  2426 + acc: 20 ff sbrs r18, 0
  2427 + ace: 03 c0 rjmp .+6 ; 0xad6 <USB_Device_ProcessControlRequest+0x1cc>
  2428 + {
  2429 + SerialByte >>= 4;
  2430 + ad0: e2 95 swap r30
  2431 + ad2: ef 70 andi r30, 0x0F ; 15
  2432 + SigReadAddress++;
  2433 + ad4: 3f 5f subi r19, 0xFF ; 255
  2434 + }
  2435 +
  2436 + SerialByte &= 0x0F;
  2437 + ad6: ef 70 andi r30, 0x0F ; 15
  2438 + ad8: 8e 2f mov r24, r30
  2439 + ada: 90 e0 ldi r25, 0x00 ; 0
  2440 +
  2441 + UnicodeString[SerialCharNum] = cpu_to_le16((SerialByte >= 10) ?
  2442 + adc: ea 30 cpi r30, 0x0A ; 10
  2443 + ade: 10 f0 brcs .+4 ; 0xae4 <USB_Device_ProcessControlRequest+0x1da>
  2444 + ae0: c7 96 adiw r24, 0x37 ; 55
  2445 + ae2: 01 c0 rjmp .+2 ; 0xae6 <USB_Device_ProcessControlRequest+0x1dc>
  2446 + ae4: c0 96 adiw r24, 0x30 ; 48
  2447 + ae6: 8d 93 st X+, r24
  2448 + ae8: 9d 93 st X+, r25
  2449 + uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask();
  2450 + GlobalInterruptDisable();
  2451 +
  2452 + uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS;
  2453 +
  2454 + for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++)
  2455 + aea: 2f 5f subi r18, 0xFF ; 255
  2456 + aec: 24 31 cpi r18, 0x14 ; 20
  2457 + aee: 49 f7 brne .-46 ; 0xac2 <USB_Device_ProcessControlRequest+0x1b8>
  2458 + static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState)
  2459 + {
  2460 + GCC_MEMORY_BARRIER();
  2461 +
  2462 + #if (ARCH == ARCH_AVR8)
  2463 + SREG = GlobalIntState;
  2464 + af0: 4f bf out 0x3f, r20 ; 63
  2465 + * \note This is not applicable for non CONTROL type endpoints.
  2466 + */
  2467 + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;
  2468 + static inline void Endpoint_ClearSETUP(void)
  2469 + {
  2470 + UEINTX &= ~(1 << RXSTPI);
  2471 + af2: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2472 + af6: 87 7f andi r24, 0xF7 ; 247
  2473 + af8: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2474 +
  2475 + USB_Device_GetSerialString(SignatureDescriptor.UnicodeString);
  2476 +
  2477 + Endpoint_ClearSETUP();
  2478 +
  2479 + Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor));
  2480 + afc: 6a e2 ldi r22, 0x2A ; 42
  2481 + afe: 70 e0 ldi r23, 0x00 ; 0
  2482 + b00: ce 01 movw r24, r28
  2483 + b02: 01 96 adiw r24, 0x01 ; 1
  2484 + b04: 1c dc rcall .-1992 ; 0x33e <Endpoint_Write_Control_Stream_LE>
  2485 + b06: 14 c0 rjmp .+40 ; 0xb30 <__stack+0x31>
  2486 + USB_Device_GetInternalSerialDescriptor();
  2487 + return;
  2488 + }
  2489 + #endif
  2490 +
  2491 + if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex,
  2492 + b08: 60 91 1d 01 lds r22, 0x011D ; 0x80011d <USB_ControlRequest+0x4>
  2493 + b0c: 70 91 1e 01 lds r23, 0x011E ; 0x80011e <USB_ControlRequest+0x5>
  2494 + b10: ae 01 movw r20, r28
  2495 + b12: 4f 5f subi r20, 0xFF ; 255
  2496 + b14: 5f 4f sbci r21, 0xFF ; 255
  2497 + b16: 88 db rcall .-2288 ; 0x228 <CALLBACK_USB_GetDescriptor>
  2498 + b18: bc 01 movw r22, r24
  2499 + b1a: 89 2b or r24, r25
  2500 + b1c: 09 f4 brne .+2 ; 0xb20 <__stack+0x21>
  2501 + b1e: 3e c0 rjmp .+124 ; 0xb9c <__stack+0x9d>
  2502 + b20: 90 91 e8 00 lds r25, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2503 + b24: 97 7f andi r25, 0xF7 ; 247
  2504 + b26: 90 93 e8 00 sts 0x00E8, r25 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2505 + #if defined(USE_RAM_DESCRIPTORS) || !defined(ARCH_HAS_MULTI_ADDRESS_SPACE)
  2506 + Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize);
  2507 + #elif defined(USE_EEPROM_DESCRIPTORS)
  2508 + Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize);
  2509 + #elif defined(USE_FLASH_DESCRIPTORS)
  2510 + Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize);
  2511 + b2a: 89 81 ldd r24, Y+1 ; 0x01
  2512 + b2c: 9a 81 ldd r25, Y+2 ; 0x02
  2513 + b2e: a5 dc rcall .-1718 ; 0x47a <Endpoint_Write_Control_PStream_LE>
  2514 + */
  2515 + static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE;
  2516 + static inline void Endpoint_ClearOUT(void)
  2517 + {
  2518 + #if !defined(CONTROL_ONLY_DEVICE)
  2519 + UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON));
  2520 + b30: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2521 + b34: 8b 77 andi r24, 0x7B ; 123
  2522 + b36: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2523 + b3a: 30 c0 rjmp .+96 ; 0xb9c <__stack+0x9d>
  2524 + USB_Device_GetDescriptor();
  2525 + }
  2526 +
  2527 + break;
  2528 + case REQ_GetConfiguration:
  2529 + if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE))
  2530 + b3c: 80 38 cpi r24, 0x80 ; 128
  2531 + b3e: 71 f5 brne .+92 ; 0xb9c <__stack+0x9d>
  2532 + * \note This is not applicable for non CONTROL type endpoints.
  2533 + */
  2534 + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;
  2535 + static inline void Endpoint_ClearSETUP(void)
  2536 + {
  2537 + UEINTX &= ~(1 << RXSTPI);
  2538 + b40: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2539 + b44: 87 7f andi r24, 0xF7 ; 247
  2540 + b46: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2541 +
  2542 +static void USB_Device_GetConfiguration(void)
  2543 +{
  2544 + Endpoint_ClearSETUP();
  2545 +
  2546 + Endpoint_Write_8(USB_Device_ConfigurationNumber);
  2547 + b4a: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <USB_Device_ConfigurationNumber>
  2548 + * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer.
  2549 + */
  2550 + static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE;
  2551 + static inline void Endpoint_Write_8(const uint8_t Data)
  2552 + {
  2553 + UEDATX = Data;
  2554 + b4e: 80 93 f1 00 sts 0x00F1, r24 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  2555 + */
  2556 + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE;
  2557 + static inline void Endpoint_ClearIN(void)
  2558 + {
  2559 + #if !defined(CONTROL_ONLY_DEVICE)
  2560 + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON));
  2561 + b52: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2562 + b56: 8e 77 andi r24, 0x7E ; 126
  2563 + b58: 77 cf rjmp .-274 ; 0xa48 <USB_Device_ProcessControlRequest+0x13e>
  2564 + if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE))
  2565 + USB_Device_GetConfiguration();
  2566 +
  2567 + break;
  2568 + case REQ_SetConfiguration:
  2569 + if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
  2570 + b5a: 81 11 cpse r24, r1
  2571 + b5c: 1f c0 rjmp .+62 ; 0xb9c <__stack+0x9d>
  2572 +}
  2573 +
  2574 +static void USB_Device_SetConfiguration(void)
  2575 +{
  2576 + #if defined(FIXED_NUM_CONFIGURATIONS)
  2577 + if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS)
  2578 + b5e: 80 91 1b 01 lds r24, 0x011B ; 0x80011b <USB_ControlRequest+0x2>
  2579 + b62: 90 91 1c 01 lds r25, 0x011C ; 0x80011c <USB_ControlRequest+0x3>
  2580 + b66: 99 27 eor r25, r25
  2581 + b68: 02 97 sbiw r24, 0x02 ; 2
  2582 + b6a: c4 f4 brge .+48 ; 0xb9c <__stack+0x9d>
  2583 + * \note This is not applicable for non CONTROL type endpoints.
  2584 + */
  2585 + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;
  2586 + static inline void Endpoint_ClearSETUP(void)
  2587 + {
  2588 + UEINTX &= ~(1 << RXSTPI);
  2589 + b6c: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2590 + b70: 87 7f andi r24, 0xF7 ; 247
  2591 + b72: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2592 + #endif
  2593 + #endif
  2594 +
  2595 + Endpoint_ClearSETUP();
  2596 +
  2597 + USB_Device_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue;
  2598 + b76: 80 91 1b 01 lds r24, 0x011B ; 0x80011b <USB_ControlRequest+0x2>
  2599 + b7a: 80 93 14 01 sts 0x0114, r24 ; 0x800114 <USB_Device_ConfigurationNumber>
  2600 +
  2601 + Endpoint_ClearStatusStage();
  2602 + b7e: 50 dd rcall .-1376 ; 0x620 <Endpoint_ClearStatusStage>
  2603 +
  2604 + if (USB_Device_ConfigurationNumber)
  2605 + b80: 80 91 14 01 lds r24, 0x0114 ; 0x800114 <USB_Device_ConfigurationNumber>
  2606 + b84: 81 11 cpse r24, r1
  2607 + b86: 06 c0 rjmp .+12 ; 0xb94 <__stack+0x95>
  2608 + }
  2609 +
  2610 + static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
  2611 + static inline bool USB_Device_IsAddressSet(void)
  2612 + {
  2613 + return (UDADDR & (1 << ADDEN));
  2614 + b88: 80 91 e3 00 lds r24, 0x00E3 ; 0x8000e3 <__TEXT_REGION_LENGTH__+0x7e00e3>
  2615 + USB_DeviceState = DEVICE_STATE_Configured;
  2616 + else
  2617 + USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered;
  2618 + b8c: 87 fd sbrc r24, 7
  2619 + b8e: 02 c0 rjmp .+4 ; 0xb94 <__stack+0x95>
  2620 + b90: 81 e0 ldi r24, 0x01 ; 1
  2621 + b92: 01 c0 rjmp .+2 ; 0xb96 <__stack+0x97>
  2622 + b94: 84 e0 ldi r24, 0x04 ; 4
  2623 + b96: 80 93 18 01 sts 0x0118, r24 ; 0x800118 <USB_DeviceState>
  2624 +
  2625 + EVENT_USB_Device_ConfigurationChanged();
  2626 + b9a: 22 db rcall .-2492 ; 0x1e0 <EVENT_USB_Device_ConfigurationChanged>
  2627 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise.
  2628 + */
  2629 + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  2630 + static inline bool Endpoint_IsSETUPReceived(void)
  2631 + {
  2632 + return ((UEINTX & (1 << RXSTPI)) ? true : false);
  2633 + b9c: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2634 + default:
  2635 + break;
  2636 + }
  2637 + }
  2638 +
  2639 + if (Endpoint_IsSETUPReceived())
  2640 + ba0: 83 ff sbrs r24, 3
  2641 + ba2: 0a c0 rjmp .+20 ; 0xbb8 <__stack+0xb9>
  2642 + * \note This is not applicable for non CONTROL type endpoints.
  2643 + */
  2644 + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;
  2645 + static inline void Endpoint_ClearSETUP(void)
  2646 + {
  2647 + UEINTX &= ~(1 << RXSTPI);
  2648 + ba4: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2649 + ba8: 87 7f andi r24, 0xF7 ; 247
  2650 + baa: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2651 + * \ingroup Group_EndpointPacketManagement_AVR8
  2652 + */
  2653 + static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE;
  2654 + static inline void Endpoint_StallTransaction(void)
  2655 + {
  2656 + UECONX |= (1 << STALLRQ);
  2657 + bae: 80 91 eb 00 lds r24, 0x00EB ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  2658 + bb2: 80 62 ori r24, 0x20 ; 32
  2659 + bb4: 80 93 eb 00 sts 0x00EB, r24 ; 0x8000eb <__TEXT_REGION_LENGTH__+0x7e00eb>
  2660 + {
  2661 + Endpoint_ClearSETUP();
  2662 + Endpoint_StallTransaction();
  2663 + }
  2664 +}
  2665 + bb8: aa 96 adiw r28, 0x2a ; 42
  2666 + bba: 0f b6 in r0, 0x3f ; 63
  2667 + bbc: f8 94 cli
  2668 + bbe: de bf out 0x3e, r29 ; 62
  2669 + bc0: 0f be out 0x3f, r0 ; 63
  2670 + bc2: cd bf out 0x3d, r28 ; 61
  2671 + bc4: df 91 pop r29
  2672 + bc6: cf 91 pop r28
  2673 + bc8: 1f 91 pop r17
  2674 + bca: 08 95 ret
  2675 +
  2676 +00000bcc <USB_Event_Stub>:
  2677 +#define __INCLUDE_FROM_EVENTS_C
  2678 +#define __INCLUDE_FROM_USB_DRIVER
  2679 +#include "Events.h"
  2680 +
  2681 +void USB_Event_Stub(void)
  2682 +{
  2683 + bcc: 08 95 ret
  2684 +
  2685 +00000bce <USB_USBTask>:
  2686 +#if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR)
  2687 +volatile uint8_t USB_DeviceState;
  2688 +#endif
  2689 +
  2690 +void USB_USBTask(void)
  2691 +{
  2692 + bce: cf 93 push r28
  2693 +}
  2694 +
  2695 +#if defined(USB_CAN_BE_DEVICE)
  2696 +static void USB_DeviceTask(void)
  2697 +{
  2698 + if (USB_DeviceState == DEVICE_STATE_Unattached)
  2699 + bd0: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  2700 + bd4: 88 23 and r24, r24
  2701 + bd6: 99 f0 breq .+38 ; 0xbfe <USB_USBTask+0x30>
  2702 + */
  2703 + static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  2704 + static inline uint8_t Endpoint_GetCurrentEndpoint(void)
  2705 + {
  2706 + #if !defined(CONTROL_ONLY_DEVICE)
  2707 + return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection());
  2708 + bd8: c0 91 e9 00 lds r28, 0x00E9 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  2709 + bdc: cf 70 andi r28, 0x0F ; 15
  2710 + * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask.
  2711 + */
  2712 + static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  2713 + static inline uint8_t Endpoint_GetEndpointDirection(void)
  2714 + {
  2715 + return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT;
  2716 + bde: 90 91 ec 00 lds r25, 0x00EC ; 0x8000ec <__TEXT_REGION_LENGTH__+0x7e00ec>
  2717 + be2: 89 2f mov r24, r25
  2718 + be4: 81 70 andi r24, 0x01 ; 1
  2719 + be6: 90 fd sbrc r25, 0
  2720 + be8: 80 e8 ldi r24, 0x80 ; 128
  2721 + */
  2722 + static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  2723 + static inline uint8_t Endpoint_GetCurrentEndpoint(void)
  2724 + {
  2725 + #if !defined(CONTROL_ONLY_DEVICE)
  2726 + return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection());
  2727 + bea: c8 2b or r28, r24
  2728 + */
  2729 + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE;
  2730 + static inline void Endpoint_SelectEndpoint(const uint8_t Address)
  2731 + {
  2732 + #if !defined(CONTROL_ONLY_DEVICE)
  2733 + UENUM = (Address & ENDPOINT_EPNUM_MASK);
  2734 + bec: 10 92 e9 00 sts 0x00E9, r1 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  2735 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise.
  2736 + */
  2737 + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  2738 + static inline bool Endpoint_IsSETUPReceived(void)
  2739 + {
  2740 + return ((UEINTX & (1 << RXSTPI)) ? true : false);
  2741 + bf0: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2742 +
  2743 + uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint();
  2744 +
  2745 + Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
  2746 +
  2747 + if (Endpoint_IsSETUPReceived())
  2748 + bf4: 83 fd sbrc r24, 3
  2749 + USB_Device_ProcessControlRequest();
  2750 + bf6: 89 de rcall .-750 ; 0x90a <USB_Device_ProcessControlRequest>
  2751 + */
  2752 + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE;
  2753 + static inline void Endpoint_SelectEndpoint(const uint8_t Address)
  2754 + {
  2755 + #if !defined(CONTROL_ONLY_DEVICE)
  2756 + UENUM = (Address & ENDPOINT_EPNUM_MASK);
  2757 + bf8: cf 70 andi r28, 0x0F ; 15
  2758 + bfa: c0 93 e9 00 sts 0x00E9, r28 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  2759 + #elif defined(USB_CAN_BE_HOST)
  2760 + USB_HostTask();
  2761 + #elif defined(USB_CAN_BE_DEVICE)
  2762 + USB_DeviceTask();
  2763 + #endif
  2764 +}
  2765 + bfe: cf 91 pop r28
  2766 + c00: 08 95 ret
  2767 +
  2768 +00000c02 <HID_Device_ProcessControlRequest>:
  2769 +#define __INCLUDE_FROM_HID_DRIVER
  2770 +#define __INCLUDE_FROM_HID_DEVICE_C
  2771 +#include "HIDClassDevice.h"
  2772 +
  2773 +void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
  2774 +{
  2775 + c02: 6f 92 push r6
  2776 + c04: 7f 92 push r7
  2777 + c06: 8f 92 push r8
  2778 + c08: 9f 92 push r9
  2779 + c0a: af 92 push r10
  2780 + c0c: bf 92 push r11
  2781 + c0e: cf 92 push r12
  2782 + c10: df 92 push r13
  2783 + c12: ef 92 push r14
  2784 + c14: ff 92 push r15
  2785 + c16: 0f 93 push r16
  2786 + c18: 1f 93 push r17
  2787 + c1a: cf 93 push r28
  2788 + c1c: df 93 push r29
  2789 + c1e: 00 d0 rcall .+0 ; 0xc20 <HID_Device_ProcessControlRequest+0x1e>
  2790 + c20: 1f 92 push r1
  2791 + c22: cd b7 in r28, 0x3d ; 61
  2792 + c24: de b7 in r29, 0x3e ; 62
  2793 + c26: 7c 01 movw r14, r24
  2794 + Endpoint_ClearStatusStage();
  2795 + }
  2796 +
  2797 + break;
  2798 + }
  2799 +}
  2800 + c28: ad b6 in r10, 0x3d ; 61
  2801 + c2a: be b6 in r11, 0x3e ; 62
  2802 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise.
  2803 + */
  2804 + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  2805 + static inline bool Endpoint_IsSETUPReceived(void)
  2806 + {
  2807 + return ((UEINTX & (1 << RXSTPI)) ? true : false);
  2808 + c2c: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2809 +#define __INCLUDE_FROM_HID_DEVICE_C
  2810 +#include "HIDClassDevice.h"
  2811 +
  2812 +void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
  2813 +{
  2814 + if (!(Endpoint_IsSETUPReceived()))
  2815 + c30: 83 ff sbrs r24, 3
  2816 + c32: 03 c1 rjmp .+518 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  2817 + return;
  2818 +
  2819 + if (USB_ControlRequest.wIndex != HIDInterfaceInfo->Config.InterfaceNumber)
  2820 + c34: f7 01 movw r30, r14
  2821 + c36: 80 81 ld r24, Z
  2822 + c38: 90 e0 ldi r25, 0x00 ; 0
  2823 + c3a: 20 91 1d 01 lds r18, 0x011D ; 0x80011d <USB_ControlRequest+0x4>
  2824 + c3e: 30 91 1e 01 lds r19, 0x011E ; 0x80011e <USB_ControlRequest+0x5>
  2825 + c42: 28 17 cp r18, r24
  2826 + c44: 39 07 cpc r19, r25
  2827 + c46: 09 f0 breq .+2 ; 0xc4a <HID_Device_ProcessControlRequest+0x48>
  2828 + c48: f8 c0 rjmp .+496 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  2829 + return;
  2830 +
  2831 + switch (USB_ControlRequest.bRequest)
  2832 + c4a: 80 91 1a 01 lds r24, 0x011A ; 0x80011a <USB_ControlRequest+0x1>
  2833 + c4e: 83 30 cpi r24, 0x03 ; 3
  2834 + c50: 09 f4 brne .+2 ; 0xc54 <HID_Device_ProcessControlRequest+0x52>
  2835 + c52: 9a c0 rjmp .+308 ; 0xd88 <HID_Device_ProcessControlRequest+0x186>
  2836 + c54: 30 f4 brcc .+12 ; 0xc62 <HID_Device_ProcessControlRequest+0x60>
  2837 + c56: 81 30 cpi r24, 0x01 ; 1
  2838 + c58: 71 f0 breq .+28 ; 0xc76 <HID_Device_ProcessControlRequest+0x74>
  2839 + c5a: 82 30 cpi r24, 0x02 ; 2
  2840 + c5c: 09 f4 brne .+2 ; 0xc60 <HID_Device_ProcessControlRequest+0x5e>
  2841 + c5e: d1 c0 rjmp .+418 ; 0xe02 <HID_Device_ProcessControlRequest+0x200>
  2842 + c60: ec c0 rjmp .+472 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  2843 + c62: 8a 30 cpi r24, 0x0A ; 10
  2844 + c64: 09 f4 brne .+2 ; 0xc68 <HID_Device_ProcessControlRequest+0x66>
  2845 + c66: b5 c0 rjmp .+362 ; 0xdd2 <HID_Device_ProcessControlRequest+0x1d0>
  2846 + c68: 8b 30 cpi r24, 0x0B ; 11
  2847 + c6a: 09 f4 brne .+2 ; 0xc6e <HID_Device_ProcessControlRequest+0x6c>
  2848 + c6c: 9e c0 rjmp .+316 ; 0xdaa <HID_Device_ProcessControlRequest+0x1a8>
  2849 + c6e: 89 30 cpi r24, 0x09 ; 9
  2850 + c70: 09 f0 breq .+2 ; 0xc74 <HID_Device_ProcessControlRequest+0x72>
  2851 + c72: e3 c0 rjmp .+454 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  2852 + c74: 4c c0 rjmp .+152 ; 0xd0e <HID_Device_ProcessControlRequest+0x10c>
  2853 + {
  2854 + case HID_REQ_GetReport:
  2855 + if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
  2856 + c76: 80 91 19 01 lds r24, 0x0119 ; 0x800119 <USB_ControlRequest>
  2857 + c7a: 81 3a cpi r24, 0xA1 ; 161
  2858 + c7c: 09 f0 breq .+2 ; 0xc80 <HID_Device_ProcessControlRequest+0x7e>
  2859 + c7e: dd c0 rjmp .+442 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  2860 + {
  2861 + c80: 8d b6 in r8, 0x3d ; 61
  2862 + c82: 9e b6 in r9, 0x3e ; 62
  2863 + uint16_t ReportSize = 0;
  2864 + c84: 1a 82 std Y+2, r1 ; 0x02
  2865 + c86: 19 82 std Y+1, r1 ; 0x01
  2866 + uint8_t ReportID = (USB_ControlRequest.wValue & 0xFF);
  2867 + c88: 80 91 1b 01 lds r24, 0x011B ; 0x80011b <USB_ControlRequest+0x2>
  2868 + c8c: 10 91 1c 01 lds r17, 0x011C ; 0x80011c <USB_ControlRequest+0x3>
  2869 + c90: 8b 83 std Y+3, r24 ; 0x03
  2870 + uint8_t ReportType = (USB_ControlRequest.wValue >> 8) - 1;
  2871 + uint8_t ReportData[HIDInterfaceInfo->Config.PrevReportINBufferSize];
  2872 + c92: f7 01 movw r30, r14
  2873 + c94: 80 85 ldd r24, Z+8 ; 0x08
  2874 + c96: 48 2f mov r20, r24
  2875 + c98: 50 e0 ldi r21, 0x00 ; 0
  2876 + c9a: 8d b7 in r24, 0x3d ; 61
  2877 + c9c: 9e b7 in r25, 0x3e ; 62
  2878 + c9e: 84 1b sub r24, r20
  2879 + ca0: 95 0b sbc r25, r21
  2880 + ca2: 0f b6 in r0, 0x3f ; 63
  2881 + ca4: f8 94 cli
  2882 + ca6: 9e bf out 0x3e, r25 ; 62
  2883 + ca8: 0f be out 0x3f, r0 ; 63
  2884 + caa: 8d bf out 0x3d, r24 ; 61
  2885 + cac: ed b7 in r30, 0x3d ; 61
  2886 + cae: fe b7 in r31, 0x3e ; 62
  2887 + cb0: 31 96 adiw r30, 0x01 ; 1
  2888 + cb2: 6f 01 movw r12, r30
  2889 +
  2890 + memset(ReportData, 0, sizeof(ReportData));
  2891 + cb4: 60 e0 ldi r22, 0x00 ; 0
  2892 + cb6: 70 e0 ldi r23, 0x00 ; 0
  2893 + cb8: cf 01 movw r24, r30
  2894 + cba: b8 d1 rcall .+880 ; 0x102c <memset>
  2895 +
  2896 + CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportType, ReportData, &ReportSize);
  2897 + cbc: 4f ef ldi r20, 0xFF ; 255
  2898 + cbe: 41 0f add r20, r17
  2899 + cc0: 8e 01 movw r16, r28
  2900 + cc2: 0f 5f subi r16, 0xFF ; 255
  2901 + cc4: 1f 4f sbci r17, 0xFF ; 255
  2902 + cc6: 96 01 movw r18, r12
  2903 + cc8: be 01 movw r22, r28
  2904 + cca: 6d 5f subi r22, 0xFD ; 253
  2905 + ccc: 7f 4f sbci r23, 0xFF ; 255
  2906 + cce: c7 01 movw r24, r14
  2907 + cd0: 9f da rcall .-2754 ; 0x210 <CALLBACK_HID_Device_CreateHIDReport>
  2908 +
  2909 + if (HIDInterfaceInfo->Config.PrevReportINBuffer != NULL)
  2910 + cd2: f7 01 movw r30, r14
  2911 + cd4: 86 81 ldd r24, Z+6 ; 0x06
  2912 + cd6: 97 81 ldd r25, Z+7 ; 0x07
  2913 + cd8: 00 97 sbiw r24, 0x00 ; 0
  2914 + cda: 21 f0 breq .+8 ; 0xce4 <HID_Device_ProcessControlRequest+0xe2>
  2915 + {
  2916 + memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportData,
  2917 + cdc: 40 85 ldd r20, Z+8 ; 0x08
  2918 + cde: 50 e0 ldi r21, 0x00 ; 0
  2919 + ce0: b6 01 movw r22, r12
  2920 + ce2: 9b d1 rcall .+822 ; 0x101a <memcpy>
  2921 + */
  2922 + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE;
  2923 + static inline void Endpoint_SelectEndpoint(const uint8_t Address)
  2924 + {
  2925 + #if !defined(CONTROL_ONLY_DEVICE)
  2926 + UENUM = (Address & ENDPOINT_EPNUM_MASK);
  2927 + ce4: 10 92 e9 00 sts 0x00E9, r1 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  2928 + * \note This is not applicable for non CONTROL type endpoints.
  2929 + */
  2930 + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;
  2931 + static inline void Endpoint_ClearSETUP(void)
  2932 + {
  2933 + UEINTX &= ~(1 << RXSTPI);
  2934 + ce8: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2935 + cec: 87 7f andi r24, 0xF7 ; 247
  2936 + cee: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2937 +
  2938 + Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
  2939 +
  2940 + Endpoint_ClearSETUP();
  2941 +
  2942 + if (ReportID)
  2943 + cf2: 8b 81 ldd r24, Y+3 ; 0x03
  2944 + cf4: 81 11 cpse r24, r1
  2945 + * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer.
  2946 + */
  2947 + static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE;
  2948 + static inline void Endpoint_Write_8(const uint8_t Data)
  2949 + {
  2950 + UEDATX = Data;
  2951 + cf6: 80 93 f1 00 sts 0x00F1, r24 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  2952 + Endpoint_Write_8(ReportID);
  2953 +
  2954 + Endpoint_Write_Control_Stream_LE(ReportData, ReportSize);
  2955 + cfa: 69 81 ldd r22, Y+1 ; 0x01
  2956 + cfc: 7a 81 ldd r23, Y+2 ; 0x02
  2957 + cfe: c6 01 movw r24, r12
  2958 + d00: 1e db rcall .-2500 ; 0x33e <Endpoint_Write_Control_Stream_LE>
  2959 + */
  2960 + static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE;
  2961 + static inline void Endpoint_ClearOUT(void)
  2962 + {
  2963 + #if !defined(CONTROL_ONLY_DEVICE)
  2964 + UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON));
  2965 + d02: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2966 + d06: 8b 77 andi r24, 0x7B ; 123
  2967 + d08: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  2968 + d0c: 37 c0 rjmp .+110 ; 0xd7c <HID_Device_ProcessControlRequest+0x17a>
  2969 + Endpoint_ClearOUT();
  2970 + }
  2971 +
  2972 + break;
  2973 + case HID_REQ_SetReport:
  2974 + if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
  2975 + d0e: 80 91 19 01 lds r24, 0x0119 ; 0x800119 <USB_ControlRequest>
  2976 + d12: 81 32 cpi r24, 0x21 ; 33
  2977 + d14: 09 f0 breq .+2 ; 0xd18 <HID_Device_ProcessControlRequest+0x116>
  2978 + d16: 91 c0 rjmp .+290 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  2979 + {
  2980 + d18: 8d b6 in r8, 0x3d ; 61
  2981 + d1a: 9e b6 in r9, 0x3e ; 62
  2982 + uint16_t ReportSize = USB_ControlRequest.wLength;
  2983 + d1c: 00 91 1f 01 lds r16, 0x011F ; 0x80011f <USB_ControlRequest+0x6>
  2984 + d20: 10 91 20 01 lds r17, 0x0120 ; 0x800120 <USB_ControlRequest+0x7>
  2985 + uint8_t ReportID = (USB_ControlRequest.wValue & 0xFF);
  2986 + d24: 70 90 1b 01 lds r7, 0x011B ; 0x80011b <USB_ControlRequest+0x2>
  2987 + d28: 60 90 1c 01 lds r6, 0x011C ; 0x80011c <USB_ControlRequest+0x3>
  2988 + uint8_t ReportType = (USB_ControlRequest.wValue >> 8) - 1;
  2989 + uint8_t ReportData[ReportSize];
  2990 + d2c: 8d b7 in r24, 0x3d ; 61
  2991 + d2e: 9e b7 in r25, 0x3e ; 62
  2992 + d30: 80 1b sub r24, r16
  2993 + d32: 91 0b sbc r25, r17
  2994 + d34: 0f b6 in r0, 0x3f ; 63
  2995 + d36: f8 94 cli
  2996 + d38: 9e bf out 0x3e, r25 ; 62
  2997 + d3a: 0f be out 0x3f, r0 ; 63
  2998 + d3c: 8d bf out 0x3d, r24 ; 61
  2999 + d3e: ed b7 in r30, 0x3d ; 61
  3000 + d40: fe b7 in r31, 0x3e ; 62
  3001 + d42: 31 96 adiw r30, 0x01 ; 1
  3002 + d44: 6f 01 movw r12, r30
  3003 + * \note This is not applicable for non CONTROL type endpoints.
  3004 + */
  3005 + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;
  3006 + static inline void Endpoint_ClearSETUP(void)
  3007 + {
  3008 + UEINTX &= ~(1 << RXSTPI);
  3009 + d46: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3010 + d4a: 87 7f andi r24, 0xF7 ; 247
  3011 + d4c: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3012 +
  3013 + Endpoint_ClearSETUP();
  3014 + Endpoint_Read_Control_Stream_LE(ReportData, ReportSize);
  3015 + d50: b8 01 movw r22, r16
  3016 + d52: cf 01 movw r24, r30
  3017 + d54: 52 db rcall .-2396 ; 0x3fa <Endpoint_Read_Control_Stream_LE>
  3018 + */
  3019 + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE;
  3020 + static inline void Endpoint_ClearIN(void)
  3021 + {
  3022 + #if !defined(CONTROL_ONLY_DEVICE)
  3023 + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON));
  3024 + d56: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3025 + d5a: 8e 77 andi r24, 0x7E ; 126
  3026 + d5c: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3027 + Endpoint_ClearIN();
  3028 +
  3029 + CALLBACK_HID_Device_ProcessHIDReport(HIDInterfaceInfo, ReportID, ReportType,
  3030 + d60: 21 e0 ldi r18, 0x01 ; 1
  3031 + d62: 71 10 cpse r7, r1
  3032 + d64: 01 c0 rjmp .+2 ; 0xd68 <HID_Device_ProcessControlRequest+0x166>
  3033 + d66: 20 e0 ldi r18, 0x00 ; 0
  3034 + d68: 30 e0 ldi r19, 0x00 ; 0
  3035 + d6a: 02 1b sub r16, r18
  3036 + d6c: 13 0b sbc r17, r19
  3037 + &ReportData[ReportID ? 1 : 0], ReportSize - (ReportID ? 1 : 0));
  3038 + d6e: 2c 0d add r18, r12
  3039 +
  3040 + Endpoint_ClearSETUP();
  3041 + Endpoint_Read_Control_Stream_LE(ReportData, ReportSize);
  3042 + Endpoint_ClearIN();
  3043 +
  3044 + CALLBACK_HID_Device_ProcessHIDReport(HIDInterfaceInfo, ReportID, ReportType,
  3045 + d70: 3d 1d adc r19, r13
  3046 + d72: 4f ef ldi r20, 0xFF ; 255
  3047 + d74: 46 0d add r20, r6
  3048 + d76: 67 2d mov r22, r7
  3049 + d78: c7 01 movw r24, r14
  3050 + d7a: 55 da rcall .-2902 ; 0x226 <CALLBACK_HID_Device_ProcessHIDReport>
  3051 + d7c: 0f b6 in r0, 0x3f ; 63
  3052 + d7e: f8 94 cli
  3053 + d80: 9e be out 0x3e, r9 ; 62
  3054 + d82: 0f be out 0x3f, r0 ; 63
  3055 + d84: 8d be out 0x3d, r8 ; 61
  3056 + d86: 59 c0 rjmp .+178 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  3057 + &ReportData[ReportID ? 1 : 0], ReportSize - (ReportID ? 1 : 0));
  3058 + }
  3059 +
  3060 + break;
  3061 + case HID_REQ_GetProtocol:
  3062 + if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
  3063 + d88: 80 91 19 01 lds r24, 0x0119 ; 0x800119 <USB_ControlRequest>
  3064 + d8c: 81 3a cpi r24, 0xA1 ; 161
  3065 + d8e: 09 f0 breq .+2 ; 0xd92 <HID_Device_ProcessControlRequest+0x190>
  3066 + d90: 54 c0 rjmp .+168 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  3067 + * \note This is not applicable for non CONTROL type endpoints.
  3068 + */
  3069 + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;
  3070 + static inline void Endpoint_ClearSETUP(void)
  3071 + {
  3072 + UEINTX &= ~(1 << RXSTPI);
  3073 + d92: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3074 + d96: 87 7f andi r24, 0xF7 ; 247
  3075 + d98: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3076 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise.
  3077 + */
  3078 + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  3079 + static inline bool Endpoint_IsINReady(void)
  3080 + {
  3081 + return ((UEINTX & (1 << TXINI)) ? true : false);
  3082 + d9c: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3083 + {
  3084 + Endpoint_ClearSETUP();
  3085 + while (!(Endpoint_IsINReady()));
  3086 + da0: 80 ff sbrs r24, 0
  3087 + da2: fc cf rjmp .-8 ; 0xd9c <HID_Device_ProcessControlRequest+0x19a>
  3088 + Endpoint_Write_8(HIDInterfaceInfo->State.UsingReportProtocol);
  3089 + da4: f7 01 movw r30, r14
  3090 + da6: 81 85 ldd r24, Z+9 ; 0x09
  3091 + da8: 40 c0 rjmp .+128 ; 0xe2a <HID_Device_ProcessControlRequest+0x228>
  3092 + Endpoint_ClearStatusStage();
  3093 + }
  3094 +
  3095 + break;
  3096 + case HID_REQ_SetProtocol:
  3097 + if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
  3098 + daa: 80 91 19 01 lds r24, 0x0119 ; 0x800119 <USB_ControlRequest>
  3099 + dae: 81 32 cpi r24, 0x21 ; 33
  3100 + db0: 09 f0 breq .+2 ; 0xdb4 <HID_Device_ProcessControlRequest+0x1b2>
  3101 + * \note This is not applicable for non CONTROL type endpoints.
  3102 + */
  3103 + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;
  3104 + static inline void Endpoint_ClearSETUP(void)
  3105 + {
  3106 + UEINTX &= ~(1 << RXSTPI);
  3107 + db2: 43 c0 rjmp .+134 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  3108 + db4: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3109 + db8: 87 7f andi r24, 0xF7 ; 247
  3110 + dba: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3111 + {
  3112 + Endpoint_ClearSETUP();
  3113 + Endpoint_ClearStatusStage();
  3114 + dbe: 30 dc rcall .-1952 ; 0x620 <Endpoint_ClearStatusStage>
  3115 +
  3116 + HIDInterfaceInfo->State.UsingReportProtocol = ((USB_ControlRequest.wValue & 0xFF) != 0x00);
  3117 + dc0: 90 91 1b 01 lds r25, 0x011B ; 0x80011b <USB_ControlRequest+0x2>
  3118 + dc4: 81 e0 ldi r24, 0x01 ; 1
  3119 + dc6: 91 11 cpse r25, r1
  3120 + dc8: 01 c0 rjmp .+2 ; 0xdcc <HID_Device_ProcessControlRequest+0x1ca>
  3121 + dca: 80 e0 ldi r24, 0x00 ; 0
  3122 + dcc: f7 01 movw r30, r14
  3123 + dce: 81 87 std Z+9, r24 ; 0x09
  3124 + dd0: 34 c0 rjmp .+104 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  3125 + }
  3126 +
  3127 + break;
  3128 + case HID_REQ_SetIdle:
  3129 + if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
  3130 + dd2: 80 91 19 01 lds r24, 0x0119 ; 0x800119 <USB_ControlRequest>
  3131 + dd6: 81 32 cpi r24, 0x21 ; 33
  3132 + dd8: 81 f5 brne .+96 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  3133 + dda: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3134 + dde: 87 7f andi r24, 0xF7 ; 247
  3135 + de0: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3136 + {
  3137 + Endpoint_ClearSETUP();
  3138 + Endpoint_ClearStatusStage();
  3139 + de4: 1d dc rcall .-1990 ; 0x620 <Endpoint_ClearStatusStage>
  3140 +
  3141 + HIDInterfaceInfo->State.IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6);
  3142 + de6: 80 91 1b 01 lds r24, 0x011B ; 0x80011b <USB_ControlRequest+0x2>
  3143 + dea: 90 91 1c 01 lds r25, 0x011C ; 0x80011c <USB_ControlRequest+0x3>
  3144 + dee: 88 27 eor r24, r24
  3145 + df0: 36 e0 ldi r19, 0x06 ; 6
  3146 + df2: 96 95 lsr r25
  3147 + df4: 87 95 ror r24
  3148 + df6: 3a 95 dec r19
  3149 + df8: e1 f7 brne .-8 ; 0xdf2 <HID_Device_ProcessControlRequest+0x1f0>
  3150 + dfa: f7 01 movw r30, r14
  3151 + dfc: 95 87 std Z+13, r25 ; 0x0d
  3152 + dfe: 84 87 std Z+12, r24 ; 0x0c
  3153 + e00: 1c c0 rjmp .+56 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  3154 + }
  3155 +
  3156 + break;
  3157 + case HID_REQ_GetIdle:
  3158 + if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
  3159 + e02: 80 91 19 01 lds r24, 0x0119 ; 0x800119 <USB_ControlRequest>
  3160 + e06: 81 3a cpi r24, 0xA1 ; 161
  3161 + e08: c1 f4 brne .+48 ; 0xe3a <HID_Device_ProcessControlRequest+0x238>
  3162 + e0a: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3163 + e0e: 87 7f andi r24, 0xF7 ; 247
  3164 + e10: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3165 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise.
  3166 + */
  3167 + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  3168 + static inline bool Endpoint_IsINReady(void)
  3169 + {
  3170 + return ((UEINTX & (1 << TXINI)) ? true : false);
  3171 + e14: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3172 + {
  3173 + Endpoint_ClearSETUP();
  3174 + while (!(Endpoint_IsINReady()));
  3175 + e18: 80 ff sbrs r24, 0
  3176 + e1a: fc cf rjmp .-8 ; 0xe14 <HID_Device_ProcessControlRequest+0x212>
  3177 + Endpoint_Write_8(HIDInterfaceInfo->State.IdleCount >> 2);
  3178 + e1c: f7 01 movw r30, r14
  3179 + e1e: 84 85 ldd r24, Z+12 ; 0x0c
  3180 + e20: 95 85 ldd r25, Z+13 ; 0x0d
  3181 + e22: 96 95 lsr r25
  3182 + e24: 87 95 ror r24
  3183 + e26: 96 95 lsr r25
  3184 + * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer.
  3185 + */
  3186 + static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE;
  3187 + static inline void Endpoint_Write_8(const uint8_t Data)
  3188 + {
  3189 + UEDATX = Data;
  3190 + e28: 87 95 ror r24
  3191 + e2a: 80 93 f1 00 sts 0x00F1, r24 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  3192 + */
  3193 + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE;
  3194 + static inline void Endpoint_ClearIN(void)
  3195 + {
  3196 + #if !defined(CONTROL_ONLY_DEVICE)
  3197 + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON));
  3198 + e2e: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3199 + e32: 8e 77 andi r24, 0x7E ; 126
  3200 + e34: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3201 + Endpoint_ClearIN();
  3202 + Endpoint_ClearStatusStage();
  3203 + e38: f3 db rcall .-2074 ; 0x620 <Endpoint_ClearStatusStage>
  3204 + }
  3205 +
  3206 + break;
  3207 + }
  3208 +}
  3209 + e3a: 0f b6 in r0, 0x3f ; 63
  3210 + e3c: f8 94 cli
  3211 + e3e: be be out 0x3e, r11 ; 62
  3212 + e40: 0f be out 0x3f, r0 ; 63
  3213 + e42: ad be out 0x3d, r10 ; 61
  3214 + e44: 0f 90 pop r0
  3215 + e46: 0f 90 pop r0
  3216 + e48: 0f 90 pop r0
  3217 + e4a: df 91 pop r29
  3218 + e4c: cf 91 pop r28
  3219 + e4e: 1f 91 pop r17
  3220 + e50: 0f 91 pop r16
  3221 + e52: ff 90 pop r15
  3222 + e54: ef 90 pop r14
  3223 + e56: df 90 pop r13
  3224 + e58: cf 90 pop r12
  3225 + e5a: bf 90 pop r11
  3226 + e5c: af 90 pop r10
  3227 + e5e: 9f 90 pop r9
  3228 + e60: 8f 90 pop r8
  3229 + e62: 7f 90 pop r7
  3230 + e64: 6f 90 pop r6
  3231 + e66: 08 95 ret
  3232 +
  3233 +00000e68 <HID_Device_ConfigureEndpoints>:
  3234 +
  3235 +bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
  3236 +{
  3237 + memset(&HIDInterfaceInfo->State, 0x00, sizeof(HIDInterfaceInfo->State));
  3238 + e68: fc 01 movw r30, r24
  3239 + e6a: 39 96 adiw r30, 0x09 ; 9
  3240 + e6c: 27 e0 ldi r18, 0x07 ; 7
  3241 + e6e: df 01 movw r26, r30
  3242 + e70: 1d 92 st X+, r1
  3243 + e72: 2a 95 dec r18
  3244 + e74: e9 f7 brne .-6 ; 0xe70 <HID_Device_ConfigureEndpoints+0x8>
  3245 + HIDInterfaceInfo->State.UsingReportProtocol = true;
  3246 + e76: 21 e0 ldi r18, 0x01 ; 1
  3247 + e78: fc 01 movw r30, r24
  3248 + e7a: 21 87 std Z+9, r18 ; 0x09
  3249 + HIDInterfaceInfo->State.IdleCount = 500;
  3250 + e7c: 24 ef ldi r18, 0xF4 ; 244
  3251 + e7e: 31 e0 ldi r19, 0x01 ; 1
  3252 + e80: 35 87 std Z+13, r19 ; 0x0d
  3253 + e82: 24 87 std Z+12, r18 ; 0x0c
  3254 +
  3255 + HIDInterfaceInfo->Config.ReportINEndpoint.Type = EP_TYPE_INTERRUPT;
  3256 + e84: 23 e0 ldi r18, 0x03 ; 3
  3257 + e86: 24 83 std Z+4, r18 ; 0x04
  3258 +
  3259 + if (!(Endpoint_ConfigureEndpointTable(&HIDInterfaceInfo->Config.ReportINEndpoint, 1)))
  3260 + e88: 61 e0 ldi r22, 0x01 ; 1
  3261 + e8a: 01 96 adiw r24, 0x01 ; 1
  3262 + e8c: 8c cb rjmp .-2280 ; 0x5a6 <Endpoint_ConfigureEndpointTable>
  3263 +
  3264 +00000e8e <HID_Device_USBTask>:
  3265 +
  3266 + return true;
  3267 +}
  3268 +
  3269 +void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
  3270 +{
  3271 + e8e: 5f 92 push r5
  3272 + e90: 6f 92 push r6
  3273 + e92: 7f 92 push r7
  3274 + e94: 8f 92 push r8
  3275 + e96: 9f 92 push r9
  3276 + e98: af 92 push r10
  3277 + e9a: bf 92 push r11
  3278 + e9c: cf 92 push r12
  3279 + e9e: df 92 push r13
  3280 + ea0: ef 92 push r14
  3281 + ea2: ff 92 push r15
  3282 + ea4: 0f 93 push r16
  3283 + ea6: 1f 93 push r17
  3284 + ea8: cf 93 push r28
  3285 + eaa: df 93 push r29
  3286 + eac: 00 d0 rcall .+0 ; 0xeae <HID_Device_USBTask+0x20>
  3287 + eae: 1f 92 push r1
  3288 + eb0: cd b7 in r28, 0x3d ; 61
  3289 + eb2: de b7 in r29, 0x3e ; 62
  3290 + eb4: 7c 01 movw r14, r24
  3291 + Endpoint_ClearIN();
  3292 + }
  3293 +
  3294 + HIDInterfaceInfo->State.PrevFrameNum = USB_Device_GetFrameNumber();
  3295 + }
  3296 +}
  3297 + eb6: ad b6 in r10, 0x3d ; 61
  3298 + eb8: be b6 in r11, 0x3e ; 62
  3299 + return true;
  3300 +}
  3301 +
  3302 +void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
  3303 +{
  3304 + if (USB_DeviceState != DEVICE_STATE_Configured)
  3305 + eba: 80 91 18 01 lds r24, 0x0118 ; 0x800118 <USB_DeviceState>
  3306 + ebe: 84 30 cpi r24, 0x04 ; 4
  3307 + ec0: 09 f0 breq .+2 ; 0xec4 <HID_Device_USBTask+0x36>
  3308 + ec2: 86 c0 rjmp .+268 ; 0xfd0 <HID_Device_USBTask+0x142>
  3309 + * \return Current USB frame number from the USB controller.
  3310 + */
  3311 + static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
  3312 + static inline uint16_t USB_Device_GetFrameNumber(void)
  3313 + {
  3314 + return UDFNUM;
  3315 + ec4: 80 91 e4 00 lds r24, 0x00E4 ; 0x8000e4 <__TEXT_REGION_LENGTH__+0x7e00e4>
  3316 + ec8: 90 91 e5 00 lds r25, 0x00E5 ; 0x8000e5 <__TEXT_REGION_LENGTH__+0x7e00e5>
  3317 + return;
  3318 +
  3319 + if (HIDInterfaceInfo->State.PrevFrameNum == USB_Device_GetFrameNumber())
  3320 + ecc: f7 01 movw r30, r14
  3321 + ece: 22 85 ldd r18, Z+10 ; 0x0a
  3322 + ed0: 33 85 ldd r19, Z+11 ; 0x0b
  3323 + ed2: 28 17 cp r18, r24
  3324 + ed4: 39 07 cpc r19, r25
  3325 + ed6: 09 f4 brne .+2 ; 0xeda <HID_Device_USBTask+0x4c>
  3326 + ed8: 7b c0 rjmp .+246 ; 0xfd0 <HID_Device_USBTask+0x142>
  3327 + */
  3328 + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE;
  3329 + static inline void Endpoint_SelectEndpoint(const uint8_t Address)
  3330 + {
  3331 + #if !defined(CONTROL_ONLY_DEVICE)
  3332 + UENUM = (Address & ENDPOINT_EPNUM_MASK);
  3333 + eda: 81 81 ldd r24, Z+1 ; 0x01
  3334 + edc: 8f 70 andi r24, 0x0F ; 15
  3335 + ede: 80 93 e9 00 sts 0x00E9, r24 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  3336 + * on its direction.
  3337 + */
  3338 + static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
  3339 + static inline bool Endpoint_IsReadWriteAllowed(void)
  3340 + {
  3341 + return ((UEINTX & (1 << RWAL)) ? true : false);
  3342 + ee2: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3343 + #endif
  3344 + }
  3345 +
  3346 + Endpoint_SelectEndpoint(HIDInterfaceInfo->Config.ReportINEndpoint.Address);
  3347 +
  3348 + if (Endpoint_IsReadWriteAllowed())
  3349 + ee6: 85 ff sbrs r24, 5
  3350 + ee8: 73 c0 rjmp .+230 ; 0xfd0 <HID_Device_USBTask+0x142>
  3351 + {
  3352 + eea: 8d b6 in r8, 0x3d ; 61
  3353 + eec: 9e b6 in r9, 0x3e ; 62
  3354 + uint8_t ReportINData[HIDInterfaceInfo->Config.PrevReportINBufferSize];
  3355 + eee: 40 85 ldd r20, Z+8 ; 0x08
  3356 + ef0: 50 e0 ldi r21, 0x00 ; 0
  3357 + ef2: 8d b7 in r24, 0x3d ; 61
  3358 + ef4: 9e b7 in r25, 0x3e ; 62
  3359 + ef6: 84 1b sub r24, r20
  3360 + ef8: 95 0b sbc r25, r21
  3361 + efa: 0f b6 in r0, 0x3f ; 63
  3362 + efc: f8 94 cli
  3363 + efe: 9e bf out 0x3e, r25 ; 62
  3364 + f00: 0f be out 0x3f, r0 ; 63
  3365 + f02: 8d bf out 0x3d, r24 ; 61
  3366 + f04: ed b7 in r30, 0x3d ; 61
  3367 + f06: fe b7 in r31, 0x3e ; 62
  3368 + f08: 31 96 adiw r30, 0x01 ; 1
  3369 + f0a: 6f 01 movw r12, r30
  3370 + uint8_t ReportID = 0;
  3371 + f0c: 1b 82 std Y+3, r1 ; 0x03
  3372 + uint16_t ReportINSize = 0;
  3373 + f0e: 1a 82 std Y+2, r1 ; 0x02
  3374 + f10: 19 82 std Y+1, r1 ; 0x01
  3375 +
  3376 + memset(ReportINData, 0, sizeof(ReportINData));
  3377 + f12: 60 e0 ldi r22, 0x00 ; 0
  3378 + f14: 70 e0 ldi r23, 0x00 ; 0
  3379 + f16: cf 01 movw r24, r30
  3380 + f18: 89 d0 rcall .+274 ; 0x102c <memset>
  3381 +
  3382 + bool ForceSend = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, HID_REPORT_ITEM_In,
  3383 + f1a: 8e 01 movw r16, r28
  3384 + f1c: 0f 5f subi r16, 0xFF ; 255
  3385 + f1e: 1f 4f sbci r17, 0xFF ; 255
  3386 + f20: 96 01 movw r18, r12
  3387 + f22: 40 e0 ldi r20, 0x00 ; 0
  3388 + f24: be 01 movw r22, r28
  3389 + f26: 6d 5f subi r22, 0xFD ; 253
  3390 + f28: 7f 4f sbci r23, 0xFF ; 255
  3391 + f2a: c7 01 movw r24, r14
  3392 + f2c: 71 d9 rcall .-3358 ; 0x210 <CALLBACK_HID_Device_CreateHIDReport>
  3393 + f2e: 58 2e mov r5, r24
  3394 + ReportINData, &ReportINSize);
  3395 + bool StatesChanged = false;
  3396 + bool IdlePeriodElapsed = (HIDInterfaceInfo->State.IdleCount && !(HIDInterfaceInfo->State.IdleMSRemaining));
  3397 + f30: f7 01 movw r30, r14
  3398 + f32: 84 85 ldd r24, Z+12 ; 0x0c
  3399 + f34: 95 85 ldd r25, Z+13 ; 0x0d
  3400 + f36: 89 2b or r24, r25
  3401 + f38: 29 f0 breq .+10 ; 0xf44 <HID_Device_USBTask+0xb6>
  3402 + f3a: 11 e0 ldi r17, 0x01 ; 1
  3403 + f3c: 86 85 ldd r24, Z+14 ; 0x0e
  3404 + f3e: 97 85 ldd r25, Z+15 ; 0x0f
  3405 + f40: 89 2b or r24, r25
  3406 + f42: 09 f0 breq .+2 ; 0xf46 <HID_Device_USBTask+0xb8>
  3407 + f44: 10 e0 ldi r17, 0x00 ; 0
  3408 +
  3409 + if (HIDInterfaceInfo->Config.PrevReportINBuffer != NULL)
  3410 + f46: f7 01 movw r30, r14
  3411 + f48: 66 80 ldd r6, Z+6 ; 0x06
  3412 + f4a: 77 80 ldd r7, Z+7 ; 0x07
  3413 + f4c: 61 14 cp r6, r1
  3414 + f4e: 71 04 cpc r7, r1
  3415 + f50: 81 f0 breq .+32 ; 0xf72 <HID_Device_USBTask+0xe4>
  3416 + {
  3417 + StatesChanged = (memcmp(ReportINData, HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINSize) != 0);
  3418 + f52: 49 81 ldd r20, Y+1 ; 0x01
  3419 + f54: 5a 81 ldd r21, Y+2 ; 0x02
  3420 + f56: b3 01 movw r22, r6
  3421 + f58: c6 01 movw r24, r12
  3422 + f5a: 52 d0 rcall .+164 ; 0x1000 <memcmp>
  3423 + f5c: 01 e0 ldi r16, 0x01 ; 1
  3424 + f5e: 89 2b or r24, r25
  3425 + f60: 09 f4 brne .+2 ; 0xf64 <HID_Device_USBTask+0xd6>
  3426 + f62: 00 e0 ldi r16, 0x00 ; 0
  3427 + memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINData, HIDInterfaceInfo->Config.PrevReportINBufferSize);
  3428 + f64: f7 01 movw r30, r14
  3429 + f66: 40 85 ldd r20, Z+8 ; 0x08
  3430 + f68: 50 e0 ldi r21, 0x00 ; 0
  3431 + f6a: b6 01 movw r22, r12
  3432 + f6c: c3 01 movw r24, r6
  3433 + f6e: 55 d0 rcall .+170 ; 0x101a <memcpy>
  3434 + f70: 01 c0 rjmp .+2 ; 0xf74 <HID_Device_USBTask+0xe6>
  3435 +
  3436 + memset(ReportINData, 0, sizeof(ReportINData));
  3437 +
  3438 + bool ForceSend = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, HID_REPORT_ITEM_In,
  3439 + ReportINData, &ReportINSize);
  3440 + bool StatesChanged = false;
  3441 + f72: 00 e0 ldi r16, 0x00 ; 0
  3442 + {
  3443 + StatesChanged = (memcmp(ReportINData, HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINSize) != 0);
  3444 + memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINData, HIDInterfaceInfo->Config.PrevReportINBufferSize);
  3445 + }
  3446 +
  3447 + if (ReportINSize && (ForceSend || StatesChanged || IdlePeriodElapsed))
  3448 + f74: 89 81 ldd r24, Y+1 ; 0x01
  3449 + f76: 9a 81 ldd r25, Y+2 ; 0x02
  3450 + f78: 89 2b or r24, r25
  3451 + f7a: f1 f0 breq .+60 ; 0xfb8 <HID_Device_USBTask+0x12a>
  3452 + f7c: 51 10 cpse r5, r1
  3453 + f7e: 04 c0 rjmp .+8 ; 0xf88 <HID_Device_USBTask+0xfa>
  3454 + f80: 01 11 cpse r16, r1
  3455 + f82: 02 c0 rjmp .+4 ; 0xf88 <HID_Device_USBTask+0xfa>
  3456 + f84: 10 ff sbrs r17, 0
  3457 + f86: 18 c0 rjmp .+48 ; 0xfb8 <HID_Device_USBTask+0x12a>
  3458 + {
  3459 + HIDInterfaceInfo->State.IdleMSRemaining = HIDInterfaceInfo->State.IdleCount;
  3460 + f88: f7 01 movw r30, r14
  3461 + f8a: 84 85 ldd r24, Z+12 ; 0x0c
  3462 + f8c: 95 85 ldd r25, Z+13 ; 0x0d
  3463 + f8e: 97 87 std Z+15, r25 ; 0x0f
  3464 + f90: 86 87 std Z+14, r24 ; 0x0e
  3465 + */
  3466 + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE;
  3467 + static inline void Endpoint_SelectEndpoint(const uint8_t Address)
  3468 + {
  3469 + #if !defined(CONTROL_ONLY_DEVICE)
  3470 + UENUM = (Address & ENDPOINT_EPNUM_MASK);
  3471 + f92: 81 81 ldd r24, Z+1 ; 0x01
  3472 + f94: 8f 70 andi r24, 0x0F ; 15
  3473 + f96: 80 93 e9 00 sts 0x00E9, r24 ; 0x8000e9 <__TEXT_REGION_LENGTH__+0x7e00e9>
  3474 +
  3475 + Endpoint_SelectEndpoint(HIDInterfaceInfo->Config.ReportINEndpoint.Address);
  3476 +
  3477 + if (ReportID)
  3478 + f9a: 8b 81 ldd r24, Y+3 ; 0x03
  3479 + f9c: 81 11 cpse r24, r1
  3480 + * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer.
  3481 + */
  3482 + static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE;
  3483 + static inline void Endpoint_Write_8(const uint8_t Data)
  3484 + {
  3485 + UEDATX = Data;
  3486 + f9e: 80 93 f1 00 sts 0x00F1, r24 ; 0x8000f1 <__TEXT_REGION_LENGTH__+0x7e00f1>
  3487 + Endpoint_Write_8(ReportID);
  3488 +
  3489 + Endpoint_Write_Stream_LE(ReportINData, ReportINSize, NULL);
  3490 + fa2: 69 81 ldd r22, Y+1 ; 0x01
  3491 + fa4: 7a 81 ldd r23, Y+2 ; 0x02
  3492 + fa6: 40 e0 ldi r20, 0x00 ; 0
  3493 + fa8: 50 e0 ldi r21, 0x00 ; 0
  3494 + faa: c6 01 movw r24, r12
  3495 + fac: 7e d9 rcall .-3332 ; 0x2aa <Endpoint_Write_Stream_LE>
  3496 + */
  3497 + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE;
  3498 + static inline void Endpoint_ClearIN(void)
  3499 + {
  3500 + #if !defined(CONTROL_ONLY_DEVICE)
  3501 + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON));
  3502 + fae: 80 91 e8 00 lds r24, 0x00E8 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3503 + fb2: 8e 77 andi r24, 0x7E ; 126
  3504 + fb4: 80 93 e8 00 sts 0x00E8, r24 ; 0x8000e8 <__TEXT_REGION_LENGTH__+0x7e00e8>
  3505 + fb8: 80 91 e4 00 lds r24, 0x00E4 ; 0x8000e4 <__TEXT_REGION_LENGTH__+0x7e00e4>
  3506 + fbc: 90 91 e5 00 lds r25, 0x00E5 ; 0x8000e5 <__TEXT_REGION_LENGTH__+0x7e00e5>
  3507 +
  3508 + Endpoint_ClearIN();
  3509 + }
  3510 +
  3511 + HIDInterfaceInfo->State.PrevFrameNum = USB_Device_GetFrameNumber();
  3512 + fc0: f7 01 movw r30, r14
  3513 + fc2: 93 87 std Z+11, r25 ; 0x0b
  3514 + fc4: 82 87 std Z+10, r24 ; 0x0a
  3515 + fc6: 0f b6 in r0, 0x3f ; 63
  3516 + fc8: f8 94 cli
  3517 + fca: 9e be out 0x3e, r9 ; 62
  3518 + fcc: 0f be out 0x3f, r0 ; 63
  3519 + fce: 8d be out 0x3d, r8 ; 61
  3520 + }
  3521 +}
  3522 + fd0: 0f b6 in r0, 0x3f ; 63
  3523 + fd2: f8 94 cli
  3524 + fd4: be be out 0x3e, r11 ; 62
  3525 + fd6: 0f be out 0x3f, r0 ; 63
  3526 + fd8: ad be out 0x3d, r10 ; 61
  3527 + fda: 0f 90 pop r0
  3528 + fdc: 0f 90 pop r0
  3529 + fde: 0f 90 pop r0
  3530 + fe0: df 91 pop r29
  3531 + fe2: cf 91 pop r28
  3532 + fe4: 1f 91 pop r17
  3533 + fe6: 0f 91 pop r16
  3534 + fe8: ff 90 pop r15
  3535 + fea: ef 90 pop r14
  3536 + fec: df 90 pop r13
  3537 + fee: cf 90 pop r12
  3538 + ff0: bf 90 pop r11
  3539 + ff2: af 90 pop r10
  3540 + ff4: 9f 90 pop r9
  3541 + ff6: 8f 90 pop r8
  3542 + ff8: 7f 90 pop r7
  3543 + ffa: 6f 90 pop r6
  3544 + ffc: 5f 90 pop r5
  3545 + ffe: 08 95 ret
  3546 +
  3547 +00001000 <memcmp>:
  3548 + 1000: fb 01 movw r30, r22
  3549 + 1002: dc 01 movw r26, r24
  3550 + 1004: 04 c0 rjmp .+8 ; 0x100e <memcmp+0xe>
  3551 + 1006: 8d 91 ld r24, X+
  3552 + 1008: 01 90 ld r0, Z+
  3553 + 100a: 80 19 sub r24, r0
  3554 + 100c: 21 f4 brne .+8 ; 0x1016 <memcmp+0x16>
  3555 + 100e: 41 50 subi r20, 0x01 ; 1
  3556 + 1010: 50 40 sbci r21, 0x00 ; 0
  3557 + 1012: c8 f7 brcc .-14 ; 0x1006 <memcmp+0x6>
  3558 + 1014: 88 1b sub r24, r24
  3559 + 1016: 99 0b sbc r25, r25
  3560 + 1018: 08 95 ret
  3561 +
  3562 +0000101a <memcpy>:
  3563 + 101a: fb 01 movw r30, r22
  3564 + 101c: dc 01 movw r26, r24
  3565 + 101e: 02 c0 rjmp .+4 ; 0x1024 <memcpy+0xa>
  3566 + 1020: 01 90 ld r0, Z+
  3567 + 1022: 0d 92 st X+, r0
  3568 + 1024: 41 50 subi r20, 0x01 ; 1
  3569 + 1026: 50 40 sbci r21, 0x00 ; 0
  3570 + 1028: d8 f7 brcc .-10 ; 0x1020 <memcpy+0x6>
  3571 + 102a: 08 95 ret
  3572 +
  3573 +0000102c <memset>:
  3574 + 102c: dc 01 movw r26, r24
  3575 + 102e: 01 c0 rjmp .+2 ; 0x1032 <memset+0x6>
  3576 + 1030: 6d 93 st X+, r22
  3577 + 1032: 41 50 subi r20, 0x01 ; 1
  3578 + 1034: 50 40 sbci r21, 0x00 ; 0
  3579 + 1036: e0 f7 brcc .-8 ; 0x1030 <memset+0x4>
  3580 + 1038: 08 95 ret
  3581 +
  3582 +0000103a <_exit>:
  3583 + 103a: f8 94 cli
  3584 +
  3585 +0000103c <__stop_program>:
  3586 + 103c: ff cf rjmp .-2 ; 0x103c <__stop_program>
... ...
src/question5/PolytechLille/Manette/Manette.map 0 → 100644
... ... @@ -0,0 +1,1506 @@
  1 +Archive member included to satisfy reference by file (symbol)
  2 +
  3 +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  4 + /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o (exit)
  5 +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  6 + obj/Manette.o (__do_copy_data)
  7 +/usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  8 + obj/Manette.o (__do_clear_bss)
  9 +/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy_P.o)
  10 + obj/RNDISClassDevice.o (memcpy_P)
  11 +/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strlen_P.o)
  12 + obj/CDCClassDevice.o (__strlen_P)
  13 +/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcmp.o)
  14 + obj/HIDClassDevice.o (memcmp)
  15 +/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o)
  16 + obj/HIDClassDevice.o (memcpy)
  17 +/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o)
  18 + obj/HIDClassDevice.o (memset)
  19 +/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eerd_byte.o)
  20 + obj/EndpointStream_AVR8.o (eeprom_read_byte)
  21 +/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eeupd_byte.o)
  22 + obj/EndpointStream_AVR8.o (eeprom_update_byte)
  23 +
  24 +Allocating common symbols
  25 +Common symbol size file
  26 +
  27 +USB_IsInitialized 0x1 obj/USBTask.o
  28 +USB_DeviceState 0x1 obj/USBTask.o
  29 +USB_Device_ConfigurationNumber
  30 + 0x1 obj/DeviceStandardReq.o
  31 +USB_Device_CurrentlySelfPowered
  32 + 0x1 obj/DeviceStandardReq.o
  33 +USB_ControlRequest 0x8 obj/USBTask.o
  34 +USB_Device_RemoteWakeupEnabled
  35 + 0x1 obj/DeviceStandardReq.o
  36 +
  37 +Discarded input sections
  38 +
  39 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  40 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  41 + .text 0x0000000000000000 0x0 obj/Manette.o
  42 + .text 0x0000000000000000 0x0 obj/Descriptors.o
  43 + .data 0x0000000000000000 0x0 obj/Descriptors.o
  44 + .bss 0x0000000000000000 0x0 obj/Descriptors.o
  45 + .text 0x0000000000000000 0x0 obj/HIDParser.o
  46 + .data 0x0000000000000000 0x0 obj/HIDParser.o
  47 + .bss 0x0000000000000000 0x0 obj/HIDParser.o
  48 + .text.USB_ProcessHIDReport
  49 + 0x0000000000000000 0x6c6 obj/HIDParser.o
  50 + .text.USB_GetHIDReportItemInfo
  51 + 0x0000000000000000 0xbc obj/HIDParser.o
  52 + .text.USB_SetHIDReportItemInfo
  53 + 0x0000000000000000 0xc0 obj/HIDParser.o
  54 + .text.USB_GetHIDReportSize
  55 + 0x0000000000000000 0x56 obj/HIDParser.o
  56 + .debug_info 0x0000000000000000 0x735 obj/HIDParser.o
  57 + .debug_abbrev 0x0000000000000000 0x218 obj/HIDParser.o
  58 + .debug_loc 0x0000000000000000 0xabf obj/HIDParser.o
  59 + .debug_aranges
  60 + 0x0000000000000000 0x38 obj/HIDParser.o
  61 + .debug_ranges 0x0000000000000000 0xd0 obj/HIDParser.o
  62 + .debug_line 0x0000000000000000 0x581 obj/HIDParser.o
  63 + .debug_str 0x0000000000000000 0x6c9 obj/HIDParser.o
  64 + .comment 0x0000000000000000 0x12 obj/HIDParser.o
  65 + .debug_frame 0x0000000000000000 0x11c obj/HIDParser.o
  66 + .text 0x0000000000000000 0x0 obj/Device_AVR8.o
  67 + .data 0x0000000000000000 0x0 obj/Device_AVR8.o
  68 + .bss 0x0000000000000000 0x0 obj/Device_AVR8.o
  69 + .text.USB_Device_SendRemoteWakeup
  70 + 0x0000000000000000 0x2c obj/Device_AVR8.o
  71 + .debug_info 0x0000000000000000 0xce obj/Device_AVR8.o
  72 + .debug_abbrev 0x0000000000000000 0x7e obj/Device_AVR8.o
  73 + .debug_aranges
  74 + 0x0000000000000000 0x20 obj/Device_AVR8.o
  75 + .debug_ranges 0x0000000000000000 0x10 obj/Device_AVR8.o
  76 + .debug_line 0x0000000000000000 0x146 obj/Device_AVR8.o
  77 + .debug_str 0x0000000000000000 0x205 obj/Device_AVR8.o
  78 + .comment 0x0000000000000000 0x12 obj/Device_AVR8.o
  79 + .debug_frame 0x0000000000000000 0x24 obj/Device_AVR8.o
  80 + .text 0x0000000000000000 0x0 obj/EndpointStream_AVR8.o
  81 + .data 0x0000000000000000 0x0 obj/EndpointStream_AVR8.o
  82 + .bss 0x0000000000000000 0x0 obj/EndpointStream_AVR8.o
  83 + .text.Endpoint_Discard_Stream
  84 + 0x0000000000000000 0x82 obj/EndpointStream_AVR8.o
  85 + .text.Endpoint_Null_Stream
  86 + 0x0000000000000000 0x82 obj/EndpointStream_AVR8.o
  87 + .text.Endpoint_Write_Stream_BE
  88 + 0x0000000000000000 0xa4 obj/EndpointStream_AVR8.o
  89 + .text.Endpoint_Read_Stream_LE
  90 + 0x0000000000000000 0x9a obj/EndpointStream_AVR8.o
  91 + .text.Endpoint_Read_Stream_BE
  92 + 0x0000000000000000 0xa4 obj/EndpointStream_AVR8.o
  93 + .text.Endpoint_Write_PStream_LE
  94 + 0x0000000000000000 0x9e obj/EndpointStream_AVR8.o
  95 + .text.Endpoint_Write_PStream_BE
  96 + 0x0000000000000000 0xa6 obj/EndpointStream_AVR8.o
  97 + .text.Endpoint_Write_EStream_LE
  98 + 0x0000000000000000 0xa0 obj/EndpointStream_AVR8.o
  99 + .text.Endpoint_Write_EStream_BE
  100 + 0x0000000000000000 0xa8 obj/EndpointStream_AVR8.o
  101 + .text.Endpoint_Read_EStream_LE
  102 + 0x0000000000000000 0xa0 obj/EndpointStream_AVR8.o
  103 + .text.Endpoint_Read_EStream_BE
  104 + 0x0000000000000000 0xa8 obj/EndpointStream_AVR8.o
  105 + .text.Endpoint_Write_Control_Stream_BE
  106 + 0x0000000000000000 0xd0 obj/EndpointStream_AVR8.o
  107 + .text.Endpoint_Read_Control_Stream_BE
  108 + 0x0000000000000000 0x82 obj/EndpointStream_AVR8.o
  109 + .text.Endpoint_Write_Control_PStream_BE
  110 + 0x0000000000000000 0xce obj/EndpointStream_AVR8.o
  111 + .text.Endpoint_Write_Control_EStream_LE
  112 + 0x0000000000000000 0xf4 obj/EndpointStream_AVR8.o
  113 + .text.Endpoint_Write_Control_EStream_BE
  114 + 0x0000000000000000 0x100 obj/EndpointStream_AVR8.o
  115 + .text.Endpoint_Read_Control_EStream_LE
  116 + 0x0000000000000000 0x94 obj/EndpointStream_AVR8.o
  117 + .text.Endpoint_Read_Control_EStream_BE
  118 + 0x0000000000000000 0x92 obj/EndpointStream_AVR8.o
  119 + .text 0x0000000000000000 0x0 obj/Endpoint_AVR8.o
  120 + .data 0x0000000000000000 0x0 obj/Endpoint_AVR8.o
  121 + .bss 0x0000000000000000 0x0 obj/Endpoint_AVR8.o
  122 + .text.Endpoint_ClearEndpoints
  123 + 0x0000000000000000 0x28 obj/Endpoint_AVR8.o
  124 + .text 0x0000000000000000 0x0 obj/Host_AVR8.o
  125 + .data 0x0000000000000000 0x0 obj/Host_AVR8.o
  126 + .bss 0x0000000000000000 0x0 obj/Host_AVR8.o
  127 + .debug_info 0x0000000000000000 0x52 obj/Host_AVR8.o
  128 + .debug_abbrev 0x0000000000000000 0x24 obj/Host_AVR8.o
  129 + .debug_aranges
  130 + 0x0000000000000000 0x18 obj/Host_AVR8.o
  131 + .debug_line 0x0000000000000000 0x1a obj/Host_AVR8.o
  132 + .debug_str 0x0000000000000000 0x1a4 obj/Host_AVR8.o
  133 + .comment 0x0000000000000000 0x12 obj/Host_AVR8.o
  134 + .text 0x0000000000000000 0x0 obj/PipeStream_AVR8.o
  135 + .data 0x0000000000000000 0x0 obj/PipeStream_AVR8.o
  136 + .bss 0x0000000000000000 0x0 obj/PipeStream_AVR8.o
  137 + .debug_info 0x0000000000000000 0x52 obj/PipeStream_AVR8.o
  138 + .debug_abbrev 0x0000000000000000 0x24 obj/PipeStream_AVR8.o
  139 + .debug_aranges
  140 + 0x0000000000000000 0x18 obj/PipeStream_AVR8.o
  141 + .debug_line 0x0000000000000000 0x1a obj/PipeStream_AVR8.o
  142 + .debug_str 0x0000000000000000 0x1aa obj/PipeStream_AVR8.o
  143 + .comment 0x0000000000000000 0x12 obj/PipeStream_AVR8.o
  144 + .text 0x0000000000000000 0x0 obj/Pipe_AVR8.o
  145 + .data 0x0000000000000000 0x0 obj/Pipe_AVR8.o
  146 + .bss 0x0000000000000000 0x0 obj/Pipe_AVR8.o
  147 + .debug_info 0x0000000000000000 0x52 obj/Pipe_AVR8.o
  148 + .debug_abbrev 0x0000000000000000 0x24 obj/Pipe_AVR8.o
  149 + .debug_aranges
  150 + 0x0000000000000000 0x18 obj/Pipe_AVR8.o
  151 + .debug_line 0x0000000000000000 0x1a obj/Pipe_AVR8.o
  152 + .debug_str 0x0000000000000000 0x1a4 obj/Pipe_AVR8.o
  153 + .comment 0x0000000000000000 0x12 obj/Pipe_AVR8.o
  154 + .text 0x0000000000000000 0x0 obj/USBController_AVR8.o
  155 + .data 0x0000000000000000 0x0 obj/USBController_AVR8.o
  156 + .bss 0x0000000000000000 0x0 obj/USBController_AVR8.o
  157 + .text.USB_Disable
  158 + 0x0000000000000000 0x34 obj/USBController_AVR8.o
  159 + .text 0x0000000000000000 0x0 obj/USBInterrupt_AVR8.o
  160 + .data 0x0000000000000000 0x0 obj/USBInterrupt_AVR8.o
  161 + .bss 0x0000000000000000 0x0 obj/USBInterrupt_AVR8.o
  162 + .text 0x0000000000000000 0x0 obj/ConfigDescriptors.o
  163 + .data 0x0000000000000000 0x0 obj/ConfigDescriptors.o
  164 + .bss 0x0000000000000000 0x0 obj/ConfigDescriptors.o
  165 + .text.USB_GetNextDescriptor
  166 + 0x0000000000000000 0x3c obj/ConfigDescriptors.o
  167 + .text.USB_GetNextDescriptorOfType
  168 + 0x0000000000000000 0x38 obj/ConfigDescriptors.o
  169 + .text.USB_GetNextDescriptorOfTypeBefore
  170 + 0x0000000000000000 0x46 obj/ConfigDescriptors.o
  171 + .text.USB_GetNextDescriptorOfTypeAfter
  172 + 0x0000000000000000 0x3e obj/ConfigDescriptors.o
  173 + .text.USB_GetNextDescriptorComp
  174 + 0x0000000000000000 0x66 obj/ConfigDescriptors.o
  175 + .debug_info 0x0000000000000000 0x3d1 obj/ConfigDescriptors.o
  176 + .debug_abbrev 0x0000000000000000 0x183 obj/ConfigDescriptors.o
  177 + .debug_loc 0x0000000000000000 0x59f obj/ConfigDescriptors.o
  178 + .debug_aranges
  179 + 0x0000000000000000 0x40 obj/ConfigDescriptors.o
  180 + .debug_ranges 0x0000000000000000 0x30 obj/ConfigDescriptors.o
  181 + .debug_line 0x0000000000000000 0x210 obj/ConfigDescriptors.o
  182 + .debug_str 0x0000000000000000 0x3ed obj/ConfigDescriptors.o
  183 + .comment 0x0000000000000000 0x12 obj/ConfigDescriptors.o
  184 + .debug_frame 0x0000000000000000 0xfc obj/ConfigDescriptors.o
  185 + .text 0x0000000000000000 0x0 obj/DeviceStandardReq.o
  186 + .data 0x0000000000000000 0x0 obj/DeviceStandardReq.o
  187 + .bss 0x0000000000000000 0x0 obj/DeviceStandardReq.o
  188 + .text 0x0000000000000000 0x0 obj/Events.o
  189 + .data 0x0000000000000000 0x0 obj/Events.o
  190 + .bss 0x0000000000000000 0x0 obj/Events.o
  191 + .text 0x0000000000000000 0x0 obj/HostStandardReq.o
  192 + .data 0x0000000000000000 0x0 obj/HostStandardReq.o
  193 + .bss 0x0000000000000000 0x0 obj/HostStandardReq.o
  194 + .debug_info 0x0000000000000000 0x52 obj/HostStandardReq.o
  195 + .debug_abbrev 0x0000000000000000 0x24 obj/HostStandardReq.o
  196 + .debug_aranges
  197 + 0x0000000000000000 0x18 obj/HostStandardReq.o
  198 + .debug_line 0x0000000000000000 0x1a obj/HostStandardReq.o
  199 + .debug_str 0x0000000000000000 0x1a5 obj/HostStandardReq.o
  200 + .comment 0x0000000000000000 0x12 obj/HostStandardReq.o
  201 + .text 0x0000000000000000 0x0 obj/USBTask.o
  202 + .data 0x0000000000000000 0x0 obj/USBTask.o
  203 + .bss 0x0000000000000000 0x0 obj/USBTask.o
  204 + .text 0x0000000000000000 0x0 obj/AudioClassDevice.o
  205 + .data 0x0000000000000000 0x0 obj/AudioClassDevice.o
  206 + .bss 0x0000000000000000 0x0 obj/AudioClassDevice.o
  207 + .text.Audio_Device_ConfigureEndpoints
  208 + 0x0000000000000000 0x32 obj/AudioClassDevice.o
  209 + .text.Audio_Device_Event_Stub
  210 + 0x0000000000000000 0x2 obj/AudioClassDevice.o
  211 + .text.Audio_Device_ProcessControlRequest
  212 + 0x0000000000000000 0x2e4 obj/AudioClassDevice.o
  213 + .debug_info 0x0000000000000000 0x847 obj/AudioClassDevice.o
  214 + .debug_abbrev 0x0000000000000000 0x1e4 obj/AudioClassDevice.o
  215 + .debug_loc 0x0000000000000000 0x37c obj/AudioClassDevice.o
  216 + .debug_aranges
  217 + 0x0000000000000000 0x30 obj/AudioClassDevice.o
  218 + .debug_ranges 0x0000000000000000 0x20 obj/AudioClassDevice.o
  219 + .debug_line 0x0000000000000000 0x4b3 obj/AudioClassDevice.o
  220 + .debug_str 0x0000000000000000 0x6c1 obj/AudioClassDevice.o
  221 + .comment 0x0000000000000000 0x12 obj/AudioClassDevice.o
  222 + .debug_frame 0x0000000000000000 0xa8 obj/AudioClassDevice.o
  223 + .text 0x0000000000000000 0x0 obj/CDCClassDevice.o
  224 + .data 0x0000000000000000 0x0 obj/CDCClassDevice.o
  225 + .bss 0x0000000000000000 0x0 obj/CDCClassDevice.o
  226 + .text.CDC_Device_ConfigureEndpoints
  227 + 0x0000000000000000 0x50 obj/CDCClassDevice.o
  228 + .text.CDC_Device_SendString
  229 + 0x0000000000000000 0x42 obj/CDCClassDevice.o
  230 + .text.CDC_Device_SendString_P
  231 + 0x0000000000000000 0x52 obj/CDCClassDevice.o
  232 + .text.CDC_Device_SendData
  233 + 0x0000000000000000 0x34 obj/CDCClassDevice.o
  234 + .text.CDC_Device_SendData_P
  235 + 0x0000000000000000 0x34 obj/CDCClassDevice.o
  236 + .text.CDC_Device_SendByte
  237 + 0x0000000000000000 0x58 obj/CDCClassDevice.o
  238 + .text.CDC_Device_putchar
  239 + 0x0000000000000000 0x22 obj/CDCClassDevice.o
  240 + .text.CDC_Device_Flush
  241 + 0x0000000000000000 0x5e obj/CDCClassDevice.o
  242 + .text.CDC_Device_USBTask
  243 + 0x0000000000000000 0x2e obj/CDCClassDevice.o
  244 + .text.CDC_Device_BytesReceived
  245 + 0x0000000000000000 0x5a obj/CDCClassDevice.o
  246 + .text.CDC_Device_ReceiveByte
  247 + 0x0000000000000000 0x6a obj/CDCClassDevice.o
  248 + .text.CDC_Device_getchar
  249 + 0x0000000000000000 0x14 obj/CDCClassDevice.o
  250 + .text.CDC_Device_getchar_Blocking
  251 + 0x0000000000000000 0x32 obj/CDCClassDevice.o
  252 + .rodata 0x0000000000000000 0x8 obj/CDCClassDevice.o
  253 + .text.CDC_Device_SendControlLineStateChange
  254 + 0x0000000000000000 0x8e obj/CDCClassDevice.o
  255 + .text.CDC_Device_CreateStream
  256 + 0x0000000000000000 0x26 obj/CDCClassDevice.o
  257 + .text.CDC_Device_CreateBlockingStream
  258 + 0x0000000000000000 0x26 obj/CDCClassDevice.o
  259 + .text.CDC_Device_Event_Stub
  260 + 0x0000000000000000 0x2 obj/CDCClassDevice.o
  261 + .text.CDC_Device_ProcessControlRequest
  262 + 0x0000000000000000 0x16e obj/CDCClassDevice.o
  263 + .debug_info 0x0000000000000000 0xff7 obj/CDCClassDevice.o
  264 + .debug_abbrev 0x0000000000000000 0x40b obj/CDCClassDevice.o
  265 + .debug_loc 0x0000000000000000 0xa76 obj/CDCClassDevice.o
  266 + .debug_aranges
  267 + 0x0000000000000000 0xa8 obj/CDCClassDevice.o
  268 + .debug_ranges 0x0000000000000000 0x98 obj/CDCClassDevice.o
  269 + .debug_line 0x0000000000000000 0x947 obj/CDCClassDevice.o
  270 + .debug_str 0x0000000000000000 0xa7e obj/CDCClassDevice.o
  271 + .comment 0x0000000000000000 0x12 obj/CDCClassDevice.o
  272 + .debug_frame 0x0000000000000000 0x198 obj/CDCClassDevice.o
  273 + .text 0x0000000000000000 0x0 obj/HIDClassDevice.o
  274 + .data 0x0000000000000000 0x0 obj/HIDClassDevice.o
  275 + .bss 0x0000000000000000 0x0 obj/HIDClassDevice.o
  276 + .text 0x0000000000000000 0x0 obj/MassStorageClassDevice.o
  277 + .data 0x0000000000000000 0x0 obj/MassStorageClassDevice.o
  278 + .bss 0x0000000000000000 0x0 obj/MassStorageClassDevice.o
  279 + .text.MS_Device_ProcessControlRequest
  280 + 0x0000000000000000 0x86 obj/MassStorageClassDevice.o
  281 + .text.MS_Device_ConfigureEndpoints
  282 + 0x0000000000000000 0x3e obj/MassStorageClassDevice.o
  283 + .text.MS_Device_USBTask
  284 + 0x0000000000000000 0x23e obj/MassStorageClassDevice.o
  285 + .debug_info 0x0000000000000000 0x918 obj/MassStorageClassDevice.o
  286 + .debug_abbrev 0x0000000000000000 0x26b obj/MassStorageClassDevice.o
  287 + .debug_loc 0x0000000000000000 0x2ac obj/MassStorageClassDevice.o
  288 + .debug_aranges
  289 + 0x0000000000000000 0x30 obj/MassStorageClassDevice.o
  290 + .debug_ranges 0x0000000000000000 0x20 obj/MassStorageClassDevice.o
  291 + .debug_line 0x0000000000000000 0x52d obj/MassStorageClassDevice.o
  292 + .debug_str 0x0000000000000000 0x819 obj/MassStorageClassDevice.o
  293 + .comment 0x0000000000000000 0x12 obj/MassStorageClassDevice.o
  294 + .debug_frame 0x0000000000000000 0x80 obj/MassStorageClassDevice.o
  295 + .text 0x0000000000000000 0x0 obj/MIDIClassDevice.o
  296 + .data 0x0000000000000000 0x0 obj/MIDIClassDevice.o
  297 + .bss 0x0000000000000000 0x0 obj/MIDIClassDevice.o
  298 + .text.MIDI_Device_ConfigureEndpoints
  299 + 0x0000000000000000 0x32 obj/MIDIClassDevice.o
  300 + .text.MIDI_Device_SendEventPacket
  301 + 0x0000000000000000 0x46 obj/MIDIClassDevice.o
  302 + .text.MIDI_Device_Flush
  303 + 0x0000000000000000 0x38 obj/MIDIClassDevice.o
  304 + .text.MIDI_Device_USBTask
  305 + 0x0000000000000000 0x22 obj/MIDIClassDevice.o
  306 + .text.MIDI_Device_ReceiveEventPacket
  307 + 0x0000000000000000 0x4a obj/MIDIClassDevice.o
  308 + .debug_info 0x0000000000000000 0x5da obj/MIDIClassDevice.o
  309 + .debug_abbrev 0x0000000000000000 0x217 obj/MIDIClassDevice.o
  310 + .debug_loc 0x0000000000000000 0x314 obj/MIDIClassDevice.o
  311 + .debug_aranges
  312 + 0x0000000000000000 0x40 obj/MIDIClassDevice.o
  313 + .debug_ranges 0x0000000000000000 0x30 obj/MIDIClassDevice.o
  314 + .debug_line 0x0000000000000000 0x413 obj/MIDIClassDevice.o
  315 + .debug_str 0x0000000000000000 0x682 obj/MIDIClassDevice.o
  316 + .comment 0x0000000000000000 0x12 obj/MIDIClassDevice.o
  317 + .debug_frame 0x0000000000000000 0x70 obj/MIDIClassDevice.o
  318 + .text 0x0000000000000000 0x0 obj/PrinterClassDevice.o
  319 + .data 0x0000000000000000 0x0 obj/PrinterClassDevice.o
  320 + .bss 0x0000000000000000 0x0 obj/PrinterClassDevice.o
  321 + .text.PRNT_Device_ConfigureEndpoints
  322 + 0x0000000000000000 0x38 obj/PrinterClassDevice.o
  323 + .text.PRNT_Device_SendString
  324 + 0x0000000000000000 0x32 obj/PrinterClassDevice.o
  325 + .text.PRNT_Device_SendData
  326 + 0x0000000000000000 0x24 obj/PrinterClassDevice.o
  327 + .text.PRNT_Device_SendByte
  328 + 0x0000000000000000 0x40 obj/PrinterClassDevice.o
  329 + .text.PRNT_Device_putchar
  330 + 0x0000000000000000 0x22 obj/PrinterClassDevice.o
  331 + .text.PRNT_Device_Flush
  332 + 0x0000000000000000 0x4e obj/PrinterClassDevice.o
  333 + .text.PRNT_Device_USBTask
  334 + 0x0000000000000000 0x9c obj/PrinterClassDevice.o
  335 + .text.PRNT_Device_BytesReceived
  336 + 0x0000000000000000 0x4a obj/PrinterClassDevice.o
  337 + .text.PRNT_Device_ReceiveByte
  338 + 0x0000000000000000 0x5a obj/PrinterClassDevice.o
  339 + .text.PRNT_Device_getchar
  340 + 0x0000000000000000 0x14 obj/PrinterClassDevice.o
  341 + .text.PRNT_Device_getchar_Blocking
  342 + 0x0000000000000000 0x32 obj/PrinterClassDevice.o
  343 + .text.PRNT_Device_CreateStream
  344 + 0x0000000000000000 0x26 obj/PrinterClassDevice.o
  345 + .text.PRNT_Device_CreateBlockingStream
  346 + 0x0000000000000000 0x26 obj/PrinterClassDevice.o
  347 + .text.PRNT_Device_Event_Stub
  348 + 0x0000000000000000 0x2 obj/PrinterClassDevice.o
  349 + .text.PRNT_Device_ProcessControlRequest
  350 + 0x0000000000000000 0xdc obj/PrinterClassDevice.o
  351 + .debug_info 0x0000000000000000 0xcb8 obj/PrinterClassDevice.o
  352 + .debug_abbrev 0x0000000000000000 0x315 obj/PrinterClassDevice.o
  353 + .debug_loc 0x0000000000000000 0x84e obj/PrinterClassDevice.o
  354 + .debug_aranges
  355 + 0x0000000000000000 0x90 obj/PrinterClassDevice.o
  356 + .debug_ranges 0x0000000000000000 0x80 obj/PrinterClassDevice.o
  357 + .debug_line 0x0000000000000000 0x739 obj/PrinterClassDevice.o
  358 + .debug_str 0x0000000000000000 0x950 obj/PrinterClassDevice.o
  359 + .comment 0x0000000000000000 0x12 obj/PrinterClassDevice.o
  360 + .debug_frame 0x0000000000000000 0x13c obj/PrinterClassDevice.o
  361 + .text 0x0000000000000000 0x0 obj/RNDISClassDevice.o
  362 + .data 0x0000000000000000 0x0 obj/RNDISClassDevice.o
  363 + .bss 0x0000000000000000 0x0 obj/RNDISClassDevice.o
  364 + .text.RNDIS_Device_ProcessControlRequest
  365 + 0x0000000000000000 0x506 obj/RNDISClassDevice.o
  366 + .text.RNDIS_Device_ConfigureEndpoints
  367 + 0x0000000000000000 0x64 obj/RNDISClassDevice.o
  368 + .rodata 0x0000000000000000 0x8 obj/RNDISClassDevice.o
  369 + .text.RNDIS_Device_USBTask
  370 + 0x0000000000000000 0x80 obj/RNDISClassDevice.o
  371 + .text.RNDIS_Device_IsPacketReceived
  372 + 0x0000000000000000 0x28 obj/RNDISClassDevice.o
  373 + .text.RNDIS_Device_ReadPacket
  374 + 0x0000000000000000 0xb6 obj/RNDISClassDevice.o
  375 + .text.RNDIS_Device_SendPacket
  376 + 0x0000000000000000 0xd4 obj/RNDISClassDevice.o
  377 + .progmem.data 0x0000000000000000 0x6c obj/RNDISClassDevice.o
  378 + .debug_info 0x0000000000000000 0x10d8 obj/RNDISClassDevice.o
  379 + .debug_abbrev 0x0000000000000000 0x351 obj/RNDISClassDevice.o
  380 + .debug_loc 0x0000000000000000 0xdde obj/RNDISClassDevice.o
  381 + .debug_aranges
  382 + 0x0000000000000000 0x48 obj/RNDISClassDevice.o
  383 + .debug_ranges 0x0000000000000000 0x88 obj/RNDISClassDevice.o
  384 + .debug_line 0x0000000000000000 0x71f obj/RNDISClassDevice.o
  385 + .debug_str 0x0000000000000000 0xd7c obj/RNDISClassDevice.o
  386 + .comment 0x0000000000000000 0x12 obj/RNDISClassDevice.o
  387 + .debug_frame 0x0000000000000000 0x10c obj/RNDISClassDevice.o
  388 + .text 0x0000000000000000 0x0 obj/AndroidAccessoryClassHost.o
  389 + .data 0x0000000000000000 0x0 obj/AndroidAccessoryClassHost.o
  390 + .bss 0x0000000000000000 0x0 obj/AndroidAccessoryClassHost.o
  391 + .debug_info 0x0000000000000000 0x52 obj/AndroidAccessoryClassHost.o
  392 + .debug_abbrev 0x0000000000000000 0x24 obj/AndroidAccessoryClassHost.o
  393 + .debug_aranges
  394 + 0x0000000000000000 0x18 obj/AndroidAccessoryClassHost.o
  395 + .debug_line 0x0000000000000000 0x1a obj/AndroidAccessoryClassHost.o
  396 + .debug_str 0x0000000000000000 0x1b5 obj/AndroidAccessoryClassHost.o
  397 + .comment 0x0000000000000000 0x12 obj/AndroidAccessoryClassHost.o
  398 + .text 0x0000000000000000 0x0 obj/AudioClassHost.o
  399 + .data 0x0000000000000000 0x0 obj/AudioClassHost.o
  400 + .bss 0x0000000000000000 0x0 obj/AudioClassHost.o
  401 + .debug_info 0x0000000000000000 0x52 obj/AudioClassHost.o
  402 + .debug_abbrev 0x0000000000000000 0x24 obj/AudioClassHost.o
  403 + .debug_aranges
  404 + 0x0000000000000000 0x18 obj/AudioClassHost.o
  405 + .debug_line 0x0000000000000000 0x1a obj/AudioClassHost.o
  406 + .debug_str 0x0000000000000000 0x1aa obj/AudioClassHost.o
  407 + .comment 0x0000000000000000 0x12 obj/AudioClassHost.o
  408 + .text 0x0000000000000000 0x0 obj/CDCClassHost.o
  409 + .data 0x0000000000000000 0x0 obj/CDCClassHost.o
  410 + .bss 0x0000000000000000 0x0 obj/CDCClassHost.o
  411 + .debug_info 0x0000000000000000 0x52 obj/CDCClassHost.o
  412 + .debug_abbrev 0x0000000000000000 0x24 obj/CDCClassHost.o
  413 + .debug_aranges
  414 + 0x0000000000000000 0x18 obj/CDCClassHost.o
  415 + .debug_line 0x0000000000000000 0x1a obj/CDCClassHost.o
  416 + .debug_str 0x0000000000000000 0x1a8 obj/CDCClassHost.o
  417 + .comment 0x0000000000000000 0x12 obj/CDCClassHost.o
  418 + .text 0x0000000000000000 0x0 obj/HIDClassHost.o
  419 + .data 0x0000000000000000 0x0 obj/HIDClassHost.o
  420 + .bss 0x0000000000000000 0x0 obj/HIDClassHost.o
  421 + .debug_info 0x0000000000000000 0x52 obj/HIDClassHost.o
  422 + .debug_abbrev 0x0000000000000000 0x24 obj/HIDClassHost.o
  423 + .debug_aranges
  424 + 0x0000000000000000 0x18 obj/HIDClassHost.o
  425 + .debug_line 0x0000000000000000 0x1a obj/HIDClassHost.o
  426 + .debug_str 0x0000000000000000 0x1a8 obj/HIDClassHost.o
  427 + .comment 0x0000000000000000 0x12 obj/HIDClassHost.o
  428 + .text 0x0000000000000000 0x0 obj/MassStorageClassHost.o
  429 + .data 0x0000000000000000 0x0 obj/MassStorageClassHost.o
  430 + .bss 0x0000000000000000 0x0 obj/MassStorageClassHost.o
  431 + .debug_info 0x0000000000000000 0x52 obj/MassStorageClassHost.o
  432 + .debug_abbrev 0x0000000000000000 0x24 obj/MassStorageClassHost.o
  433 + .debug_aranges
  434 + 0x0000000000000000 0x18 obj/MassStorageClassHost.o
  435 + .debug_line 0x0000000000000000 0x1a obj/MassStorageClassHost.o
  436 + .debug_str 0x0000000000000000 0x1b0 obj/MassStorageClassHost.o
  437 + .comment 0x0000000000000000 0x12 obj/MassStorageClassHost.o
  438 + .text 0x0000000000000000 0x0 obj/MIDIClassHost.o
  439 + .data 0x0000000000000000 0x0 obj/MIDIClassHost.o
  440 + .bss 0x0000000000000000 0x0 obj/MIDIClassHost.o
  441 + .debug_info 0x0000000000000000 0x52 obj/MIDIClassHost.o
  442 + .debug_abbrev 0x0000000000000000 0x24 obj/MIDIClassHost.o
  443 + .debug_aranges
  444 + 0x0000000000000000 0x18 obj/MIDIClassHost.o
  445 + .debug_line 0x0000000000000000 0x1a obj/MIDIClassHost.o
  446 + .debug_str 0x0000000000000000 0x1a9 obj/MIDIClassHost.o
  447 + .comment 0x0000000000000000 0x12 obj/MIDIClassHost.o
  448 + .text 0x0000000000000000 0x0 obj/PrinterClassHost.o
  449 + .data 0x0000000000000000 0x0 obj/PrinterClassHost.o
  450 + .bss 0x0000000000000000 0x0 obj/PrinterClassHost.o
  451 + .debug_info 0x0000000000000000 0x52 obj/PrinterClassHost.o
  452 + .debug_abbrev 0x0000000000000000 0x24 obj/PrinterClassHost.o
  453 + .debug_aranges
  454 + 0x0000000000000000 0x18 obj/PrinterClassHost.o
  455 + .debug_line 0x0000000000000000 0x1a obj/PrinterClassHost.o
  456 + .debug_str 0x0000000000000000 0x1ac obj/PrinterClassHost.o
  457 + .comment 0x0000000000000000 0x12 obj/PrinterClassHost.o
  458 + .text 0x0000000000000000 0x0 obj/RNDISClassHost.o
  459 + .data 0x0000000000000000 0x0 obj/RNDISClassHost.o
  460 + .bss 0x0000000000000000 0x0 obj/RNDISClassHost.o
  461 + .debug_info 0x0000000000000000 0x52 obj/RNDISClassHost.o
  462 + .debug_abbrev 0x0000000000000000 0x24 obj/RNDISClassHost.o
  463 + .debug_aranges
  464 + 0x0000000000000000 0x18 obj/RNDISClassHost.o
  465 + .debug_line 0x0000000000000000 0x1a obj/RNDISClassHost.o
  466 + .debug_str 0x0000000000000000 0x1aa obj/RNDISClassHost.o
  467 + .comment 0x0000000000000000 0x12 obj/RNDISClassHost.o
  468 + .text 0x0000000000000000 0x0 obj/StillImageClassHost.o
  469 + .data 0x0000000000000000 0x0 obj/StillImageClassHost.o
  470 + .bss 0x0000000000000000 0x0 obj/StillImageClassHost.o
  471 + .debug_info 0x0000000000000000 0x52 obj/StillImageClassHost.o
  472 + .debug_abbrev 0x0000000000000000 0x24 obj/StillImageClassHost.o
  473 + .debug_aranges
  474 + 0x0000000000000000 0x18 obj/StillImageClassHost.o
  475 + .debug_line 0x0000000000000000 0x1a obj/StillImageClassHost.o
  476 + .debug_str 0x0000000000000000 0x1af obj/StillImageClassHost.o
  477 + .comment 0x0000000000000000 0x12 obj/StillImageClassHost.o
  478 + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  479 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  480 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  481 + .text.libgcc.mul
  482 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  483 + .text.libgcc.div
  484 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  485 + .text.libgcc 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  486 + .text.libgcc.prologue
  487 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  488 + .text.libgcc.builtins
  489 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  490 + .text.libgcc.fmul
  491 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  492 + .text.libgcc.fixed
  493 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  494 + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  495 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  496 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  497 + .text.libgcc.mul
  498 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  499 + .text.libgcc.div
  500 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  501 + .text.libgcc 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  502 + .text.libgcc.prologue
  503 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  504 + .text.libgcc.builtins
  505 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  506 + .text.libgcc.fmul
  507 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  508 + .text.libgcc.fixed
  509 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  510 + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  511 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  512 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  513 + .text.libgcc.mul
  514 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  515 + .text.libgcc.div
  516 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  517 + .text.libgcc 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  518 + .text.libgcc.prologue
  519 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  520 + .text.libgcc.builtins
  521 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  522 + .text.libgcc.fmul
  523 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  524 + .text.libgcc.fixed
  525 + 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  526 + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy_P.o)
  527 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy_P.o)
  528 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy_P.o)
  529 + .text.avr-libc
  530 + 0x0000000000000000 0x12 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy_P.o)
  531 + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strlen_P.o)
  532 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strlen_P.o)
  533 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strlen_P.o)
  534 + .text.avr-libc
  535 + 0x0000000000000000 0x12 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strlen_P.o)
  536 + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcmp.o)
  537 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcmp.o)
  538 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcmp.o)
  539 + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o)
  540 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o)
  541 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o)
  542 + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o)
  543 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o)
  544 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o)
  545 + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eerd_byte.o)
  546 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eerd_byte.o)
  547 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eerd_byte.o)
  548 + .text.avr-libc
  549 + 0x0000000000000000 0x10 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eerd_byte.o)
  550 + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eeupd_byte.o)
  551 + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eeupd_byte.o)
  552 + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eeupd_byte.o)
  553 + .text.avr-libc
  554 + 0x0000000000000000 0x24 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eeupd_byte.o)
  555 +
  556 +Memory Configuration
  557 +
  558 +Name Origin Length Attributes
  559 +text 0x0000000000000000 0x0000000000020000 xr
  560 +data 0x0000000000800060 0x000000000000ffa0 rw !x
  561 +eeprom 0x0000000000810000 0x0000000000010000 rw !x
  562 +fuse 0x0000000000820000 0x0000000000000003 rw !x
  563 +lock 0x0000000000830000 0x0000000000000400 rw !x
  564 +signature 0x0000000000840000 0x0000000000000400 rw !x
  565 +user_signatures 0x0000000000850000 0x0000000000000400 rw !x
  566 +*default* 0x0000000000000000 0xffffffffffffffff
  567 +
  568 +Linker script and memory map
  569 +
  570 +Address of section .data set to 0x800100
  571 +LOAD /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  572 +LOAD obj/Manette.o
  573 +LOAD obj/Descriptors.o
  574 +LOAD obj/HIDParser.o
  575 +LOAD obj/Device_AVR8.o
  576 +LOAD obj/EndpointStream_AVR8.o
  577 +LOAD obj/Endpoint_AVR8.o
  578 +LOAD obj/Host_AVR8.o
  579 +LOAD obj/PipeStream_AVR8.o
  580 +LOAD obj/Pipe_AVR8.o
  581 +LOAD obj/USBController_AVR8.o
  582 +LOAD obj/USBInterrupt_AVR8.o
  583 +LOAD obj/ConfigDescriptors.o
  584 +LOAD obj/DeviceStandardReq.o
  585 +LOAD obj/Events.o
  586 +LOAD obj/HostStandardReq.o
  587 +LOAD obj/USBTask.o
  588 +LOAD obj/AudioClassDevice.o
  589 +LOAD obj/CDCClassDevice.o
  590 +LOAD obj/HIDClassDevice.o
  591 +LOAD obj/MassStorageClassDevice.o
  592 +LOAD obj/MIDIClassDevice.o
  593 +LOAD obj/PrinterClassDevice.o
  594 +LOAD obj/RNDISClassDevice.o
  595 +LOAD obj/AndroidAccessoryClassHost.o
  596 +LOAD obj/AudioClassHost.o
  597 +LOAD obj/CDCClassHost.o
  598 +LOAD obj/HIDClassHost.o
  599 +LOAD obj/MassStorageClassHost.o
  600 +LOAD obj/MIDIClassHost.o
  601 +LOAD obj/PrinterClassHost.o
  602 +LOAD obj/RNDISClassHost.o
  603 +LOAD obj/StillImageClassHost.o
  604 +LOAD /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a
  605 +START GROUP
  606 +LOAD /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a
  607 +LOAD /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libm.a
  608 +LOAD /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a
  609 +LOAD /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a
  610 +END GROUP
  611 + 0x0000000000020000 __TEXT_REGION_LENGTH__ = DEFINED (__TEXT_REGION_LENGTH__)?__TEXT_REGION_LENGTH__:0x20000
  612 + 0x000000000000ffa0 __DATA_REGION_LENGTH__ = DEFINED (__DATA_REGION_LENGTH__)?__DATA_REGION_LENGTH__:0xffa0
  613 + 0x0000000000010000 __EEPROM_REGION_LENGTH__ = DEFINED (__EEPROM_REGION_LENGTH__)?__EEPROM_REGION_LENGTH__:0x10000
  614 + [0x0000000000000003] __FUSE_REGION_LENGTH__ = DEFINED (__FUSE_REGION_LENGTH__)?__FUSE_REGION_LENGTH__:0x400
  615 + 0x0000000000000400 __LOCK_REGION_LENGTH__ = DEFINED (__LOCK_REGION_LENGTH__)?__LOCK_REGION_LENGTH__:0x400
  616 + 0x0000000000000400 __SIGNATURE_REGION_LENGTH__ = DEFINED (__SIGNATURE_REGION_LENGTH__)?__SIGNATURE_REGION_LENGTH__:0x400
  617 + 0x0000000000000400 __USER_SIGNATURE_REGION_LENGTH__ = DEFINED (__USER_SIGNATURE_REGION_LENGTH__)?__USER_SIGNATURE_REGION_LENGTH__:0x400
  618 +
  619 +.hash
  620 + *(.hash)
  621 +
  622 +.dynsym
  623 + *(.dynsym)
  624 +
  625 +.dynstr
  626 + *(.dynstr)
  627 +
  628 +.gnu.version
  629 + *(.gnu.version)
  630 +
  631 +.gnu.version_d
  632 + *(.gnu.version_d)
  633 +
  634 +.gnu.version_r
  635 + *(.gnu.version_r)
  636 +
  637 +.rel.init
  638 + *(.rel.init)
  639 +
  640 +.rela.init
  641 + *(.rela.init)
  642 +
  643 +.rel.text
  644 + *(.rel.text)
  645 + *(.rel.text.*)
  646 + *(.rel.gnu.linkonce.t*)
  647 +
  648 +.rela.text
  649 + *(.rela.text)
  650 + *(.rela.text.*)
  651 + *(.rela.gnu.linkonce.t*)
  652 +
  653 +.rel.fini
  654 + *(.rel.fini)
  655 +
  656 +.rela.fini
  657 + *(.rela.fini)
  658 +
  659 +.rel.rodata
  660 + *(.rel.rodata)
  661 + *(.rel.rodata.*)
  662 + *(.rel.gnu.linkonce.r*)
  663 +
  664 +.rela.rodata
  665 + *(.rela.rodata)
  666 + *(.rela.rodata.*)
  667 + *(.rela.gnu.linkonce.r*)
  668 +
  669 +.rel.data
  670 + *(.rel.data)
  671 + *(.rel.data.*)
  672 + *(.rel.gnu.linkonce.d*)
  673 +
  674 +.rela.data
  675 + *(.rela.data)
  676 + *(.rela.data.*)
  677 + *(.rela.gnu.linkonce.d*)
  678 +
  679 +.rel.ctors
  680 + *(.rel.ctors)
  681 +
  682 +.rela.ctors
  683 + *(.rela.ctors)
  684 +
  685 +.rel.dtors
  686 + *(.rel.dtors)
  687 +
  688 +.rela.dtors
  689 + *(.rela.dtors)
  690 +
  691 +.rel.got
  692 + *(.rel.got)
  693 +
  694 +.rela.got
  695 + *(.rela.got)
  696 +
  697 +.rel.bss
  698 + *(.rel.bss)
  699 +
  700 +.rela.bss
  701 + *(.rela.bss)
  702 +
  703 +.rel.plt
  704 + *(.rel.plt)
  705 +
  706 +.rela.plt
  707 + *(.rela.plt)
  708 +
  709 +.text 0x0000000000000000 0x103e
  710 + *(.vectors)
  711 + .vectors 0x0000000000000000 0xac /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  712 + 0x0000000000000000 __vectors
  713 + 0x0000000000000000 __vector_default
  714 + *(.vectors)
  715 + *(.progmem.gcc*)
  716 + 0x00000000000000ac . = ALIGN (0x2)
  717 + 0x00000000000000ac __trampolines_start = .
  718 + *(.trampolines)
  719 + .trampolines 0x00000000000000ac 0x0 linker stubs
  720 + *(.trampolines*)
  721 + 0x00000000000000ac __trampolines_end = .
  722 + *libprintf_flt.a:*(.progmem.data)
  723 + *libc.a:*(.progmem.data)
  724 + *(.progmem*)
  725 + .progmem.data 0x00000000000000ac 0xba obj/Descriptors.o
  726 + 0x00000000000000ac ProductString
  727 + 0x00000000000000c8 ManufacturerString
  728 + 0x00000000000000f4 LanguageString
  729 + 0x00000000000000f8 ConfigurationDescriptor
  730 + 0x000000000000011a DeviceDescriptor
  731 + 0x000000000000012c JoystickReport
  732 + 0x0000000000000166 . = ALIGN (0x2)
  733 + *(.jumptables)
  734 + *(.jumptables*)
  735 + *(.lowtext)
  736 + *(.lowtext*)
  737 + 0x0000000000000166 __ctors_start = .
  738 + *(.ctors)
  739 + 0x0000000000000166 __ctors_end = .
  740 + 0x0000000000000166 __dtors_start = .
  741 + *(.dtors)
  742 + 0x0000000000000166 __dtors_end = .
  743 + SORT(*)(.ctors)
  744 + SORT(*)(.dtors)
  745 + *(.init0)
  746 + .init0 0x0000000000000166 0x0 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  747 + 0x0000000000000166 __init
  748 + *(.init0)
  749 + *(.init1)
  750 + *(.init1)
  751 + *(.init2)
  752 + .init2 0x0000000000000166 0xc /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  753 + *(.init2)
  754 + *(.init3)
  755 + *(.init3)
  756 + *(.init4)
  757 + .init4 0x0000000000000172 0x16 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  758 + 0x0000000000000172 __do_copy_data
  759 + .init4 0x0000000000000188 0x10 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  760 + 0x0000000000000188 __do_clear_bss
  761 + *(.init4)
  762 + *(.init5)
  763 + *(.init5)
  764 + *(.init6)
  765 + *(.init6)
  766 + *(.init7)
  767 + *(.init7)
  768 + *(.init8)
  769 + *(.init8)
  770 + *(.init9)
  771 + .init9 0x0000000000000198 0x4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  772 + *(.init9)
  773 + *(.text)
  774 + .text 0x000000000000019c 0x2 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  775 + 0x000000000000019c __vector_38
  776 + 0x000000000000019c __vector_22
  777 + 0x000000000000019c __vector_28
  778 + 0x000000000000019c __vector_1
  779 + 0x000000000000019c __vector_32
  780 + 0x000000000000019c __vector_34
  781 + 0x000000000000019c __vector_24
  782 + 0x000000000000019c __vector_12
  783 + 0x000000000000019c __bad_interrupt
  784 + 0x000000000000019c __vector_6
  785 + 0x000000000000019c __vector_31
  786 + 0x000000000000019c __vector_35
  787 + 0x000000000000019c __vector_39
  788 + 0x000000000000019c __vector_3
  789 + 0x000000000000019c __vector_23
  790 + 0x000000000000019c __vector_30
  791 + 0x000000000000019c __vector_25
  792 + 0x000000000000019c __vector_11
  793 + 0x000000000000019c __vector_13
  794 + 0x000000000000019c __vector_17
  795 + 0x000000000000019c __vector_19
  796 + 0x000000000000019c __vector_7
  797 + 0x000000000000019c __vector_41
  798 + 0x000000000000019c __vector_27
  799 + 0x000000000000019c __vector_5
  800 + 0x000000000000019c __vector_33
  801 + 0x000000000000019c __vector_37
  802 + 0x000000000000019c __vector_4
  803 + 0x000000000000019c __vector_9
  804 + 0x000000000000019c __vector_2
  805 + 0x000000000000019c __vector_21
  806 + 0x000000000000019c __vector_15
  807 + 0x000000000000019c __vector_36
  808 + 0x000000000000019c __vector_29
  809 + 0x000000000000019c __vector_40
  810 + 0x000000000000019c __vector_8
  811 + 0x000000000000019c __vector_26
  812 + 0x000000000000019c __vector_14
  813 + 0x000000000000019c __vector_16
  814 + 0x000000000000019c __vector_18
  815 + 0x000000000000019c __vector_20
  816 + 0x000000000000019c __vector_42
  817 + 0x000000000000019e . = ALIGN (0x2)
  818 + *(.text.*)
  819 + .text.SetupHardware
  820 + 0x000000000000019e 0x30 obj/Manette.o
  821 + 0x000000000000019e SetupHardware
  822 + .text.startup.main
  823 + 0x00000000000001ce 0xe obj/Manette.o
  824 + 0x00000000000001ce main
  825 + .text.EVENT_USB_Device_Connect
  826 + 0x00000000000001dc 0x2 obj/Manette.o
  827 + 0x00000000000001dc EVENT_USB_Device_Connect
  828 + .text.EVENT_USB_Device_Disconnect
  829 + 0x00000000000001de 0x2 obj/Manette.o
  830 + 0x00000000000001de EVENT_USB_Device_Disconnect
  831 + .text.EVENT_USB_Device_ConfigurationChanged
  832 + 0x00000000000001e0 0x12 obj/Manette.o
  833 + 0x00000000000001e0 EVENT_USB_Device_ConfigurationChanged
  834 + .text.EVENT_USB_Device_ControlRequest
  835 + 0x00000000000001f2 0x6 obj/Manette.o
  836 + 0x00000000000001f2 EVENT_USB_Device_ControlRequest
  837 + .text.EVENT_USB_Device_StartOfFrame
  838 + 0x00000000000001f8 0x18 obj/Manette.o
  839 + 0x00000000000001f8 EVENT_USB_Device_StartOfFrame
  840 + .text.CALLBACK_HID_Device_CreateHIDReport
  841 + 0x0000000000000210 0x16 obj/Manette.o
  842 + 0x0000000000000210 CALLBACK_HID_Device_CreateHIDReport
  843 + .text.CALLBACK_HID_Device_ProcessHIDReport
  844 + 0x0000000000000226 0x2 obj/Manette.o
  845 + 0x0000000000000226 CALLBACK_HID_Device_ProcessHIDReport
  846 + .text.CALLBACK_USB_GetDescriptor
  847 + 0x0000000000000228 0x82 obj/Descriptors.o
  848 + 0x0000000000000228 CALLBACK_USB_GetDescriptor
  849 + .text.Endpoint_Write_Stream_LE
  850 + 0x00000000000002aa 0x94 obj/EndpointStream_AVR8.o
  851 + 0x00000000000002aa Endpoint_Write_Stream_LE
  852 + .text.Endpoint_Write_Control_Stream_LE
  853 + 0x000000000000033e 0xbc obj/EndpointStream_AVR8.o
  854 + 0x000000000000033e Endpoint_Write_Control_Stream_LE
  855 + .text.Endpoint_Read_Control_Stream_LE
  856 + 0x00000000000003fa 0x80 obj/EndpointStream_AVR8.o
  857 + 0x00000000000003fa Endpoint_Read_Control_Stream_LE
  858 + .text.Endpoint_Write_Control_PStream_LE
  859 + 0x000000000000047a 0xc2 obj/EndpointStream_AVR8.o
  860 + 0x000000000000047a Endpoint_Write_Control_PStream_LE
  861 + .text.Endpoint_ConfigureEndpoint_Prv
  862 + 0x000000000000053c 0x6a obj/Endpoint_AVR8.o
  863 + 0x000000000000053c Endpoint_ConfigureEndpoint_Prv
  864 + .text.Endpoint_ConfigureEndpointTable
  865 + 0x00000000000005a6 0x7a obj/Endpoint_AVR8.o
  866 + 0x00000000000005a6 Endpoint_ConfigureEndpointTable
  867 + .text.Endpoint_ClearStatusStage
  868 + 0x0000000000000620 0x3e obj/Endpoint_AVR8.o
  869 + 0x0000000000000620 Endpoint_ClearStatusStage
  870 + .text.Endpoint_WaitUntilReady
  871 + 0x000000000000065e 0x66 obj/Endpoint_AVR8.o
  872 + 0x000000000000065e Endpoint_WaitUntilReady
  873 + .text.USB_ResetInterface
  874 + 0x00000000000006c4 0x80 obj/USBController_AVR8.o
  875 + 0x00000000000006c4 USB_ResetInterface
  876 + .text.USB_Init
  877 + 0x0000000000000744 0x20 obj/USBController_AVR8.o
  878 + 0x0000000000000744 USB_Init
  879 + .text.USB_INT_DisableAllInterrupts
  880 + 0x0000000000000764 0x10 obj/USBInterrupt_AVR8.o
  881 + 0x0000000000000764 USB_INT_DisableAllInterrupts
  882 + .text.USB_INT_ClearAllInterrupts
  883 + 0x0000000000000774 0xa obj/USBInterrupt_AVR8.o
  884 + 0x0000000000000774 USB_INT_ClearAllInterrupts
  885 + .text.__vector_10
  886 + 0x000000000000077e 0x18c obj/USBInterrupt_AVR8.o
  887 + 0x000000000000077e __vector_10
  888 + .text.USB_Device_ProcessControlRequest
  889 + 0x000000000000090a 0x2c2 obj/DeviceStandardReq.o
  890 + 0x000000000000090a USB_Device_ProcessControlRequest
  891 + .text.USB_Event_Stub
  892 + 0x0000000000000bcc 0x2 obj/Events.o
  893 + 0x0000000000000bcc EVENT_USB_Device_WakeUp
  894 + 0x0000000000000bcc USB_Event_Stub
  895 + 0x0000000000000bcc EVENT_USB_Device_Suspend
  896 + 0x0000000000000bcc EVENT_USB_Device_Reset
  897 + .text.USB_USBTask
  898 + 0x0000000000000bce 0x34 obj/USBTask.o
  899 + 0x0000000000000bce USB_USBTask
  900 + .text.HID_Device_ProcessControlRequest
  901 + 0x0000000000000c02 0x266 obj/HIDClassDevice.o
  902 + 0x0000000000000c02 HID_Device_ProcessControlRequest
  903 + .text.HID_Device_ConfigureEndpoints
  904 + 0x0000000000000e68 0x26 obj/HIDClassDevice.o
  905 + 0x0000000000000e68 HID_Device_ConfigureEndpoints
  906 + .text.HID_Device_USBTask
  907 + 0x0000000000000e8e 0x172 obj/HIDClassDevice.o
  908 + 0x0000000000000e8e HID_Device_USBTask
  909 + .text.avr-libc
  910 + 0x0000000000001000 0x1a /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcmp.o)
  911 + 0x0000000000001000 memcmp
  912 + .text.avr-libc
  913 + 0x000000000000101a 0x12 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o)
  914 + 0x000000000000101a memcpy
  915 + .text.avr-libc
  916 + 0x000000000000102c 0xe /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o)
  917 + 0x000000000000102c memset
  918 + 0x000000000000103a . = ALIGN (0x2)
  919 + *(.fini9)
  920 + .fini9 0x000000000000103a 0x0 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  921 + 0x000000000000103a exit
  922 + 0x000000000000103a _exit
  923 + *(.fini9)
  924 + *(.fini8)
  925 + *(.fini8)
  926 + *(.fini7)
  927 + *(.fini7)
  928 + *(.fini6)
  929 + *(.fini6)
  930 + *(.fini5)
  931 + *(.fini5)
  932 + *(.fini4)
  933 + *(.fini4)
  934 + *(.fini3)
  935 + *(.fini3)
  936 + *(.fini2)
  937 + *(.fini2)
  938 + *(.fini1)
  939 + *(.fini1)
  940 + *(.fini0)
  941 + .fini0 0x000000000000103a 0x4 /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  942 + *(.fini0)
  943 + 0x000000000000103e _etext = .
  944 +
  945 +.data 0x0000000000800100 0x10 load address 0x000000000000103e
  946 + 0x0000000000800100 PROVIDE (__data_start, .)
  947 + *(.data)
  948 + .data 0x0000000000800100 0x10 obj/Manette.o
  949 + 0x0000000000800100 Joystick_HID_Interface
  950 + *(.data*)
  951 + *(.gnu.linkonce.d*)
  952 + *(.rodata)
  953 + *(.rodata*)
  954 + *(.gnu.linkonce.r*)
  955 + 0x0000000000800110 . = ALIGN (0x2)
  956 + 0x0000000000800110 _edata = .
  957 + 0x0000000000800110 PROVIDE (__data_end, .)
  958 +
  959 +.bss 0x0000000000800110 0x11
  960 + 0x0000000000800110 PROVIDE (__bss_start, .)
  961 + *(.bss)
  962 + .bss 0x0000000000800110 0x4 obj/Manette.o
  963 + *(.bss*)
  964 + *(COMMON)
  965 + COMMON 0x0000000000800114 0x3 obj/DeviceStandardReq.o
  966 + 0x0000000000800114 USB_Device_ConfigurationNumber
  967 + 0x0000000000800115 USB_Device_CurrentlySelfPowered
  968 + 0x0000000000800116 USB_Device_RemoteWakeupEnabled
  969 + COMMON 0x0000000000800117 0xa obj/USBTask.o
  970 + 0x0000000000800117 USB_IsInitialized
  971 + 0x0000000000800118 USB_DeviceState
  972 + 0x0000000000800119 USB_ControlRequest
  973 + 0x0000000000800121 PROVIDE (__bss_end, .)
  974 + 0x000000000000103e __data_load_start = LOADADDR (.data)
  975 + 0x000000000000104e __data_load_end = (__data_load_start + SIZEOF (.data))
  976 +
  977 +.noinit 0x0000000000800121 0x0
  978 + [!provide] PROVIDE (__noinit_start, .)
  979 + *(.noinit*)
  980 + [!provide] PROVIDE (__noinit_end, .)
  981 + 0x0000000000800121 _end = .
  982 + [!provide] PROVIDE (__heap_start, .)
  983 +
  984 +.eeprom 0x0000000000810000 0x0
  985 + *(.eeprom*)
  986 + 0x0000000000810000 __eeprom_end = .
  987 +
  988 +.fuse
  989 + *(.fuse)
  990 + *(.lfuse)
  991 + *(.hfuse)
  992 + *(.efuse)
  993 +
  994 +.lock
  995 + *(.lock*)
  996 +
  997 +.signature
  998 + *(.signature*)
  999 +
  1000 +.user_signatures
  1001 + *(.user_signatures*)
  1002 +
  1003 +.stab
  1004 + *(.stab)
  1005 +
  1006 +.stabstr
  1007 + *(.stabstr)
  1008 +
  1009 +.stab.excl
  1010 + *(.stab.excl)
  1011 +
  1012 +.stab.exclstr
  1013 + *(.stab.exclstr)
  1014 +
  1015 +.stab.index
  1016 + *(.stab.index)
  1017 +
  1018 +.stab.indexstr
  1019 + *(.stab.indexstr)
  1020 +
  1021 +.comment 0x0000000000000000 0x11
  1022 + *(.comment)
  1023 + .comment 0x0000000000000000 0x11 obj/Manette.o
  1024 + 0x12 (size before relaxing)
  1025 + .comment 0x0000000000000011 0x12 obj/Descriptors.o
  1026 + .comment 0x0000000000000011 0x12 obj/EndpointStream_AVR8.o
  1027 + .comment 0x0000000000000011 0x12 obj/Endpoint_AVR8.o
  1028 + .comment 0x0000000000000011 0x12 obj/USBController_AVR8.o
  1029 + .comment 0x0000000000000011 0x12 obj/USBInterrupt_AVR8.o
  1030 + .comment 0x0000000000000011 0x12 obj/DeviceStandardReq.o
  1031 + .comment 0x0000000000000011 0x12 obj/Events.o
  1032 + .comment 0x0000000000000011 0x12 obj/USBTask.o
  1033 + .comment 0x0000000000000011 0x12 obj/HIDClassDevice.o
  1034 +
  1035 +.note.gnu.avr.deviceinfo
  1036 + 0x0000000000000000 0x40
  1037 + .note.gnu.avr.deviceinfo
  1038 + 0x0000000000000000 0x40 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1039 +
  1040 +.note.gnu.build-id
  1041 + *(.note.gnu.build-id)
  1042 +
  1043 +.debug
  1044 + *(.debug)
  1045 +
  1046 +.line
  1047 + *(.line)
  1048 +
  1049 +.debug_srcinfo
  1050 + *(.debug_srcinfo)
  1051 +
  1052 +.debug_sfnames
  1053 + *(.debug_sfnames)
  1054 +
  1055 +.debug_aranges 0x0000000000000000 0x270
  1056 + *(.debug_aranges)
  1057 + .debug_aranges
  1058 + 0x0000000000000000 0x58 obj/Manette.o
  1059 + .debug_aranges
  1060 + 0x0000000000000058 0x20 obj/Descriptors.o
  1061 + .debug_aranges
  1062 + 0x0000000000000078 0xc8 obj/EndpointStream_AVR8.o
  1063 + .debug_aranges
  1064 + 0x0000000000000140 0x40 obj/Endpoint_AVR8.o
  1065 + .debug_aranges
  1066 + 0x0000000000000180 0x30 obj/USBController_AVR8.o
  1067 + .debug_aranges
  1068 + 0x00000000000001b0 0x30 obj/USBInterrupt_AVR8.o
  1069 + .debug_aranges
  1070 + 0x00000000000001e0 0x20 obj/DeviceStandardReq.o
  1071 + .debug_aranges
  1072 + 0x0000000000000200 0x20 obj/Events.o
  1073 + .debug_aranges
  1074 + 0x0000000000000220 0x20 obj/USBTask.o
  1075 + .debug_aranges
  1076 + 0x0000000000000240 0x30 obj/HIDClassDevice.o
  1077 +
  1078 +.debug_pubnames
  1079 + *(.debug_pubnames)
  1080 +
  1081 +.debug_info 0x0000000000000000 0x57bc
  1082 + *(.debug_info .gnu.linkonce.wi.*)
  1083 + .debug_info 0x0000000000000000 0x9f4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1084 + .debug_info 0x00000000000009f4 0x6e2 obj/Manette.o
  1085 + .debug_info 0x00000000000010d6 0x700 obj/Descriptors.o
  1086 + .debug_info 0x00000000000017d6 0x182b obj/EndpointStream_AVR8.o
  1087 + .debug_info 0x0000000000003001 0x61c obj/Endpoint_AVR8.o
  1088 + .debug_info 0x000000000000361d 0x4e3 obj/USBController_AVR8.o
  1089 + .debug_info 0x0000000000003b00 0x683 obj/USBInterrupt_AVR8.o
  1090 + .debug_info 0x0000000000004183 0xa48 obj/DeviceStandardReq.o
  1091 + .debug_info 0x0000000000004bcb 0x74 obj/Events.o
  1092 + .debug_info 0x0000000000004c3f 0x26e obj/USBTask.o
  1093 + .debug_info 0x0000000000004ead 0x90f obj/HIDClassDevice.o
  1094 +
  1095 +.debug_abbrev 0x0000000000000000 0x1b70
  1096 + *(.debug_abbrev)
  1097 + .debug_abbrev 0x0000000000000000 0x96a /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1098 + .debug_abbrev 0x000000000000096a 0x2e2 obj/Manette.o
  1099 + .debug_abbrev 0x0000000000000c4c 0x173 obj/Descriptors.o
  1100 + .debug_abbrev 0x0000000000000dbf 0x1e8 obj/EndpointStream_AVR8.o
  1101 + .debug_abbrev 0x0000000000000fa7 0x224 obj/Endpoint_AVR8.o
  1102 + .debug_abbrev 0x00000000000011cb 0x18f obj/USBController_AVR8.o
  1103 + .debug_abbrev 0x000000000000135a 0x1b2 obj/USBInterrupt_AVR8.o
  1104 + .debug_abbrev 0x000000000000150c 0x29a obj/DeviceStandardReq.o
  1105 + .debug_abbrev 0x00000000000017a6 0x42 obj/Events.o
  1106 + .debug_abbrev 0x00000000000017e8 0x169 obj/USBTask.o
  1107 + .debug_abbrev 0x0000000000001951 0x21f obj/HIDClassDevice.o
  1108 +
  1109 +.debug_line 0x0000000000000000 0x3573
  1110 + *(.debug_line .debug_line.* .debug_line_end)
  1111 + .debug_line 0x0000000000000000 0x1a /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1112 + .debug_line 0x000000000000001a 0x446 obj/Manette.o
  1113 + .debug_line 0x0000000000000460 0x247 obj/Descriptors.o
  1114 + .debug_line 0x00000000000006a7 0x14a9 obj/EndpointStream_AVR8.o
  1115 + .debug_line 0x0000000000001b50 0x529 obj/Endpoint_AVR8.o
  1116 + .debug_line 0x0000000000002079 0x370 obj/USBController_AVR8.o
  1117 + .debug_line 0x00000000000023e9 0x503 obj/USBInterrupt_AVR8.o
  1118 + .debug_line 0x00000000000028ec 0x4e1 obj/DeviceStandardReq.o
  1119 + .debug_line 0x0000000000002dcd 0x73 obj/Events.o
  1120 + .debug_line 0x0000000000002e40 0x1b7 obj/USBTask.o
  1121 + .debug_line 0x0000000000002ff7 0x57c obj/HIDClassDevice.o
  1122 +
  1123 +.debug_frame 0x0000000000000000 0x75c
  1124 + *(.debug_frame)
  1125 + .debug_frame 0x0000000000000000 0xb0 obj/Manette.o
  1126 + .debug_frame 0x00000000000000b0 0x24 obj/Descriptors.o
  1127 + .debug_frame 0x00000000000000d4 0x3bc obj/EndpointStream_AVR8.o
  1128 + .debug_frame 0x0000000000000490 0x78 obj/Endpoint_AVR8.o
  1129 + .debug_frame 0x0000000000000508 0x58 obj/USBController_AVR8.o
  1130 + .debug_frame 0x0000000000000560 0x8c obj/USBInterrupt_AVR8.o
  1131 + .debug_frame 0x00000000000005ec 0x3c obj/DeviceStandardReq.o
  1132 + .debug_frame 0x0000000000000628 0x24 obj/Events.o
  1133 + .debug_frame 0x000000000000064c 0x2c obj/USBTask.o
  1134 + .debug_frame 0x0000000000000678 0xe4 obj/HIDClassDevice.o
  1135 +
  1136 +.debug_str 0x0000000000000000 0x2478
  1137 + *(.debug_str)
  1138 + .debug_str 0x0000000000000000 0x371 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1139 + .debug_str 0x0000000000000371 0x666 obj/Manette.o
  1140 + 0x6da (size before relaxing)
  1141 + .debug_str 0x00000000000009d7 0x6e5 obj/Descriptors.o
  1142 + 0x955 (size before relaxing)
  1143 + .debug_str 0x00000000000010bc 0x69e obj/EndpointStream_AVR8.o
  1144 + 0x873 (size before relaxing)
  1145 + .debug_str 0x000000000000175a 0x2f7 obj/Endpoint_AVR8.o
  1146 + 0x627 (size before relaxing)
  1147 + .debug_str 0x0000000000001a51 0x22c obj/USBController_AVR8.o
  1148 + 0x566 (size before relaxing)
  1149 + .debug_str 0x0000000000001c7d 0x14e obj/USBInterrupt_AVR8.o
  1150 + 0x53b (size before relaxing)
  1151 + .debug_str 0x0000000000001dcb 0x455 obj/DeviceStandardReq.o
  1152 + 0x9d9 (size before relaxing)
  1153 + .debug_str 0x0000000000002220 0x55 obj/Events.o
  1154 + 0x1ab (size before relaxing)
  1155 + .debug_str 0x0000000000002275 0x7f obj/USBTask.o
  1156 + 0x38c (size before relaxing)
  1157 + .debug_str 0x00000000000022f4 0x184 obj/HIDClassDevice.o
  1158 + 0x70c (size before relaxing)
  1159 +
  1160 +.debug_loc 0x0000000000000000 0x3125
  1161 + *(.debug_loc)
  1162 + .debug_loc 0x0000000000000000 0xb9 obj/Manette.o
  1163 + .debug_loc 0x00000000000000b9 0x24b obj/Descriptors.o
  1164 + .debug_loc 0x0000000000000304 0x1f97 obj/EndpointStream_AVR8.o
  1165 + .debug_loc 0x000000000000229b 0x38d obj/Endpoint_AVR8.o
  1166 + .debug_loc 0x0000000000002628 0xd5 obj/USBController_AVR8.o
  1167 + .debug_loc 0x00000000000026fd 0x2ab obj/USBInterrupt_AVR8.o
  1168 + .debug_loc 0x00000000000029a8 0x2f6 obj/DeviceStandardReq.o
  1169 + .debug_loc 0x0000000000002c9e 0x49 obj/USBTask.o
  1170 + .debug_loc 0x0000000000002ce7 0x43e obj/HIDClassDevice.o
  1171 +
  1172 +.debug_macinfo
  1173 + *(.debug_macinfo)
  1174 +
  1175 +.debug_weaknames
  1176 + *(.debug_weaknames)
  1177 +
  1178 +.debug_funcnames
  1179 + *(.debug_funcnames)
  1180 +
  1181 +.debug_typenames
  1182 + *(.debug_typenames)
  1183 +
  1184 +.debug_varnames
  1185 + *(.debug_varnames)
  1186 +
  1187 +.debug_pubtypes
  1188 + *(.debug_pubtypes)
  1189 +
  1190 +.debug_ranges 0x0000000000000000 0x388
  1191 + *(.debug_ranges)
  1192 + .debug_ranges 0x0000000000000000 0x48 obj/Manette.o
  1193 + .debug_ranges 0x0000000000000048 0x28 obj/Descriptors.o
  1194 + .debug_ranges 0x0000000000000070 0x1f8 obj/EndpointStream_AVR8.o
  1195 + .debug_ranges 0x0000000000000268 0x78 obj/Endpoint_AVR8.o
  1196 + .debug_ranges 0x00000000000002e0 0x20 obj/USBController_AVR8.o
  1197 + .debug_ranges 0x0000000000000300 0x20 obj/USBInterrupt_AVR8.o
  1198 + .debug_ranges 0x0000000000000320 0x28 obj/DeviceStandardReq.o
  1199 + .debug_ranges 0x0000000000000348 0x10 obj/Events.o
  1200 + .debug_ranges 0x0000000000000358 0x10 obj/USBTask.o
  1201 + .debug_ranges 0x0000000000000368 0x20 obj/HIDClassDevice.o
  1202 +
  1203 +.debug_macro
  1204 + *(.debug_macro)
  1205 +OUTPUT(Manette.elf elf32-avr)
  1206 +LOAD linker stubs
  1207 +
  1208 +Cross Reference Table
  1209 +
  1210 +Symbol File
  1211 +Audio_Device_ConfigureEndpoints obj/AudioClassDevice.o
  1212 +Audio_Device_Event_Stub obj/AudioClassDevice.o
  1213 +Audio_Device_ProcessControlRequest obj/AudioClassDevice.o
  1214 +CALLBACK_Audio_Device_GetSetEndpointProperty obj/AudioClassDevice.o
  1215 +CALLBACK_Audio_Device_GetSetInterfaceProperty obj/AudioClassDevice.o
  1216 +CALLBACK_HIDParser_FilterHIDReportItem obj/HIDParser.o
  1217 +CALLBACK_HID_Device_CreateHIDReport obj/Manette.o
  1218 + obj/HIDClassDevice.o
  1219 +CALLBACK_HID_Device_ProcessHIDReport obj/Manette.o
  1220 + obj/HIDClassDevice.o
  1221 +CALLBACK_MS_Device_SCSICommandReceived obj/MassStorageClassDevice.o
  1222 +CALLBACK_USB_GetDescriptor obj/Descriptors.o
  1223 + obj/DeviceStandardReq.o
  1224 +CDC_Device_BytesReceived obj/CDCClassDevice.o
  1225 +CDC_Device_ConfigureEndpoints obj/CDCClassDevice.o
  1226 +CDC_Device_CreateBlockingStream obj/CDCClassDevice.o
  1227 +CDC_Device_CreateStream obj/CDCClassDevice.o
  1228 +CDC_Device_Event_Stub obj/CDCClassDevice.o
  1229 +CDC_Device_Flush obj/CDCClassDevice.o
  1230 +CDC_Device_ProcessControlRequest obj/CDCClassDevice.o
  1231 +CDC_Device_ReceiveByte obj/CDCClassDevice.o
  1232 +CDC_Device_SendByte obj/CDCClassDevice.o
  1233 +CDC_Device_SendControlLineStateChange obj/CDCClassDevice.o
  1234 +CDC_Device_SendData obj/CDCClassDevice.o
  1235 +CDC_Device_SendData_P obj/CDCClassDevice.o
  1236 +CDC_Device_SendString obj/CDCClassDevice.o
  1237 +CDC_Device_SendString_P obj/CDCClassDevice.o
  1238 +CDC_Device_USBTask obj/CDCClassDevice.o
  1239 +ConfigurationDescriptor obj/Descriptors.o
  1240 +DeviceDescriptor obj/Descriptors.o
  1241 +EVENT_Audio_Device_StreamStartStop obj/AudioClassDevice.o
  1242 +EVENT_CDC_Device_BreakSent obj/CDCClassDevice.o
  1243 +EVENT_CDC_Device_ControLineStateChanged obj/CDCClassDevice.o
  1244 +EVENT_CDC_Device_LineEncodingChanged obj/CDCClassDevice.o
  1245 +EVENT_PRNT_Device_SoftReset obj/PrinterClassDevice.o
  1246 +EVENT_USB_Device_ConfigurationChanged obj/Manette.o
  1247 + obj/DeviceStandardReq.o
  1248 +EVENT_USB_Device_Connect obj/Manette.o
  1249 + obj/USBInterrupt_AVR8.o
  1250 +EVENT_USB_Device_ControlRequest obj/Manette.o
  1251 + obj/DeviceStandardReq.o
  1252 +EVENT_USB_Device_Disconnect obj/Manette.o
  1253 + obj/USBInterrupt_AVR8.o
  1254 +EVENT_USB_Device_Reset obj/Events.o
  1255 + obj/USBInterrupt_AVR8.o
  1256 +EVENT_USB_Device_StartOfFrame obj/Manette.o
  1257 + obj/USBInterrupt_AVR8.o
  1258 +EVENT_USB_Device_Suspend obj/Events.o
  1259 + obj/USBInterrupt_AVR8.o
  1260 +EVENT_USB_Device_WakeUp obj/Events.o
  1261 + obj/USBInterrupt_AVR8.o
  1262 +Endpoint_ClearEndpoints obj/Endpoint_AVR8.o
  1263 +Endpoint_ClearStatusStage obj/Endpoint_AVR8.o
  1264 + obj/PrinterClassDevice.o
  1265 + obj/MassStorageClassDevice.o
  1266 + obj/HIDClassDevice.o
  1267 + obj/CDCClassDevice.o
  1268 + obj/AudioClassDevice.o
  1269 + obj/DeviceStandardReq.o
  1270 +Endpoint_ConfigureEndpointTable obj/Endpoint_AVR8.o
  1271 + obj/RNDISClassDevice.o
  1272 + obj/PrinterClassDevice.o
  1273 + obj/MIDIClassDevice.o
  1274 + obj/MassStorageClassDevice.o
  1275 + obj/HIDClassDevice.o
  1276 + obj/CDCClassDevice.o
  1277 + obj/AudioClassDevice.o
  1278 +Endpoint_ConfigureEndpoint_Prv obj/Endpoint_AVR8.o
  1279 + obj/USBInterrupt_AVR8.o
  1280 + obj/USBController_AVR8.o
  1281 +Endpoint_Discard_Stream obj/EndpointStream_AVR8.o
  1282 +Endpoint_Null_Stream obj/EndpointStream_AVR8.o
  1283 +Endpoint_Read_Control_EStream_BE obj/EndpointStream_AVR8.o
  1284 +Endpoint_Read_Control_EStream_LE obj/EndpointStream_AVR8.o
  1285 +Endpoint_Read_Control_Stream_BE obj/EndpointStream_AVR8.o
  1286 +Endpoint_Read_Control_Stream_LE obj/EndpointStream_AVR8.o
  1287 + obj/RNDISClassDevice.o
  1288 + obj/HIDClassDevice.o
  1289 + obj/AudioClassDevice.o
  1290 +Endpoint_Read_EStream_BE obj/EndpointStream_AVR8.o
  1291 +Endpoint_Read_EStream_LE obj/EndpointStream_AVR8.o
  1292 +Endpoint_Read_Stream_BE obj/EndpointStream_AVR8.o
  1293 +Endpoint_Read_Stream_LE obj/EndpointStream_AVR8.o
  1294 + obj/RNDISClassDevice.o
  1295 + obj/MIDIClassDevice.o
  1296 + obj/MassStorageClassDevice.o
  1297 +Endpoint_WaitUntilReady obj/Endpoint_AVR8.o
  1298 + obj/RNDISClassDevice.o
  1299 + obj/PrinterClassDevice.o
  1300 + obj/MIDIClassDevice.o
  1301 + obj/CDCClassDevice.o
  1302 + obj/EndpointStream_AVR8.o
  1303 +Endpoint_Write_Control_EStream_BE obj/EndpointStream_AVR8.o
  1304 +Endpoint_Write_Control_EStream_LE obj/EndpointStream_AVR8.o
  1305 +Endpoint_Write_Control_PStream_BE obj/EndpointStream_AVR8.o
  1306 +Endpoint_Write_Control_PStream_LE obj/EndpointStream_AVR8.o
  1307 + obj/DeviceStandardReq.o
  1308 +Endpoint_Write_Control_Stream_BE obj/EndpointStream_AVR8.o
  1309 +Endpoint_Write_Control_Stream_LE obj/EndpointStream_AVR8.o
  1310 + obj/RNDISClassDevice.o
  1311 + obj/PrinterClassDevice.o
  1312 + obj/HIDClassDevice.o
  1313 + obj/AudioClassDevice.o
  1314 + obj/DeviceStandardReq.o
  1315 +Endpoint_Write_EStream_BE obj/EndpointStream_AVR8.o
  1316 +Endpoint_Write_EStream_LE obj/EndpointStream_AVR8.o
  1317 +Endpoint_Write_PStream_BE obj/EndpointStream_AVR8.o
  1318 +Endpoint_Write_PStream_LE obj/EndpointStream_AVR8.o
  1319 + obj/CDCClassDevice.o
  1320 +Endpoint_Write_Stream_BE obj/EndpointStream_AVR8.o
  1321 +Endpoint_Write_Stream_LE obj/EndpointStream_AVR8.o
  1322 + obj/RNDISClassDevice.o
  1323 + obj/PrinterClassDevice.o
  1324 + obj/MIDIClassDevice.o
  1325 + obj/MassStorageClassDevice.o
  1326 + obj/HIDClassDevice.o
  1327 + obj/CDCClassDevice.o
  1328 +HID_Device_ConfigureEndpoints obj/HIDClassDevice.o
  1329 + obj/Manette.o
  1330 +HID_Device_ProcessControlRequest obj/HIDClassDevice.o
  1331 + obj/Manette.o
  1332 +HID_Device_USBTask obj/HIDClassDevice.o
  1333 + obj/Manette.o
  1334 +JoystickReport obj/Descriptors.o
  1335 +Joystick_HID_Interface obj/Manette.o
  1336 +LanguageString obj/Descriptors.o
  1337 +MIDI_Device_ConfigureEndpoints obj/MIDIClassDevice.o
  1338 +MIDI_Device_Flush obj/MIDIClassDevice.o
  1339 +MIDI_Device_ReceiveEventPacket obj/MIDIClassDevice.o
  1340 +MIDI_Device_SendEventPacket obj/MIDIClassDevice.o
  1341 +MIDI_Device_USBTask obj/MIDIClassDevice.o
  1342 +MS_Device_ConfigureEndpoints obj/MassStorageClassDevice.o
  1343 +MS_Device_ProcessControlRequest obj/MassStorageClassDevice.o
  1344 +MS_Device_USBTask obj/MassStorageClassDevice.o
  1345 +ManufacturerString obj/Descriptors.o
  1346 +PRNT_Device_BytesReceived obj/PrinterClassDevice.o
  1347 +PRNT_Device_ConfigureEndpoints obj/PrinterClassDevice.o
  1348 +PRNT_Device_CreateBlockingStream obj/PrinterClassDevice.o
  1349 +PRNT_Device_CreateStream obj/PrinterClassDevice.o
  1350 +PRNT_Device_Event_Stub obj/PrinterClassDevice.o
  1351 +PRNT_Device_Flush obj/PrinterClassDevice.o
  1352 +PRNT_Device_ProcessControlRequest obj/PrinterClassDevice.o
  1353 +PRNT_Device_ReceiveByte obj/PrinterClassDevice.o
  1354 +PRNT_Device_SendByte obj/PrinterClassDevice.o
  1355 +PRNT_Device_SendData obj/PrinterClassDevice.o
  1356 +PRNT_Device_SendString obj/PrinterClassDevice.o
  1357 +PRNT_Device_USBTask obj/PrinterClassDevice.o
  1358 +ProductString obj/Descriptors.o
  1359 +RNDIS_Device_ConfigureEndpoints obj/RNDISClassDevice.o
  1360 +RNDIS_Device_IsPacketReceived obj/RNDISClassDevice.o
  1361 +RNDIS_Device_ProcessControlRequest obj/RNDISClassDevice.o
  1362 +RNDIS_Device_ReadPacket obj/RNDISClassDevice.o
  1363 +RNDIS_Device_SendPacket obj/RNDISClassDevice.o
  1364 +RNDIS_Device_USBTask obj/RNDISClassDevice.o
  1365 +SetupHardware obj/Manette.o
  1366 +USB_ControlRequest obj/USBTask.o
  1367 + obj/RNDISClassDevice.o
  1368 + obj/PrinterClassDevice.o
  1369 + obj/MassStorageClassDevice.o
  1370 + obj/HIDClassDevice.o
  1371 + obj/CDCClassDevice.o
  1372 + obj/AudioClassDevice.o
  1373 + obj/DeviceStandardReq.o
  1374 + obj/Endpoint_AVR8.o
  1375 + obj/EndpointStream_AVR8.o
  1376 +USB_DeviceState obj/USBTask.o
  1377 + obj/RNDISClassDevice.o
  1378 + obj/PrinterClassDevice.o
  1379 + obj/MIDIClassDevice.o
  1380 + obj/MassStorageClassDevice.o
  1381 + obj/HIDClassDevice.o
  1382 + obj/CDCClassDevice.o
  1383 + obj/DeviceStandardReq.o
  1384 + obj/USBInterrupt_AVR8.o
  1385 + obj/USBController_AVR8.o
  1386 + obj/Endpoint_AVR8.o
  1387 + obj/EndpointStream_AVR8.o
  1388 +USB_Device_ConfigurationNumber obj/DeviceStandardReq.o
  1389 + obj/USBInterrupt_AVR8.o
  1390 + obj/USBController_AVR8.o
  1391 +USB_Device_CurrentlySelfPowered obj/DeviceStandardReq.o
  1392 + obj/USBController_AVR8.o
  1393 +USB_Device_ProcessControlRequest obj/DeviceStandardReq.o
  1394 + obj/USBTask.o
  1395 +USB_Device_RemoteWakeupEnabled obj/DeviceStandardReq.o
  1396 + obj/USBController_AVR8.o
  1397 +USB_Device_SendRemoteWakeup obj/Device_AVR8.o
  1398 +USB_Disable obj/USBController_AVR8.o
  1399 +USB_Event_Stub obj/Events.o
  1400 +USB_GetHIDReportItemInfo obj/HIDParser.o
  1401 +USB_GetHIDReportSize obj/HIDParser.o
  1402 +USB_GetNextDescriptorComp obj/ConfigDescriptors.o
  1403 +USB_GetNextDescriptorOfType obj/ConfigDescriptors.o
  1404 +USB_GetNextDescriptorOfTypeAfter obj/ConfigDescriptors.o
  1405 +USB_GetNextDescriptorOfTypeBefore obj/ConfigDescriptors.o
  1406 +USB_INT_ClearAllInterrupts obj/USBInterrupt_AVR8.o
  1407 + obj/USBController_AVR8.o
  1408 +USB_INT_DisableAllInterrupts obj/USBInterrupt_AVR8.o
  1409 + obj/USBController_AVR8.o
  1410 +USB_Init obj/USBController_AVR8.o
  1411 + obj/Manette.o
  1412 +USB_IsInitialized obj/USBTask.o
  1413 + obj/USBController_AVR8.o
  1414 +USB_ProcessHIDReport obj/HIDParser.o
  1415 +USB_ResetInterface obj/USBController_AVR8.o
  1416 +USB_SetHIDReportItemInfo obj/HIDParser.o
  1417 +USB_USBTask obj/USBTask.o
  1418 + obj/PrinterClassDevice.o
  1419 + obj/MassStorageClassDevice.o
  1420 + obj/CDCClassDevice.o
  1421 + obj/EndpointStream_AVR8.o
  1422 + obj/Manette.o
  1423 +__FUSE_REGION_LENGTH__ /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1424 +__bad_interrupt /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1425 +__bss_end /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  1426 +__bss_start /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  1427 +__data_end /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  1428 +__data_load_start /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  1429 +__data_start /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  1430 +__do_clear_bss /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_clear_bss.o)
  1431 + obj/USBTask.o
  1432 + obj/DeviceStandardReq.o
  1433 + obj/Manette.o
  1434 +__do_copy_data /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_copy_data.o)
  1435 + obj/RNDISClassDevice.o
  1436 + obj/CDCClassDevice.o
  1437 + obj/Manette.o
  1438 +__heap_end /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1439 +__init /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1440 +__stack /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1441 +__strlen_P /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(strlen_P.o)
  1442 + obj/CDCClassDevice.o
  1443 +__vector_1 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1444 +__vector_10 obj/USBInterrupt_AVR8.o
  1445 + /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1446 +__vector_11 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1447 +__vector_12 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1448 +__vector_13 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1449 +__vector_14 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1450 +__vector_15 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1451 +__vector_16 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1452 +__vector_17 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1453 +__vector_18 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1454 +__vector_19 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1455 +__vector_2 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1456 +__vector_20 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1457 +__vector_21 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1458 +__vector_22 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1459 +__vector_23 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1460 +__vector_24 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1461 +__vector_25 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1462 +__vector_26 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1463 +__vector_27 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1464 +__vector_28 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1465 +__vector_29 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1466 +__vector_3 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1467 +__vector_30 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1468 +__vector_31 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1469 +__vector_32 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1470 +__vector_33 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1471 +__vector_34 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1472 +__vector_35 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1473 +__vector_36 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1474 +__vector_37 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1475 +__vector_38 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1476 +__vector_39 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1477 +__vector_4 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1478 +__vector_40 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1479 +__vector_41 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1480 +__vector_42 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1481 +__vector_5 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1482 +__vector_6 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1483 +__vector_7 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1484 +__vector_8 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1485 +__vector_9 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1486 +__vector_default /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1487 +__vectors /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1488 +_exit /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  1489 +eeprom_read_byte /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eerd_byte.o)
  1490 + obj/EndpointStream_AVR8.o
  1491 +eeprom_update_byte /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eeupd_byte.o)
  1492 + obj/EndpointStream_AVR8.o
  1493 +eeprom_update_r18 /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libatmega32u4.a(eeupd_byte.o)
  1494 +exit /usr/lib/gcc/avr/5.4.0/avr5/libgcc.a(_exit.o)
  1495 + /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1496 +main obj/Manette.o
  1497 + /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega32u4.o
  1498 +memcmp /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcmp.o)
  1499 + obj/HIDClassDevice.o
  1500 +memcpy /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy.o)
  1501 + obj/RNDISClassDevice.o
  1502 + obj/HIDClassDevice.o
  1503 +memcpy_P /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memcpy_P.o)
  1504 + obj/RNDISClassDevice.o
  1505 +memset /usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/libc.a(memset.o)
  1506 + obj/HIDClassDevice.o
... ...
src/question5/PolytechLille/Manette/Manette.sym 0 → 100644
... ... @@ -0,0 +1,180 @@
  1 + U CALLBACK_Audio_Device_GetSetEndpointProperty
  2 + U CALLBACK_Audio_Device_GetSetInterfaceProperty
  3 + U CALLBACK_HIDParser_FilterHIDReportItem
  4 + U CALLBACK_MS_Device_SCSICommandReceived
  5 +00000000 W __heap_end
  6 +00000000 a __tmp_reg__
  7 +00000000 a __tmp_reg__
  8 +00000000 a __tmp_reg__
  9 +00000000 a __tmp_reg__
  10 +00000000 a __tmp_reg__
  11 +00000000 a __tmp_reg__
  12 +00000000 a __tmp_reg__
  13 +00000000 a __tmp_reg__
  14 +00000000 a __tmp_reg__
  15 +00000000 a __tmp_reg__
  16 +00000000 W __vector_default
  17 +00000000 T __vectors
  18 +00000001 a __zero_reg__
  19 +00000001 a __zero_reg__
  20 +00000001 a __zero_reg__
  21 +00000001 a __zero_reg__
  22 +00000001 a __zero_reg__
  23 +00000001 a __zero_reg__
  24 +00000001 a __zero_reg__
  25 +00000001 a __zero_reg__
  26 +00000001 a __zero_reg__
  27 +00000001 a __zero_reg__
  28 +00000003 A __FUSE_REGION_LENGTH__
  29 +0000003d a __SP_L__
  30 +0000003d a __SP_L__
  31 +0000003d a __SP_L__
  32 +0000003d a __SP_L__
  33 +0000003d a __SP_L__
  34 +0000003d a __SP_L__
  35 +0000003d a __SP_L__
  36 +0000003d a __SP_L__
  37 +0000003d a __SP_L__
  38 +0000003d a __SP_L__
  39 +0000003e a __SP_H__
  40 +0000003e a __SP_H__
  41 +0000003e a __SP_H__
  42 +0000003e a __SP_H__
  43 +0000003e a __SP_H__
  44 +0000003e a __SP_H__
  45 +0000003e a __SP_H__
  46 +0000003e a __SP_H__
  47 +0000003e a __SP_H__
  48 +0000003e a __SP_H__
  49 +0000003f a __SREG__
  50 +0000003f a __SREG__
  51 +0000003f a __SREG__
  52 +0000003f a __SREG__
  53 +0000003f a __SREG__
  54 +0000003f a __SREG__
  55 +0000003f a __SREG__
  56 +0000003f a __SREG__
  57 +0000003f a __SREG__
  58 +0000003f a __SREG__
  59 +000000ac T ProductString
  60 +000000ac T __trampolines_end
  61 +000000ac T __trampolines_start
  62 +000000c8 T ManufacturerString
  63 +000000f4 T LanguageString
  64 +000000f8 T ConfigurationDescriptor
  65 +0000011a T DeviceDescriptor
  66 +0000012c T JoystickReport
  67 +00000166 T __ctors_end
  68 +00000166 T __ctors_start
  69 +00000166 T __dtors_end
  70 +00000166 T __dtors_start
  71 +00000166 W __init
  72 +00000172 T __do_copy_data
  73 +00000188 T __do_clear_bss
  74 +00000190 t .do_clear_bss_loop
  75 +00000192 t .do_clear_bss_start
  76 +0000019c T __bad_interrupt
  77 +0000019c W __vector_1
  78 +0000019c W __vector_11
  79 +0000019c W __vector_12
  80 +0000019c W __vector_13
  81 +0000019c W __vector_14
  82 +0000019c W __vector_15
  83 +0000019c W __vector_16
  84 +0000019c W __vector_17
  85 +0000019c W __vector_18
  86 +0000019c W __vector_19
  87 +0000019c W __vector_2
  88 +0000019c W __vector_20
  89 +0000019c W __vector_21
  90 +0000019c W __vector_22
  91 +0000019c W __vector_23
  92 +0000019c W __vector_24
  93 +0000019c W __vector_25
  94 +0000019c W __vector_26
  95 +0000019c W __vector_27
  96 +0000019c W __vector_28
  97 +0000019c W __vector_29
  98 +0000019c W __vector_3
  99 +0000019c W __vector_30
  100 +0000019c W __vector_31
  101 +0000019c W __vector_32
  102 +0000019c W __vector_33
  103 +0000019c W __vector_34
  104 +0000019c W __vector_35
  105 +0000019c W __vector_36
  106 +0000019c W __vector_37
  107 +0000019c W __vector_38
  108 +0000019c W __vector_39
  109 +0000019c W __vector_4
  110 +0000019c W __vector_40
  111 +0000019c W __vector_41
  112 +0000019c W __vector_42
  113 +0000019c W __vector_5
  114 +0000019c W __vector_6
  115 +0000019c W __vector_7
  116 +0000019c W __vector_8
  117 +0000019c W __vector_9
  118 +0000019e T SetupHardware
  119 +000001ce T main
  120 +000001dc T EVENT_USB_Device_Connect
  121 +000001de T EVENT_USB_Device_Disconnect
  122 +000001e0 T EVENT_USB_Device_ConfigurationChanged
  123 +000001f2 T EVENT_USB_Device_ControlRequest
  124 +000001f8 T EVENT_USB_Device_StartOfFrame
  125 +00000210 T CALLBACK_HID_Device_CreateHIDReport
  126 +00000226 T CALLBACK_HID_Device_ProcessHIDReport
  127 +00000228 T CALLBACK_USB_GetDescriptor
  128 +000002aa T Endpoint_Write_Stream_LE
  129 +0000033e T Endpoint_Write_Control_Stream_LE
  130 +000003fa T Endpoint_Read_Control_Stream_LE
  131 +00000400 A __LOCK_REGION_LENGTH__
  132 +00000400 A __SIGNATURE_REGION_LENGTH__
  133 +00000400 A __USER_SIGNATURE_REGION_LENGTH__
  134 +0000047a T Endpoint_Write_Control_PStream_LE
  135 +0000053c T Endpoint_ConfigureEndpoint_Prv
  136 +000005a6 T Endpoint_ConfigureEndpointTable
  137 +00000620 T Endpoint_ClearStatusStage
  138 +0000065e T Endpoint_WaitUntilReady
  139 +000006c4 T USB_ResetInterface
  140 +00000744 T USB_Init
  141 +00000764 T USB_INT_DisableAllInterrupts
  142 +00000774 T USB_INT_ClearAllInterrupts
  143 +0000077e T __vector_10
  144 +0000090a T USB_Device_ProcessControlRequest
  145 +00000aff W __stack
  146 +00000bcc W EVENT_USB_Device_Reset
  147 +00000bcc W EVENT_USB_Device_Suspend
  148 +00000bcc W EVENT_USB_Device_WakeUp
  149 +00000bcc T USB_Event_Stub
  150 +00000bce T USB_USBTask
  151 +00000c02 T HID_Device_ProcessControlRequest
  152 +00000e68 T HID_Device_ConfigureEndpoints
  153 +00000e8e T HID_Device_USBTask
  154 +00001000 T memcmp
  155 +0000101a T memcpy
  156 +0000102c T memset
  157 +0000103a T _exit
  158 +0000103a W exit
  159 +0000103c t __stop_program
  160 +0000103e A __data_load_start
  161 +0000103e T _etext
  162 +0000104e A __data_load_end
  163 +0000ffa0 A __DATA_REGION_LENGTH__
  164 +00010000 A __EEPROM_REGION_LENGTH__
  165 +00020000 A __TEXT_REGION_LENGTH__
  166 +00800100 D __data_start
  167 +00800100 D Joystick_HID_Interface
  168 +00800110 B __bss_start
  169 +00800110 D __data_end
  170 +00800110 D _edata
  171 +00800110 b PrevJoystickHIDReportBuffer
  172 +00800114 B USB_Device_ConfigurationNumber
  173 +00800115 B USB_Device_CurrentlySelfPowered
  174 +00800116 B USB_Device_RemoteWakeupEnabled
  175 +00800117 B USB_IsInitialized
  176 +00800118 B USB_DeviceState
  177 +00800119 B USB_ControlRequest
  178 +00800121 B __bss_end
  179 +00800121 N _end
  180 +00810000 N __eeprom_end
... ...
src/question5/PolytechLille/Manette/Manette.txt 0 → 100644
... ... @@ -0,0 +1,77 @@
  1 +/** \file
  2 + *
  3 + * This file contains special DoxyGen information for the generation of the main page and other special
  4 + * documentation pages. It is not a project source file.
  5 + */
  6 +
  7 +/** \mainpage Joystick Device Demo
  8 + *
  9 + * \section Sec_Compat Demo Compatibility:
  10 + *
  11 + * The following list indicates what microcontrollers are compatible with this demo.
  12 + *
  13 + * \li Series 7 USB AVRs (AT90USBxxx7)
  14 + * \li Series 6 USB AVRs (AT90USBxxx6)
  15 + * \li Series 4 USB AVRs (ATMEGAxxU4)
  16 + * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2)
  17 + * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU)
  18 + * \li Series B XMEGA AVRs (ATXMEGAxxxBx)
  19 + * \li Series C XMEGA AVRs (ATXMEGAxxxCx)
  20 + *
  21 + * \section Sec_Info USB Information:
  22 + *
  23 + * The following table gives a rundown of the USB utilization of this demo.
  24 + *
  25 + * <table>
  26 + * <tr>
  27 + * <td><b>USB Mode:</b></td>
  28 + * <td>Device</td>
  29 + * </tr>
  30 + * <tr>
  31 + * <td><b>USB Class:</b></td>
  32 + * <td>Human Interface Device (HID)</td>
  33 + * </tr>
  34 + * <tr>
  35 + * <td><b>USB Subclass:</b></td>
  36 + * <td>N/A</td>
  37 + * </tr>
  38 + * <tr>
  39 + * <td><b>Relevant Standards:</b></td>
  40 + * <td>USBIF HID Specification \n
  41 + * USBIF HID Usage Tables</td>
  42 + * </tr>
  43 + * <tr>
  44 + * <td><b>Supported USB Speeds:</b></td>
  45 + * <td>Low Speed Mode \n
  46 + * Full Speed Mode</td>
  47 + * </tr>
  48 + * </table>
  49 + *
  50 + * \section Sec_Description Project Description:
  51 + *
  52 + * Joystick demonstration application. This gives a simple reference
  53 + * application for implementing a USB Keyboard device, for USB Joysticks
  54 + * using the standard Keyboard HID profile.
  55 + *
  56 + * This device will show up as a generic joystick device, with two buttons.
  57 + * Pressing the joystick inwards is the first button, and the HWB button
  58 + * is the second.
  59 + *
  60 + * Moving the joystick on the selected board moves the joystick location on
  61 + * the host computer.
  62 + *
  63 + * Currently only single interface joysticks are supported.
  64 + *
  65 + * \section Sec_Options Project Options
  66 + *
  67 + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
  68 + *
  69 + * <table>
  70 + * <tr>
  71 + * <td>
  72 + * None
  73 + * </td>
  74 + * </tr>
  75 + * </table>
  76 + */
  77 +
... ...
src/question5/PolytechLille/Manette/asf.xml 0 → 100644
... ... @@ -0,0 +1,62 @@
  1 +<asf xmlversion="1.0">
  2 + <project caption="Joystick HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.joystick.example.avr8">
  3 + <require idref="lufa.demos.device.class.joystick"/>
  4 + <require idref="lufa.boards.dummy.avr8"/>
  5 + <generator value="as5_8"/>
  6 +
  7 + <device-support value="at90usb1287"/>
  8 + <config name="lufa.drivers.board.name" value="none"/>
  9 +
  10 + <build type="define" name="F_CPU" value="16000000UL"/>
  11 + <build type="define" name="F_USB" value="16000000UL"/>
  12 + </project>
  13 +
  14 + <project caption="Joystick HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.joystick.example.xmega">
  15 + <require idref="lufa.demos.device.class.joystick"/>
  16 + <require idref="lufa.boards.dummy.xmega"/>
  17 + <generator value="as5_8"/>
  18 +
  19 + <device-support value="atxmega128a1u"/>
  20 + <config name="lufa.drivers.board.name" value="none"/>
  21 +
  22 + <build type="define" name="F_CPU" value="32000000UL"/>
  23 + <build type="define" name="F_USB" value="48000000UL"/>
  24 + </project>
  25 +
  26 + <module type="application" id="lufa.demos.device.class.joystick" caption="Joystick HID Device Demo (Class Driver APIs)">
  27 + <info type="description" value="summary">
  28 + Joystick HID device demo, implementing a basic USB joystick that can send movement information to the host. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack.
  29 + </info>
  30 +
  31 + <info type="gui-flag" value="move-to-root"/>
  32 +
  33 + <info type="keyword" value="Technology">
  34 + <keyword value="Class Driver APIs"/>
  35 + <keyword value="USB Device"/>
  36 + <keyword value="HID Class"/>
  37 + </info>
  38 +
  39 + <device-support-alias value="lufa_avr8"/>
  40 + <device-support-alias value="lufa_xmega"/>
  41 + <device-support-alias value="lufa_uc3"/>
  42 +
  43 + <build type="distribute" subtype="user-file" value="doxyfile"/>
  44 + <build type="distribute" subtype="user-file" value="Joystick.txt"/>
  45 +
  46 + <build type="c-source" value="Joystick.c"/>
  47 + <build type="c-source" value="Descriptors.c"/>
  48 + <build type="header-file" value="Joystick.h"/>
  49 + <build type="header-file" value="Descriptors.h"/>
  50 +
  51 + <build type="module-config" subtype="path" value="Config"/>
  52 + <build type="header-file" value="Config/LUFAConfig.h"/>
  53 +
  54 + <require idref="lufa.common"/>
  55 + <require idref="lufa.platform"/>
  56 + <require idref="lufa.drivers.usb"/>
  57 + <require idref="lufa.drivers.board"/>
  58 + <require idref="lufa.drivers.board.leds"/>
  59 + <require idref="lufa.drivers.board.buttons"/>
  60 + <require idref="lufa.drivers.board.joystick"/>
  61 + </module>
  62 +</asf>
... ...
src/question5/PolytechLille/Manette/doxyfile 0 → 100644
... ... @@ -0,0 +1,2395 @@
  1 +# Doxyfile 1.8.9
  2 +
  3 +# This file describes the settings to be used by the documentation system
  4 +# doxygen (www.doxygen.org) for a project.
  5 +#
  6 +# All text after a double hash (##) is considered a comment and is placed in
  7 +# front of the TAG it is preceding.
  8 +#
  9 +# All text after a single hash (#) is considered a comment and will be ignored.
  10 +# The format is:
  11 +# TAG = value [value, ...]
  12 +# For lists, items can also be appended using:
  13 +# TAG += value [value, ...]
  14 +# Values that contain spaces should be placed between quotes (\" \").
  15 +
  16 +#---------------------------------------------------------------------------
  17 +# Project related configuration options
  18 +#---------------------------------------------------------------------------
  19 +
  20 +# This tag specifies the encoding used for all characters in the config file
  21 +# that follow. The default is UTF-8 which is also the encoding used for all text
  22 +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
  23 +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
  24 +# for the list of possible encodings.
  25 +# The default value is: UTF-8.
  26 +
  27 +DOXYFILE_ENCODING = UTF-8
  28 +
  29 +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
  30 +# double-quotes, unless you are using Doxywizard) that should identify the
  31 +# project for which the documentation is generated. This name is used in the
  32 +# title of most generated pages and in a few other places.
  33 +# The default value is: My Project.
  34 +
  35 +PROJECT_NAME = "LUFA Library - Joystick Device Demo"
  36 +
  37 +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
  38 +# could be handy for archiving the generated documentation or if some version
  39 +# control system is used.
  40 +
  41 +PROJECT_NUMBER =
  42 +
  43 +# Using the PROJECT_BRIEF tag one can provide an optional one line description
  44 +# for a project that appears at the top of each page and should give viewer a
  45 +# quick idea about the purpose of the project. Keep the description short.
  46 +
  47 +PROJECT_BRIEF =
  48 +
  49 +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
  50 +# in the documentation. The maximum height of the logo should not exceed 55
  51 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
  52 +# the logo to the output directory.
  53 +
  54 +PROJECT_LOGO =
  55 +
  56 +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
  57 +# into which the generated documentation will be written. If a relative path is
  58 +# entered, it will be relative to the location where doxygen was started. If
  59 +# left blank the current directory will be used.
  60 +
  61 +OUTPUT_DIRECTORY = ./Documentation/
  62 +
  63 +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
  64 +# directories (in 2 levels) under the output directory of each output format and
  65 +# will distribute the generated files over these directories. Enabling this
  66 +# option can be useful when feeding doxygen a huge amount of source files, where
  67 +# putting all generated files in the same directory would otherwise causes
  68 +# performance problems for the file system.
  69 +# The default value is: NO.
  70 +
  71 +CREATE_SUBDIRS = NO
  72 +
  73 +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
  74 +# characters to appear in the names of generated files. If set to NO, non-ASCII
  75 +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
  76 +# U+3044.
  77 +# The default value is: NO.
  78 +
  79 +ALLOW_UNICODE_NAMES = NO
  80 +
  81 +# The OUTPUT_LANGUAGE tag is used to specify the language in which all
  82 +# documentation generated by doxygen is written. Doxygen will use this
  83 +# information to generate all constant output in the proper language.
  84 +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
  85 +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
  86 +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
  87 +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
  88 +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
  89 +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
  90 +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
  91 +# Ukrainian and Vietnamese.
  92 +# The default value is: English.
  93 +
  94 +OUTPUT_LANGUAGE = English
  95 +
  96 +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
  97 +# descriptions after the members that are listed in the file and class
  98 +# documentation (similar to Javadoc). Set to NO to disable this.
  99 +# The default value is: YES.
  100 +
  101 +BRIEF_MEMBER_DESC = YES
  102 +
  103 +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
  104 +# description of a member or function before the detailed description
  105 +#
  106 +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
  107 +# brief descriptions will be completely suppressed.
  108 +# The default value is: YES.
  109 +
  110 +REPEAT_BRIEF = YES
  111 +
  112 +# This tag implements a quasi-intelligent brief description abbreviator that is
  113 +# used to form the text in various listings. Each string in this list, if found
  114 +# as the leading text of the brief description, will be stripped from the text
  115 +# and the result, after processing the whole list, is used as the annotated
  116 +# text. Otherwise, the brief description is used as-is. If left blank, the
  117 +# following values are used ($name is automatically replaced with the name of
  118 +# the entity):The $name class, The $name widget, The $name file, is, provides,
  119 +# specifies, contains, represents, a, an and the.
  120 +
  121 +ABBREVIATE_BRIEF = "The $name class" \
  122 + "The $name widget" \
  123 + "The $name file" \
  124 + is \
  125 + provides \
  126 + specifies \
  127 + contains \
  128 + represents \
  129 + a \
  130 + an \
  131 + the
  132 +
  133 +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
  134 +# doxygen will generate a detailed section even if there is only a brief
  135 +# description.
  136 +# The default value is: NO.
  137 +
  138 +ALWAYS_DETAILED_SEC = NO
  139 +
  140 +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
  141 +# inherited members of a class in the documentation of that class as if those
  142 +# members were ordinary class members. Constructors, destructors and assignment
  143 +# operators of the base classes will not be shown.
  144 +# The default value is: NO.
  145 +
  146 +INLINE_INHERITED_MEMB = NO
  147 +
  148 +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
  149 +# before files name in the file list and in the header files. If set to NO the
  150 +# shortest path that makes the file name unique will be used
  151 +# The default value is: YES.
  152 +
  153 +FULL_PATH_NAMES = YES
  154 +
  155 +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
  156 +# Stripping is only done if one of the specified strings matches the left-hand
  157 +# part of the path. The tag can be used to show relative paths in the file list.
  158 +# If left blank the directory from which doxygen is run is used as the path to
  159 +# strip.
  160 +#
  161 +# Note that you can specify absolute paths here, but also relative paths, which
  162 +# will be relative from the directory where doxygen is started.
  163 +# This tag requires that the tag FULL_PATH_NAMES is set to YES.
  164 +
  165 +STRIP_FROM_PATH =
  166 +
  167 +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
  168 +# path mentioned in the documentation of a class, which tells the reader which
  169 +# header file to include in order to use a class. If left blank only the name of
  170 +# the header file containing the class definition is used. Otherwise one should
  171 +# specify the list of include paths that are normally passed to the compiler
  172 +# using the -I flag.
  173 +
  174 +STRIP_FROM_INC_PATH =
  175 +
  176 +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
  177 +# less readable) file names. This can be useful is your file systems doesn't
  178 +# support long names like on DOS, Mac, or CD-ROM.
  179 +# The default value is: NO.
  180 +
  181 +SHORT_NAMES = YES
  182 +
  183 +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
  184 +# first line (until the first dot) of a Javadoc-style comment as the brief
  185 +# description. If set to NO, the Javadoc-style will behave just like regular Qt-
  186 +# style comments (thus requiring an explicit @brief command for a brief
  187 +# description.)
  188 +# The default value is: NO.
  189 +
  190 +JAVADOC_AUTOBRIEF = NO
  191 +
  192 +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
  193 +# line (until the first dot) of a Qt-style comment as the brief description. If
  194 +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
  195 +# requiring an explicit \brief command for a brief description.)
  196 +# The default value is: NO.
  197 +
  198 +QT_AUTOBRIEF = NO
  199 +
  200 +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
  201 +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
  202 +# a brief description. This used to be the default behavior. The new default is
  203 +# to treat a multi-line C++ comment block as a detailed description. Set this
  204 +# tag to YES if you prefer the old behavior instead.
  205 +#
  206 +# Note that setting this tag to YES also means that rational rose comments are
  207 +# not recognized any more.
  208 +# The default value is: NO.
  209 +
  210 +MULTILINE_CPP_IS_BRIEF = NO
  211 +
  212 +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
  213 +# documentation from any documented member that it re-implements.
  214 +# The default value is: YES.
  215 +
  216 +INHERIT_DOCS = YES
  217 +
  218 +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
  219 +# page for each member. If set to NO, the documentation of a member will be part
  220 +# of the file/class/namespace that contains it.
  221 +# The default value is: NO.
  222 +
  223 +SEPARATE_MEMBER_PAGES = NO
  224 +
  225 +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
  226 +# uses this value to replace tabs by spaces in code fragments.
  227 +# Minimum value: 1, maximum value: 16, default value: 4.
  228 +
  229 +TAB_SIZE = 4
  230 +
  231 +# This tag can be used to specify a number of aliases that act as commands in
  232 +# the documentation. An alias has the form:
  233 +# name=value
  234 +# For example adding
  235 +# "sideeffect=@par Side Effects:\n"
  236 +# will allow you to put the command \sideeffect (or @sideeffect) in the
  237 +# documentation, which will result in a user-defined paragraph with heading
  238 +# "Side Effects:". You can put \n's in the value part of an alias to insert
  239 +# newlines.
  240 +
  241 +ALIASES =
  242 +
  243 +# This tag can be used to specify a number of word-keyword mappings (TCL only).
  244 +# A mapping has the form "name=value". For example adding "class=itcl::class"
  245 +# will allow you to use the command class in the itcl::class meaning.
  246 +
  247 +TCL_SUBST =
  248 +
  249 +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
  250 +# only. Doxygen will then generate output that is more tailored for C. For
  251 +# instance, some of the names that are used will be different. The list of all
  252 +# members will be omitted, etc.
  253 +# The default value is: NO.
  254 +
  255 +OPTIMIZE_OUTPUT_FOR_C = YES
  256 +
  257 +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
  258 +# Python sources only. Doxygen will then generate output that is more tailored
  259 +# for that language. For instance, namespaces will be presented as packages,
  260 +# qualified scopes will look different, etc.
  261 +# The default value is: NO.
  262 +
  263 +OPTIMIZE_OUTPUT_JAVA = NO
  264 +
  265 +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
  266 +# sources. Doxygen will then generate output that is tailored for Fortran.
  267 +# The default value is: NO.
  268 +
  269 +OPTIMIZE_FOR_FORTRAN = NO
  270 +
  271 +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
  272 +# sources. Doxygen will then generate output that is tailored for VHDL.
  273 +# The default value is: NO.
  274 +
  275 +OPTIMIZE_OUTPUT_VHDL = NO
  276 +
  277 +# Doxygen selects the parser to use depending on the extension of the files it
  278 +# parses. With this tag you can assign which parser to use for a given
  279 +# extension. Doxygen has a built-in mapping, but you can override or extend it
  280 +# using this tag. The format is ext=language, where ext is a file extension, and
  281 +# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
  282 +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
  283 +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
  284 +# Fortran. In the later case the parser tries to guess whether the code is fixed
  285 +# or free formatted code, this is the default for Fortran type files), VHDL. For
  286 +# instance to make doxygen treat .inc files as Fortran files (default is PHP),
  287 +# and .f files as C (default is Fortran), use: inc=Fortran f=C.
  288 +#
  289 +# Note: For files without extension you can use no_extension as a placeholder.
  290 +#
  291 +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
  292 +# the files are not read by doxygen.
  293 +
  294 +EXTENSION_MAPPING =
  295 +
  296 +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
  297 +# according to the Markdown format, which allows for more readable
  298 +# documentation. See http://daringfireball.net/projects/markdown/ for details.
  299 +# The output of markdown processing is further processed by doxygen, so you can
  300 +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
  301 +# case of backward compatibilities issues.
  302 +# The default value is: YES.
  303 +
  304 +MARKDOWN_SUPPORT = NO
  305 +
  306 +# When enabled doxygen tries to link words that correspond to documented
  307 +# classes, or namespaces to their corresponding documentation. Such a link can
  308 +# be prevented in individual cases by putting a % sign in front of the word or
  309 +# globally by setting AUTOLINK_SUPPORT to NO.
  310 +# The default value is: YES.
  311 +
  312 +AUTOLINK_SUPPORT = YES
  313 +
  314 +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
  315 +# to include (a tag file for) the STL sources as input, then you should set this
  316 +# tag to YES in order to let doxygen match functions declarations and
  317 +# definitions whose arguments contain STL classes (e.g. func(std::string);
  318 +# versus func(std::string) {}). This also make the inheritance and collaboration
  319 +# diagrams that involve STL classes more complete and accurate.
  320 +# The default value is: NO.
  321 +
  322 +BUILTIN_STL_SUPPORT = NO
  323 +
  324 +# If you use Microsoft's C++/CLI language, you should set this option to YES to
  325 +# enable parsing support.
  326 +# The default value is: NO.
  327 +
  328 +CPP_CLI_SUPPORT = NO
  329 +
  330 +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
  331 +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
  332 +# will parse them like normal C++ but will assume all classes use public instead
  333 +# of private inheritance when no explicit protection keyword is present.
  334 +# The default value is: NO.
  335 +
  336 +SIP_SUPPORT = NO
  337 +
  338 +# For Microsoft's IDL there are propget and propput attributes to indicate
  339 +# getter and setter methods for a property. Setting this option to YES will make
  340 +# doxygen to replace the get and set methods by a property in the documentation.
  341 +# This will only work if the methods are indeed getting or setting a simple
  342 +# type. If this is not the case, or you want to show the methods anyway, you
  343 +# should set this option to NO.
  344 +# The default value is: YES.
  345 +
  346 +IDL_PROPERTY_SUPPORT = YES
  347 +
  348 +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
  349 +# tag is set to YES then doxygen will reuse the documentation of the first
  350 +# member in the group (if any) for the other members of the group. By default
  351 +# all members of a group must be documented explicitly.
  352 +# The default value is: NO.
  353 +
  354 +DISTRIBUTE_GROUP_DOC = NO
  355 +
  356 +# Set the SUBGROUPING tag to YES to allow class member groups of the same type
  357 +# (for instance a group of public functions) to be put as a subgroup of that
  358 +# type (e.g. under the Public Functions section). Set it to NO to prevent
  359 +# subgrouping. Alternatively, this can be done per class using the
  360 +# \nosubgrouping command.
  361 +# The default value is: YES.
  362 +
  363 +SUBGROUPING = YES
  364 +
  365 +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
  366 +# are shown inside the group in which they are included (e.g. using \ingroup)
  367 +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
  368 +# and RTF).
  369 +#
  370 +# Note that this feature does not work in combination with
  371 +# SEPARATE_MEMBER_PAGES.
  372 +# The default value is: NO.
  373 +
  374 +INLINE_GROUPED_CLASSES = NO
  375 +
  376 +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
  377 +# with only public data fields or simple typedef fields will be shown inline in
  378 +# the documentation of the scope in which they are defined (i.e. file,
  379 +# namespace, or group documentation), provided this scope is documented. If set
  380 +# to NO, structs, classes, and unions are shown on a separate page (for HTML and
  381 +# Man pages) or section (for LaTeX and RTF).
  382 +# The default value is: NO.
  383 +
  384 +INLINE_SIMPLE_STRUCTS = NO
  385 +
  386 +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
  387 +# enum is documented as struct, union, or enum with the name of the typedef. So
  388 +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
  389 +# with name TypeT. When disabled the typedef will appear as a member of a file,
  390 +# namespace, or class. And the struct will be named TypeS. This can typically be
  391 +# useful for C code in case the coding convention dictates that all compound
  392 +# types are typedef'ed and only the typedef is referenced, never the tag name.
  393 +# The default value is: NO.
  394 +
  395 +TYPEDEF_HIDES_STRUCT = NO
  396 +
  397 +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
  398 +# cache is used to resolve symbols given their name and scope. Since this can be
  399 +# an expensive process and often the same symbol appears multiple times in the
  400 +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
  401 +# doxygen will become slower. If the cache is too large, memory is wasted. The
  402 +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
  403 +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
  404 +# symbols. At the end of a run doxygen will report the cache usage and suggest
  405 +# the optimal cache size from a speed point of view.
  406 +# Minimum value: 0, maximum value: 9, default value: 0.
  407 +
  408 +LOOKUP_CACHE_SIZE = 0
  409 +
  410 +#---------------------------------------------------------------------------
  411 +# Build related configuration options
  412 +#---------------------------------------------------------------------------
  413 +
  414 +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
  415 +# documentation are documented, even if no documentation was available. Private
  416 +# class members and static file members will be hidden unless the
  417 +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
  418 +# Note: This will also disable the warnings about undocumented members that are
  419 +# normally produced when WARNINGS is set to YES.
  420 +# The default value is: NO.
  421 +
  422 +EXTRACT_ALL = YES
  423 +
  424 +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
  425 +# be included in the documentation.
  426 +# The default value is: NO.
  427 +
  428 +EXTRACT_PRIVATE = YES
  429 +
  430 +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
  431 +# scope will be included in the documentation.
  432 +# The default value is: NO.
  433 +
  434 +EXTRACT_PACKAGE = NO
  435 +
  436 +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
  437 +# included in the documentation.
  438 +# The default value is: NO.
  439 +
  440 +EXTRACT_STATIC = YES
  441 +
  442 +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
  443 +# locally in source files will be included in the documentation. If set to NO,
  444 +# only classes defined in header files are included. Does not have any effect
  445 +# for Java sources.
  446 +# The default value is: YES.
  447 +
  448 +EXTRACT_LOCAL_CLASSES = YES
  449 +
  450 +# This flag is only useful for Objective-C code. If set to YES, local methods,
  451 +# which are defined in the implementation section but not in the interface are
  452 +# included in the documentation. If set to NO, only methods in the interface are
  453 +# included.
  454 +# The default value is: NO.
  455 +
  456 +EXTRACT_LOCAL_METHODS = NO
  457 +
  458 +# If this flag is set to YES, the members of anonymous namespaces will be
  459 +# extracted and appear in the documentation as a namespace called
  460 +# 'anonymous_namespace{file}', where file will be replaced with the base name of
  461 +# the file that contains the anonymous namespace. By default anonymous namespace
  462 +# are hidden.
  463 +# The default value is: NO.
  464 +
  465 +EXTRACT_ANON_NSPACES = NO
  466 +
  467 +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
  468 +# undocumented members inside documented classes or files. If set to NO these
  469 +# members will be included in the various overviews, but no documentation
  470 +# section is generated. This option has no effect if EXTRACT_ALL is enabled.
  471 +# The default value is: NO.
  472 +
  473 +HIDE_UNDOC_MEMBERS = NO
  474 +
  475 +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
  476 +# undocumented classes that are normally visible in the class hierarchy. If set
  477 +# to NO, these classes will be included in the various overviews. This option
  478 +# has no effect if EXTRACT_ALL is enabled.
  479 +# The default value is: NO.
  480 +
  481 +HIDE_UNDOC_CLASSES = NO
  482 +
  483 +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
  484 +# (class|struct|union) declarations. If set to NO, these declarations will be
  485 +# included in the documentation.
  486 +# The default value is: NO.
  487 +
  488 +HIDE_FRIEND_COMPOUNDS = NO
  489 +
  490 +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
  491 +# documentation blocks found inside the body of a function. If set to NO, these
  492 +# blocks will be appended to the function's detailed documentation block.
  493 +# The default value is: NO.
  494 +
  495 +HIDE_IN_BODY_DOCS = NO
  496 +
  497 +# The INTERNAL_DOCS tag determines if documentation that is typed after a
  498 +# \internal command is included. If the tag is set to NO then the documentation
  499 +# will be excluded. Set it to YES to include the internal documentation.
  500 +# The default value is: NO.
  501 +
  502 +INTERNAL_DOCS = NO
  503 +
  504 +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
  505 +# names in lower-case letters. If set to YES, upper-case letters are also
  506 +# allowed. This is useful if you have classes or files whose names only differ
  507 +# in case and if your file system supports case sensitive file names. Windows
  508 +# and Mac users are advised to set this option to NO.
  509 +# The default value is: system dependent.
  510 +
  511 +CASE_SENSE_NAMES = NO
  512 +
  513 +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
  514 +# their full class and namespace scopes in the documentation. If set to YES, the
  515 +# scope will be hidden.
  516 +# The default value is: NO.
  517 +
  518 +HIDE_SCOPE_NAMES = NO
  519 +
  520 +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
  521 +# append additional text to a page's title, such as Class Reference. If set to
  522 +# YES the compound reference will be hidden.
  523 +# The default value is: NO.
  524 +
  525 +HIDE_COMPOUND_REFERENCE= NO
  526 +
  527 +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
  528 +# the files that are included by a file in the documentation of that file.
  529 +# The default value is: YES.
  530 +
  531 +SHOW_INCLUDE_FILES = YES
  532 +
  533 +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
  534 +# grouped member an include statement to the documentation, telling the reader
  535 +# which file to include in order to use the member.
  536 +# The default value is: NO.
  537 +
  538 +SHOW_GROUPED_MEMB_INC = NO
  539 +
  540 +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
  541 +# files with double quotes in the documentation rather than with sharp brackets.
  542 +# The default value is: NO.
  543 +
  544 +FORCE_LOCAL_INCLUDES = NO
  545 +
  546 +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
  547 +# documentation for inline members.
  548 +# The default value is: YES.
  549 +
  550 +INLINE_INFO = YES
  551 +
  552 +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
  553 +# (detailed) documentation of file and class members alphabetically by member
  554 +# name. If set to NO, the members will appear in declaration order.
  555 +# The default value is: YES.
  556 +
  557 +SORT_MEMBER_DOCS = YES
  558 +
  559 +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
  560 +# descriptions of file, namespace and class members alphabetically by member
  561 +# name. If set to NO, the members will appear in declaration order. Note that
  562 +# this will also influence the order of the classes in the class list.
  563 +# The default value is: NO.
  564 +
  565 +SORT_BRIEF_DOCS = NO
  566 +
  567 +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
  568 +# (brief and detailed) documentation of class members so that constructors and
  569 +# destructors are listed first. If set to NO the constructors will appear in the
  570 +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
  571 +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
  572 +# member documentation.
  573 +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
  574 +# detailed member documentation.
  575 +# The default value is: NO.
  576 +
  577 +SORT_MEMBERS_CTORS_1ST = NO
  578 +
  579 +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
  580 +# of group names into alphabetical order. If set to NO the group names will
  581 +# appear in their defined order.
  582 +# The default value is: NO.
  583 +
  584 +SORT_GROUP_NAMES = NO
  585 +
  586 +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
  587 +# fully-qualified names, including namespaces. If set to NO, the class list will
  588 +# be sorted only by class name, not including the namespace part.
  589 +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
  590 +# Note: This option applies only to the class list, not to the alphabetical
  591 +# list.
  592 +# The default value is: NO.
  593 +
  594 +SORT_BY_SCOPE_NAME = NO
  595 +
  596 +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
  597 +# type resolution of all parameters of a function it will reject a match between
  598 +# the prototype and the implementation of a member function even if there is
  599 +# only one candidate or it is obvious which candidate to choose by doing a
  600 +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
  601 +# accept a match between prototype and implementation in such cases.
  602 +# The default value is: NO.
  603 +
  604 +STRICT_PROTO_MATCHING = NO
  605 +
  606 +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
  607 +# list. This list is created by putting \todo commands in the documentation.
  608 +# The default value is: YES.
  609 +
  610 +GENERATE_TODOLIST = NO
  611 +
  612 +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
  613 +# list. This list is created by putting \test commands in the documentation.
  614 +# The default value is: YES.
  615 +
  616 +GENERATE_TESTLIST = NO
  617 +
  618 +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
  619 +# list. This list is created by putting \bug commands in the documentation.
  620 +# The default value is: YES.
  621 +
  622 +GENERATE_BUGLIST = NO
  623 +
  624 +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
  625 +# the deprecated list. This list is created by putting \deprecated commands in
  626 +# the documentation.
  627 +# The default value is: YES.
  628 +
  629 +GENERATE_DEPRECATEDLIST= YES
  630 +
  631 +# The ENABLED_SECTIONS tag can be used to enable conditional documentation
  632 +# sections, marked by \if <section_label> ... \endif and \cond <section_label>
  633 +# ... \endcond blocks.
  634 +
  635 +ENABLED_SECTIONS =
  636 +
  637 +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
  638 +# initial value of a variable or macro / define can have for it to appear in the
  639 +# documentation. If the initializer consists of more lines than specified here
  640 +# it will be hidden. Use a value of 0 to hide initializers completely. The
  641 +# appearance of the value of individual variables and macros / defines can be
  642 +# controlled using \showinitializer or \hideinitializer command in the
  643 +# documentation regardless of this setting.
  644 +# Minimum value: 0, maximum value: 10000, default value: 30.
  645 +
  646 +MAX_INITIALIZER_LINES = 30
  647 +
  648 +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
  649 +# the bottom of the documentation of classes and structs. If set to YES, the
  650 +# list will mention the files that were used to generate the documentation.
  651 +# The default value is: YES.
  652 +
  653 +SHOW_USED_FILES = YES
  654 +
  655 +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
  656 +# will remove the Files entry from the Quick Index and from the Folder Tree View
  657 +# (if specified).
  658 +# The default value is: YES.
  659 +
  660 +SHOW_FILES = YES
  661 +
  662 +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
  663 +# page. This will remove the Namespaces entry from the Quick Index and from the
  664 +# Folder Tree View (if specified).
  665 +# The default value is: YES.
  666 +
  667 +SHOW_NAMESPACES = YES
  668 +
  669 +# The FILE_VERSION_FILTER tag can be used to specify a program or script that
  670 +# doxygen should invoke to get the current version for each file (typically from
  671 +# the version control system). Doxygen will invoke the program by executing (via
  672 +# popen()) the command command input-file, where command is the value of the
  673 +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
  674 +# by doxygen. Whatever the program writes to standard output is used as the file
  675 +# version. For an example see the documentation.
  676 +
  677 +FILE_VERSION_FILTER =
  678 +
  679 +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
  680 +# by doxygen. The layout file controls the global structure of the generated
  681 +# output files in an output format independent way. To create the layout file
  682 +# that represents doxygen's defaults, run doxygen with the -l option. You can
  683 +# optionally specify a file name after the option, if omitted DoxygenLayout.xml
  684 +# will be used as the name of the layout file.
  685 +#
  686 +# Note that if you run doxygen from a directory containing a file called
  687 +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
  688 +# tag is left empty.
  689 +
  690 +LAYOUT_FILE =
  691 +
  692 +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
  693 +# the reference definitions. This must be a list of .bib files. The .bib
  694 +# extension is automatically appended if omitted. This requires the bibtex tool
  695 +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
  696 +# For LaTeX the style of the bibliography can be controlled using
  697 +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
  698 +# search path. See also \cite for info how to create references.
  699 +
  700 +CITE_BIB_FILES =
  701 +
  702 +#---------------------------------------------------------------------------
  703 +# Configuration options related to warning and progress messages
  704 +#---------------------------------------------------------------------------
  705 +
  706 +# The QUIET tag can be used to turn on/off the messages that are generated to
  707 +# standard output by doxygen. If QUIET is set to YES this implies that the
  708 +# messages are off.
  709 +# The default value is: NO.
  710 +
  711 +QUIET = YES
  712 +
  713 +# The WARNINGS tag can be used to turn on/off the warning messages that are
  714 +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
  715 +# this implies that the warnings are on.
  716 +#
  717 +# Tip: Turn warnings on while writing the documentation.
  718 +# The default value is: YES.
  719 +
  720 +WARNINGS = YES
  721 +
  722 +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
  723 +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
  724 +# will automatically be disabled.
  725 +# The default value is: YES.
  726 +
  727 +WARN_IF_UNDOCUMENTED = YES
  728 +
  729 +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
  730 +# potential errors in the documentation, such as not documenting some parameters
  731 +# in a documented function, or documenting parameters that don't exist or using
  732 +# markup commands wrongly.
  733 +# The default value is: YES.
  734 +
  735 +WARN_IF_DOC_ERROR = YES
  736 +
  737 +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
  738 +# are documented, but have no documentation for their parameters or return
  739 +# value. If set to NO, doxygen will only warn about wrong or incomplete
  740 +# parameter documentation, but not about the absence of documentation.
  741 +# The default value is: NO.
  742 +
  743 +WARN_NO_PARAMDOC = YES
  744 +
  745 +# The WARN_FORMAT tag determines the format of the warning messages that doxygen
  746 +# can produce. The string should contain the $file, $line, and $text tags, which
  747 +# will be replaced by the file and line number from which the warning originated
  748 +# and the warning text. Optionally the format may contain $version, which will
  749 +# be replaced by the version of the file (if it could be obtained via
  750 +# FILE_VERSION_FILTER)
  751 +# The default value is: $file:$line: $text.
  752 +
  753 +WARN_FORMAT = "$file:$line: $text"
  754 +
  755 +# The WARN_LOGFILE tag can be used to specify a file to which warning and error
  756 +# messages should be written. If left blank the output is written to standard
  757 +# error (stderr).
  758 +
  759 +WARN_LOGFILE =
  760 +
  761 +#---------------------------------------------------------------------------
  762 +# Configuration options related to the input files
  763 +#---------------------------------------------------------------------------
  764 +
  765 +# The INPUT tag is used to specify the files and/or directories that contain
  766 +# documented source files. You may enter file names like myfile.cpp or
  767 +# directories like /usr/src/myproject. Separate the files or directories with
  768 +# spaces.
  769 +# Note: If this tag is empty the current directory is searched.
  770 +
  771 +INPUT = ./
  772 +
  773 +# This tag can be used to specify the character encoding of the source files
  774 +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
  775 +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
  776 +# documentation (see: http://www.gnu.org/software/libiconv) for the list of
  777 +# possible encodings.
  778 +# The default value is: UTF-8.
  779 +
  780 +INPUT_ENCODING = UTF-8
  781 +
  782 +# If the value of the INPUT tag contains directories, you can use the
  783 +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
  784 +# *.h) to filter out the source-files in the directories. If left blank the
  785 +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
  786 +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
  787 +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
  788 +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
  789 +# *.qsf, *.as and *.js.
  790 +
  791 +FILE_PATTERNS = *.h \
  792 + *.c \
  793 + *.txt
  794 +
  795 +# The RECURSIVE tag can be used to specify whether or not subdirectories should
  796 +# be searched for input files as well.
  797 +# The default value is: NO.
  798 +
  799 +RECURSIVE = YES
  800 +
  801 +# The EXCLUDE tag can be used to specify files and/or directories that should be
  802 +# excluded from the INPUT source files. This way you can easily exclude a
  803 +# subdirectory from a directory tree whose root is specified with the INPUT tag.
  804 +#
  805 +# Note that relative paths are relative to the directory from which doxygen is
  806 +# run.
  807 +
  808 +EXCLUDE = Documentation/
  809 +
  810 +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
  811 +# directories that are symbolic links (a Unix file system feature) are excluded
  812 +# from the input.
  813 +# The default value is: NO.
  814 +
  815 +EXCLUDE_SYMLINKS = NO
  816 +
  817 +# If the value of the INPUT tag contains directories, you can use the
  818 +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
  819 +# certain files from those directories.
  820 +#
  821 +# Note that the wildcards are matched against the file with absolute path, so to
  822 +# exclude all test directories for example use the pattern */test/*
  823 +
  824 +EXCLUDE_PATTERNS =
  825 +
  826 +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
  827 +# (namespaces, classes, functions, etc.) that should be excluded from the
  828 +# output. The symbol name can be a fully qualified name, a word, or if the
  829 +# wildcard * is used, a substring. Examples: ANamespace, AClass,
  830 +# AClass::ANamespace, ANamespace::*Test
  831 +#
  832 +# Note that the wildcards are matched against the file with absolute path, so to
  833 +# exclude all test directories use the pattern */test/*
  834 +
  835 +EXCLUDE_SYMBOLS = __* \
  836 + INCLUDE_FROM_*
  837 +
  838 +# The EXAMPLE_PATH tag can be used to specify one or more files or directories
  839 +# that contain example code fragments that are included (see the \include
  840 +# command).
  841 +
  842 +EXAMPLE_PATH =
  843 +
  844 +# If the value of the EXAMPLE_PATH tag contains directories, you can use the
  845 +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
  846 +# *.h) to filter out the source-files in the directories. If left blank all
  847 +# files are included.
  848 +
  849 +EXAMPLE_PATTERNS = *
  850 +
  851 +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
  852 +# searched for input files to be used with the \include or \dontinclude commands
  853 +# irrespective of the value of the RECURSIVE tag.
  854 +# The default value is: NO.
  855 +
  856 +EXAMPLE_RECURSIVE = NO
  857 +
  858 +# The IMAGE_PATH tag can be used to specify one or more files or directories
  859 +# that contain images that are to be included in the documentation (see the
  860 +# \image command).
  861 +
  862 +IMAGE_PATH =
  863 +
  864 +# The INPUT_FILTER tag can be used to specify a program that doxygen should
  865 +# invoke to filter for each input file. Doxygen will invoke the filter program
  866 +# by executing (via popen()) the command:
  867 +#
  868 +# <filter> <input-file>
  869 +#
  870 +# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
  871 +# name of an input file. Doxygen will then use the output that the filter
  872 +# program writes to standard output. If FILTER_PATTERNS is specified, this tag
  873 +# will be ignored.
  874 +#
  875 +# Note that the filter must not add or remove lines; it is applied before the
  876 +# code is scanned, but not when the output code is generated. If lines are added
  877 +# or removed, the anchors will not be placed correctly.
  878 +
  879 +INPUT_FILTER =
  880 +
  881 +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
  882 +# basis. Doxygen will compare the file name with each pattern and apply the
  883 +# filter if there is a match. The filters are a list of the form: pattern=filter
  884 +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
  885 +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
  886 +# patterns match the file name, INPUT_FILTER is applied.
  887 +
  888 +FILTER_PATTERNS =
  889 +
  890 +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
  891 +# INPUT_FILTER) will also be used to filter the input files that are used for
  892 +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
  893 +# The default value is: NO.
  894 +
  895 +FILTER_SOURCE_FILES = NO
  896 +
  897 +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
  898 +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
  899 +# it is also possible to disable source filtering for a specific pattern using
  900 +# *.ext= (so without naming a filter).
  901 +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
  902 +
  903 +FILTER_SOURCE_PATTERNS =
  904 +
  905 +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
  906 +# is part of the input, its contents will be placed on the main page
  907 +# (index.html). This can be useful if you have a project on for instance GitHub
  908 +# and want to reuse the introduction page also for the doxygen output.
  909 +
  910 +USE_MDFILE_AS_MAINPAGE =
  911 +
  912 +#---------------------------------------------------------------------------
  913 +# Configuration options related to source browsing
  914 +#---------------------------------------------------------------------------
  915 +
  916 +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
  917 +# generated. Documented entities will be cross-referenced with these sources.
  918 +#
  919 +# Note: To get rid of all source code in the generated output, make sure that
  920 +# also VERBATIM_HEADERS is set to NO.
  921 +# The default value is: NO.
  922 +
  923 +SOURCE_BROWSER = NO
  924 +
  925 +# Setting the INLINE_SOURCES tag to YES will include the body of functions,
  926 +# classes and enums directly into the documentation.
  927 +# The default value is: NO.
  928 +
  929 +INLINE_SOURCES = NO
  930 +
  931 +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
  932 +# special comment blocks from generated source code fragments. Normal C, C++ and
  933 +# Fortran comments will always remain visible.
  934 +# The default value is: YES.
  935 +
  936 +STRIP_CODE_COMMENTS = YES
  937 +
  938 +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
  939 +# function all documented functions referencing it will be listed.
  940 +# The default value is: NO.
  941 +
  942 +REFERENCED_BY_RELATION = NO
  943 +
  944 +# If the REFERENCES_RELATION tag is set to YES then for each documented function
  945 +# all documented entities called/used by that function will be listed.
  946 +# The default value is: NO.
  947 +
  948 +REFERENCES_RELATION = NO
  949 +
  950 +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
  951 +# to YES then the hyperlinks from functions in REFERENCES_RELATION and
  952 +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
  953 +# link to the documentation.
  954 +# The default value is: YES.
  955 +
  956 +REFERENCES_LINK_SOURCE = NO
  957 +
  958 +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
  959 +# source code will show a tooltip with additional information such as prototype,
  960 +# brief description and links to the definition and documentation. Since this
  961 +# will make the HTML file larger and loading of large files a bit slower, you
  962 +# can opt to disable this feature.
  963 +# The default value is: YES.
  964 +# This tag requires that the tag SOURCE_BROWSER is set to YES.
  965 +
  966 +SOURCE_TOOLTIPS = YES
  967 +
  968 +# If the USE_HTAGS tag is set to YES then the references to source code will
  969 +# point to the HTML generated by the htags(1) tool instead of doxygen built-in
  970 +# source browser. The htags tool is part of GNU's global source tagging system
  971 +# (see http://www.gnu.org/software/global/global.html). You will need version
  972 +# 4.8.6 or higher.
  973 +#
  974 +# To use it do the following:
  975 +# - Install the latest version of global
  976 +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
  977 +# - Make sure the INPUT points to the root of the source tree
  978 +# - Run doxygen as normal
  979 +#
  980 +# Doxygen will invoke htags (and that will in turn invoke gtags), so these
  981 +# tools must be available from the command line (i.e. in the search path).
  982 +#
  983 +# The result: instead of the source browser generated by doxygen, the links to
  984 +# source code will now point to the output of htags.
  985 +# The default value is: NO.
  986 +# This tag requires that the tag SOURCE_BROWSER is set to YES.
  987 +
  988 +USE_HTAGS = NO
  989 +
  990 +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
  991 +# verbatim copy of the header file for each class for which an include is
  992 +# specified. Set to NO to disable this.
  993 +# See also: Section \class.
  994 +# The default value is: YES.
  995 +
  996 +VERBATIM_HEADERS = NO
  997 +
  998 +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
  999 +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
  1000 +# cost of reduced performance. This can be particularly helpful with template
  1001 +# rich C++ code for which doxygen's built-in parser lacks the necessary type
  1002 +# information.
  1003 +# Note: The availability of this option depends on whether or not doxygen was
  1004 +# compiled with the --with-libclang option.
  1005 +# The default value is: NO.
  1006 +
  1007 +CLANG_ASSISTED_PARSING = NO
  1008 +
  1009 +# If clang assisted parsing is enabled you can provide the compiler with command
  1010 +# line options that you would normally use when invoking the compiler. Note that
  1011 +# the include paths will already be set by doxygen for the files and directories
  1012 +# specified with INPUT and INCLUDE_PATH.
  1013 +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
  1014 +
  1015 +CLANG_OPTIONS =
  1016 +
  1017 +#---------------------------------------------------------------------------
  1018 +# Configuration options related to the alphabetical class index
  1019 +#---------------------------------------------------------------------------
  1020 +
  1021 +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
  1022 +# compounds will be generated. Enable this if the project contains a lot of
  1023 +# classes, structs, unions or interfaces.
  1024 +# The default value is: YES.
  1025 +
  1026 +ALPHABETICAL_INDEX = YES
  1027 +
  1028 +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
  1029 +# which the alphabetical index list will be split.
  1030 +# Minimum value: 1, maximum value: 20, default value: 5.
  1031 +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
  1032 +
  1033 +COLS_IN_ALPHA_INDEX = 5
  1034 +
  1035 +# In case all classes in a project start with a common prefix, all classes will
  1036 +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
  1037 +# can be used to specify a prefix (or a list of prefixes) that should be ignored
  1038 +# while generating the index headers.
  1039 +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
  1040 +
  1041 +IGNORE_PREFIX =
  1042 +
  1043 +#---------------------------------------------------------------------------
  1044 +# Configuration options related to the HTML output
  1045 +#---------------------------------------------------------------------------
  1046 +
  1047 +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
  1048 +# The default value is: YES.
  1049 +
  1050 +GENERATE_HTML = YES
  1051 +
  1052 +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
  1053 +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
  1054 +# it.
  1055 +# The default directory is: html.
  1056 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1057 +
  1058 +HTML_OUTPUT = html
  1059 +
  1060 +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
  1061 +# generated HTML page (for example: .htm, .php, .asp).
  1062 +# The default value is: .html.
  1063 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1064 +
  1065 +HTML_FILE_EXTENSION = .html
  1066 +
  1067 +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
  1068 +# each generated HTML page. If the tag is left blank doxygen will generate a
  1069 +# standard header.
  1070 +#
  1071 +# To get valid HTML the header file that includes any scripts and style sheets
  1072 +# that doxygen needs, which is dependent on the configuration options used (e.g.
  1073 +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
  1074 +# default header using
  1075 +# doxygen -w html new_header.html new_footer.html new_stylesheet.css
  1076 +# YourConfigFile
  1077 +# and then modify the file new_header.html. See also section "Doxygen usage"
  1078 +# for information on how to generate the default header that doxygen normally
  1079 +# uses.
  1080 +# Note: The header is subject to change so you typically have to regenerate the
  1081 +# default header when upgrading to a newer version of doxygen. For a description
  1082 +# of the possible markers and block names see the documentation.
  1083 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1084 +
  1085 +HTML_HEADER =
  1086 +
  1087 +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
  1088 +# generated HTML page. If the tag is left blank doxygen will generate a standard
  1089 +# footer. See HTML_HEADER for more information on how to generate a default
  1090 +# footer and what special commands can be used inside the footer. See also
  1091 +# section "Doxygen usage" for information on how to generate the default footer
  1092 +# that doxygen normally uses.
  1093 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1094 +
  1095 +HTML_FOOTER =
  1096 +
  1097 +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
  1098 +# sheet that is used by each HTML page. It can be used to fine-tune the look of
  1099 +# the HTML output. If left blank doxygen will generate a default style sheet.
  1100 +# See also section "Doxygen usage" for information on how to generate the style
  1101 +# sheet that doxygen normally uses.
  1102 +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
  1103 +# it is more robust and this tag (HTML_STYLESHEET) will in the future become
  1104 +# obsolete.
  1105 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1106 +
  1107 +HTML_STYLESHEET =
  1108 +
  1109 +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
  1110 +# cascading style sheets that are included after the standard style sheets
  1111 +# created by doxygen. Using this option one can overrule certain style aspects.
  1112 +# This is preferred over using HTML_STYLESHEET since it does not replace the
  1113 +# standard style sheet and is therefore more robust against future updates.
  1114 +# Doxygen will copy the style sheet files to the output directory.
  1115 +# Note: The order of the extra style sheet files is of importance (e.g. the last
  1116 +# style sheet in the list overrules the setting of the previous ones in the
  1117 +# list). For an example see the documentation.
  1118 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1119 +
  1120 +HTML_EXTRA_STYLESHEET =
  1121 +
  1122 +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
  1123 +# other source files which should be copied to the HTML output directory. Note
  1124 +# that these files will be copied to the base HTML output directory. Use the
  1125 +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
  1126 +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
  1127 +# files will be copied as-is; there are no commands or markers available.
  1128 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1129 +
  1130 +HTML_EXTRA_FILES =
  1131 +
  1132 +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
  1133 +# will adjust the colors in the style sheet and background images according to
  1134 +# this color. Hue is specified as an angle on a colorwheel, see
  1135 +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
  1136 +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
  1137 +# purple, and 360 is red again.
  1138 +# Minimum value: 0, maximum value: 359, default value: 220.
  1139 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1140 +
  1141 +HTML_COLORSTYLE_HUE = 220
  1142 +
  1143 +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
  1144 +# in the HTML output. For a value of 0 the output will use grayscales only. A
  1145 +# value of 255 will produce the most vivid colors.
  1146 +# Minimum value: 0, maximum value: 255, default value: 100.
  1147 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1148 +
  1149 +HTML_COLORSTYLE_SAT = 100
  1150 +
  1151 +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
  1152 +# luminance component of the colors in the HTML output. Values below 100
  1153 +# gradually make the output lighter, whereas values above 100 make the output
  1154 +# darker. The value divided by 100 is the actual gamma applied, so 80 represents
  1155 +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
  1156 +# change the gamma.
  1157 +# Minimum value: 40, maximum value: 240, default value: 80.
  1158 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1159 +
  1160 +HTML_COLORSTYLE_GAMMA = 80
  1161 +
  1162 +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
  1163 +# page will contain the date and time when the page was generated. Setting this
  1164 +# to NO can help when comparing the output of multiple runs.
  1165 +# The default value is: YES.
  1166 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1167 +
  1168 +HTML_TIMESTAMP = NO
  1169 +
  1170 +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
  1171 +# documentation will contain sections that can be hidden and shown after the
  1172 +# page has loaded.
  1173 +# The default value is: NO.
  1174 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1175 +
  1176 +HTML_DYNAMIC_SECTIONS = YES
  1177 +
  1178 +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
  1179 +# shown in the various tree structured indices initially; the user can expand
  1180 +# and collapse entries dynamically later on. Doxygen will expand the tree to
  1181 +# such a level that at most the specified number of entries are visible (unless
  1182 +# a fully collapsed tree already exceeds this amount). So setting the number of
  1183 +# entries 1 will produce a full collapsed tree by default. 0 is a special value
  1184 +# representing an infinite number of entries and will result in a full expanded
  1185 +# tree by default.
  1186 +# Minimum value: 0, maximum value: 9999, default value: 100.
  1187 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1188 +
  1189 +HTML_INDEX_NUM_ENTRIES = 100
  1190 +
  1191 +# If the GENERATE_DOCSET tag is set to YES, additional index files will be
  1192 +# generated that can be used as input for Apple's Xcode 3 integrated development
  1193 +# environment (see: http://developer.apple.com/tools/xcode/), introduced with
  1194 +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
  1195 +# Makefile in the HTML output directory. Running make will produce the docset in
  1196 +# that directory and running make install will install the docset in
  1197 +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
  1198 +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
  1199 +# for more information.
  1200 +# The default value is: NO.
  1201 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1202 +
  1203 +GENERATE_DOCSET = NO
  1204 +
  1205 +# This tag determines the name of the docset feed. A documentation feed provides
  1206 +# an umbrella under which multiple documentation sets from a single provider
  1207 +# (such as a company or product suite) can be grouped.
  1208 +# The default value is: Doxygen generated docs.
  1209 +# This tag requires that the tag GENERATE_DOCSET is set to YES.
  1210 +
  1211 +DOCSET_FEEDNAME = "Doxygen generated docs"
  1212 +
  1213 +# This tag specifies a string that should uniquely identify the documentation
  1214 +# set bundle. This should be a reverse domain-name style string, e.g.
  1215 +# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
  1216 +# The default value is: org.doxygen.Project.
  1217 +# This tag requires that the tag GENERATE_DOCSET is set to YES.
  1218 +
  1219 +DOCSET_BUNDLE_ID = org.doxygen.Project
  1220 +
  1221 +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
  1222 +# the documentation publisher. This should be a reverse domain-name style
  1223 +# string, e.g. com.mycompany.MyDocSet.documentation.
  1224 +# The default value is: org.doxygen.Publisher.
  1225 +# This tag requires that the tag GENERATE_DOCSET is set to YES.
  1226 +
  1227 +DOCSET_PUBLISHER_ID = org.doxygen.Publisher
  1228 +
  1229 +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
  1230 +# The default value is: Publisher.
  1231 +# This tag requires that the tag GENERATE_DOCSET is set to YES.
  1232 +
  1233 +DOCSET_PUBLISHER_NAME = Publisher
  1234 +
  1235 +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
  1236 +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
  1237 +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
  1238 +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
  1239 +# Windows.
  1240 +#
  1241 +# The HTML Help Workshop contains a compiler that can convert all HTML output
  1242 +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
  1243 +# files are now used as the Windows 98 help format, and will replace the old
  1244 +# Windows help format (.hlp) on all Windows platforms in the future. Compressed
  1245 +# HTML files also contain an index, a table of contents, and you can search for
  1246 +# words in the documentation. The HTML workshop also contains a viewer for
  1247 +# compressed HTML files.
  1248 +# The default value is: NO.
  1249 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1250 +
  1251 +GENERATE_HTMLHELP = NO
  1252 +
  1253 +# The CHM_FILE tag can be used to specify the file name of the resulting .chm
  1254 +# file. You can add a path in front of the file if the result should not be
  1255 +# written to the html output directory.
  1256 +# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
  1257 +
  1258 +CHM_FILE =
  1259 +
  1260 +# The HHC_LOCATION tag can be used to specify the location (absolute path
  1261 +# including file name) of the HTML help compiler (hhc.exe). If non-empty,
  1262 +# doxygen will try to run the HTML help compiler on the generated index.hhp.
  1263 +# The file has to be specified with full path.
  1264 +# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
  1265 +
  1266 +HHC_LOCATION =
  1267 +
  1268 +# The GENERATE_CHI flag controls if a separate .chi index file is generated
  1269 +# (YES) or that it should be included in the master .chm file (NO).
  1270 +# The default value is: NO.
  1271 +# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
  1272 +
  1273 +GENERATE_CHI = NO
  1274 +
  1275 +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
  1276 +# and project file content.
  1277 +# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
  1278 +
  1279 +CHM_INDEX_ENCODING =
  1280 +
  1281 +# The BINARY_TOC flag controls whether a binary table of contents is generated
  1282 +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
  1283 +# enables the Previous and Next buttons.
  1284 +# The default value is: NO.
  1285 +# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
  1286 +
  1287 +BINARY_TOC = NO
  1288 +
  1289 +# The TOC_EXPAND flag can be set to YES to add extra items for group members to
  1290 +# the table of contents of the HTML help documentation and to the tree view.
  1291 +# The default value is: NO.
  1292 +# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
  1293 +
  1294 +TOC_EXPAND = YES
  1295 +
  1296 +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
  1297 +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
  1298 +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
  1299 +# (.qch) of the generated HTML documentation.
  1300 +# The default value is: NO.
  1301 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1302 +
  1303 +GENERATE_QHP = NO
  1304 +
  1305 +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
  1306 +# the file name of the resulting .qch file. The path specified is relative to
  1307 +# the HTML output folder.
  1308 +# This tag requires that the tag GENERATE_QHP is set to YES.
  1309 +
  1310 +QCH_FILE =
  1311 +
  1312 +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
  1313 +# Project output. For more information please see Qt Help Project / Namespace
  1314 +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
  1315 +# The default value is: org.doxygen.Project.
  1316 +# This tag requires that the tag GENERATE_QHP is set to YES.
  1317 +
  1318 +QHP_NAMESPACE = org.doxygen.Project
  1319 +
  1320 +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
  1321 +# Help Project output. For more information please see Qt Help Project / Virtual
  1322 +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
  1323 +# folders).
  1324 +# The default value is: doc.
  1325 +# This tag requires that the tag GENERATE_QHP is set to YES.
  1326 +
  1327 +QHP_VIRTUAL_FOLDER = doc
  1328 +
  1329 +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
  1330 +# filter to add. For more information please see Qt Help Project / Custom
  1331 +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
  1332 +# filters).
  1333 +# This tag requires that the tag GENERATE_QHP is set to YES.
  1334 +
  1335 +QHP_CUST_FILTER_NAME =
  1336 +
  1337 +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
  1338 +# custom filter to add. For more information please see Qt Help Project / Custom
  1339 +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
  1340 +# filters).
  1341 +# This tag requires that the tag GENERATE_QHP is set to YES.
  1342 +
  1343 +QHP_CUST_FILTER_ATTRS =
  1344 +
  1345 +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
  1346 +# project's filter section matches. Qt Help Project / Filter Attributes (see:
  1347 +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
  1348 +# This tag requires that the tag GENERATE_QHP is set to YES.
  1349 +
  1350 +QHP_SECT_FILTER_ATTRS =
  1351 +
  1352 +# The QHG_LOCATION tag can be used to specify the location of Qt's
  1353 +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
  1354 +# generated .qhp file.
  1355 +# This tag requires that the tag GENERATE_QHP is set to YES.
  1356 +
  1357 +QHG_LOCATION =
  1358 +
  1359 +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
  1360 +# generated, together with the HTML files, they form an Eclipse help plugin. To
  1361 +# install this plugin and make it available under the help contents menu in
  1362 +# Eclipse, the contents of the directory containing the HTML and XML files needs
  1363 +# to be copied into the plugins directory of eclipse. The name of the directory
  1364 +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
  1365 +# After copying Eclipse needs to be restarted before the help appears.
  1366 +# The default value is: NO.
  1367 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1368 +
  1369 +GENERATE_ECLIPSEHELP = NO
  1370 +
  1371 +# A unique identifier for the Eclipse help plugin. When installing the plugin
  1372 +# the directory name containing the HTML and XML files should also have this
  1373 +# name. Each documentation set should have its own identifier.
  1374 +# The default value is: org.doxygen.Project.
  1375 +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
  1376 +
  1377 +ECLIPSE_DOC_ID = org.doxygen.Project
  1378 +
  1379 +# If you want full control over the layout of the generated HTML pages it might
  1380 +# be necessary to disable the index and replace it with your own. The
  1381 +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
  1382 +# of each HTML page. A value of NO enables the index and the value YES disables
  1383 +# it. Since the tabs in the index contain the same information as the navigation
  1384 +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
  1385 +# The default value is: NO.
  1386 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1387 +
  1388 +DISABLE_INDEX = YES
  1389 +
  1390 +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
  1391 +# structure should be generated to display hierarchical information. If the tag
  1392 +# value is set to YES, a side panel will be generated containing a tree-like
  1393 +# index structure (just like the one that is generated for HTML Help). For this
  1394 +# to work a browser that supports JavaScript, DHTML, CSS and frames is required
  1395 +# (i.e. any modern browser). Windows users are probably better off using the
  1396 +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
  1397 +# further fine-tune the look of the index. As an example, the default style
  1398 +# sheet generated by doxygen has an example that shows how to put an image at
  1399 +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
  1400 +# the same information as the tab index, you could consider setting
  1401 +# DISABLE_INDEX to YES when enabling this option.
  1402 +# The default value is: NO.
  1403 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1404 +
  1405 +GENERATE_TREEVIEW = YES
  1406 +
  1407 +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
  1408 +# doxygen will group on one line in the generated HTML documentation.
  1409 +#
  1410 +# Note that a value of 0 will completely suppress the enum values from appearing
  1411 +# in the overview section.
  1412 +# Minimum value: 0, maximum value: 20, default value: 4.
  1413 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1414 +
  1415 +ENUM_VALUES_PER_LINE = 1
  1416 +
  1417 +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
  1418 +# to set the initial width (in pixels) of the frame in which the tree is shown.
  1419 +# Minimum value: 0, maximum value: 1500, default value: 250.
  1420 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1421 +
  1422 +TREEVIEW_WIDTH = 250
  1423 +
  1424 +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
  1425 +# external symbols imported via tag files in a separate window.
  1426 +# The default value is: NO.
  1427 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1428 +
  1429 +EXT_LINKS_IN_WINDOW = NO
  1430 +
  1431 +# Use this tag to change the font size of LaTeX formulas included as images in
  1432 +# the HTML documentation. When you change the font size after a successful
  1433 +# doxygen run you need to manually remove any form_*.png images from the HTML
  1434 +# output directory to force them to be regenerated.
  1435 +# Minimum value: 8, maximum value: 50, default value: 10.
  1436 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1437 +
  1438 +FORMULA_FONTSIZE = 10
  1439 +
  1440 +# Use the FORMULA_TRANPARENT tag to determine whether or not the images
  1441 +# generated for formulas are transparent PNGs. Transparent PNGs are not
  1442 +# supported properly for IE 6.0, but are supported on all modern browsers.
  1443 +#
  1444 +# Note that when changing this option you need to delete any form_*.png files in
  1445 +# the HTML output directory before the changes have effect.
  1446 +# The default value is: YES.
  1447 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1448 +
  1449 +FORMULA_TRANSPARENT = YES
  1450 +
  1451 +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
  1452 +# http://www.mathjax.org) which uses client side Javascript for the rendering
  1453 +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
  1454 +# installed or if you want to formulas look prettier in the HTML output. When
  1455 +# enabled you may also need to install MathJax separately and configure the path
  1456 +# to it using the MATHJAX_RELPATH option.
  1457 +# The default value is: NO.
  1458 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1459 +
  1460 +USE_MATHJAX = NO
  1461 +
  1462 +# When MathJax is enabled you can set the default output format to be used for
  1463 +# the MathJax output. See the MathJax site (see:
  1464 +# http://docs.mathjax.org/en/latest/output.html) for more details.
  1465 +# Possible values are: HTML-CSS (which is slower, but has the best
  1466 +# compatibility), NativeMML (i.e. MathML) and SVG.
  1467 +# The default value is: HTML-CSS.
  1468 +# This tag requires that the tag USE_MATHJAX is set to YES.
  1469 +
  1470 +MATHJAX_FORMAT = HTML-CSS
  1471 +
  1472 +# When MathJax is enabled you need to specify the location relative to the HTML
  1473 +# output directory using the MATHJAX_RELPATH option. The destination directory
  1474 +# should contain the MathJax.js script. For instance, if the mathjax directory
  1475 +# is located at the same level as the HTML output directory, then
  1476 +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
  1477 +# Content Delivery Network so you can quickly see the result without installing
  1478 +# MathJax. However, it is strongly recommended to install a local copy of
  1479 +# MathJax from http://www.mathjax.org before deployment.
  1480 +# The default value is: http://cdn.mathjax.org/mathjax/latest.
  1481 +# This tag requires that the tag USE_MATHJAX is set to YES.
  1482 +
  1483 +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
  1484 +
  1485 +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
  1486 +# extension names that should be enabled during MathJax rendering. For example
  1487 +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
  1488 +# This tag requires that the tag USE_MATHJAX is set to YES.
  1489 +
  1490 +MATHJAX_EXTENSIONS =
  1491 +
  1492 +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
  1493 +# of code that will be used on startup of the MathJax code. See the MathJax site
  1494 +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
  1495 +# example see the documentation.
  1496 +# This tag requires that the tag USE_MATHJAX is set to YES.
  1497 +
  1498 +MATHJAX_CODEFILE =
  1499 +
  1500 +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
  1501 +# the HTML output. The underlying search engine uses javascript and DHTML and
  1502 +# should work on any modern browser. Note that when using HTML help
  1503 +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
  1504 +# there is already a search function so this one should typically be disabled.
  1505 +# For large projects the javascript based search engine can be slow, then
  1506 +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
  1507 +# search using the keyboard; to jump to the search box use <access key> + S
  1508 +# (what the <access key> is depends on the OS and browser, but it is typically
  1509 +# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
  1510 +# key> to jump into the search results window, the results can be navigated
  1511 +# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
  1512 +# the search. The filter options can be selected when the cursor is inside the
  1513 +# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
  1514 +# to select a filter and <Enter> or <escape> to activate or cancel the filter
  1515 +# option.
  1516 +# The default value is: YES.
  1517 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1518 +
  1519 +SEARCHENGINE = NO
  1520 +
  1521 +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
  1522 +# implemented using a web server instead of a web client using Javascript. There
  1523 +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
  1524 +# setting. When disabled, doxygen will generate a PHP script for searching and
  1525 +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
  1526 +# and searching needs to be provided by external tools. See the section
  1527 +# "External Indexing and Searching" for details.
  1528 +# The default value is: NO.
  1529 +# This tag requires that the tag SEARCHENGINE is set to YES.
  1530 +
  1531 +SERVER_BASED_SEARCH = NO
  1532 +
  1533 +# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
  1534 +# script for searching. Instead the search results are written to an XML file
  1535 +# which needs to be processed by an external indexer. Doxygen will invoke an
  1536 +# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
  1537 +# search results.
  1538 +#
  1539 +# Doxygen ships with an example indexer (doxyindexer) and search engine
  1540 +# (doxysearch.cgi) which are based on the open source search engine library
  1541 +# Xapian (see: http://xapian.org/).
  1542 +#
  1543 +# See the section "External Indexing and Searching" for details.
  1544 +# The default value is: NO.
  1545 +# This tag requires that the tag SEARCHENGINE is set to YES.
  1546 +
  1547 +EXTERNAL_SEARCH = NO
  1548 +
  1549 +# The SEARCHENGINE_URL should point to a search engine hosted by a web server
  1550 +# which will return the search results when EXTERNAL_SEARCH is enabled.
  1551 +#
  1552 +# Doxygen ships with an example indexer (doxyindexer) and search engine
  1553 +# (doxysearch.cgi) which are based on the open source search engine library
  1554 +# Xapian (see: http://xapian.org/). See the section "External Indexing and
  1555 +# Searching" for details.
  1556 +# This tag requires that the tag SEARCHENGINE is set to YES.
  1557 +
  1558 +SEARCHENGINE_URL =
  1559 +
  1560 +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
  1561 +# search data is written to a file for indexing by an external tool. With the
  1562 +# SEARCHDATA_FILE tag the name of this file can be specified.
  1563 +# The default file is: searchdata.xml.
  1564 +# This tag requires that the tag SEARCHENGINE is set to YES.
  1565 +
  1566 +SEARCHDATA_FILE = searchdata.xml
  1567 +
  1568 +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
  1569 +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
  1570 +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
  1571 +# projects and redirect the results back to the right project.
  1572 +# This tag requires that the tag SEARCHENGINE is set to YES.
  1573 +
  1574 +EXTERNAL_SEARCH_ID =
  1575 +
  1576 +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
  1577 +# projects other than the one defined by this configuration file, but that are
  1578 +# all added to the same external search index. Each project needs to have a
  1579 +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
  1580 +# to a relative location where the documentation can be found. The format is:
  1581 +# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
  1582 +# This tag requires that the tag SEARCHENGINE is set to YES.
  1583 +
  1584 +EXTRA_SEARCH_MAPPINGS =
  1585 +
  1586 +#---------------------------------------------------------------------------
  1587 +# Configuration options related to the LaTeX output
  1588 +#---------------------------------------------------------------------------
  1589 +
  1590 +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
  1591 +# The default value is: YES.
  1592 +
  1593 +GENERATE_LATEX = NO
  1594 +
  1595 +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
  1596 +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
  1597 +# it.
  1598 +# The default directory is: latex.
  1599 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1600 +
  1601 +LATEX_OUTPUT = latex
  1602 +
  1603 +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
  1604 +# invoked.
  1605 +#
  1606 +# Note that when enabling USE_PDFLATEX this option is only used for generating
  1607 +# bitmaps for formulas in the HTML output, but not in the Makefile that is
  1608 +# written to the output directory.
  1609 +# The default file is: latex.
  1610 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1611 +
  1612 +LATEX_CMD_NAME = latex
  1613 +
  1614 +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
  1615 +# index for LaTeX.
  1616 +# The default file is: makeindex.
  1617 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1618 +
  1619 +MAKEINDEX_CMD_NAME = makeindex
  1620 +
  1621 +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
  1622 +# documents. This may be useful for small projects and may help to save some
  1623 +# trees in general.
  1624 +# The default value is: NO.
  1625 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1626 +
  1627 +COMPACT_LATEX = NO
  1628 +
  1629 +# The PAPER_TYPE tag can be used to set the paper type that is used by the
  1630 +# printer.
  1631 +# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
  1632 +# 14 inches) and executive (7.25 x 10.5 inches).
  1633 +# The default value is: a4.
  1634 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1635 +
  1636 +PAPER_TYPE = a4wide
  1637 +
  1638 +# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
  1639 +# that should be included in the LaTeX output. To get the times font for
  1640 +# instance you can specify
  1641 +# EXTRA_PACKAGES=times
  1642 +# If left blank no extra packages will be included.
  1643 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1644 +
  1645 +EXTRA_PACKAGES =
  1646 +
  1647 +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
  1648 +# generated LaTeX document. The header should contain everything until the first
  1649 +# chapter. If it is left blank doxygen will generate a standard header. See
  1650 +# section "Doxygen usage" for information on how to let doxygen write the
  1651 +# default header to a separate file.
  1652 +#
  1653 +# Note: Only use a user-defined header if you know what you are doing! The
  1654 +# following commands have a special meaning inside the header: $title,
  1655 +# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
  1656 +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
  1657 +# string, for the replacement values of the other commands the user is referred
  1658 +# to HTML_HEADER.
  1659 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1660 +
  1661 +LATEX_HEADER =
  1662 +
  1663 +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
  1664 +# generated LaTeX document. The footer should contain everything after the last
  1665 +# chapter. If it is left blank doxygen will generate a standard footer. See
  1666 +# LATEX_HEADER for more information on how to generate a default footer and what
  1667 +# special commands can be used inside the footer.
  1668 +#
  1669 +# Note: Only use a user-defined footer if you know what you are doing!
  1670 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1671 +
  1672 +LATEX_FOOTER =
  1673 +
  1674 +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
  1675 +# LaTeX style sheets that are included after the standard style sheets created
  1676 +# by doxygen. Using this option one can overrule certain style aspects. Doxygen
  1677 +# will copy the style sheet files to the output directory.
  1678 +# Note: The order of the extra style sheet files is of importance (e.g. the last
  1679 +# style sheet in the list overrules the setting of the previous ones in the
  1680 +# list).
  1681 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1682 +
  1683 +LATEX_EXTRA_STYLESHEET =
  1684 +
  1685 +# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
  1686 +# other source files which should be copied to the LATEX_OUTPUT output
  1687 +# directory. Note that the files will be copied as-is; there are no commands or
  1688 +# markers available.
  1689 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1690 +
  1691 +LATEX_EXTRA_FILES =
  1692 +
  1693 +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
  1694 +# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
  1695 +# contain links (just like the HTML output) instead of page references. This
  1696 +# makes the output suitable for online browsing using a PDF viewer.
  1697 +# The default value is: YES.
  1698 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1699 +
  1700 +PDF_HYPERLINKS = YES
  1701 +
  1702 +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
  1703 +# the PDF file directly from the LaTeX files. Set this option to YES, to get a
  1704 +# higher quality PDF documentation.
  1705 +# The default value is: YES.
  1706 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1707 +
  1708 +USE_PDFLATEX = YES
  1709 +
  1710 +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
  1711 +# command to the generated LaTeX files. This will instruct LaTeX to keep running
  1712 +# if errors occur, instead of asking the user for help. This option is also used
  1713 +# when generating formulas in HTML.
  1714 +# The default value is: NO.
  1715 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1716 +
  1717 +LATEX_BATCHMODE = NO
  1718 +
  1719 +# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
  1720 +# index chapters (such as File Index, Compound Index, etc.) in the output.
  1721 +# The default value is: NO.
  1722 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1723 +
  1724 +LATEX_HIDE_INDICES = NO
  1725 +
  1726 +# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
  1727 +# code with syntax highlighting in the LaTeX output.
  1728 +#
  1729 +# Note that which sources are shown also depends on other settings such as
  1730 +# SOURCE_BROWSER.
  1731 +# The default value is: NO.
  1732 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1733 +
  1734 +LATEX_SOURCE_CODE = NO
  1735 +
  1736 +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
  1737 +# bibliography, e.g. plainnat, or ieeetr. See
  1738 +# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
  1739 +# The default value is: plain.
  1740 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1741 +
  1742 +LATEX_BIB_STYLE = plain
  1743 +
  1744 +#---------------------------------------------------------------------------
  1745 +# Configuration options related to the RTF output
  1746 +#---------------------------------------------------------------------------
  1747 +
  1748 +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
  1749 +# RTF output is optimized for Word 97 and may not look too pretty with other RTF
  1750 +# readers/editors.
  1751 +# The default value is: NO.
  1752 +
  1753 +GENERATE_RTF = NO
  1754 +
  1755 +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
  1756 +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
  1757 +# it.
  1758 +# The default directory is: rtf.
  1759 +# This tag requires that the tag GENERATE_RTF is set to YES.
  1760 +
  1761 +RTF_OUTPUT = rtf
  1762 +
  1763 +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
  1764 +# documents. This may be useful for small projects and may help to save some
  1765 +# trees in general.
  1766 +# The default value is: NO.
  1767 +# This tag requires that the tag GENERATE_RTF is set to YES.
  1768 +
  1769 +COMPACT_RTF = NO
  1770 +
  1771 +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
  1772 +# contain hyperlink fields. The RTF file will contain links (just like the HTML
  1773 +# output) instead of page references. This makes the output suitable for online
  1774 +# browsing using Word or some other Word compatible readers that support those
  1775 +# fields.
  1776 +#
  1777 +# Note: WordPad (write) and others do not support links.
  1778 +# The default value is: NO.
  1779 +# This tag requires that the tag GENERATE_RTF is set to YES.
  1780 +
  1781 +RTF_HYPERLINKS = NO
  1782 +
  1783 +# Load stylesheet definitions from file. Syntax is similar to doxygen's config
  1784 +# file, i.e. a series of assignments. You only have to provide replacements,
  1785 +# missing definitions are set to their default value.
  1786 +#
  1787 +# See also section "Doxygen usage" for information on how to generate the
  1788 +# default style sheet that doxygen normally uses.
  1789 +# This tag requires that the tag GENERATE_RTF is set to YES.
  1790 +
  1791 +RTF_STYLESHEET_FILE =
  1792 +
  1793 +# Set optional variables used in the generation of an RTF document. Syntax is
  1794 +# similar to doxygen's config file. A template extensions file can be generated
  1795 +# using doxygen -e rtf extensionFile.
  1796 +# This tag requires that the tag GENERATE_RTF is set to YES.
  1797 +
  1798 +RTF_EXTENSIONS_FILE =
  1799 +
  1800 +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
  1801 +# with syntax highlighting in the RTF output.
  1802 +#
  1803 +# Note that which sources are shown also depends on other settings such as
  1804 +# SOURCE_BROWSER.
  1805 +# The default value is: NO.
  1806 +# This tag requires that the tag GENERATE_RTF is set to YES.
  1807 +
  1808 +RTF_SOURCE_CODE = NO
  1809 +
  1810 +#---------------------------------------------------------------------------
  1811 +# Configuration options related to the man page output
  1812 +#---------------------------------------------------------------------------
  1813 +
  1814 +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
  1815 +# classes and files.
  1816 +# The default value is: NO.
  1817 +
  1818 +GENERATE_MAN = NO
  1819 +
  1820 +# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
  1821 +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
  1822 +# it. A directory man3 will be created inside the directory specified by
  1823 +# MAN_OUTPUT.
  1824 +# The default directory is: man.
  1825 +# This tag requires that the tag GENERATE_MAN is set to YES.
  1826 +
  1827 +MAN_OUTPUT = man
  1828 +
  1829 +# The MAN_EXTENSION tag determines the extension that is added to the generated
  1830 +# man pages. In case the manual section does not start with a number, the number
  1831 +# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
  1832 +# optional.
  1833 +# The default value is: .3.
  1834 +# This tag requires that the tag GENERATE_MAN is set to YES.
  1835 +
  1836 +MAN_EXTENSION = .3
  1837 +
  1838 +# The MAN_SUBDIR tag determines the name of the directory created within
  1839 +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
  1840 +# MAN_EXTENSION with the initial . removed.
  1841 +# This tag requires that the tag GENERATE_MAN is set to YES.
  1842 +
  1843 +MAN_SUBDIR =
  1844 +
  1845 +# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
  1846 +# will generate one additional man file for each entity documented in the real
  1847 +# man page(s). These additional files only source the real man page, but without
  1848 +# them the man command would be unable to find the correct page.
  1849 +# The default value is: NO.
  1850 +# This tag requires that the tag GENERATE_MAN is set to YES.
  1851 +
  1852 +MAN_LINKS = NO
  1853 +
  1854 +#---------------------------------------------------------------------------
  1855 +# Configuration options related to the XML output
  1856 +#---------------------------------------------------------------------------
  1857 +
  1858 +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
  1859 +# captures the structure of the code including all documentation.
  1860 +# The default value is: NO.
  1861 +
  1862 +GENERATE_XML = NO
  1863 +
  1864 +# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
  1865 +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
  1866 +# it.
  1867 +# The default directory is: xml.
  1868 +# This tag requires that the tag GENERATE_XML is set to YES.
  1869 +
  1870 +XML_OUTPUT = xml
  1871 +
  1872 +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
  1873 +# listings (including syntax highlighting and cross-referencing information) to
  1874 +# the XML output. Note that enabling this will significantly increase the size
  1875 +# of the XML output.
  1876 +# The default value is: YES.
  1877 +# This tag requires that the tag GENERATE_XML is set to YES.
  1878 +
  1879 +XML_PROGRAMLISTING = YES
  1880 +
  1881 +#---------------------------------------------------------------------------
  1882 +# Configuration options related to the DOCBOOK output
  1883 +#---------------------------------------------------------------------------
  1884 +
  1885 +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
  1886 +# that can be used to generate PDF.
  1887 +# The default value is: NO.
  1888 +
  1889 +GENERATE_DOCBOOK = NO
  1890 +
  1891 +# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
  1892 +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
  1893 +# front of it.
  1894 +# The default directory is: docbook.
  1895 +# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
  1896 +
  1897 +DOCBOOK_OUTPUT = docbook
  1898 +
  1899 +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
  1900 +# program listings (including syntax highlighting and cross-referencing
  1901 +# information) to the DOCBOOK output. Note that enabling this will significantly
  1902 +# increase the size of the DOCBOOK output.
  1903 +# The default value is: NO.
  1904 +# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
  1905 +
  1906 +DOCBOOK_PROGRAMLISTING = NO
  1907 +
  1908 +#---------------------------------------------------------------------------
  1909 +# Configuration options for the AutoGen Definitions output
  1910 +#---------------------------------------------------------------------------
  1911 +
  1912 +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
  1913 +# AutoGen Definitions (see http://autogen.sf.net) file that captures the
  1914 +# structure of the code including all documentation. Note that this feature is
  1915 +# still experimental and incomplete at the moment.
  1916 +# The default value is: NO.
  1917 +
  1918 +GENERATE_AUTOGEN_DEF = NO
  1919 +
  1920 +#---------------------------------------------------------------------------
  1921 +# Configuration options related to the Perl module output
  1922 +#---------------------------------------------------------------------------
  1923 +
  1924 +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
  1925 +# file that captures the structure of the code including all documentation.
  1926 +#
  1927 +# Note that this feature is still experimental and incomplete at the moment.
  1928 +# The default value is: NO.
  1929 +
  1930 +GENERATE_PERLMOD = NO
  1931 +
  1932 +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
  1933 +# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
  1934 +# output from the Perl module output.
  1935 +# The default value is: NO.
  1936 +# This tag requires that the tag GENERATE_PERLMOD is set to YES.
  1937 +
  1938 +PERLMOD_LATEX = NO
  1939 +
  1940 +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
  1941 +# formatted so it can be parsed by a human reader. This is useful if you want to
  1942 +# understand what is going on. On the other hand, if this tag is set to NO, the
  1943 +# size of the Perl module output will be much smaller and Perl will parse it
  1944 +# just the same.
  1945 +# The default value is: YES.
  1946 +# This tag requires that the tag GENERATE_PERLMOD is set to YES.
  1947 +
  1948 +PERLMOD_PRETTY = YES
  1949 +
  1950 +# The names of the make variables in the generated doxyrules.make file are
  1951 +# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
  1952 +# so different doxyrules.make files included by the same Makefile don't
  1953 +# overwrite each other's variables.
  1954 +# This tag requires that the tag GENERATE_PERLMOD is set to YES.
  1955 +
  1956 +PERLMOD_MAKEVAR_PREFIX =
  1957 +
  1958 +#---------------------------------------------------------------------------
  1959 +# Configuration options related to the preprocessor
  1960 +#---------------------------------------------------------------------------
  1961 +
  1962 +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
  1963 +# C-preprocessor directives found in the sources and include files.
  1964 +# The default value is: YES.
  1965 +
  1966 +ENABLE_PREPROCESSING = YES
  1967 +
  1968 +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
  1969 +# in the source code. If set to NO, only conditional compilation will be
  1970 +# performed. Macro expansion can be done in a controlled way by setting
  1971 +# EXPAND_ONLY_PREDEF to YES.
  1972 +# The default value is: NO.
  1973 +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
  1974 +
  1975 +MACRO_EXPANSION = YES
  1976 +
  1977 +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
  1978 +# the macro expansion is limited to the macros specified with the PREDEFINED and
  1979 +# EXPAND_AS_DEFINED tags.
  1980 +# The default value is: NO.
  1981 +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
  1982 +
  1983 +EXPAND_ONLY_PREDEF = YES
  1984 +
  1985 +# If the SEARCH_INCLUDES tag is set to YES, the include files in the
  1986 +# INCLUDE_PATH will be searched if a #include is found.
  1987 +# The default value is: YES.
  1988 +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
  1989 +
  1990 +SEARCH_INCLUDES = YES
  1991 +
  1992 +# The INCLUDE_PATH tag can be used to specify one or more directories that
  1993 +# contain include files that are not input files but should be processed by the
  1994 +# preprocessor.
  1995 +# This tag requires that the tag SEARCH_INCLUDES is set to YES.
  1996 +
  1997 +INCLUDE_PATH =
  1998 +
  1999 +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
  2000 +# patterns (like *.h and *.hpp) to filter out the header-files in the
  2001 +# directories. If left blank, the patterns specified with FILE_PATTERNS will be
  2002 +# used.
  2003 +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
  2004 +
  2005 +INCLUDE_FILE_PATTERNS =
  2006 +
  2007 +# The PREDEFINED tag can be used to specify one or more macro names that are
  2008 +# defined before the preprocessor is started (similar to the -D option of e.g.
  2009 +# gcc). The argument of the tag is a list of macros of the form: name or
  2010 +# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
  2011 +# is assumed. To prevent a macro definition from being undefined via #undef or
  2012 +# recursively expanded use the := operator instead of the = operator.
  2013 +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
  2014 +
  2015 +PREDEFINED = __DOXYGEN__ \
  2016 + PROGMEM
  2017 +
  2018 +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
  2019 +# tag can be used to specify a list of macro names that should be expanded. The
  2020 +# macro definition that is found in the sources will be used. Use the PREDEFINED
  2021 +# tag if you want to use a different macro definition that overrules the
  2022 +# definition found in the source code.
  2023 +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
  2024 +
  2025 +EXPAND_AS_DEFINED =
  2026 +
  2027 +# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
  2028 +# remove all references to function-like macros that are alone on a line, have
  2029 +# an all uppercase name, and do not end with a semicolon. Such function macros
  2030 +# are typically used for boiler-plate code, and will confuse the parser if not
  2031 +# removed.
  2032 +# The default value is: YES.
  2033 +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
  2034 +
  2035 +SKIP_FUNCTION_MACROS = YES
  2036 +
  2037 +#---------------------------------------------------------------------------
  2038 +# Configuration options related to external references
  2039 +#---------------------------------------------------------------------------
  2040 +
  2041 +# The TAGFILES tag can be used to specify one or more tag files. For each tag
  2042 +# file the location of the external documentation should be added. The format of
  2043 +# a tag file without this location is as follows:
  2044 +# TAGFILES = file1 file2 ...
  2045 +# Adding location for the tag files is done as follows:
  2046 +# TAGFILES = file1=loc1 "file2 = loc2" ...
  2047 +# where loc1 and loc2 can be relative or absolute paths or URLs. See the
  2048 +# section "Linking to external documentation" for more information about the use
  2049 +# of tag files.
  2050 +# Note: Each tag file must have a unique name (where the name does NOT include
  2051 +# the path). If a tag file is not located in the directory in which doxygen is
  2052 +# run, you must also specify the path to the tagfile here.
  2053 +
  2054 +TAGFILES =
  2055 +
  2056 +# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
  2057 +# tag file that is based on the input files it reads. See section "Linking to
  2058 +# external documentation" for more information about the usage of tag files.
  2059 +
  2060 +GENERATE_TAGFILE =
  2061 +
  2062 +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
  2063 +# the class index. If set to NO, only the inherited external classes will be
  2064 +# listed.
  2065 +# The default value is: NO.
  2066 +
  2067 +ALLEXTERNALS = NO
  2068 +
  2069 +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
  2070 +# in the modules index. If set to NO, only the current project's groups will be
  2071 +# listed.
  2072 +# The default value is: YES.
  2073 +
  2074 +EXTERNAL_GROUPS = YES
  2075 +
  2076 +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
  2077 +# the related pages index. If set to NO, only the current project's pages will
  2078 +# be listed.
  2079 +# The default value is: YES.
  2080 +
  2081 +EXTERNAL_PAGES = YES
  2082 +
  2083 +# The PERL_PATH should be the absolute path and name of the perl script
  2084 +# interpreter (i.e. the result of 'which perl').
  2085 +# The default file (with absolute path) is: /usr/bin/perl.
  2086 +
  2087 +PERL_PATH = /usr/bin/perl
  2088 +
  2089 +#---------------------------------------------------------------------------
  2090 +# Configuration options related to the dot tool
  2091 +#---------------------------------------------------------------------------
  2092 +
  2093 +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
  2094 +# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
  2095 +# NO turns the diagrams off. Note that this option also works with HAVE_DOT
  2096 +# disabled, but it is recommended to install and use dot, since it yields more
  2097 +# powerful graphs.
  2098 +# The default value is: YES.
  2099 +
  2100 +CLASS_DIAGRAMS = NO
  2101 +
  2102 +# You can define message sequence charts within doxygen comments using the \msc
  2103 +# command. Doxygen will then run the mscgen tool (see:
  2104 +# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
  2105 +# documentation. The MSCGEN_PATH tag allows you to specify the directory where
  2106 +# the mscgen tool resides. If left empty the tool is assumed to be found in the
  2107 +# default search path.
  2108 +
  2109 +MSCGEN_PATH =
  2110 +
  2111 +# You can include diagrams made with dia in doxygen documentation. Doxygen will
  2112 +# then run dia to produce the diagram and insert it in the documentation. The
  2113 +# DIA_PATH tag allows you to specify the directory where the dia binary resides.
  2114 +# If left empty dia is assumed to be found in the default search path.
  2115 +
  2116 +DIA_PATH =
  2117 +
  2118 +# If set to YES the inheritance and collaboration graphs will hide inheritance
  2119 +# and usage relations if the target is undocumented or is not a class.
  2120 +# The default value is: YES.
  2121 +
  2122 +HIDE_UNDOC_RELATIONS = YES
  2123 +
  2124 +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
  2125 +# available from the path. This tool is part of Graphviz (see:
  2126 +# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
  2127 +# Bell Labs. The other options in this section have no effect if this option is
  2128 +# set to NO
  2129 +# The default value is: NO.
  2130 +
  2131 +HAVE_DOT = NO
  2132 +
  2133 +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
  2134 +# to run in parallel. When set to 0 doxygen will base this on the number of
  2135 +# processors available in the system. You can set it explicitly to a value
  2136 +# larger than 0 to get control over the balance between CPU load and processing
  2137 +# speed.
  2138 +# Minimum value: 0, maximum value: 32, default value: 0.
  2139 +# This tag requires that the tag HAVE_DOT is set to YES.
  2140 +
  2141 +DOT_NUM_THREADS = 0
  2142 +
  2143 +# When you want a differently looking font in the dot files that doxygen
  2144 +# generates you can specify the font name using DOT_FONTNAME. You need to make
  2145 +# sure dot is able to find the font, which can be done by putting it in a
  2146 +# standard location or by setting the DOTFONTPATH environment variable or by
  2147 +# setting DOT_FONTPATH to the directory containing the font.
  2148 +# The default value is: Helvetica.
  2149 +# This tag requires that the tag HAVE_DOT is set to YES.
  2150 +
  2151 +DOT_FONTNAME =
  2152 +
  2153 +# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
  2154 +# dot graphs.
  2155 +# Minimum value: 4, maximum value: 24, default value: 10.
  2156 +# This tag requires that the tag HAVE_DOT is set to YES.
  2157 +
  2158 +DOT_FONTSIZE = 10
  2159 +
  2160 +# By default doxygen will tell dot to use the default font as specified with
  2161 +# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
  2162 +# the path where dot can find it using this tag.
  2163 +# This tag requires that the tag HAVE_DOT is set to YES.
  2164 +
  2165 +DOT_FONTPATH =
  2166 +
  2167 +# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
  2168 +# each documented class showing the direct and indirect inheritance relations.
  2169 +# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
  2170 +# The default value is: YES.
  2171 +# This tag requires that the tag HAVE_DOT is set to YES.
  2172 +
  2173 +CLASS_GRAPH = NO
  2174 +
  2175 +# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
  2176 +# graph for each documented class showing the direct and indirect implementation
  2177 +# dependencies (inheritance, containment, and class references variables) of the
  2178 +# class with other documented classes.
  2179 +# The default value is: YES.
  2180 +# This tag requires that the tag HAVE_DOT is set to YES.
  2181 +
  2182 +COLLABORATION_GRAPH = NO
  2183 +
  2184 +# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
  2185 +# groups, showing the direct groups dependencies.
  2186 +# The default value is: YES.
  2187 +# This tag requires that the tag HAVE_DOT is set to YES.
  2188 +
  2189 +GROUP_GRAPHS = NO
  2190 +
  2191 +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
  2192 +# collaboration diagrams in a style similar to the OMG's Unified Modeling
  2193 +# Language.
  2194 +# The default value is: NO.
  2195 +# This tag requires that the tag HAVE_DOT is set to YES.
  2196 +
  2197 +UML_LOOK = NO
  2198 +
  2199 +# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
  2200 +# class node. If there are many fields or methods and many nodes the graph may
  2201 +# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
  2202 +# number of items for each type to make the size more manageable. Set this to 0
  2203 +# for no limit. Note that the threshold may be exceeded by 50% before the limit
  2204 +# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
  2205 +# but if the number exceeds 15, the total amount of fields shown is limited to
  2206 +# 10.
  2207 +# Minimum value: 0, maximum value: 100, default value: 10.
  2208 +# This tag requires that the tag HAVE_DOT is set to YES.
  2209 +
  2210 +UML_LIMIT_NUM_FIELDS = 10
  2211 +
  2212 +# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
  2213 +# collaboration graphs will show the relations between templates and their
  2214 +# instances.
  2215 +# The default value is: NO.
  2216 +# This tag requires that the tag HAVE_DOT is set to YES.
  2217 +
  2218 +TEMPLATE_RELATIONS = NO
  2219 +
  2220 +# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
  2221 +# YES then doxygen will generate a graph for each documented file showing the
  2222 +# direct and indirect include dependencies of the file with other documented
  2223 +# files.
  2224 +# The default value is: YES.
  2225 +# This tag requires that the tag HAVE_DOT is set to YES.
  2226 +
  2227 +INCLUDE_GRAPH = NO
  2228 +
  2229 +# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
  2230 +# set to YES then doxygen will generate a graph for each documented file showing
  2231 +# the direct and indirect include dependencies of the file with other documented
  2232 +# files.
  2233 +# The default value is: YES.
  2234 +# This tag requires that the tag HAVE_DOT is set to YES.
  2235 +
  2236 +INCLUDED_BY_GRAPH = NO
  2237 +
  2238 +# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
  2239 +# dependency graph for every global function or class method.
  2240 +#
  2241 +# Note that enabling this option will significantly increase the time of a run.
  2242 +# So in most cases it will be better to enable call graphs for selected
  2243 +# functions only using the \callgraph command.
  2244 +# The default value is: NO.
  2245 +# This tag requires that the tag HAVE_DOT is set to YES.
  2246 +
  2247 +CALL_GRAPH = NO
  2248 +
  2249 +# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
  2250 +# dependency graph for every global function or class method.
  2251 +#
  2252 +# Note that enabling this option will significantly increase the time of a run.
  2253 +# So in most cases it will be better to enable caller graphs for selected
  2254 +# functions only using the \callergraph command.
  2255 +# The default value is: NO.
  2256 +# This tag requires that the tag HAVE_DOT is set to YES.
  2257 +
  2258 +CALLER_GRAPH = NO
  2259 +
  2260 +# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
  2261 +# hierarchy of all classes instead of a textual one.
  2262 +# The default value is: YES.
  2263 +# This tag requires that the tag HAVE_DOT is set to YES.
  2264 +
  2265 +GRAPHICAL_HIERARCHY = NO
  2266 +
  2267 +# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
  2268 +# dependencies a directory has on other directories in a graphical way. The
  2269 +# dependency relations are determined by the #include relations between the
  2270 +# files in the directories.
  2271 +# The default value is: YES.
  2272 +# This tag requires that the tag HAVE_DOT is set to YES.
  2273 +
  2274 +DIRECTORY_GRAPH = NO
  2275 +
  2276 +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
  2277 +# generated by dot.
  2278 +# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
  2279 +# to make the SVG files visible in IE 9+ (other browsers do not have this
  2280 +# requirement).
  2281 +# Possible values are: png, jpg, gif and svg.
  2282 +# The default value is: png.
  2283 +# This tag requires that the tag HAVE_DOT is set to YES.
  2284 +
  2285 +DOT_IMAGE_FORMAT = png
  2286 +
  2287 +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
  2288 +# enable generation of interactive SVG images that allow zooming and panning.
  2289 +#
  2290 +# Note that this requires a modern browser other than Internet Explorer. Tested
  2291 +# and working are Firefox, Chrome, Safari, and Opera.
  2292 +# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
  2293 +# the SVG files visible. Older versions of IE do not have SVG support.
  2294 +# The default value is: NO.
  2295 +# This tag requires that the tag HAVE_DOT is set to YES.
  2296 +
  2297 +INTERACTIVE_SVG = NO
  2298 +
  2299 +# The DOT_PATH tag can be used to specify the path where the dot tool can be
  2300 +# found. If left blank, it is assumed the dot tool can be found in the path.
  2301 +# This tag requires that the tag HAVE_DOT is set to YES.
  2302 +
  2303 +DOT_PATH =
  2304 +
  2305 +# The DOTFILE_DIRS tag can be used to specify one or more directories that
  2306 +# contain dot files that are included in the documentation (see the \dotfile
  2307 +# command).
  2308 +# This tag requires that the tag HAVE_DOT is set to YES.
  2309 +
  2310 +DOTFILE_DIRS =
  2311 +
  2312 +# The MSCFILE_DIRS tag can be used to specify one or more directories that
  2313 +# contain msc files that are included in the documentation (see the \mscfile
  2314 +# command).
  2315 +
  2316 +MSCFILE_DIRS =
  2317 +
  2318 +# The DIAFILE_DIRS tag can be used to specify one or more directories that
  2319 +# contain dia files that are included in the documentation (see the \diafile
  2320 +# command).
  2321 +
  2322 +DIAFILE_DIRS =
  2323 +
  2324 +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
  2325 +# path where java can find the plantuml.jar file. If left blank, it is assumed
  2326 +# PlantUML is not used or called during a preprocessing step. Doxygen will
  2327 +# generate a warning when it encounters a \startuml command in this case and
  2328 +# will not generate output for the diagram.
  2329 +
  2330 +PLANTUML_JAR_PATH =
  2331 +
  2332 +# When using plantuml, the specified paths are searched for files specified by
  2333 +# the !include statement in a plantuml block.
  2334 +
  2335 +PLANTUML_INCLUDE_PATH =
  2336 +
  2337 +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
  2338 +# that will be shown in the graph. If the number of nodes in a graph becomes
  2339 +# larger than this value, doxygen will truncate the graph, which is visualized
  2340 +# by representing a node as a red box. Note that doxygen if the number of direct
  2341 +# children of the root node in a graph is already larger than
  2342 +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
  2343 +# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
  2344 +# Minimum value: 0, maximum value: 10000, default value: 50.
  2345 +# This tag requires that the tag HAVE_DOT is set to YES.
  2346 +
  2347 +DOT_GRAPH_MAX_NODES = 15
  2348 +
  2349 +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
  2350 +# generated by dot. A depth value of 3 means that only nodes reachable from the
  2351 +# root by following a path via at most 3 edges will be shown. Nodes that lay
  2352 +# further from the root node will be omitted. Note that setting this option to 1
  2353 +# or 2 may greatly reduce the computation time needed for large code bases. Also
  2354 +# note that the size of a graph can be further restricted by
  2355 +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
  2356 +# Minimum value: 0, maximum value: 1000, default value: 0.
  2357 +# This tag requires that the tag HAVE_DOT is set to YES.
  2358 +
  2359 +MAX_DOT_GRAPH_DEPTH = 2
  2360 +
  2361 +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
  2362 +# background. This is disabled by default, because dot on Windows does not seem
  2363 +# to support this out of the box.
  2364 +#
  2365 +# Warning: Depending on the platform used, enabling this option may lead to
  2366 +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
  2367 +# read).
  2368 +# The default value is: NO.
  2369 +# This tag requires that the tag HAVE_DOT is set to YES.
  2370 +
  2371 +DOT_TRANSPARENT = YES
  2372 +
  2373 +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
  2374 +# files in one run (i.e. multiple -o and -T options on the command line). This
  2375 +# makes dot run faster, but since only newer versions of dot (>1.8.10) support
  2376 +# this, this feature is disabled by default.
  2377 +# The default value is: NO.
  2378 +# This tag requires that the tag HAVE_DOT is set to YES.
  2379 +
  2380 +DOT_MULTI_TARGETS = NO
  2381 +
  2382 +# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
  2383 +# explaining the meaning of the various boxes and arrows in the dot generated
  2384 +# graphs.
  2385 +# The default value is: YES.
  2386 +# This tag requires that the tag HAVE_DOT is set to YES.
  2387 +
  2388 +GENERATE_LEGEND = YES
  2389 +
  2390 +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
  2391 +# files that are used to generate the various graphs.
  2392 +# The default value is: YES.
  2393 +# This tag requires that the tag HAVE_DOT is set to YES.
  2394 +
  2395 +DOT_CLEANUP = YES
... ...