Commit 194cd0c4f3121e158652209338d32e3716174951

Authored by gperson
1 parent b208acc5

ajout de la question 5.1, avec changements des imanuf et iproduct, il faut surem…

…ent changer dans le makefile le path jusque LUFA que je vais ajouter aussi dans le prochain commit
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
... ...